Блог о программировании, электронике и рыбалке

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

Главная » Arduino » Ведроид-мобиль — робот на 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 332 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.

logo
Просмотров: 33 789
1 Star2 Stars3 Stars4 Stars5 Stars (13 votes, average: 4,85 out of 5)
Загрузка...

37
  • Вадим:

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

    • source™:

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

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

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

  • Олег:

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

  • Дмитрий:

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

  • vernigor:

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

    • source:

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

  • yamaxa:

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

  • MeHecTPeJlb:

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

    • MeHecTPeJlb:

      Автор меня игнорирует?

      • source:

        перемычка остается
        использую 4 штуки аккумуляторов 18650

        • MeHecTPeJlb:

          Спасибо за ответ! Очень вовремя. Жду как раз 8 штук 18650 на 5300 с зарядкой. Все остальное уже собрал. Как надолго хватает 4 аккумуляторов?

  • Petr:

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

    • source:

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

  • Александр:

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

    • source:

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

      • Никита:

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

        • source:

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

          • Никита:

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

  • Никита:

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

    • source:

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

  • Алексей:

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

    • Тимур:

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

      • source™:

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

        • Сыр:

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

  • саша:

    хотел спросить и что бы видео посмотреть по подробнее что бы подключить к моторам на 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.
      Думаю платка погорит

  • саша:

    дак я не понял,тут написано что до 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 вольт

  • Flint:

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

  • Алексей:

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

    • source™:

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

      • Алексей:

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

        • source™:

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

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

Яндекс.Метрика