Создание Arduino Ant Hexapod-робота: пошаговое руководство
В этом уроке я покажу, как построил Arduino-гексапода. У него 6 ног, а также хвост (абдомен), голова, усики, хелицеры и функциональные «глаза» — ультразвуковой датчик. Всё это делает его похожим на муравья, поэтому проект называется Arduino Ant Robot. Смотрите видео или читайте текстовый урок ниже. Управление — через самописное Android-приложение (4 кнопки: вперёд, назад, влево, вправо). Дополнительно: движение головы и хвоста, захват/броск предметов, атака. «Глаза» — HC-SR04: при приближении руки робот готовится к атаке, при удалении — отменяет, при большем приближении — атакует и кусает. Проектировал в CAD. 6 ног × 3 сустава = 18 сервоприводов MG996R. Хвост — 1 MG996R. Голова: 2 DOF (крен и тангаж) — 2 MG996R. Итого 21 серво MG996R + 1 микросерво SG90 для хелицер. Голова рассчитана под HC-SR04. Все детали между двумя пластинами, верхняя закрыта изогнутым чехлом для скрытия проводки, Arduino и батареи. STL-файлы и 3D-модель на Thangs. Печатал на Creality CR-10. Самая сложная деталь — голова (один кусок). Пришлось использовать угол оверханга 60° и блокеры поддержек. Результат отличный. Ноги: крепление серв M3 болтами/гайками с пружинными шайбами (болты 16 мм). ~200 болтов всего. Соединительные звенья — круглые рожки от серв (пробить 3 мм или купить металлические с M3 резьбой). Важно: устанавливать звенья в одинаковое положение для полного хода. У серв снимать треугольные выступы сверху ножом для плотного прилегания. Перед третьим серво вставляем M4 болт для крепления ноги к базе. Установка ног на корпус: рожки на верхнюю пластину, соединяем с валами серв (предварительно центрируем сервы для полного хода и упрощения калибровки). Крепим рожок для хвостового серво. Переворачиваем, вставляем нижнюю пластину на M4 болты ног, фиксируем шайбами и самофиксирующимися гайками. Не затягивать сильно — ноги должны вращаться. Голова: серво крен (перпендикулярно базовым пластинам) на двух маленьких пластинах. U-образный кронштейн с двумя рожками для серв головы. Кронштейн тангажа: M4 болт в U-образный кронштейн, 4 M3 болта под голову, серво вставляется с лёгким изгибом кронштейна. Голова креняется и тангажирует. Предсборка головы: хелицеры на SG90, ультразвуковой датчик в «глаза» (AC клей), усики из 3 мм проволоки (13 см, слегка согнуты, AC клей). Крепим голову на 4 болта. 22 сервопривода, HC-05 Bluetooth, конденсаторы, резисторы. Мозг — Arduino Mega (единственная плата, управляющая >12 серв через библиотеку Servo). Питание: 3S LiPo (~12 В, высокий ток). Сервы требуют 4.8–7.2 В → нужен DC-DC buck converter 12В→5В (рекомендую 10–15 А, пик тока ~6 А). Много проводов → кастомная PCB в EasyEDA (’Arduino Mega Shield’). Гнезда серв сгруппированы, большие конденсаторы для стабильности. Разъём для NRF24L01 (радиоуправление), цифровые/аналоговые пины, 5V/GND, 2 LED, мониторинг батареи через делитель напряжения (R1, R2) на аналоговый вход. Заказ у JLCPCB (спонсор), синяя маска. Качество отлично. Паяем pin-распайки (мальчики) на нижнюю сторону для вставки в Mega. Переворачиваем на пластине, паяем. Затем гнезда серв, резисторы, конденсаторы, клеммники. Шилд готов, вставляем в Mega. Настраиваем buck converter на 5В (потенциометр). Переключатель питания на входе, 12В на пин мониторинга. Вставляем электронику между пластинами: батарея (скотч), Arduino+шилд, NRF24L01 или HC-05, LED индикатора разряда (<11В). Подключаем все 22 серво (записываем нумерацию пинов!). Накрываем изогнутым чехлом. Готово. Библиотеки: Servo, SoftwareSerial (Bluetooth). 22 объекта Servo + переменные. В setup(): Bluetooth 38400 бод, пины ультразвука, LED, привязка серв к пинам (22–45). Инициализация начальных позиций — здесь калибровка. Прямая/обратная кинематика — сложная математика, сервы дешёвые (не точные, слабый крутящий момент). Использую простой метод: для каждой ноги функция moveLeg() с циклами swing (перенос ноги в воздухе) и stance (опора, толкание корпуса). Ручной подбор позиций серв через счётчики в главном цикле. 6 ног: 1,3,5 в swing — 2,4,6 в stance (фазы сдвинуты). Назад/повороты — аналогичные функции с обратными углами. Команды приходят по Bluetooth из Android-приложения. Графика — изображения-кнопки. Слайдер скорости, кнопки подключения Bluetooth. Блоки: нажатие «Вперёд» → отправка «2» → запуск move-функций, смена картинки кнопки на нажатую. Повторное нажатие → «0» → стоп, возврат картинки. Аналогично для остальных кнопок. Файлы проекта и APK для скачивания. Логика атаки: att=1 — подготовка, ждём 2 сек, если дистанция >30 — отмена (att=2), если <30 — атака (att=3). att=2 — dismissAttack(), att=3 — attack() с задержками. Полный код доступен для скачивания. Главная проблема — слабые сервы MG996R (недостаточный момент, неточная позиция). Надеюсь, понравилось. Вопросы в комментариях!Обзор


