YABR: самобалансирующийся робот на шаговых моторах

Примечание

Автор проекта и всех материалов: J.M. Brokking (Joop Brokking), brokking.net. Ниже подробный пересказ его страниц и его файлы без изменений. Оригиналы: главная, Q&A, загрузки, медиа; копии в Wayback Machine.

YABR (Your Arduino Balancing Robot) — самобалансирующийся робот для школьного проекта или совместной сборки с детьми. Отличие от большинства таких роботов: шаговые двигатели вместо моторов постоянного тока. Шаговик точен (один импульс — один шаг) и не теряет характеристик при падении напряжения батареи, а у обычных моторов трение и сопротивление различаются, из-за чего робот не едет прямо. Стоимость у автора около 80 долларов с батареей, джойстиком Nunchuck и зарядкой. Программа написана автором с нуля, не основана на чужом ПО, подробно прокомментирована.

Файлы

Железо (список автора)

  • 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, поэтому здесь только ссылки, они открываются в новой вкладке). Копия всех файлов хранится у нас в архиве.