Как собрать робота и заставить двигаться?

При разработке гусеничного робота я столкнулся с некоторыми трудностями и мне в голову пришла идея разделить разработку на блоки: управляющая часть и гусеничная платформа со своим набором команд. Обладая платформой, разработка управляющей части упростится и не будет так сильно связана с механической частью.

В этом проекте я расскажу о том, как создать такую платформу.

Гусеничная платформа обладает следующими возможностями:

  • управление платформой посредством программного интерфейса (API)
  • связь с платформой по Bluetooth и UART
  • питание от аккумулятора платформы
  • грузоподъемность — 7 кг

Программный интерфейс

Управление платформой осуществляется посредством передачи текстовых команд в формате JSON.  Команды принимаются по обоим каналам связи — как по UART, так и по Bluetooth. Реализованы команды:

  • движения вперед/назад,
  • поворота налево/направо,
  • остановки, установки мощности двигателей по отдельности,
  • получение уровня заряда аккумулятора,
  • установки имени/скорости/пароля модуля Bluetooth,
  • получение версии прошивки/API.

Пример команд:

{"cmd":"Back","req":"1234","prm":[{"spd":10}]}; - Движение назад со скоростью 10% от максимальной. 
{"cmd":"Forward","req":"1234","prm":[{"spd":10}]}; - Движение вперед со скоростью 10% от максимальной. 
{"cmd":"Left","req":"1234"}; - Поворот на месте налево 
{"cmd":"Right","req":"1234"}; - Поворот на месте на право 
{"cmd":"MotorPower","req":"1234","prm":{"left":10,"right":10}}; - Установка на левый и правый двигатель по 10% скорости. 
{"cmd":"Stop","req":"1234"}; - Остановка платформы 
{"cmd":"GetFirmwareVersion","req":"1234"}; - Получение версии прошивки 
{"cmd":"GetAPIVersion","req":"1234"}; - Получение версии API. 
{"cmd":"GetBatteryCharge","req":"1234"};  - Получение уровня заряда аккумулятора в процентах. 

При передачи команд можно указывать номер команды. После исполнения команды платформа присылает результат исполнения команды с номером команды. По ответу можно судить об успешности выполнения команды.

Пример:

{«req»:»1234″,«rst«:»OK«}

Каналы связи

Соединиться с роботом возможно по двум каналам связи: Bluetooth и UART. Первый используется скорее для проверки возможностей платформы. UART же более практичен, потому что, скорее всего, управляющее устройство будет соединено с гусеничной платформой проводами. Обмен данными происходит при скорости 9600 бит/с.

Контакты RX  и TX выведены на отдельный порт платформы вместе с выводами питания.

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

 

Питание платформы

На борту установлены 3 аккумулятора типоразмера 18650. Суммарная емкость батареи зависит от установленных элементов. Зарядка осуществляется от блоков питания в 12 вольт. Для подключения используется штекер 5.5*2.1.

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

На внешний порт выведены контакты с напряжением:

  • 3,3 В — максимум 40 мА. Подключен к микроконтроллеру, потому не рекомендуется подключать нагрузку более 40 мА.
  • 5 В — максимум 3 А.
  • 12 В — максимум 28 А.

Для контроля уровня заряда можно воспользоваться установленном в корпус индикатором заряда.

 

Корпус

За основу платформы взято довольно популярное гусеничное шасси DAGU Rover 5. Данное шасси снабжено четырьмя моторами, четырьмя энкодерами. Позволяет изменять клиренс. Дополнительным плюсом является наличие катушек индуктивности, которые производят плавный пуск моторов и снижают нагрузку на цепь.

Верх корпуса распечатан на 3D принтере и состоит из трех частей. При этом обязательна только одна. Остальные необходимы для установки дополнительного оборудования.

 

Сборка робота

Сборку робота можно представить в следующей последовательности:

  1. Сборка электронной платы
  2. Установка платы на шасси Rover 5 и подключение моторов
  3. Установка индикатора заряда в крышку корпуса
  4. Подключение индикатора заряда к плате
  5. Установка верхней части корпуса
  6. Заливка прошивки микроконтроллера

1 — Сборка электронной платы

Электронная плата представляет собой двухстороннюю электронную плату. Схема платы для программы Sprint Layout 6 представлена на GitHub.

Для сборки платы нужны следующие компоненты:

