Главная » Arduino » Ведроид-мобиль — робот на Arduino — Часть 2. Подключаем Motor Shield

Ведроид-мобиль — робот на Arduino — Часть 2. Подключаем Motor Shield

сервопривод серво робот Ведроид мобиль Motor Shield MG995 Arduino Mega 2560 Arduino  arduino  В этой статье я опишу процесс подключения к Arduino Mega 2560 платы Motor Shield, управление четырьмя электродвигателями и одним сервоприводом MG995.

В предыдущей статье я описал процесс сборки мотоплатформы для будущего робота и поделился планами на будущее.

Основная задача на сегодня - заставить Ведроид-мобиль двигаться и управлять сервоприводом.

Подключение Motor Shield к Arduino Mega 2560

Не будем тянуть время и приступим. Снимаем верхнюю часть платформы и припаиваем провода ко всем четырём  двигателям. Соблюдайте полярность. У меня на всех верхних контактах синий провод, а на нижних - желтый.

сервопривод серво робот Ведроид мобиль Motor Shield MG995 Arduino Mega 2560 Arduino  arduino

Паяйте очень аккуратно, чтобы не испортить клеммы на двигателях. В результате должно получиться что-то подобное.

сервопривод серво робот Ведроид мобиль Motor Shield MG995 Arduino Mega 2560 Arduino  arduino

Сразу закрепим сервопривод MG995 и аккуратно уложим провода внутри мотоплатформы, чтобы они не цеплялись за колеса и нам больше не пришлось снимать её верхнюю часть.

сервопривод серво робот Ведроид мобиль Motor Shield MG995 Arduino Mega 2560 Arduino  arduino

Затем устанавливаем корпус для элементов питания и закрепляем его. У меня пока есть блок на 4 элемента.

Если у вас есть тумблер и ненужный разъем, через который будет осуществляться зарядка аккумуляторов, то установите их сейчас. К сожалению, у меня под рукой их не оказалось.

Сразу выводим все провода через отверстия наверх.

сервопривод серво робот Ведроид мобиль Motor Shield MG995 Arduino Mega 2560 Arduino  arduino

Теперь закрепляем снаружи на верхней части платформы Arduino Mega 2560 и вставляем в нее наш Motor Drive Shield 2x L293D. Устанавливаем верхнюю часть платформы на место и закрепляем её болтами.

Теперь пришло время подключить двигатели к Motor Shield.

Передние двигатели я подключил к клемам M3 и M4. M4 - передний правый двигатель, M3 - передний левый. Arduino при креплении к верхней крышке стала наоборот, поэтому получился такой сдвиг.

сервопривод серво робот Ведроид мобиль Motor Shield MG995 Arduino Mega 2560 Arduino  arduino

M2 - задний правый двигатель. M1 - задний левый,  Соблюдайте полярность подключения электродвигателей

сервопривод серво робот Ведроид мобиль Motor Shield MG995 Arduino Mega 2560 Arduino  arduino

Подключаем сервопривод MG995.

сервопривод серво робот Ведроид мобиль Motor Shield MG995 Arduino Mega 2560 Arduino  arduino

Провод питания сервопривода пришлось откусить потому, что встроенный в Arduino стабилизатор напряжения не выдавал достаточный ток для его работы. В результате появился глюк в работе.

Проблему решил путем подключения питающего провода сервопривода напрямую к источнику питания.

Подключаем провода питания к контактам на Motor Shield. На плюсовую клемму также подключаем провод от сервопривода

сервопривод серво робот Ведроид мобиль Motor Shield MG995 Arduino Mega 2560 Arduino  arduino

Прошу вас сразу обратить внимание на перемычку. Если ее убрать, то питание на контроллер Arduino придется подавать отдельно. На рисунке приведена схема, поясняющая электрические соединения шин питания контроллера Arduino и модуля Motor Shield.

сервопривод серво робот Ведроид мобиль Motor Shield MG995 Arduino Mega 2560 Arduino  arduino

Любуемся нашим шедевром.

сервопривод серво робот Ведроид мобиль Motor Shield MG995 Arduino Mega 2560 Arduino  arduino

На этом с аппаратной частью на сегодня мы заканчиваем и переходим к написанию тестового скетча для робота.

Занятость портов Arduino при подключенном Motor Shield

После подключения Motor Shield к Arduino некоторые порты нам больше не доступны для работы, так как их использует Motor Shield.

сервопривод серво робот Ведроид мобиль Motor Shield MG995 Arduino Mega 2560 Arduino  arduino

