Ардуиныч

Ардуиныч - колесный 4х4 робот на базе Arduino
Начало истории - тут.


Четвертая версия робота.

Функционал:
1) три режима работы

  • управление по BT (направление и скорость движения, переключение в аторежим);
  • авторежим объезда препятствий;
  • повороты на заданный угол на основе показаний компаса;
2) индикация режима работы на графическом LCD мониторе;
3) вращающийся ультразвуковой датчик расстояния;
4) защита от столкновения при движении вперед;
5) постоянная скорость движения при падении напряжения аккумуляторов;
6) переключение кнопкой между режимами работы.

Шасси: четырехколесное, с четырьмя двигателями, двухпалубное. Для снижения помех по питанию параллельно контактам двигателей подключены керамические конденсаторы на 100 нФ.
Система питания:
  • аккумуляторы 8 штук Panasonic Enyloop AA (1,2 x 8 = 9,6 вольт);
  • отдельный блок питания для двигателей постоянного тока и сервопривода (9,6 -> 5,5 вольт);
  • отдельный сдвоенный блок питания 5/3,3В на макетную плату (экран, BT-модуль, ультразвуковой датчик расстояния и пр.);
  • тумблер выключения линии “+”;
  • разъемы для подзарядки аккумуляторов без изъятия из шасси.
Мозги: Arduino Mega 256 (китайский аналог) - использована из-за большого количества контактов.
Прочее: драйвер на 4 двигателя постоянного тока и 2 сервопривода, ультразвуковой датчик расстояния HC-SR04, bluetooth модуль HC-05, экран от Nokia 5110, компас HMC5883L, светодиод, резисторы 220 Ом и 10 кОм, тактовая кнопка и вязанка проводов.

На что обратить внимание при сборке:
1) все двигатели вносят большие помехи по питания. По этой причине использованы три блока питания (один встроен в плату управления);
2) компас сильно капризный - нужно крепить горизонтально и на максимальном расстоянии от других элементов (чтобы снизить наводки);
3) по умолчанию драйверы мотор питают сервоприводы не от отдельного питания, а от линии 5В платы управления. Это приводит к частым перезагрузкам платы управления из-за проседания напряжения. Для предотвращения этого положительный разъем питания сервоприводов следует подключать к отдельному блоку питания;
4) подзарядку аккумуляторов без изъятия из шасси можно делать только тогда, когда цепь между зарядным устройством и блоками питаниями робота (в т.ч. на плате управления) разомкнута (см. про тумблер выше).

arduinich

Пояснения к фото. BT модуль торчит из-под экрана. Левые линии блока питания макетной платы дают 3,3 вольта, правые - 5 вольт. Компас закреплен в самой правой части нижней палубы, надобы его заэкранировать. Блок питания двигателей расположен в левой части нижней палубы, под ультразвуковым датчиком. Красная и черная клемы по центру сверху используются для зарядки аккумуляторов.



Пояснения к коду:

  • когда не нужно вращать ультразвуковым датчиком, сервопривод отключается командой servo.detach(). Без этого сервопривод будет кушать энергию и тихонько “дрожать”, поддерживая заданный угол поворота;
  • реализован механизм защиты от столкновения при движении вперед - при приближении препятствия ближе, чем установленное расстояние, загорается светодиод и останавливаются двигатели. Почему-то при управлении по BT во время движения вперед на удалении около 60-70 сантиметров от препятствия начинается серия ложных срабатываний системы предотвращения столкновения - робот движется рывками. Проблема решилась двойным измерением расстояния и использованием в дальнейших расчетах большего значения. Вероятно, причина либо в наводках по питанию или в глюках конкретного ультразвукового датчика;
  • при движении вперед сервопривод поворачивается на 80 градусов, что обусловлено перекосом крепления ультразвукового датчика конкретно у моего робота;
  • взаимодействие с компасом пока в тестовом режиме - практического значения не имеет.


Третья версия робота
Описана тут.