YABR: самобалансирующийся робот на шаговых моторах
Примечание
Автор проекта и всех материалов: J.M. Brokking (Joop Brokking), brokking.net. Ниже подробный пересказ его страниц и его файлы без изменений. Оригиналы: главная, Q&A, загрузки, медиа; копии в Wayback Machine.
YABR (Your Arduino Balancing Robot) — самобалансирующийся робот для школьного проекта или совместной сборки с детьми. Отличие от большинства таких роботов: шаговые двигатели вместо моторов постоянного тока. Шаговик точен (один импульс — один шаг) и не теряет характеристик при падении напряжения батареи, а у обычных моторов трение и сопротивление различаются, из-за чего робот не едет прямо. Стоимость у автора около 80 долларов с батареей, джойстиком Nunchuck и зарядкой. Программа написана автором с нуля, не основана на чужом ПО, подробно прокомментирована.
Файлы
YABR.zip (версия 1.1 с гиро-данными)— три скетча:YABR_hardware_test,Balancing_robot(программа робота),Balancing_robot_remote(пульт); схемы робота и пульта (PDF); чертёж деталей рамы (PDF);ReadMe.txt(версия 1.0 от 10.05.2016, версия 1.1 от 06.06.2016: в схеме исправлено подключение вывода FAULT драйвера DRV8825, раньше он был подключён на +5 В; ПО проверено на Arduino IDE 1.0.6 и 1.8.2).MPU-6000 Manual (InvenSense, PDF),MPU-6000 Register Map (InvenSense, PDF)
Железо (список автора)
Arduino Pro Mini (клон) для робота + FTDI USB-TTL программатор;
Arduino Uno (клон) для пульта;
MPU-6050;
два беспроводных модуля 2,4 ГГц с последовательным интерфейсом;
два шаговых двигателя 35 мм (если нет в наличии, можно 42 мм, но рама меняется);
два драйвера Geeetech StepStick DRV8825;
проводной Nunchuck от Wii;
понижающий преобразователь 7–28 В → 5 В;
LiPo 11,1 В 2200 мАч 30C и зарядное с балансировкой;
резисторы, макетная плата из стеклотекстолита, переключатель;
старая велосипедная камера (для шин), две фанерные пластины (2,5 мм и 12,5 мм).
Инструменты: паяльник, отвёртки, лобзик, мини-дрель.
Сборка
Диод и резисторы. R1 нужен для прошивки: выход TXD радиомодуля принудительно держит уровень, и FTDI не может его изменить, что вызвало бы ошибку загрузки; резистор позволяет программатору менять напряжение на входе RX несмотря на модуль. R2 и R3 — делитель: 12,6 В минус 0,6 В на диоде делится на 2,5, получается 4,8 В на аналоговом входе при полном заряде; программа использует это для защиты батареи (LiPo портится при напряжении ниже 3 В на банку). Диод D1 защищает от переполюсовки.
MPU-6050. Единственный поддерживаемый датчик. Ориентация критична: ставить точно как на рисунке автора, иначе программа не сможет посчитать угол.
Проверка железа. Пайка делается с обратной стороны платы, а схема нарисована со стороны компонентов, поэтому всё зеркально: проверьте все соединения до подачи питания. Подключить FTDI к Pro Mini без батареи: если светодиоды не светятся, короткое замыкание, немедленно отключить. Залить YABR_hardware_test, монитор порта на 9600 бод: программа проверит, есть ли устройство I2C и является ли оно MPU-6050, и выведет сырые значения. Нужно зафиксировать робота на подставке в положении равновесия и записать значение баланса (калибровочное значение акселерометра) для основной программы.
Ограничение тока моторов. Слишком большой ток нагревает драйверы и может повредить их. Выставить потенциометры по рисунку автора. Осторожно подключать LiPo первый раз: короткое замыкание даёт большие токи, искры и ожоги. Лучше поставить плавкий предохранитель постоянного тока. Самый безопасный способ — лабораторный блок питания с ограничением 500 мА: подключить один мотор и подстроить потенциометром ток 100–150 мА (этого достаточно), затем второй. Без прибора можно выставить потенциометры по рисунку и на ощупь проверить, не перегревается ли драйвер.
Пульт. Вскрыть Nunchuck и записать цвета проводов по схеме. Nunchuck работает от 3,3 В (можно взять с Arduino Uno), радиомодуль питается от 5 В. В тесте железа проверяется, есть ли на I2C Nunchuck, и выводятся сырые значения джойстика.
Загрузка и запуск
На Uno залить Balancing_robot_remote (не требует изменений), на Pro Mini — Balancing_robot, где нужно вписать записанное значение баланса акселерометра. Включить пульт, положить робота на спину, включить питание: светодиод мигает, пока гироскоп калибруется. Когда мигание прекратилось, медленно поднять робота — он начнёт балансировать сам. Управление джойстиком Nunchuck.
Q&A автора
Робот вращается не на месте, а описывает всё большие круги. Не у всех датчиков ось точно совпадает с осью робота (допуски платы). Нужна очень малая компенсация: в программе робота раскомментировать строку компенсации угла по сырому значению рыскания гироскопа (множитель порядка 0,0000003), попробовать знак плюс/минус.
Загрузки на странице автора
Полный пакет YABR, схемы робота и пульта, чертёж рамы, таблица Excel, а также документация InvenSense на MPU-6000 (руководство и карта регистров; это сторонние документы производителя, они приложены выше).
Видео автора (YouTube)
Видео проекта на канале автора MacPuffdog: плеер ведёт на оригинал, ролики лежат у автора.
Фото на сайте автора
Фотографии и рисунки к проекту лежат на сервере автора (у сайта нет HTTPS, поэтому здесь только ссылки, они открываются в новой вкладке). Копия всех файлов хранится у нас в архиве.