Как всегда, приступая к работе с новым компонентом, желательно изучить его документацию. Давайте поищем data sheet от нашей новой микросхемы. Возьмем, например, вот этот, немного увеличим и рассмотрим микросхему. Напомню, что сориентироваться в номерах контактов нам поможет вот эта выемка, начиная с которой против часовой стрелки контакты нумеруются. Как мы уже поняли, данная микросхема предназначена для управления мощным питанием, подаваемым на моторы с помощью сигнала с Arduino. То есть нам нужно подключить силовое питание вот к этому контакту. Обозначу это вот так вот. А «минус» силового питания мы подключим к одному из выводов «земля», которых здесь целых 4 штуки. Ну, допустим, вот. Затем нам нужно для управления всей логикой подключить вот этот вот вывод, —логическое питание, — к 5 вольтам Arduino. И, естественно, не забываем соединить это с «землей» Arduino. Затем мы управляем моторами, причем микросхема позволяет управлять сразу двумя. Для подключения моторов служат вот эти вот выводы output, помеченные в данном data sheet буквой Y. Это будут выводы одного мотора, а вот это — выводы второго мотора. [РИСУЕТ] Нам остается подключить управляющую логику. Как мы уже выяснили, мы можем управлять скоростью и направлением движения, вращением моторов. Для управления скоростью используются пины, которые называются enable: вот этот вот и вот этот вот. Мы будем регулировать скорость, как мы, например, регулировали яркость светодиодов. То есть нам нужно использовать те выводы Arduino, которые поддерживают широтно-импульсную модуляцию. Помечу знакомой нам тильдой. [РИСУЕТ] И нам остается задать мотору направление вращения. Когда вы посмотрите устройство микросхемы, вы поймете, почему здесь используются два пина, помеченные буквой А. Они идут просто к любым цифровым пинам Arduino для одного мотора и для второго мотора. Подавая на эти 2 пина комбинацию логических нулей и единиц, мы можем менять направление вращения. То есть 01 — это вращение в одну сторону, 10 — вращение в другую сторону. Кроме этого, посмотрите, что будет, если подать комбинацию 11. При 00, естественно, ничего происходить не будет. Итак, мы теперь знаем как подключать мотор к контроллеру посредством драйвера двигателей. Теперь проделаем все это в натуре. Мы взяли силовое питание и через клеммник привели его на макетную плату. Затем двумя проводами соединили с микросхемой: красный провод, «плюс», идет в восьмой вход, и синий провод, «минус», — в «землю». Затем мы подключили сам мотор. Оба его вывода подходят к output с одной стороны микросхемы. После чего мы взяли контроллер, взяли 5 вольт, привели к выводу для логического питания микросхемы и взяли «землю», соединили с «землей» L293. После чего соединили 3 пина Iskra с микросхемой: зеленый провод идет из пятого пина в enable для данного мотора, и оставшиеся два провода на контроллере подключены к третьему и четвертому пинам цифровым, а у микросхемы соединены с выводами input. Итак, мы подключили один мотор. Второй подключается аналогично, согласно документации. А сейчас давайте проверим, как это работает. Давайте посмотрим, что у нас в тестовом скетче. Во-первых, сделаны 3 макроопределения для управляющих пинов: enable мы подключили к пятому и 2 input — к третьему, четвертому. Затем мы сделали их выходами. А затем сама суть: для того чтобы запустить мотор, нам нужно подать комбинацию высокого и низкого уровней на input — IN1 и IN2. В данном случае мы сделали HIGH и LOW. А затем с помощью analogWrite задали скорость, в данном случае максимальную — 255. После чего мы хотим увидеть эффект с помощью задержки на 2 секунды. Затем мы изменим направление. На input 1 вместо HIGH подадим LOW, а на input 2 вместо LOW — HIGH. А скорость оставим прежней — 255. Мы снова хотим увидеть, как это работает: задержка. А после этого мы хотим остановить моторы: на оба input мы подаем низкий логический уровень — LOW/LOW. Обратите внимание, что несмотря на то, что скорость мы оставили максимальной, мотор перестанет крутиться. Ну и чтобы мы это увидели, снова задержка. Посмотрим, как работает. [ШУМ] [ШУМ] Работает правильно: 2 секунды вращается в одном направлении, 2 секунды вращается в обратном направлении и 2 секунды не вращается никуда. А еще давайте проведем эксперимент с управлением скоростью. Давайте немного изменим наш прежний скетч. Начало у него остается то же, потому что подключение осталось прежним. Затем на input подаем комбинацию для вращения в одном из направлений, а скорость мы будем наращивать в цикле от 0 до максимума, до 255, по единичке. Затем с помощью analogWrite передавать счетчик на enable и делать небольшую задержку, чтобы увидеть эффект. Теперь поменяем направление на противоположное и сделаем еще один цикл, где скорость будем уменьшать от максимума до минимума также по единичке и таким же образом смотреть, что из этого получается. [ЗВУКИ] [ШУМ] [ШУМ] [ШУМ] Как мы и ожидали, мотор плавно разгоняется, а затем начинает крутиться в обратную сторону, плавно замедляясь. Наверняка вы обратили внимание, что вращаться он начал не сразу. Дело в том, что поначалу мотору не хватает малых напряжений для преодоления силы трения покоя. Зато в обратном направлении, когда он от максимальной скорости идет к 0, он демонстрирует и более медленное вращение. Не забывайте о том, что на скорость вращения моторов влияет множество разных факторов: например, передаточное число редуктора, используемого с данным с мотором. Также помните о том, что даже при одном и том же уровне скорости, который мы задаем, мы можем увидеть разное поведение мотора в зависимости от уровня заряда батарей.