Мотор шилд для Arduino
Данная статья посвящена Motor Shield V1 для Arduino.
Arduino - это отличный трамплин для начинающих увлекаться электроникой и автоматизацией. С использованием Motor Shield Arduino может стать не просто игрушкой, а и отличной платформой для реальных робототехнических и мехатронных проектов. Motor Shield может стать отличным дополнением во в многих простых проектах и проектах среднего уровня сложности на Arduino. Мотор Шилд предлагает вам следующее:
- 2 готовых контакта для подключения "хобби" серводвигателей на 5 В.
- Возможность подключения до 4-х двигателей постоянного тока (с возможностью выбора направления вращения ротора). Можно выбирать скорость вращения с точностью до 0.5%!
- Подключение до 2-х шаговых двигателей (униполярных и биполярных) с одной катушкой, двумя катушками и микрошагом.
- 4 H-Bridges: чип L293D обеспечивает питание до 0.6 А на один мост (1.2 А максимум). Предусмотрена защита от перегрева. Питание - от 4.5 В до 25 В.
- Удобные коннекторы для подключения проводов от двигателей и проводов питания.
- Кнопка сброса для Arduino вынесена сверху на шилд
- Блок на два контакта для подключения внешнего питания, чтобы можно было разделить питание логики/моторов
- Motor Shield 100% совместим с платами Arduino Mega, Uno, Diecimila и Duemilanove
- Для работы достаточно скачать Arduino software libraries!

