Содержание

Motor Shield (SmartElements)

Описание

Плата расширения Motor Sheld, выполненная на базе микросхемы L298P, позволяет управлять моторами и дополнительными устройствами. Является незаменимой платой при конструировании и сборке роботов, а также других устройств, использующих коллекторные и шаговые моторы. Motor Shield совместим со всеми типами контроллеров Arduino, совпадающих по форм-фактору (в том числе совместим с контроллерами Smart Uno, Smart Mega и Smart Leonardo).

Плата имеет два канала для управления моторами и позволяет подключить два коллекторных мотора или один шаговый. Допускается параллельное подключение нескольких моторов в один канал. Такой вариант подключения будет удобен, например, для четырехколесных роботов. Motor Shield позволяет подключать моторы мощностью до 2 А на каждый канал. При необходимости использования более мощного мотора - каналы можно объединить, получив при этом суммарно до 4 А. Обратите внимание, при работе платы с моторами потребляющими большой ток, микросхема сильно нагревается. Во избежании ожога, не прикасайтесь к микросхеме в процессе работы.

Для управления направлением вращения моторов используются выводы М1 и М2, по умолчанию с помощью перемычек использующие выводы 7 и 4 контроллера и шилда. Для управления скоростью вращения моторов используются выводы Е1 и Е2, по умолчанию с помощью перемычек использующие выводы 6 и 5 контроллера и шилда. Вы можете использовать другие выводы контроллера и шилда для управления моторами - для этого соедините выводы шилда М1, М2, Е1 и Е2 с другими цифровыми выводами посредством гибких проводов «мама-мама» (обратите внимание, для регулировки скорости вращения моторв выводы Е1 и Е2 должны подключаться к выводам, поддерживающим ШИМ).

Плата совмещает в себе возможности Motor Shield и Sensor Shield. Для подключения периферии на плату выведены трехконтактные разъемы для подключения модулей и датчиков (13 цифровых и 6 аналоговых). Кроме того, на плате предусмотрены следующие дополнительные разъемы: UART, I2C, а также DIST и INDICATOR.

Разъем DIST позволяет подключить ультразвуковой дальномер (HC-SR04 или US-015) или другой датчик или модуль, использующий аналогичную распиновку. Для работы данный разъем использует цифровые выводы 8 и 9 контрллера и шилда.

Разъем INDICATOR позволяет подключить модуль 4-х разрядного индикатора или другой модуль или датчик, использующий аналогичную распиновку. Для работы данный разъем использует цифровые выводы 12 и 13 контрллера и шилда.

Светодиод на плате отображает состояние питания Motor Shield: если светодиод горит - шилд получает питание, если не горит - питание на шилд не поступает.

Перемычка JOIN на плате отвечает за режим питания. Если перемычка установлена - внешнее питание от разъема PWR поступает и на контроллер через пин Vin, и на питание моторов. Рекомендуемое напряжение в таком случае должно быть 7-12 В. Если перемычка снята - внешнее питание поступает только на Motor Shield для питания моторов (для питания контроллера и периферии требуется дополнительный источник питания, подключаемый к контроллеру). Рекомендуемое напряжение в таком случае может быть 5-24 В. В качестве внешнего питания можно использовать Power Shield, установив его между контроллером и Motor Shield.

Схема платы

На схеме обозначены:

  1. Цифровые выводы (D0 - D13)
  2. Выводы управления направлением движения (М1 и М2) и скоростью (Е1 и Е2)
  3. Клеммные колодки для подключения моторов
  4. Клеммные колодки для подключения внешнего питания
  5. Перемычка управления режимом питания
  6. Аналоговые выводы (A0 - A5)
  7. Выводы для подключения дальномера
  8. Выводы для подключения по интерфейсу I2C
  9. Выводы для подключения индикатора
  10. Выводы для подключения по интерфейсу UART

Физические размеры

Плюсы использования

Библиотеки

Описание библиотеки

Для более удобной работы с шилдом предусмотрена библиотека robotSE. Ниже приведено описание работы с библиотекой.

Инициализация

Инициализация и создание объекта для управления движением происходит с помощью типа robotSE. Простейший способ создания объекта робота:

robotSE myRobot;

При таком вызове выводы шилда назначены по-умолчанию. Если требуется указать явно номера выводов, используйте создание объекта с параметрами:

robotSE myRobot(E1, E2, M1, M2, speed)
где:

  1. E1 - вывод подключения пина мотор-шилда Е1
  2. E2 - вывод подключения пина мотор-шилда E2
  3. M1 - вывод подключения пина мотор-шилда M1
  4. M2 - вывод подключения пина мотор-шилда M2
  5. speed - скорость вращения моторов (задаётся значением от 0 до 255, где 0 - колёса вращаться не будут). По-умолчанию скорость равна 150.

Установка скорости

Для управления скоростью предусмотрен метод setSpeed(speed), имеющий единственный параметр - скорость, от 0 до 255.

Движение

Для управления движением предусмотрены следующие методы (движение происходит со скоростью, указанной при изначальном создании объекта робота или установленной с помощью метода setSpeed(speed)):

Пример подключения и использования

Пример: Для демонстрации работы шилда используется простейший робот, который движется по четырём направлениям (вперед, назад, вправо и влево). Робот собирается очень просто - берётся трёхколёсное шасси с двумя моторами, на платформу шасси крепится контроллер Smart Uno, на контроллер прикрепляется Power Shield, в свою очередь на Power shield прикрепляется Motor shield.

Для этого нам понадобится:

Подключение:

  1. Закрепите на верхней площадке шасси контроллер Smart Uno с помощью винтов и гаек M2, как указано в инструкции к шасси.
  2. На контроллере закрепите плату Power Shield, путём совмещения контактов платы расширения с контактами контроллера.
  3. Сверху, на Power Shield закрепите плату Motor shield, путём совмещения контактов Motor shield с контактами платы Power Shield.
  4. Подключите моторы к плате расширения Motor shield, к клеммным колодкам М1 и М2 (на схеме сверху выделены оранжевым прямоугольником с номером 3). Правый мотор подключите к клеммной колодке M1, красный провод к контакту «+», чёрный к контакту «-». Аналогично подключите левый мотор к клеммной колодке М2.

Скетч для загрузки:

#include <robotSE.h> //подключение библиотеки

robotSE myRobot; //создание объекта робота

int delay_time = 1500; //время задержки для движения


void setup() // Задание начальных параметров системы.
{
 
}

void loop() //Основной цикл
{
  myRobot.move_forward();     //движение вперёд
  delay(delay_time);  //задержка
  myRobot.move_right();       //движение вправо
  delay(delay_time);  //задержка
  myRobot.move_left();        //движение влево
  delay(delay_time);  //задержка
  myRobot.move_back();        //движение назад
  delay(delay_time);  //задержка
  myRobot.move_stop();        //остановка
  delay(delay_time);  //задержка
}