Отправная точка для изучения - страница на сайте ladyada.
На картинке наглядно видно, что и как можно подключать к этому Motor Shield:
- Моторы постоянного тока с потреблением 600 мА, 4,5...36В, до 4-х штук.
- Шаговые двигатели разных типов (неполярные, двуполярные и т.п), до 2-х штук
- Хобби-серво 5В - 2 штуки.
В схеме ничего сверхъестественного нет (хотя, на мой вкус, она ужасна - какой-то винегрет из отдельных частей, как они взаимосвязаны - на первый взгляд неясно):
Arduino в основном управляет микросхемой 74HC595N - это 8-битный сдвиговый регистр с последовательным входом и параллельным выходом, а также защелкой и возможностью поставить эти самые выходы в состояние высокого импенданса.
Насколько я понял, Arduino должен последовательно загружать в этот регистр код(ы), которые в параллельном виде поступают на две микросхемы L293D - а вот это уже обычные H-мосты для управления моторами.
Чтобы не вникать во все тонкости, можно скачать библиотеки с сайта, затем распаковать их в Arduino/hardware/library. Как и в случае с любой другой библиотекой, она появится в подменю Arduino IDE "Import Library", а программировать после этого становится довольно просто.
Но, прежде чем начинать экспериментировать, есть один важный момент. На плате располагаются клеммники:
Слева - разъемы для подключения моторов M1,M2, справа - для M3,M4. И еще - обратите внимание, внизу: двухконтактный клеммник EXT_PWR, джампер соединения питания с Arduino JP1 и светодиод питания. Очень важно правильно подать питание на моторы, иначе в лучшем случае ничего не заработает.
Первым делом, вот более крупная схема питания при соединении Motor Shield с Arduino:
Напомню, что Arduino c USB питается либо от этого самого USB, либо от внешнего разъема (именно последний случай изображен на схеме). Варианты такие:
- Питаем Arduino и моторы от одного источника постоянного тока: подключаем этот источник к DC-входу Arduino или EXT_PWR на шилде, замыкаем джампер JP1; если у вас Diecimila, то на ней джампер выбора питания надо ставить в EXT. Вообще, питать моторы и Arduino от одного источника питания - плохая идея, Arduino может постоянного сбрасываться и вообще нестабильно работать.
- Питаем Arduino от USB, а моторы - от отдельного источника постоянного тока. На Diecimila джампер выбора питания ставим в USB, удаляем джампер JP1 на шилде, подключаем USB к Arduino, а питание моторов - на шилд в EXT_PWR. Если у вас Diecimila, можно альтернативно подавать питание моторов и через DC-разъем - тогда JP1 - напротив, надо замкнуть. А вот если вы - владелец Duemilanove, то последнее замечание явно не для вас, потому что на вашем Arduino нет джампера и выбор питания происходит автоматически.
- Питаем Arduino и моторы от двух независимых источников постоянного тока. Удаляем джампер JP1 на шилде, подключаем первый источник через DC-вход к Arduino, а второй - в EXT_PWR на шилде (ну и на Diecimila джампер выбора питания - выставляем в EXT).
Учтите, если вы все правильно подключили - светодиод должен загореться! Если он не горит, перечитайте еще раз варианты выше или тоже самое на родном английском языке.
Самое время найти подходящий мотор для экспериментов. Где-то в пыльном углу я откопал радиоуправляемую модель гоночной машины, которую коллеги презентовали мне на один из дней рождения. Времени прошло довольно много, и я решил, что пришла пора ей послужить в немного другом качестве.
Что нужно для платформы робота? Мотор и трансмиссия, конечно же! И то, и другое там было, и я не долго думая водрузил Arduino, Motor Shield на основание:
Довольно быстро выяснилось, что на заднем мосту (классика) стоит мотор на 12 В, который надо отключить от исполнительной платы радиоуправления (рыжая справа на фото) и подключить к Motor Shield. Питается все это дело по варианту 3, поэтому слева можно разглядеть черный прямоугольник аккумулятора-"кроны". Очень рекомендую: стоит как две алкалиновых батарейки такого же типа, а служит намного дольше. Моторы питаются от батарейного отсека, который располагается по центру в днище платформы.
В качестве примера, я написал движение взад-вперед, вот как это выглядит:
#include;
AF_DCMotor motor(2, MOTOR12_1KHZ); // create motor #2
void setup() {
Serial.begin(9600); // set up Serial library at 9600 bps
Serial.println("Motor test!");
motor.setSpeed(160); // set the speed to 200/255
}
void loop() {
motor.run(FORWARD); // turn it on going forward
delay(1000);
motor.run(RELEASE); // stopped
delay(1000);
motor.run(BACKWARD); // the other way
delay(1000);
motor.run(RELEASE); // stopped
delay(1000);
}
Главное - не промахнуться со скоростью в setSpeed - если будет мало, платформа не тронется с места, много - улетит в стену. Увеличивая значение в setSpeed, скорость можно набирать и постепенно.
Таким образом, я минут 7 созерцал мой "шедевр", который дергался взад и вперед, раздумывая, как бы научить его еще и поворачивать. Но это - видимо уже в следующей статье ;)
Кстати, всех с первым днем весны!
в оной плате используется не L293D, а SN754410 (как написано на сайте)
ОтветитьУдалитьдолго не мог понять, изучая схему, где я туплю, ибо у этих микрух распиновка разная :)
Коллега, не согласен по всем пунктам: на плате именно L293D, а распиновка у L239D и SN754410 в PDIP - одинаковая. Cама автор рекомендует использовать именно L239D, подробно объясняя, почему.
ОтветитьУдалитьВы, наверное, с какой-то другой платой перепутали.
ага, значит у меня даташит на 239ку кривой.
ОтветитьУдалитьизвиняюсь :)