Шасси AliExpress
Аккумуляторы AliExpress
Драйвер двигателя AliExpress
Защита аккумулятора AliExpress
Bluetooth AliExpress
Микроконтроллер AliExpress
Держательбатарей AliExpress
Корпус
Индикатор заряда AliExpress
Зарядное устройство AliExpress
Разьем питания 5.5*2.1 мм AliExpress
Коннектор 2,54 15 pin AliExpress
Коннектор 2,54 2 pin AliExpress
Коннектор 2,54 4 pin AliExpress
Коннектор 2,54 6 pin AliExpress
Коннектор 2,54 8 pin AliExpress
Печатная плата AliExpress
Разъем силовой 2,54 3 pin AliExpress
Разъем силовой 3,96 3 pin AliExpress
Кабель питания AliExpress
Оптопара AliExpress
Разьем 2х10 pin AliExpress
Разъем силовой 2,54 2 pin AliExpress
Выключатель AliExpress
Резистор 3,3 кОм AliExpress
Резистор 4,7 кОм AliExpress
Резистор 330 Ом AliExpress
Контакты 2,54 40pin AliExpress
Понижающий до 5 В преобразователь AliExpress
Светодиод AliExpress

Процесс пайки запечатлен на видео:

 

2 — Установка платы на шасси Rover 5 и подключение моторов

Берем гусеничное шасси DAGU Rover 5.

Устанавливаем на шасси крыло от корпуса. Оно предназначено для установки различного оборудования, например сонаров.

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

Установим датчик зарядки аккумуляторов и подключим к плате. Датчик определяет уровень заряда аккумулятора и в зависимости от уровня зажигает нужное количество светодиодов на панели. При уровне заряда 100% горят все светодиоды. При 75 %только три. И так далее.

Устанавливаем крышку и прикручиваем к шасси.

Робот собран.

Прошивка микроконтроллера

Сборка завершена, но пока наш робот ничего не умеет делать. Для того что бы он стал думать, его надо прошить. Можно воспользоваться любым загрузчиком для Arduino. Я использую http://xloader.russemotto.com/

Для прошивки нужно:

  1. Скачать файл прошивки из репозитория.
  2. Подключить компьютер к плате через разъем USB
  3. Запустить  приложение XLoader
  4. Указать путь к файлу прошивки и выбрать COM платы
  5. Нажать кнопку Upload

Включать робота при это не обязательно, прошивка зальется даже если робот выключен.

Первый запуск

Для проверки работоспособности есть режим машинки на пульте управления. Для этого написано приложение на Android, а подключение происходит по Bluetooth.  Исходники приложения доступны по ссылке https://github.com/ghostaz/robotyaga/tree/master/Приложение. Приложение написано в Qt 5. Бинарный файл вы найдете по ссылке https://github.com/ghostaz/robotyaga/blob/master/Приложение/Роботяга.apk

Итак, запускаем приложение. При запуске разрешаем использование Bluetooth.

Выбираем HC-06. Естественно, робот должен быть включен. «НС-06» — это имя bluetooth модуля, его можно изменить, так же, как и пароль. Подключение может пройти не сразу и может занять некоторое время. После подключения откроется окно с джойстиком для управления роботом.

Видео этого процесса:

Пример использования

Ну а теперь используем платформу по назначению. В этом примере мы подключим к платформе Arduino UNO и заставим ее двигаться.

Сначала установим на платформе плату Arduino UNO. Для этого на корпусе есть специальные отверстия, в которые установим крепления.

 

Далее прикрутим плату Ardunio.

Подключаем Arduino к платформе. Для этого нужно 4 провода — 2 провода питания и 2 на UART. Контакты на платформе подписаны. Для питания нужны контакты 5V и GND, а для UART RX и TX. Причем контакт RX на платформе надо подключать к TX на Arduino, а TX на платформе к RX на Arduino.

Скетч для Arduino будет простой — мы передадим платформе команду движения «вперед», потом «стоп», потом «назад» и потом снова «стоп». Передавать их будем через Serial.

void setup() { 
    Serial.begin(9600); 
}

void loop() { 
    Serial.print("{\"cmd\":\"MotorPower\",\"req\":\"1234\",\"prm\":{\"left\":20,\"right\":20}};");
    delay(500);
    Serial.print("{\"cmd\":\"Stop\",\"req\":\"1234\"};");
    delay(500);
    Serial.print("{\"cmd\":\"MotorPower\",\"req\":\"1234\",\"prm\":{\"left\":-20,\"right\":-20}};");
    delay(500);
    Serial.print("{\"cmd\":\"Stop\",\"req\":\"1234\"};");
    delay(1000);
}

При заливке прошивки провода UART надо отсоединить.

А вот что получилось:

 

Само собой данный пример не раскрывает всех возможностей гусеничной платформы Роботяга, но показывает что движение это просто. Даже если какой функционал отсутствует, есть возможность самому написать прошивку под ваши нужды, ведь платформа создана из распространенных компонентов на основе Arduino.