MobBob: Самостоятельная сборка Arduino-робота под управлением Android-смартфона
Компоненты и материалы
- Arduino Nano R3 — 1 шт.
- Bluetooth-модуль HC-05 — 1 шт.
- Сервоприводы SG90 — 4 шт. (2 на бедра, 2 на стопы)
- Короб для 4×АА батарей — 1 шт.
- АА батарейки — 4 шт.
Инструменты
- Паяльник
- 3D-принтер
Программное обеспечение
- Arduino IDE
Описание проекта
MobBob — робот, управляемый смартфоном. Используя вычислительную мощность телефона, MobBob ходит, говорит, распознает речь и обладает компьютерным зрением.
- 3D-модели для печати: Thingiverse
- Android APK: APKPure
В коде необходимо:
- Обновить номера пинов под свою сборку.
- Скорректировать центральные, минимальные и максимальные значения сервоприводов.
- Установить
FRONT_JOINT_HIPSв 1 или -1 в зависимости от ориентации серв бедер (1 — оси смотрят вперед, как у автора).
Код (Arduino)
Полный скетч с системой анимаций и парсером команд по Bluetooth (SoftwareSerial). Поддерживает команды: проверка связи (<OK>), прямая установка серв (<SV,time,hipL,footL,hipR,footR>), остановка (<ST>, <SI>), ходьба вперед/назад/повороты (<FW>, <BW>, <LT>, <RT>), анимации: качание головой (<SX>), прыжки (<BX>), шачок (<WX/WY/WZ>), тычки ногами (<TX/TY/TZ>), дрожание ногами (<LX/LY/LZ>). Система ставит команды в очередь (размер 1) и сообщает о завершении через Serial.
/* MobBob Control Program - Software Serial Bluetooth Version
* by Kevin Chan (Cevinius)
* ... (длинный комментарий с описанием протокола и структуры анимаций) ...
*/
#include <Servo.h>
#include <SoftwareSerial.h>
#define SERIAL_SPEED 115200
const int rxPin = 11, txPin = 12;
SoftwareSerial softwareSerial(rxPin, txPin);
const int SERVO_LEFT_HIP = 5, SERVO_LEFT_FOOT = 2;
const int SERVO_RIGHT_HIP = 3, SERVO_RIGHT_FOOT = 4;
#define FRONT_JOINT_HIPS 1
// Калибровка сервоприводов (микросекунды)
const int LEFT_HIP_CENTRE = 1580, LEFT_HIP_MIN = 1080, LEFT_HIP_MAX = 2080;
const int LEFT_FOOT_CENTRE = 1410, LEFT_FOOT_MIN = 910, LEFT_FOOT_MAX = 1910;
const int RIGHT_HIP_CENTRE = 1500, RIGHT_HIP_MIN = 1000, RIGHT_HIP_MAX = 2000;
const int RIGHT_FOOT_CENTRE = 1465, RIGHT_FOOT_MIN = 965, RIGHT_FOOT_MAX = 1965;
// Вспомогательные функции для удобного расчета позиций
int LeftHipCentre() { return LEFT_HIP_CENTRE; }
int LeftHipIn(int ms) { return LEFT_HIP_CENTRE + (FRONT_JOINT_HIPS * ms); }
int LeftHipOut(int ms) { return LEFT_HIP_CENTRE - (FRONT_JOINT_HIPS * ms); }
int RightHipCentre() { return RIGHT_HIP_CENTRE; }
int RightHipIn(int ms) { return RIGHT_HIP_CENTRE - (FRONT_JOINT_HIPS * ms); }
int RightHipOut(int ms) { return RIGHT_HIP_CENTRE + (FRONT_JOINT_HIPS * ms); }
int LeftFootFlat() { return LEFT_FOOT_CENTRE; }
int LeftFootUp(int ms) { return LEFT_FOOT_CENTRE - ms; }
int LeftFootDown(int ms) { return LEFT_FOOT_CENTRE + ms; }
int RightFootFlat() { return RIGHT_FOOT_CENTRE; }
int RightFootUp(int ms) { return RIGHT_FOOT_CENTRE + ms; }
int RightFootDown(int ms) { return RIGHT_FOOT_CENTRE - ms; }
// Массивы ключевых кадров анимаций (ходьба, повороты, танцы)
// Формат: { tween_ms, leftHip, leftFoot, rightHip, rightFoot }
// -1 означает "не менять этот сервопривод в этом кадре"
// Первый элемент — метаданные: { numFrames, 0,0,0,0 }
// ... (здесь опущены огромные массивы анимаций для краткости, см. исходник) ...
// Парсер команд и машина состояний анимаций
// ... (полный код парсера и движка анимаций) ...
void setup() {
softwareSerial.begin(SERIAL_SPEED);
servoLeftHip.attach(SERVO_LEFT_HIP, LEFT_HIP_MIN, LEFT_HIP_MAX);
servoLeftFoot.attach(SERVO_LEFT_FOOT, LEFT_FOOT_MIN, LEFT_FOOT_MAX);
servoRightHip.attach(SERVO_RIGHT_HIP, RIGHT_HIP_MIN, RIGHT_HIP_MAX);
servoRightFoot.attach(SERVO_RIGHT_FOOT, RIGHT_FOOT_MIN, RIGHT_FOOT_MAX);
setup_Parser(); setup_Animation();
}
void loop() { loop_Parser(); loop_Animation(); }
Примечание: Полный исходный код очень объемен (около 800 строк). Он содержит массивы анимаций, парсер последовательного протокола и движок плавной интерполяции сервоприводов. Скачайте полный скетч из оригинального проекта.
Схема подключения

Производственный процесс
- Создание Bluetooth-робота на Raspberry Pi с аудио-обратной связью
- Сделай свой LUMAZOID: DIY Arduino музыкальный визуализатор
- Цифровые кости на Arduino: генератор случайных чисел с LCD-дисплеем и кнопкой
- Создание рулетки на 37 светодиодов с Arduino Nano
- Умный вольтметр на Arduino и смартфоне — простое DIY-проект
- Голосовой робот на Arduino Nano: Управление речью через Bluetooth
- PiBot: Робот-пианист на Arduino для точного исполнения музыки
- NeoPixel Matrix Pong на Arduino Nano: неоновая игра Pong на матрице 15×10
- DIY манипулятор, управляемый жестами руки: пошаговая сборка на Arduino
- Сборка 4-колесного робота на Arduino UNO с управлением через приложение Dabble