3D-модель гексапода



3D-печать деталей


Сборка гексапода

















Электрическая схема

Компоненты
PCB-шилд для Arduino Mega




Сборка PCB



Код гексапода
#include <Servo.h> #include <SoftwareSerial.h>
#define trigPin 7 #define echoPin 6 #define ledB 10
SoftwareSerial Bluetooth(12, 9); // Arduino(RX, TX) - HC-05(TX, RX)
Servo s24; Servo s23; Servo s22; // ... всего 22 серво
void setup() {
Serial.begin(38400); Bluetooth.begin(38400); Bluetooth.setTimeout(1); delay(20);
pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(ledB, OUTPUT);
// Head
s15.attach(36, 600, 2400); s14.attach(35, 600, 2400); s13.attach(34, 600, 2400);
// Grip (mandibles) s5.attach(26, 600, 2400);
// Tail s5.attach(26, 600, 2400); // (примечание: в оригинале дубликат, проверьте пины)
// Legs 1-6: по 3 серво каждая на пинах 22-45
// ... attach для всех ног ...
// Начальные позиции (калибровка):
s15.write(72); s14.write(50); s13.write(90); s5.write(65);
s10.write(65); s11.write(35); s12.write(40); // Leg 4
s7.write(80); s8.write(50); s9.write(25); // Leg 5
s1.write(90); s2.write(45); s3.write(60); // Leg 6
s18.write(60); s17.write(90); s16.write(100); // Leg 1
s21.write(50); s20.write(85); s19.write(75); // Leg 2
s24.write(50); s23.write(80); s22.write(80); // Leg 3
}Алгоритм ходьбы

void moveLeg1() {
// Swing phase
if (i1L1 <= 10) { s18.write(60 - i1L1 * 2); s17.write(90 - i1L1 * 3); i1L1++; } // Подъём
if (i2L1 <= 30) { s16.write(100 - i2L1); i2L1++; } // Поворот
if (i2L1 > 20 && i3L1 <= 10) { s18.write(40 + i3L1 * 2); s17.write(60 + i3L1 * 3); i3L1++; } // Опускание
// Stance phase
if (i2L1 >= 30) { s16.write(70 + i4L1); i4L1++; l1status = HIGH; } // Возврат поворота
if (i4L1 >= 30) { i1L1=i2L1=i3L1=i4L1=i5L1=0; } // Сброс счётчиков
}if (m == 2) { // Forward
moveLeg1(); moveLeg3(); moveLeg5();
if (l1status == HIGH) { moveLeg2(); moveLeg4(); moveLeg6(); }
}if (Bluetooth.available() > 0) { dataIn = Bluetooth.read(); }Android-приложение (MIT App Inventor)



Мониторинг батареи и ультразвук
int sensorValue = analogRead(A3);
float voltage = sensorValue * (5.00 / 1023.00) * 2.9;
if (voltage < 11) digitalWrite(ledB, HIGH); else digitalWrite(ledB, LOW);if (getDistance() > 40) att = 0;
if (getDistance() <= 40) { att = 1; dataIn = 99; }if (att == 1) { prepareAttack(); if (aStatus == HIGH) { while(a==0){delay(2000);a=1;} if(getDistance()>30){att=2;a=0;aStatus=LOW;initialPosHead();} if(getDistance()<30){att=3;a=0;aStatus=LOW;initialPosHead();}}}
if (att == 2) { dismissAttack(); if(aStatus==HIGH){dataIn=0;att=0;}}
if (att == 3) { attack(); if(attStatus==HIGH){while(aa==0){delay(2000);aa=1;}attStatus=LOW;} if(aStatus==HIGH){while(a==0){delay(2000);a=1;}dataIn=0;att=0;initialPosHead();}}}
Производственный процесс
- Создание Bluetooth-робота на Raspberry Pi с аудио-обратной связью
- Робот-ускользатор на сервоприводе: сборка на Arduino и HC-SR04
- Автономный линий-следующий робот на Arduino UNO
- Управление Roomba Create 2 через Arduino и Android: пошаговое руководство
- Голосовой робот на Arduino Nano: Управление речью через Bluetooth
- PiBot: Робот-пианист на Arduino для точного исполнения музыки
- LittleArm 2C: 3D-печатаемый робот-манипулятор на Arduino для STEM-обучения
- Автономный домашний помощник-робот: полный список деталей и руководство по настройке (ROS, Alexa, MoveIt)
- Управление манипулятором LittleArm через Android-приложение по Bluetooth
- Набор для создания робота с умной внутренней навигацией на базе Arduino