Вопросы, которые могут возникнут при работе с Мотор шилдом
Сколько моторов можно использовать с этим шилдом?
Вы можете использовать 2 сервомотора, которые работают от 5 В и до 4 моторов постоянного тока или 2 шаговых двигателя (или 1 шаговик и до 2-х двигателей постоянного тока).
Можно ли подключить больше моторов?
Нет, подключить больше чем, например, 2 шаговых двигателя, не получится.
Помогите! Мой двигатель не работает! А серводвигатель работает!
Проверьте, горит ли светодиод на мотор шилде. Шаговые двигатели и двигатели и двигатели постоянного тока не будут работать, если светодиод не горит. В этом случае можете даже не пробовать подключать моторы заново или перезаливать скетч на Arduino. Работать все равно не будет.
Зачем нужен светодиод на мотор шилде?
Светодиод показывает, работает ли источник питания для двигателей постоянного тока/шаговиков. Контакты для сервомоторов питаются от 5 В и не используют источник питания двигателей постоянного тока.
Можно ли управлять маленькими 3 В моторами с помощью этого мотор шилда?
Не желательно. Motor Shield предназначен для моторов 6+ В. В принципе вы можете подключить мотор 3 В, но он будет перегреваться и гораздо быстрее выйдет из строя.
Arduino перезагружается и странно себя ведет при работе моторов! Мой Motor Shield поломан?
Моторы потребляют много тока, требуют большую мощность питания. Из-за этого Arduino может перезагружаться. Именно поэтому на мотор шилде предусмотрено раздельное питание моторов и логики. Если вы будете правильно использовать разделение питания, плата не будет перезагружаться. Почитайте user manual по поводу источников питания при работе с шилдом.
У меня стабильный источник питания, но двигатели постоянного тока иногда совершают странные рывки.
Попробуйте установить конденсатор на 0.1 мкФ. Это уменьшит шумы, которые возникают в электрической цепи и могут решить вашу проблему.
Какие пины не используются на мотор шилде?
6 аналоговых пинов свободны. Они могут использоваться и в качестве цифровых пинов (пины #14 - 19).
- Цифровой пин 2 и 13 тоже не используются.
Следующие пины используются только если используются шаговые двигатели и двигатели постоянного тока:
- Цифровой пин 11: Двигатель постоянного тока #1 / шаговый двигатель #1 (активация/управление скоростью)
- Цифровой пин 3: Двигатель постоянного тока #2 / шаговый двигатель #1 (активация/управление скоростью)
- Цифровой пин 5: Двигатель постоянного тока #3 / шаговый двигатель #2 (активация/управление скоростью)
- Цифровой пин 6: Двигатель постоянного тока #4 / шаговый двигатель #2 (активация/управление скоростью)
Следующие пины используются, если подключены двигатели постоянного тока или шаговые двигатели
- Цифровые пины 4, 7, 8 и 12 используются для управления двигателями постоянного тока и шаговыми двигателями через 74HC595
Следующие пины используются только при использовании серводвигателей:
- Цифровой пин 9: Серва #1 управление
- Цифровой пин 10: Серва #2 управление
Какие пины Arduino подключены к двигателям постоянного тока или шаговым двигателям?
Двигатели постоянного тока и шаговые двигатели не подключаются напрямую к Arduino. Они подключаются к 74HC595, который передает данные на Arduino. Передавать данные непосредственно на моторы вы не сможете, вы должны использовать библиотеку Motor Shield library.
Как я могу подключиться к пинам на Arduino, которые не используются?
Аналоговые пины (аналоговые 0-5 также являются цифровыми 14-19) вынесены в нижнем правом углу.
Остальные пины не вынесены, так как они могут использоваться мотор шилдом. Если вы уверены, что не используются, можно их использовать и подключать необходимое периферийное оборудование.
При использовании скетча-примера, у меня появляется следующая ошибка: "error: AFMotor.h: No such file or directory...."
Убедитесь, что вы установили библиотеку AFMotor library
Как установить библиотеку?
Почитайте инструкцию по установке библиотек для Arduino.
У меня два шаговых двигателя и я хочу управлять ими одновременно, но в примере я могу управлять только одним, а потом вторым. То есть последовательно.
В библиотеке для шаговых двигателей (функция step ()) не предусмотрена возможность одновременного управления двумя моторами. Для реализации этой задачи вам надо 'interleave' запросы. Например, для того чтобы моторы совершили 100 шагов в одном направлении ("вперед"), пропишите в программе для Arduino следующее:
for (i=0; i<100; i++) {
motor1.step(1, FORWARD, SINGLE);
motor2.step(1, FORWARD, SINGLE);
}
Если вы хотите обеспечить более точное управление, воспользуйтесь Библиотекой AccelStepper library (in the Downloads section), в которой найдутся подходящие для вас примеры скетчей.
Какие моторы вы порекомендуете использовать?
Единого рецепта нет. Но вопрос этот возникает у многих, особенно начинающих разбираться с Arduino и Motor шилдом. Так что можем порекомендовать моторы от Pololu (DC Servos, DC motors) или Jameco (all sorts!). Ну и конечно же, серфите Китай! Aliexpress, eBay, Bankgood и т.п.
Motor Shield совместим с UNO R3 или Mega R3? На них ведь есть дополнительные пины...?
Мотор шилд совместим с R3 UNO и MEGA. На версиях R3 действительно есть два дополнительных пина. Но эти контакты являются дубликатами других пинов и шилд их просто не задействует.
Я использую робо-платформу 4WD и у меня ничего не работает...

Моторы, которые используются в робо-платформе 4WD от Maker Shed, DF Robotics, Jameco и других очень сильно "шумят". Эти шумы возвращаются на Arduino и вызывают нестабильную работу. Проблему можно решить, установив по 3 шумоподавляющих конденсатора на мотор как это показано на рисунке ниже.
Но на моем моторе уже установлен конденсатор и он все равно не работает.
Эти моторы генерируют очень большие шумы. Поэтому обычно им надо минимум три конденсатора для подавления шумов.
Почему конденсаторы не предусмотрены на шилде?
На Мотор шилде конденсаторы не будут эффективными. Шумы надо подавлять непосредственно на контактах двигателя, неподалеку от источника.
Собираем Motor Shield
Мотор шилды продаются как в собранном так и в разобранном состоянии. Кроме того, по данной инструкции вы можете собрать шилд самостоятельно, если у вас есть необходимые радиодетали. Если вам достался собранный мотор шилд, можете смело пропустить этот раздел.
Поехали!
Необходимые инструменты
Ниже приведен перечень инструментов, которые понадобятся для сборки мотор шилда. По сути это стандартный набор, который вам пригодится и в дальнейшем, если вы начали увлекаться схемотехникой/электротехникой/Arduino.
![]() |
Паяльник Основной инструмент, который вы будете использовать. Причем не только при пайке мотор шилда, но и во многих дальнейших проектах на Arduino. Очень облегчит вашу жизнь хорошее жало. Так что рекомендуем на этом не экономить. |
---|---|
![]() |
Припой Без него припаять ничего не получится. Так что при походе в магазин, не забудьте. |
![]() |
Мультиметр Вам понадобится стандартный мультиметр для измерения напряжения и силы тока. |
![]() |
Кусачки Опять таки очень сильно облегчат процесс прототипирования. |
![]() |
Держатель "Третья рука" Не обязательная вещь, но очень полезный инструмент для пайки микросхем и небольших плат. |
Необходимые компоненты
![]() |
PCB Монтажная плата для распайки 1 |
---|---|
![]() |
IC1, IC2 - L293D 2 |
![]() |
IC3 - 74HC595N 1 |
![]() |
IC1' и IC2' - Сокет для 16 контактов 2 |
![]() |
LED1 - 3 мм светодиод, любой цвет Индикатор питания двигателя 1 |
![]() |
R1 - 1.5 КОм резистор для светодиода 1 1 |
![]() |
R2 - 10 КОм резистор 1 |
![]() |
RN1 Цепочка резисторов на 10 контактов 10 Ком -100 КОм 1 |
![]() |
C2, C4, C6 0.1 мкФ керамический конденсатор 3 |
![]() |
C1, C3, C5 100 мкФ / 6В конденсатор (или больше) 3 |
![]() |
C7, C8 47 мкФ / 25 В конденсатор (или больше) 2 |
![]() |
X1 5-ти позиционный 3.5 мм блок для подключения (или 3 позиционный и 2 позиционный) 2 |
![]() |
X2 2 позиционный 3.5 мм блок для подключения 1 |
![]() |
Перезагрузка Тактильная кнопка 6 мм 1 |
![]() |
PWR Коннекторы 1 |
![]() |
Рельса папа-папа на 36 контактов 1 |
Паяем мотор шилд
![]() |
Для начала проверьте наличие всех необходимых компонентов! |
---|---|
![]() |
Удобно расположите вашу макетную плату и разогрейте паяльник |
![]() |
Сначала припаиваем резисторы: R1 (Коричневый Зеленый Красный Золотой) и R2 (Коричневый Черный Оранжевый Золотой). Изогните ноги резисторов так как это показано на рисунке слева. |
![]() |
Потом установите резисторы на плату таким образом, чтобы они плотно сели на макетку. Отогните ноги резисторов с другой стороны платы. Не перепутайте полярность. |
![]() |
С помощью паяльника нагрейте ноги резистора и металлическое покрытие на плате. После этого подайте в место пайки немного припоя. Аналогично припаяйте 4 контакта от резисторов. |
![]() |
Проверьте насколько хорошо получилось припаять. |
![]() |
Откусите ненужную часть контактов с резисторов с помощью щипцов. |
![]() |
Переходим к трем желтым керамическим конденсаторам C4, C2 и C6. Керамические конденсаторы не имеют полярности, так что располагать их можно как угодно. Паяем так же как и резисторы, обрезаем излишки контактов. |
![]() |
Припаиваем 6 проводников. |
![]() |
После этого устанавливаем 6 мм кнопку перезагрузки и цепочку резисторов RN1, которые используется для того, чтобы драйвера не подавали питание на моторы, пока не будет соответствующей команды от Arduino. |
![]() |
Переверните плату и припаяйте цепочку резисторов и кнопку. Ноги у них и так короткие, так что отрезать их скорее всего не придется. |
![]() |
Переходим к микросхемам (ICs) IC1, IC2 и IC3. Микросхемы поставляются с ногами, которые расположены немного под углом, поэтому установить их на макетную плату. Подготовьте их для установки, согнув ноги так, чтобы они стали прямыми. |
![]() |
Очень удобная вещь - сокеты на 16 контактов для установки драйверов L293D. |
![]() |
IC-микросхемы должны быть установлены с правильной ориентацией, чтобы они корректно работали. Для этого на плате и на чипах предусмотрены одинаковые U метки. Когда устанавливаете чипы, убедитесь, чтобы они совпадали. Аккуратно установите три чипа. Проверьте, не сломаны ли ноги. 74HC595 устанавливается по центру, а два L293D по бокам. |
![]() |
Припаяйте все контакты чипов. |
![]() |
Переходим к электролитическим конденсаторам на 100 мкФ: C1, C3 и C5. Электролитические конденсаторы имеют полярность, которую надо соблюдать при их установке. Длинная нога конденсатора это + и припаивается к отверстию, возле которого стоит символ +. Конденсаторы не маркируются разными цветами. Емкость конденсатора невозможно определить по цвету корпуса! |
![]() |
Еще раз внимательно проверьте полярность и припаяйте три конденсатора. |
![]() |
Установите два оставшихся электролитических конденсатора на 47 мкФ: C7 и C8. Они тоже имеют полярность, так что проверьте ее во время установки. Напоминаем, что емкость конденсатора не зависит от цвета корпусной части. |
![]() |
Припаяйте два конденсатора и откусите лишнее. |
![]() |
Дальше - светодиод 3 мм, который отображает состояние питания моторов. Как и конденсаторы, светодиоды имеют полярность. Длинная нога - это +. Если не выдержать полярность, светодиод не будет работать. |
![]() |
Припаяйте и уберите лишнее на ногах светодиода. |
![]() |
Устанавливаем контакты для проводов, сервомоторов и Arduino. Мы используем одну рельсу на 36 контактов, с которой отламываем необходимое нам количество для каждой рельсы. Нам понадобятся 2 рельсы на 8 контактов, 2 рельсы на 6 контактов, 2 - на 3 контакта и 1 - на 2 контакта. 2 рельсы на 3 контакта используются для подключения серводвигателей в правом левом углу. Рельса на 2 контакта - к PWR контакту в центре снизу. |
![]() |
Кроме этого, установите 3 больших больших терминала для подключения моторов и кабелей внешнего источника питания. |
![]() |
Припаиваем 3 рельсы контактов и 3 блока терминалов. |
![]() |
После этого установите рельсы на 8 и на 6 контактов на ваш Arduino. Это проверка насколько ровные рельсы. Перед этим убедитесь, что Arduino не подключен к компьютеру или внешнему источнику питания. Установите мотор шилд на Arduino. Рельсы должны своими контактами попасть в отверстия на шилде. Припаиваем все пины к мотор шилду. |
![]() |
Все! Результат должен выглядеть примерно так, как показано на фото слева. |
Используем Motor Shield!
Motor Shield - это отличный контроллер для двигателей, но использовать его надо предельно осторожно и корректно.
Установка библиотеки
Первая установка библиотеки Arduino
Перед тем как вы сможете использовать Motor shield, вам надо установить библиотеку AF_Motor Arduino library. Благодаря этой библиотеке ваш Arduino сможет "общаться" с мотор шилдом.
1. Скачайте файл библиотеки для мотор шилда с
2. Распакуйте ZIP файл, который вы скачали
3. Переименуйте распакованную папку AFMotor
4. Проверьте, чтобы внутри AFMotor были файлы AFMotor.cpp и AFMotor.h. Если их там нет, значит вы что-то некорректно сделали в предыдущих пунктах.
5. Переместите папку AFMotor в папку arduinosketchfolder/libraries. В Windows это будет что-то вроде MY Documents/Arduino/libraries, для Mac - Documents/arduino/libraries. Если вы устанавливаете библиотеки впервые, вероятно, придется создать папку под названием libraries. Название папки должно быть именно libraries. Без капса, без каких-либо других изменений!
6. Убедитесь, что в папке libraries есть папка AFMotor, а внутри нее - файлы AFMotor.cpp, AFMotor.h
7. Перезагрузите Arduino IDE. После перезагрузки в меню должен появится файл File->Examples->AFMotor->MotorParty
Питание
Питание двигателей постоянного тока, требования по напряжению и силе тока
Для моторов нужны мощные источники питания. Особенно для дешевых моторов, так как у них очень низкий коэффициент полезного действия. Первое, с чем надо определиться - напряжение питания для вашего мотора. Если вам повезло и у вас есть спецификация на двигатель, этот параметр должен быть указан именно в спеке. Некоторые маленькие хобби-моторы питаются от 1.5 В, но в основном маломощные привода требуют напряжение питания 6-12 В. На мотор шилде контроллеры моторов рассчитаны на обеспечение питания в диапазоне от 4.5 до 25 В. То есть, запитать хобби-моторы с напряжением питания 1.5 В не получится
Требования по силе тока. Второе, с чем надо определится - сила тока, которая необходима для работы вашего мотора. Драйвера двигателей, которые входят в состав Motor Shield'а обеспечивают 600 мА на один мотор с максимальным значением до 1.2 А. Если вы работаете с токами, которые превышают 1 А, надо подумать об охлаждении драйверов, которые начинают очень сильно греться.
Про использование SN754410. Некоторые используют драйвер двигателя SN754410, потому что его можно легко установить в сокет для оригинальных драйверов и он обеспечивает силу тока 1 А на двигатель с максимально допустимым значением силы тока 2 А. Считается, что подобный "хак" вполне допустим, однако производители шилдов не рекомендуют производить такой апгрейд. А если и производить, то лишь на свой страх и риск, так как шилд может перегореть.
Надо больше мощности? Можно приобрести еще один набор драйверов L293D и установить их сверху на родные. И вуаля! Вы получаете вдвое большую силу тока! Можно установить еще 2 чипа сверху, дальнейшее нагромождение не даст значительного прироста силы тока.
Рекомендуется использовать два источника питания. Один для Areuino и второй для моторов. 99% 'загадочных проблем с моторами' возникают из-за шумов от цепи питания, которая распределяется на две и в результате ей может не хватить мощности на одну из цепей!
Как настроить Arduino + Motor Shield для питания моторов
Сервомоторы запитываются от 5 В, которые генерируются на Arduino. Это отличный вариант для небольших хобби-серв. Если вы хотите подключить другой источник питания, обрежьте контакт, который идет к + на серве и подключите ваш собственный источник питания 5-6 В.
Двигатели постоянного тока питаются от 'цепи питания с высоким напряжением', а не от 5 В регулируемого напряжения на Arduino. Не подключайте питание моторов постоянного тока к цепи 5 В, если вы не уверены на 100%, что вы все делаете верно!
'Цепь питания с высоким напряжением' доступна по двум цепям. Первый вариант - использовать DC джек на плате Arduino, а второй - использование 2-х контактного терминала, который отмечен EXT_PWR. DC джек на Arduino имеет встроенный предохранительный диод, так что вы можете особо не переживать, если даже подключите неподходящий источник питания. При этом на EXT_PWR терминалах мотор шилда нет предохранительного диода. Так что подключайте внимательно, чтобы не спалить мотор шилд или Arduino.
Motor Shield работает следующим образом:

Если вам нужен один источник питания дляArduino и всех моторов, просто подключите его в DC джек на Arduino или 2-х контактный терминал PWR_EXT на шилде и замкните контакт питания на мотор шилде (Motor shield power jumper на схеме выше).
Если у вас Diecimila Arduino, установите контакт питания на Arduino в EXT.
В таком режиме у вас могут возникнуть проблемы - Arduino может перезагружаться. Это происходит из-за того, что не обеспечивается постоянное питание. Вообще-то подобное питание проектов с мотор шилдом не очень хороший вариант. Лучше использовать раздельное питание моторов и микроконтроллера.
Если вы хотите запитать Arduino от USB, а двигатели от отдельного источника постоянного тока, подключите плату через USB. Потом подключите питание мотора к блоку контактов PWR_EXT на шилде. Не замыкайте контакты на шилде. Считается, что это оптимальный вариант питания ваших проектов (если у вас Arduino Diecimila, не забудьте переключить режим питания на плате USB. При использовании Diecimila, вы можете сделать следующее: подключите источник питания постоянного тока к Arduino и замкните контакт питания на мотор шилде).
Если вам надо 2 отдельных источника питания для Arduino и моторов, подключите питание к Arduino через DC джек, а второй - к мотор шилду с помощью контактов PWR_EXT. Убедитесь, что контакт питания на мотор шилде разомкнут.
Если у вас Arduino Diecimila, установите контакт в позицию EXT. Это второй предпочтительный вариант для обеспечения питания ваших проектов с использованием Motor Shield.
Мотор шилд и сервомоторы

Хобби сервы - самый простой вариант для проверки шилда. На сервах предусмотрен 3-х контактный коннектор типа 'мама' на 0.1", на котором присутствуют контакты +5 В, земля (GND) и сигнал. На мотор шилде есть 2 рельсы с 3-мя контактами 16-ти битного ШИМ выхода. Для работы сервоприводов их достаточно подключить к подключить к указанным контактам.
ШИМ выходы на Arduino достаточно точные. При подключении серв к мотор шилду можно использовать встроенную библиотеку Servo library.
Питание серв обеспечивается встроенным на Arduino регулятором на 5 В, который питается непосредственно от USB или DC джека на Arduino.
Мотор шилд и шаговые двигатели

Шаговые моторы - отличный выбор для управления вашими проектами. Они отлично вписываются в проекты манипуляторов, ЧПУ станков и т.п. на Arduino. Мотор шилд поддерживает работу двух шаговых двигателей одновременно. Библиотека работает одинаково для биполярных и униполярных моторов.
Для униполярных моторов: перед подключением моторов надо выяснить как соотносятся контакты и катушки. Если у мотора пять проводов, будет один, который будет расположен по центру обеих катушек. Центральный контакт должен быть подключен к контакту GND на мотор шилде. Потом надо подключить катушку 1 к одному из контактов для моторов (скажем, М1 или М3), а катушка 2 должна подключаться ко второму порту мотора (М2 или М4).
Для биполярных двигателей: то же самое, что и для униполярных, только нет пятого проводника, который подключен к земле. Скетч такой же.
Запустить шаговый двигатель немного сложнее, чем двигатель постоянного тока, но все равно это не так уж и сложно.
1. Убедитесь, что вы подключили библиотеку #include <AFMotor.h>
2. Создайте объект для шагового двигателя: AF_Stepper(steps, stepper#). Steps содержит информацию о том, сколько шагов на один оборот совершает мотор. В 7.5 degree/step моторе 360/7.5 = 48 steps. Stepper# отвечает за порт, к которому подключен шаговый двигатель. Если вы используете M1 и M2, это порт 1. Если вы используете М3 и М4 - это порт 2.
3. Установите скорость мотора, используя setSpeed(rpm), rpm - задаваемое количество оборотов в минуту на шаговом двигателе.
4. После этого каждый раз, когда вы хотите обеспечить вращение ротора мотора, надо вызывать процедуру step(#steps, direction, steptype).#steps - это то, сколько шагов вы хотите совершить. direction - это FORWARD или BACKWARD, а тип шага - это SINGLE, DOUBLE. INTERLEAVE или MICROSTEP.
"Single" означает активацию одной катушки, "double" означает одновременную активацию 2-х катушек (для большего крутящего момента), а 2 "interleave" - среднее между режимами 'single' и 'double' (в результате скорость будет в два раза меньше). "Microstepping" - метод, с помощью которого обеспечивается плавное перемещение между шагами. Вы можете использовать любой тип шага, менять методы "на лету" в зависимости от того, что вам необходимо - минимальная мощность, больший крутящий момент или большая точность.
5. По умолчанию мотор будет 'держать' позицию после того, как отработает заданный цикл шагов. Если вы хотите отключить катушки, чтобы обеспечить свободное вращение вала двигателя, можете использовать функцию release().
6. Команды шагов 'блокируются' и становятся доступными только после отработки заданных шагов.
Так как как команды шагов 'блокируются' - надо подавать новые команды каждый раз, когда вы хотите обеспечить вращение ротора. Если вы хотите расширить возможности шаговых приводов, попробуйте загрузить библиотеку AccelStepper library (устанавливается так же как и библиотека AFMotor), в которой есть интересные примеры управления двумя шаговыми двигателями одновременно с разными ускорениями.
#include <AFMotor.h>
AF_Stepper motor(48, 2);
void setup() {
Serial.begin(9600); // устанавливаем скорость обмена данными на 9600 bps
Serial.println("Stepper test!");
motor.setSpeed(10); // 10 rpm
motor.step(100, FORWARD, SINGLE);
motor.release();
delay(1000);
}
void loop() {
motor.step(100, FORWARD, SINGLE);
motor.step(100, BACKWARD, SINGLE);
motor.step(100, FORWARD, DOUBLE);
motor.step(100, BACKWARD, DOUBLE);
motor.step(100, FORWARD, INTERLEAVE);
motor.step(100, BACKWARD, INTERLEAVE);
motor.step(100, FORWARD, MICROSTEP);
motor.step(100, BACKWARD, MICROSTEP);
}
Мотор шилд и двигатели постоянного тока

Двигатели постоянного тока (DC motors) используются во многих робототехнических проектах.
Motor Shield дает возможность управлять одновременно 4-ми двигателями постоянного тока, обеспечивая вращение роторов в двух направлениях. То есть, вал может вращаться и по часовой стрелке и против. Можно управлять скоростью вращения с инкрементом 0.5 %.
Не забывайте, что H-bridge чип не рассчитан на нагрузки больше 0.6 А при пиковых нагрузках 1.2 А. То есть, шилд рассчитан на маленькие моторы.
Для того, что бы подключить мотор, просто установите два контакта в терминалы, к контактам M1, M2, M3 или M4. После этого используйте скетч, пояснения к которому приведены ниже.
1. Убедитесь, что вы подключили библиотеку #include <AFMotor.h>
2. Создайте объект AF_DCMotor с такими свойствами: AF_DCMotor(motor#, frequency). У созданного объекта два аргумента.
Первый отвечает за порт, к которому подключен мотор 1, 2, 3 или 4.
frequency отвечает за частоту управляющего сигнала.
Для моторов 1 и 2 вы можете выбрать MOTOR12_64KHZ, MOTOR12_8KHZ, MOTOR12_2KHZ, или MOTOR12_1KHZ.
3. После этого вы можете настроить скорость мотора с использованием setSpeed(speed), где speed задается в диапазоне от 0 (остановка) до 255 (максимальная скорость).
4. Для ого, чтобы запустить мотор, необходимо вызвать функцию run(direction), где direction - это FORWARD, BACKWARD или RELEASE. Естественно, Arduino не знает, что такое "вперед", или "назад". Так что "вперед" - "назад" вы должны настроить на собственное усмотрение, поменяв контакты "+"/"-" от привода к клемам мотор шилда.
#include <AFMotor.h>
AF_DCMotor motor(2, MOTOR12_64KHZ); // создаем объект motor #2, 64 КГц ШИМ
void setup() {
Serial.begin(9600); // Устанавливаем скорость передачи данных 9600 bps
Serial.println("Motor test!");
motor.setSpeed(200); // устанавливаем скорость на 200 из 255 допустимых
}
void loop() {
Serial.print("tick");
motor.run(FORWARD); // ротор двигателя начинает вращаться "вперед"
delay(1000);
Serial.print("tock");
motor.run(BACKWARD); // вращается в противоположном направлении
delay(1000);
Serial.print("tack");
motor.run(RELEASE); // остановка
delay(1000);
}
Класс AF_DCMotor

Класс AF_DCMotor дает возможность управлять скоростью и направлением четырех двигателей постоянного тока с использованием Motor Shield. Для того, чтобы использовать эту возможность при программировании Arduino, надо в начале скетча добавить следующую строку:
#include <AFMotor.h>
AF_DCMotor motorname(portnum, freq)
Функция для двигателей постоянного тока. Функцию надо вызывать один раз для каждого мотора постоянного тока, который вы используете. Каждый мотор должен иметь различное имя (motorname).
Параметры:
- port num - выбор канала (1-4) на мотор шилде, к которому подключен двигатель.
- freq - выбор частоты ШИМ сигнала. Если частота не указана, используется значение по умолчанию - 1 КГц.
Частоты для канала 1 и 2 следующие:
- MOTOR12_64KHZ
- MOTOR12_8KHZ
- MOTOR12_2KHZ
- MOTOR12_1KHZ
Частоты для канала 3 и 4:
- MOTOR34_64KHZ
- MOTOR34_8KHZ
- MOTOR34_1KHZ
Пример:
AF_DCMotor motor4(4); // Инициализируем мотор на канале 4 с частотой ШИМ-модуляции 1 КГц
AF_DCMotor left_motor(1, MOTOR12_64KHZ); // Инициализируем мотор на канале 1 с частотой ШИМ 64 КГц

setSpeed(speed)
Устанавливает скорость вращения ротора мотора.
Параметры:
- speed - значение скорости, которое находится в диапазоне от 0 до 255. 0 - не вращается, 255 - максимальная скорость вращения.
Пример:
Примечание: ответ двигателей постоянного тока обычно не линейный, так что фактическая скорость вращения не обязательна будет пропорциональна скорости, которую вы указали при программировании.
run(cmd)
Устанавливает режим работы мотора.
Параметры:
- cmd - желаемый режим работы мотора
Значения, которые может принимать аргумент cmd:
- FORWARD - вращение "вперед" (фактическое направление вращения ротора будет зависеть от подключения двигателя);
- BACKWARD - вращение "назад" (вращение в противоположном направлении относительно FORWARD);
- RELEASE - остановка мотора. Остановка питания мотора. Эквивалент setSpeed(0). На мотор шилде не предусмотрены механизмы динамической остановки, так что мотору понадобится некоторое время, чтобы ротор окончательно остановился.
Пример:
motor.run(FORWARD);
delay(1000); // вращается "вперед" на протяжении 1 секунды
motor.run(RELEASE);
delay(100); // 'отпускаем ротор' на 1/10 секунды
motor.run(BACKWARDS); // вращение в противоположном направлении
Класс AF_Stepper

Класс AF_Stepper управление одним и мульти-шагом двух шаговых двигателей с использованием Motor Shield. Для того, чтобы использовать это при программировании Arduino, надо подключить библиотеку в начале скетча:
#include <AFMotor.h>
AF_Stepper steppername(steps, portnumber)
Функция AF_Stepper инициализирует шаговый двигатель. Вызывается один раз в скетче для каждого шагового двигателя. Каждый шаговый двигатель должен получить уникальное имя как в примере ниже.
Параметры:
- steps - определяет количество шагов на один оборот вашего мотора.
- num - определяет как именно подключен шаговый двигатель к мотор шилду.
Значения для параметра 'num'1 (каналы 1 и 2) и 2 (каналы 3 и 4).
Пример:

AF_Stepper Stepper1(48, 1); // A 48 шагов за один полный оборот ротора на каналах 1 и 2
AF_Stepper Stepper2(200, 2); // 200 шагов за один полный оборот ротора на каналах 3 и 4
step(steps, direction, style)
Шаги двигателя.
Параметры:
- steps - количество шагов для поворота ротора
- direction - направление вращения (FORWARD или BACKWARD)
- style - тип шага:
Аргумент 'style' может принимать следующие значения:
- SINGLE - подается питание на одну катушку.
- DOUBLE - подается питание на две катушки для большего крутящего момента.
- INTERLEAVE - среднее между single и double режимами, что позволяет совершить поворот на пол шага. Более плавное вращение, поворот на меньший угол, но из-за того, что совершается половина шага. Скорость тоже уменьшается в два раза.
- MICROSTEP - на катушки подается/снимается питание, что позволяет генерировать 'микро шаг' между каждым шагом. В результате - меньший угол поворота ротора, более плавный ход, но уменьшение крутящего момента.
Примечание: Step - это функция, которая не вернет значение на выходе, пока не будут отработаны все заданные шаги. Для одновременного вращения двух моторов, надо выдержать паузы между шагами. Для этого используется функция "onestep()", которая рассмотрена ниже.
Stepper1.step(100, FORWARD, DOUBLE); // 100 шагов вперед с использованием шага с аргументом double
Stepper2.step(100, BACKWARD, MICROSTEP); // 100 шагов в противоположном направлении с использованием микрошага
setSpeed(RPMspeed)
Устанавливаем скорость мотора
Параметры:
- Speed - скорость в RPM (рад/мин)
Пример:
Stepper1.setSpeed(10); // устанавливаем скорость мотора 1 на 10 рад/мин
Stepper2.setSpeed(30); // устанавливаем скорость мотора 2 на 30 рад/мин
onestep(direction, stepstyle)
Один шаг мотора.
Параметры:
- direction - направление вращения (FORWARD или BACKWARD)
- stepstyle - тип шага:
'style' может принимать следующие значения:
- SINGLE - подается питание на одну катушку.
- DOUBLE - подается питание на две катушки для большего крутящего момента.
- INTERLEAVE - среднее между single и double режимами, что позволяет совершить поворот на пол шага. Более плавное вращение, поворот на меньший угол, но из-за того, что совершается половина шага. Скорость тоже уменьшается в два раза.
- MICROSTEP - на катушки подается/снимается питание, что позволяет генерировать 'микро шаг' между каждым шагом. В результате - меньший угол поворота ротора, более плавный ход, но уменьшение крутящего момента.
Пример:
Stepper1.onestep(FORWARD, DOUBLE); // один шаг "вперед" с использованием аргумента double
release()
Убираем "держащий момент" на моторе. Благодаря этому уменьшается нагрев, но ротор шагового мотора не будет сопротивляться вращению.
Пример:
Stepper1.release(); // останавливаем вращение и снимаем "держащий момент" с ротора.
Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!