Робот Джой: Умный робот на Arduino и ESP8266 для развлечения детей в больницах
Компоненты и расходные материалы
| Arduino UNO | × | 1 |
| Espressif ESP8266 ESP-01 | × | 1 |
| Сервопривод SG90 (микро) | × | 6 |
| DC-мотор с редуктором и резиновыми колесами | × | 2 |
| Драйвер L298N (H-мост) | × | 1 |
| Adafruit 16-канальный 12-битный PWM/серво драйвер (PCA9685, I2C) | × | 1 |
| MAX7219 8x8 LED-дисплей | × | 4 |
| SparkFun Dual H-Bridge L298 | × | 1 |
| Аккумулятор 18650 | × | 2 |
| Корпус для 18650 | × | 2 |
| Arduino Proto Shield | × | 1 |
| Диод 1N4001 | × | 1 |
| Резистор 10 кОм | × | 3 |
Необходимые инструменты и станки
- 3D-принтер
Приложения и онлайн-сервисы
- Autodesk Fusion 360
- Arduino IDE
- Android SDK
О проекте
Первое место в Instructables Wheel Contest, второе место в Arduino Contest, финалист Design for Kids Challenge. Спасибо всем, кто голосовал!
Страница проекта на Instructables
Роботы проникают везде: от промышленности до подводной и космической разведки. Но мои любимые — это роботы для развлечения! Этот DIY-робот создан для работы в детских больницах, чтобы приносить радость маленьким пациентам. Проект фокусируется на обмене знаниями и продвижении технологических инноваций для помощи НКО, работающим в детских больницах.
В этом руководстве показано, как спроектировать дистанционно управляемого гуманоидного робота, управляемого по Wi-Fi, с использованием Arduino Uno и модуля ESP8266. Используются сервоприводы для движений головы и рук, DC-моторы для перемещения на небольшие расстояния, а лицо formado из LED-матриц. Управление осуществляется из обычного браузера через HTML-интерфейс. Android-смартфон на борту транслирует видео и аудио от робота к оператору.
Руководство охватывает 3D-печать и сборку корпуса, схемы электрических цепей и подробное описание кода Arduino, чтобы любой мог повторить робота.
Некоторые техники уже публиковались в отдельных туториалах:
- WiDC — Wi-Fi FPV робот на Arduino + ESP8266
- Управление массивом LED-матриц на Arduino Uno
- Wi-Servo — браузерное управление сервоприводами по Wi-Fi
Команда проекта: Тиаго Фарауче, Диего Августус, Ыхан Кристиан, Элам Морейра, Пауло де Азеведо мл., Гильерме Пупо, Рикардо Каспиро, ASEBS.
Подробнее о проекте:
Как вы можете помочь?
Проект финансируется участниками и небольшими пожертвованиями. Если вам понравилось, вы можете поддержать нас:
- Голосование: проект участвует в конкурсах Instructables — проголосуйте за нас! :D
- Пожертвование: можно отправить донат на покупку комплектующих (электроника, 3D-печать, филаменты) и продвижение визитов в детские больницы. Ваше имя будет добавлено в кредиты проекта. Донаты принимаются на Thingiverse: thing:2765192
- Лайк: поставьте лайк на платформах, где мы документируем проект (Facebook, Hackster, Hackaday, Maker Share, Thingiverse...)
- Репост: поделитесь проектом в соцсетях, чтобы вдохновить больше мейкеров по всему миру.
Шаг 1: Немного истории...
Проект «Robô da Alegria» («Робот Радости») родился в 2016 году в регионе Байшада Сантиста (Бразилия) с целью развития технологий и привлечения сообщества к движению мейкеров. Вдохновленный волонтерскими проектами НКО в детских больницаха, проект стремится создать робота на открытом железе и ПО, способного принести веселье в больничную среду и помочь другим организациям.
Зародыш проекта появился в конце 2015 года после встречи, организованной Ассоциацией стартапов Байшада Сантиста (ASEBS). Идея заключалась в проекте без денежного приза, но с альтруистической целью — помочь другим.
Робот претерпел множество трансформаций: от одной головы с механическими глазами и бровями до нынешнего гуманоидного вида. Проходили итерации с разными материалами и электроникой: от акрила и лазерной резки МДФ к 3D-печати. От простого Bluetooth-интерфейса с двумя сервоприводами к телу с 6 сервоприводами и 2 DC-моторами, управляемым веб-интерфейсом по Wi-Fi.
Корпус полностью 3D-печатается в Fusion 360. Для возможности репликации в makerspace/fab lab, где время печати ограничено, модель разбита на детали по <3 часов печати каждая. Детали склеиваются или болтятся.
Лицо из LED-массивов позволяет выражать эмоции. Сервоприводы рук и шеи дают мобильность для взаимодействия. В «центре управления» Arduino Uno интерфейсируется со всеми периферийными устройствами, включая ESP8266 для Wi-Fi-управления с любого устройства в той же сети.
В груди робота установлен смартфон для передачи аудио/видео между оператором и детьми. Экран телефона также можно использовать для игр и приложений, взаимодействующих с телом робота.
Шаг 2: Инструменты и материалы
Инструменты:
- 3D-принтер — весь корпус печатается, нужно много часов;
- PLA филамент (белый и черный);
- Отвертка — большинство деталей соединяются болтами;
- Суперклей;
- Плоскогубцы и кусачки;
- Паяльник и припой.
Электроника:
- Arduino Uno — главный контроллер, посылает сигналы моторам и общается с Wi-Fi модулем;
- ESP8266-01 — «Wi-Fi модем», принимает команды из интерфейса;
- SG90 сервоприводы (×6) — 4 для рук, 2 для головы;
- DC-моторы с редуктором и колесами (×2) — перемещение на короткие дистанции;
- L298N dual H-мост (×1) — преобразует цифровые выходы Arduino в питание моторов;
- 16-канальный контроллер сервоприводов (PCA9685) — управление множеством серв по I2C двумя выводами Arduino;
- MAX7219 8x8 LED-дисплей (×4) — лицо робота;
- Micro USB кабель — прошивка;
- Провода «мама-мама» и «папа-мама»;
- Смартфон — Motorola Moto E 4.3", другие похожие размеры тоже подойдут;
- Аккумуляторы 18650 (×2);
- Корпус для 18650 (×1);
- Диоды 1N4001 (×2);
- Резисторы 10 кОм (×3);
- Выключатель 20мм (×1);
- ProtoShield — упрощает монтаж схемы.
Механика:
- Опорные шариковые колеса (×2);
- Болты M2×6мм (~70 шт);
- Болты M2×10мм (~20 шт);
- Гайки M2×1.5мм (×10);
- Болты M3×40мм (×4);
- Гайки M3×1.5мм (×4).
Ссылки выше — предложения где купить. Свободно ищите и покупайте в любимых магазинах.
Шаг 3: 3D-печать
Модель состоит из 36 различных деталей. Большинство печатается без поддержек, с заполнением 10%.
- Верх головы (право/лево)
- Низ головы (право/лево)
- Боковые колпачки головы (право/лево)
- Задняя панель лица
- Передняя панель лица
- Ось шеи 1, 2, 3
- Центр шеи
- Рука (право/лево)
- Плечо (право/лево)
- Чашка плеча (право/лево)
- Колпачок плеча (право/лево)
- Ось руки (право/лево)
- Грудь (право/лево/перед)
- Колеса (право/лево)
- База
- Держатель телефона
- Спина (право/лево)
- Ручки (право/лево)
- Замки (право/лево)
Сборка описана в следующих шагах.
STL-файлы можно скачать:
Это экспериментальный прототип. Известные проблемы:
- Интерференция проводов серв и плеча;
- Трение головы и груди;
- Трение колес и конструкции;
- Некоторые отверстия для винтов слишком тесные — нужно расширить сверлом или ножом.
Если нет 3D-принтера:
- Попросите друга напечатать;
- Найдите ближайший hacker/maker space — модель разбита на части по <4 часов, часто берут только за материал;
- Купите свой 3D-принтер (Anet A8 ~$165.99 на Gearbest: ссылка);
- Интересуетесь DIY-китом? Если будет достаточно заинтересованных, возможно предложу наборы на Tindie.com — напишите мне.
Шаг 4: Обзор схем
Ядро управления — Arduino Uno. Она интерфейсирует ESP8266-01 для дистанционного управления по Wi-Fi.
16-канальный серво-контроллер (I2C) управляет 6 сервоприводами (2 шея + 2×2 руки). Массив из 4 LED-матриц 8x8 управляется Arduino. 4 цифровых выхода Arduino управляют 2 DC-моторами через H-мост.
Питание: два USB-парбанка — один для моторов, один для Arduino. Пытался питать всё от одного — ESP8266 терял связь из-за скачков тока при пуске DC-моторов.
В груди смартфон — транслирует видео/аудио к оператору, также может слать команды ESP8266, управляя телом.
Компоненты не оптимальны: NodeMCU заменил бы Arduino+ESP8266, Raspberry Pi с камерой — смартфон и контроль моторов. Но Arduino Uno выбран за доступность и простоту. На момент старта ESP и RPi были дороги в нашем регионе, а цель — недорогой робот.
Файлы схем: robot+mk0+-+rev8_Esquemático.pdf, robot+mk0+-+rev8_bb.pdf
Шаг 5: Сборка лица
Использованы 4 LED-матрицы 8x8. Корпус лица — две 3D-детали (задняя и передняя панели) из черного PLA, ~2.5 часа печати, 10% заполнение, без поддержек.
Из-за тесноты разъемы матриц пришлось перепаять: снять матрицу, отпаять входной/выходной разъемы, припаять на другую сторону платы с пинами к центру.
Матрицы крепятся к задней панели 16 болтами M2×6мм. Подключение по схеме. Первая матрица — 5-проводной шлейф «папа-мама» к Arduino. Выход каждой матрицы — вход следующей по «мама-мама» шлейфам. После подключения устанавливается передняя панеля (4 болта M2). Провода укладываются между панелями.
Шаг 6: Сборка головы
Голова — 8 деталей, белый PLA, 0.2мм слой, 10% заполнение, без поддержек. Печать ~18 часов (диаметр 130мм).
- Верх головы (право/лево)
- Низ головы (право/лево)
- Колпачки головы (право/лево)
- Ось шеи 1, 2
Верх и низ склеиваются суперклеем. Боковые колпачки болтятся к бокам верха/низа — голова разбираема для ремонта. Перед закрытием устанавливают модуль лица (шаг 5) и грудь (следующие шаги).
Сервопривод #5 крепится к оси шеи 1, рог сервы фиксируется винтом. Ось шеи 2 болтится к серве (2 болта M2×6). Сервопривод #6 крепится к оси шеи 2 аналогично. Ось шеи 2 соединяется с центром шеи (следующий шаг). Модуль лица устанавливается внутрь головы.
Шаг 7: Сборка груди и плеч
Печать ~12 часов. 5 деталей: грудь (право/лево), плечи (право/лево), центр шеи, ось шеи 3.
Детали груди склеиваются. Плечи болтятся M2×10 к бокам. Сервоприводы #2 и #4 устанавливаются в плечи (провода проходят через прямоугольные отверстия, сложно), фиксируются болтами M2×10 и гайками.
Центр шеи имеет прямоугольное отверстие для оси шеи 3 — 4 болта M2×6. Центр шеи крепится к плечам теми же болтами, что и плечи к груди. 4 гайки M2×1.5 фиксируют позицию.
Сервопривод #6 подключается к оси шеи 3 (2 винта). Ось шеи 3 вставляется в центр шеи, фиксируется 4 болтами M2×6.
Шаг 8: Сборка рук
~5 часов на руку. 4 детали: чашка плеча, колпачок плеча, ось руки, рука.
Ось руки центрируется и болтится к руке (3 болта M2×6). Рог сервы на другом конце оси. Сервопривод #1/#3 устанавливается в чашку плеча, рог на ось руки. В чашке есть отверстие для рога сервы #2/#4 (уже на плече). Еще одно отверстие для проводов. Колпачок закрывает плечо (2 болта M2×6).
Шаг 9: Монтаж груди
Грудь соединяет грудной клетку с основанием (колеса/база). 2 детали (право/лево), печать ~4 часа.
Плечи вставляются в верхнюю часть груди. Отверстие для болта выравнивания/фиксации (рекомендуется склеить). Внизу 6 отверстий для крепления к колесам (следующий шаг). На этом этаже наклеил стикеры на сервоприводы для облегчения проводки.
Шаг 10: Сборка колес
3 детали: колеса (лево/право), передняя панель. Печать ~10 часов.
- Припаять провода к контактам DC-моторов (потом к H-мосту);
- Моторы к конструкции: по 2 болта M3×40 + гайки на мотор (можно короче, но не нашел);
- Приклеить переднюю панель, связывающую части;
- Верх передней панели имеет отверстия для крепления к груди — 6 болтов M2×6.
Шаг 11: Держатель телефона
Одна 3D-деталь, ~1 час печати. Для Motorola Moto E 4.3" (другие похожие размеры подойдут). Телефон вставляется, прижимается держателем и 4 болтами M2×6. Важно: подключить USB-кабель к телефону ДО затягивания болтов — место очень тесное, пришлось обрезать часть USB-разъема.
Шаг 12: Монтаж основания
Одна 3D-деталь, ~4 часа. Отверстия для опорных шариковых колес, плат. Сборка:
- 16-канальный серво-контроллер — 4 болта M2×6;
- L298N H-мост — 4 болта M2×6;
- Arduino Uno — 4 болта M2×6;
- ProtoShield сверху;
- Проводка (см. шаг 14);
- Опорные шариковые колеса — по 2 винта, провода укладываются между базой и винтами;
- База крепится к секции колес винтами.
Шаг 13: Задняя крышка и батарейный блок
Задняя крышка открывается для доступа к схеме, зарядки батарей, вкл/выкл телефона. 6 деталей: спина (лево/право), ручки (×2), замки (лево/право). Печать ~5.5 часов. Левая и правая части склеиваются — ждать полного высыхания клея.
Батарейный блок: 2×18650 в корпусе. Паяем перемычку между минусом №1 и плюсом №2. Общий минус — на GND Arduino. Выключатель между общим плюсом и Vin Arduino.
Выключатель крепится к задней части болтом M2×6 и гайкой M2×1.5. Корпус батарей — 4 болта M2×6. Цилиндрическая часть замков зашкурена для лучшего посадки. Замки проходят в отверстия крышки, ручки клеятся с другой стороны. Крышка надевается на спину робота, ручки поворачиваются для фиксации.
Шаг 14: Проводка схем
Arduino:
- D2 → L298N IN4
- D3 → L298N IN3
- D6 → L298N IN2
- D7 → L298N IN1
- D9 → MAX7219 DIN
- D10 → MAX7219 CS
- D11 → MAX7219 CLK
- D4 → ESP8266 RXD
- D5 → ESP8266 TXD
- A4 → SDA
- A5 → SCL
- Vin → Батарея V+ (до диодов)
- GND → Батарея V-
ESP8266-01:
- RXD → Arduino D4
- TXD → Arduino D5
- GND → Arduino GND
- VCC → Arduino 3V3
- CH_PD → Arduino 3V3
L298N H-мост:
- IN1 → Arduino D7
- IN2 → Arduino D6
- IN3 → Arduino D3
- IN4 → Arduino D2
- +12V → Батарея V+ (после диодов)
- GND → Arduino GND
- OUT1 → Мотор 1
- OUT2 → Мотор 2
MAX7219 (первая матрица):
- DIN → Arduino D9
- CS → Arduino D10
- CLK → Arduino D11
- VCC → Arduino 5V
- GND → Arduino GND
MAX7219 (остальные матрицы) — каскадно:
- DIN → DOUT предыдущей
- CS → CS предыдущей
- CLK → CLK предыдущей
- VCC → VCC предыдущей
- GND → GND предыдущей
16-канальный серво-контроллер (PCA9685):
- SCL → Arduino A5
- SDA → Arduino A4
- VCC → Arduino 5V
- GND → Arduino GND
- V+ → Батарея V+ (после диодов)
- GND → Arduino GND
SG90 сервоприводы: питание 3.0–6.0В или 4.0–7.2В по разным данным. Поставил 2 диода 1N4001 последовательно после батарей: 2×3.7В – 2×0.7В = 6.0В для серв и DC-моторов. Не самый эффективный способ, но работает.
Файлы схем: robot+mk0+-+rev8_bb.pdf, robot+mk0+-+rev8_Esquemático.pdf
Шаг 15: Код Arduino
Установите последнюю Arduino IDE. Библиотеки для ESP8266 и DC-моторов не нужны. Нужно добавить:
- LedControl.h — управление LED-матрицами;
- Adafruit_PWMServoDriver.h — управление сервоприводами (PCA9685).
Код разделен на 9 файлов:
- RobodaAlegria.ino — основной скетч, импорт библиотек, глобальные переменные;
- _05_Def_Olhos.ino — матрицы для глаз (каждое око 8×8, 9 вариантов: нейтральные, широко открытые, закрытые сверху/снизу, злые, скучающие, грустные, влюбленные, мертвые; разные для правого и левого);
- _06_Def_Boca.ino — матрицы для рта (16×8, 9 вариантов: счастливый, грустный, очень счастливый, очень грустный, нейтральный, язык наружу, открытый, широко открытый, отвращение);
- _10_Bracos.ino — заранее заданные движения рук и шеи (9 движений mov1()..mov9());
- _12_Rosto.ino — функции обновления лица, комбинирующие матрицы глаз и рта;
- _13_Motores_DC.ino — функции DC-моторов;
- _20_Comunicacao.ino — отправка данных в ESP8266;
- _80_Setup.ino — инициализация при включении: начальное лицо, позиции моторов, команды подключения к Wi-Fi (замените XXXXX на SSID, YYYYY на пароль);
- _90_Loop.ino — главный цикл: ожидание команд от ESP8266 и вызов функций управления.
Скачайте код. Проверьте baud rate ESP8266 и установите в _80_Setup.ino. Подключите Arduino к USB и загрузите.
Архив: RoboAlegria.rar
Шаг 16: Android-приложения
Смартфон транслирует видео/аудио в интерфейс управления. Приложения из Google Play:
- IP Webcam: com.pas.webcam — видео/аудио;
- Screen Mirror: com.ajungg.screenmirror — зеркалирование экрана.
Также разрабатывалась Android-игра для взаимодействия с роботом — пока нестабильна, не доступна для скачивания.
Шаг 17: Интерфейс управления
HTML-интерфейс. Скачайте interface.rar, распакуйте, откройте в Firefox. Интерфейс в два блока: слева — камера и зеркалирование экрана, справа — кнопки управления.
Текстовые поля для ввода: IP адрес ESP8266 («Endereço IP Arduino»), IP Webcam («IP Webcam (IP)»), Screen Mirror («Screen Mirror (IP)»).
Вкладка «Ações predefinidas» — 9 движений тела и 13 лиц. Вкладка «Ações personalizadas» — индивидуальные углы для 6 серв, выбор из 9 вариантов глаз и 8 ртов. JS-функция по клику шлет команду на IP ESP8266.
Стрелки клавиатуры — движение вперед/назад, поворот влево/вправо.
При старте запрос на доступ к микрофону. Если разрешить — громкость микрофона триггерит анимацию «речи» на лице робота. Настройка чувствительности — кнопка настроек в правом верхнем углу. Там же — скорость движений рук/шеи.
Архив: interface.rar
Шаг 18: Веселитесь!
Включите и веселитесь! Если понравилось — делитесь с друзьями и голосуйте в конкурсах Instructables! :D
Код
- Arduino Code (скачивается архивом)
- HTML Interface (скачивается архивом)
Библиотеки на GitHub:
3D-модели (CAD)
Схемы
Схемы прикреплены в разделе Schematics.
Производственный процесс
- Raspoulette: Прототип солнечной автономной системы двери курятника
- DIY робот в стиле Wall‑E на Raspberry Pi из коробки от CD
- Робот-будильник на колесах: умная мобильная система пробуждения на Raspberry Pi и Google Calendar
- Создание моторизированного робота-крипера Minecraft на Arduino
- Archimedes: Робот-совица с ИИ для распознавания эмоций
- Создание робота с компьютерным зрением и голосовым управлением на Windows 10 IoT Core
- ROS-робот: Управление навигацией из терминала на Raspberry Pi
- Simple Pi Robot — Сборка 2WD автономного ровера на Raspberry Pi
- Набор для создания робота с умной внутренней навигацией на базе Arduino
- Понимание линейных моторов: от электрической энергии к точному линейному движению