Более подробно об этом расписано на сайте Arduino Shield List.

Пример скетча для работы Arduino с Motor Shield  реализующий управление четырьмя двигателями и одним сервоприводом

Основная задача - разобраться с управлением четырьмя двигателями и вращением одного сервопривода.

Сразу давайте обсудим первоначальный функционал нашего тестового скетча.

Предлагаю реализовать такой алгоритм:

  • Движение вперед в течении 5 секунд с поворотом сервы на угол 90 градусов
  • Поворот вправо в течении 2 секунд с поворотом сервы на угол 180 градусов
  • Движение назад в течении 5 секунд с поворотом сервы на угол 90 градусов
  • Поворот влево в течении 2 секунд с поворотом сервы на угол 0 градусов
  • Остановка двигателей на 3 секунды с поворотом сервы на угол 90 градусов

Задача поставлена - можно приступать.

Для начала нам необходимо установить библиотеку AFMotor.

сервопривод серво робот Ведроид мобиль Motor Shield MG995 Arduino Mega 2560 Arduino  arduino    afmotor.rar (9,2 KiB, 2 199 hits)

Скачайте архив и распакуйте его содержимое в \arduino-1.XX\libraries\

Все пояснения я добавил в комментариях к коду, поэтому построчно разбирать его не буду. Единственное что поясню - это повороты. Так как колеса нашей мотоплатформы не могут поворачиваться, то поворот в стороны реализованы разнонаправленным вращением двигателей, т.е. при повороте вправо переднее правое и заднее правое колесо начинают вращаться назад, а переднее левое и заднее левое вращаются вперед.

#include <AFMotor.h> // Подключаем библиотеку для управления двигателями
#include <Servo.h>   // Подключаем библиотеку для сервоприводом

//Создаем объекты для двигателей
AF_DCMotor motor1(1); //канал М1 на Motor Shield — задний левый
AF_DCMotor motor2(2); //канал М2 на Motor Shield — задний правый
AF_DCMotor motor3(3); //канал М3 на Motor Shield — передний левый
AF_DCMotor motor4(4); //канал М4 на Motor Shield — передний правый
 
// Создаем объект для сервопривода
Servo myservo;
 
void setup() {
   // Выбираем пин к которому подключен сервопривод
   myservo.attach(9); // или 10, если воткнули в крайний разъём
   // Поворачиваем сервопривод в положение 0 градусов при каждом включении
   myservo.write(0); 
   // Пауза 5 секунд
   delay(5000);  
}

void loop() {
//Устанавливаем скорость 100% (0-255)
motor1.setSpeed(255);
motor2.setSpeed(255);
motor3.setSpeed(255);
motor4.setSpeed(255);
 
// Задаем направление движение
// FORWARD - вперед
// BACKWARD - назад
// RELEASE - стоп
 
// Движение вперед в течении 5 секунд с поворотом сервы на угол 90 градусов
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
myservo.write(90); // Поворот сервы на угол 90 градусов
delay(5000);
 
// Поворот вправо в течении 2 секунд с поворотом сервы на угол 180 градусов

motor1.run(FORWARD);
motor2.run(BACKWARD);
motor3.run(FORWARD);
motor4.run(BACKWARD); 
myservo.write(180); // Поворот сервы на угол 180 градусов
delay(2000);

// Движение назад в течении 5 секунд с поворотом сервы на угол 90 градусов
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
myservo.write(90); // Поворот сервы на угол 90 градусов
delay(5000);
 
//Поворот влево в течении 2 секунд с поворотом сервы на угол 0 градусов

motor1.run(BACKWARD);
motor2.run(FORWARD);
motor3.run(BACKWARD);
motor4.run(FORWARD);

myservo.write(0); // Поворот сервы на угол 0 градусов
delay(2000);
 
// Остановка двигателей на 3 секунды с поворотом сервы на угол 90 градусов
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
myservo.write(90); // Поворот сервы на угол 90 градусов
delay(3000);
}

Демонстрация работы

P.S.

В следующий раз я попробую реализовать управление Ведроид-мобилем по Bluetooth со смартфона на Android.

Похожие записи
Arduino закупка Насмотревшись видео на YouTube о проектах собранных на Arduino, не смог остаться в стороне и 3 марта заказал себе на ebay Arduino Mega 2560 и Ethernet...
Ведроид-мобиль — робот на Arduino — Ча... В этой статье я опишу процесс создания шилда управления роботом, подключение ультразвукового дальномера и реализацию алгоритма объезда препятствий. На...
Детектор электромагнитного поля на Arduino... Данное устройство поможет вам без труда обнаружить источники электромагнитных излучений, которыми являются все электроприборы, которые нас окружают. ...
Arduino – подключение датчика дымовых газов ... Ко мне в руки попал датчик дымовых газов CG312 MQ2, который позволяет определять наличие отдельных компонентов газовых смесей и будет реагировать на ...
This entry was posted in Arduino and tagged , , , , , , , . Bookmark the permalink.

37 комментариев: Ведроид-мобиль — робот на Arduino — Часть 2. Подключаем Motor Shield

  1. Вадим говорит:

    Класс! Ещё бы сонар подключить бы.

    • source™ говорит:

      Если просто интересует работа Arduino с дальномером, то ранее я уже описывал это.
      Если по роботу, то я еще не продумал алгоритм работы. Существующие варианты меня не полностью устраивают
      Скажу больше - я еще не решил какой алгоритм будет использоваться.
      Пока рассматриваю 4 варианта:
      - движение с объездом препятствий
      - прохождение лабиринта
      - аля робот пылесос - построение карты помещения и обход всей его площади (привязал сзади мокрую тряпку и пусть себе моет)
      - из точки А попасть в точку Б

      Пока склоняюсь к варианту прохождения лабиринта, но может реализую все алгоритмы.

      P.S. не забыть сделать сверку данных с дальномера с измерениями произведенными ранее - это на случай если робот застрянет (это пометка для меня - на будущее)

  2. Олег говорит:

    Отличный материал, я заказал шасси на китайском сайте и набор для начинающих с уно + мотор шилд, запаял провода на движки подключил шилду, шилд насадил прямо на ардуино загрузил прогу ииии и у машинки колесча стали коутиться в разные стороны) отчего она нелепо каталась взад-вперед, перенил клемы и все стало -собака в восторге)))

  3. Дмитрий говорит:

    а какой стабилизатор напряжения использовался на схеме

  4. vernigor говорит:

    Уточните, зачем использовать Arduino Mega 2560? Можно ли схему реализовать на другом контроллере, скажем Arduino Leonardo (на mega32)?

    • source говорит:

      конкретно про Леонардо не скажу - в нем памяти мало. Если скетч влезет, то можно

  5. yamaxa говорит:

    Подскажите, не понял-для чего нужна серва- типа указатель-стрелка-куда будет ехать робот?

  6. MeHecTPeJlb говорит:

    Здравствуйте. Отличный проект! Собираю такого же, но пока на на 2 колесах. Вы запитали аппарат через клемник ext_pwr. Перемычка PWR в этом случае снимается? Какие элементы питания используете?

  7. Petr говорит:

    А можно подключить на один канал сразу два таких двигателя ( параллельно, чтобы работали идентично)?

    • source говорит:

      конечно, если суммарный ток потребления двигателей не превышает максимально допустимый ток на канале Motor Shield

  8. Александр говорит:

    Добрый день!
    Вы в своём проекте используете 2шт. Motor Shield L293D?
    И можно ли всё это реализовать на Arduino UNO?
    Спасибо.

    • source говорит:

      тут есть 2 проблемы: надо перепаивать выводы на втором шилде и переписывать библиотеку

      • Никита говорит:

        Но если перепаять, то можно, верно?

        • source говорит:

          не так понял ваш вопрос
          1 motor shield использую на 4 канала
          на UNO все должно пойти

          • Никита говорит:

            Из шилдов можно "этажерку" собрать? и как использовать остальные выходы ардуино?
            P.S. Я очень чайник, прошу сильно не пинать) спасибо)

  9. Никита говорит:

    Из шилдов можно «этажерку» собрать, припаяв второй к первому (контакты)? И как использовать остальные выходы ардуино, если сверху все закрыл shield?
    P.S. Arduino приобрел совсем недавно, посему прошу сильно не пинать

    • source говорит:

      Перепаяйте разъем, как это сделал я
      http://chingachgook.net/arduino/vedroid-mobil-robot-na-arduino-chast-3-podklyuchaem-bluetooth.html

  10. Алексей говорит:

    сделал все по этой схеме, только на ардуино уно. Возникла такая проблема - моторы не крутятся. Питание подаю отдельно на ардуино и отдельно на моторшилд. На ардуино 4 батарейки на 1,5 вольта на моторшилд 2 последовательно соединенные кроны. Можете подсказать в чем проблема? Похоже не хватает питания. В инете нашел описание подобных ситуаций, но решения нигде нет.

    • Тимур говорит:

      Аналогичная проблема. Что делать не понимаю.

      • source™ говорит:

        не хватает тока у ваших источников питания

        • Сыр говорит:

          Просто кроны не подходят. К ардуино дайте 5 вольт с средней ёмкостью от акамулятора, можно меньше 5(у меня 4.8), а СИЛОВОЕ ПИТАНИЕ лучше акамулятор на 7 вольт примерно, купите на радиорынке или подобном магазине. Кроны используют в местах где нужен сильный и короткий сигнал(пульт управления), а как питание для двигателей это и дорого и не работает как надо.

  11. саша говорит:

    хотел спросить и что бы видео посмотреть по подробнее что бы подключить к моторам на 24 вольта 250 ватт эту плату драйвер двигателя и ардуино,если подключить к ардуино там я как понял ардуино питается 5 вольт ,подключаем на верх плату драйвер двигателя и потом если я в 2 эти клеймы запущу напряжение 24 вольта 9 ампер или 12 ампер сгорит плата или нет и ардуино всё равно будет работать или тоже сгорит?будут ли при этом токе работать двигателя очень нужен ответ,и если так подключать нельзя то как так сделать что бы 24 вольта подключить для управления моторами мало,плавно,и быстро через такую плату или есть другая такая же плата но по мощьнее

    • MeHecTPeJlb говорит:

      Вот характеристики мотор шилда:
      L293D is a monolithic integrated, high voltage, high current, 4-channel driver?you can use DC motors and power supplies of up to 36 Volts, the L293D chip is also known as a type of H-Bridge?which is typically an electrical circuit that enables a voltage to be applied across a load in either direction to an output, e.g. motor.
      2 interface for 5V Servo connected to the Arduino's high-resolution dedicated timer - no jitter.
      Can drive 4 DC motors or 2 stepper motors or 2 Servo.
      Up to 4 bi-directional DC motors with individual 8-bit speed selection.
      Up to 2 stepper motors (unipolar or bipolar) with single coil, double coil or interleaved stepping.
      4 H-Bridges: per bridge provides 0.6A (1.2A peak current) with thermal protection, can run motors on 4.5V to 36V DC.
      Pull down resistors keep motors disabled during power-up.
      2 external terminal power interface, for seperate logic/motor supplies.
      Tested compatible for Arduino Mega, Diecimila & Duemilanove.
      reset button.
      Думаю платка погорит

  12. саша говорит:

    дак я не понял,тут написано что до 36 вольт можно подключить а мне 24 к мотор шилд нужно подключить 9 ампер часа,а саму ардуино я подключу отдельно на 5 вольт,сниму перемычку,тогда не сгорит или всё равно мотор шилд сгорит,очень нужно знать???если сгорит тогда как перепоять что бы выдерживала,моторы у меня есть на 24 вольта 9 или их даже можно 20 ампер часа подключить только хочу через мотор шилд подключить большого робота нужно сделать для работы

    • minotarius говорит:

      Всем чайникам на память. По схеме приведенной выше видно, что при указанном положении перемычки на Motor Shield можно подавать питание 7-12 В через разъем на Motor Shield если моторы позволяют. Питание логики идет через стабилизатор на плате Arduino 5 В. Если Ваши моторы допускают питание менее 7 В или более 12 В тогда перемычка ставится в другое положение и питание на Arduino и Motor Shield подается раздельно на каждую плату. Питание логики по прежнему идет 5 В с платы контроллера. Сила тока через моторы не должна превышать 0,6 А по паспортным данным ключей, напряжение не более 36 В.

      • Диз говорит:

        поставь на выход с шилда полевеки, например irf740 и питай моторы хоть от 220 вольт

  13. Flint говорит:

    На Motor Shield также используются вывод GND, который идет сразу же за D13, а если надо запитать плату Arduino от внешнего питания, то надо соединить еще вывод Vin.
    Также подтверждаю, что указанная схема прекрасно работает с платой Arduino UNO.

  14. Алексей говорит:

    Здравствуйте. Только начал знакомится с микроконтроллерами, очень нужно по работе. Подскачажите, ваш робот ездит без гироскопа? Просто поворот расчитывается от длины колёс?

    • source™ говорит:

      без - на тот момент его не было
      поворот просто длится определенное время

      • Алексей говорит:

        Это не точный угол получается? Насколько мне известно, гирокомпас довольно быстро сбивается. Как этого избежать, чтоб робот ехал по строгому углу?

        • source™ говорит:

          не подскажу. гироскоп с акселерометром валяется пока без дела - так и не проверил

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *