Интерактивная кукла «Игра в кальмара» на Arduino UNO: DIY-проект
Компоненты и материалы
| Компонент | Количество | Назначение |
|---|---|---|
| RGB-светодиод (общий катод) | 2 | Глаза куклы |
| Семисегментный дисплей SparkFun (красный, последовательный) | 1 | Таймер обратного отсчёта |
| Сдвиговый регистр 74HC165 (Texas Instruments) | 1 | Управление 4-разрядным индикатором |
| Символьный LCD 16×2 (с I2C-адаптером) | 1 | Меню настроек |
| IR-приёмник | 1 | Управление пультом |
| Arduino UNO | 1 | Основной контроллер |
| Микросервопривод SG90 | 1 | Поворот головы |
| PIR-датчик движения | 1 | Детекция движения игрока |
| Ультразвуковой дальномер HC-SR04 | 1 | Измерение дистанции (победа/поражение) |
| MP3-плеер DFRobot DFPlayer Mini | 1 | Воспроизведение голосовых фраз |
| Тактильные кнопки (мгновенные) | 3 | Меню и кнопка старта |
Необходимые инструменты
- 3D-принтер — печать корпуса куклы (около 6 дней)
Программное обеспечение
- Arduino IDE — разработка и загрузка скетча
О проекте
Полностью функциональная кукла из сериала «Игра в кальмар». Она ведёт игру «Красный свет — зелёный свет»: поворачивает головой, меняет цвет глаз, говорит и определяет победителя с помощью ультразвукового и ИК-датчиков. При проигрыше кукла просто предлагает сыграть снова.
Проект занял 3 недели: 6 дней — 3D-печать, 1 неделя — сборка, 1 неделя — монтаж видео. Все 20 пинов Arduino UNO задействованы — личный рекорд автора.
Этапы сборки
1. 3D-печать
Модель взята с Thingiverse, доработана: выемана внутренняя полость, добавлены технологические отверстия под электронику, изменена грудная пластина под сервопривод и ультразвуковой датчик. Использовался цветной филамент для минимизации покраски.
2. Покраска
Внутренняя сторона головы покрашена из баллончика (глаза замаскированы), чтобы свечение RGB-LED не проступало через пластик — светят только зрачки.
3. Крепление конечностей
Использованы магниты, впаянные в пластик — для разборной конструкции. При повторной сборке автор рекомендует просто склеить детали: магниты полезны только для компактного хранения. Голова не крепится на этом этапе.
4. Установка глаз
RGB-светодиоды (общий катод — самый длинный вывод) подключены через резисторы 220 Ом на каждый цветной вывод. LED закреплены термоклеем максимально близко к центру глаз с обратной стороны. Провода проложены через шею в корпус.
5. LCD-меню
Использован дисплей с I2C-адаптером — экономит 4 пина (2 вместо 6). При включении выводит «Welcome to the Squid Games!». Корпус дисплея — тонкий (1 мм) 3D-печатный диск, termoформированный под изгиб спины куклы. Крепится на ввинчиваемые гайки.
6. Сервопривод головы
Библиотека Servo.h не использовалась — она конфликтует с Timer1, необходимым для мультиплексирования 4-разрядного индикатора. Серво работает только в двух положениях (0° и 180°), поэтому импульсы формируются вручную в прерывании Timer1 (2000 Гц, период 20 мс): 2 такта HIGH для 0°, 4 такта — для 180°. Серво эпоксидно зафиксировано в грудной пластине.
7. Ультразвуковой датчик
HC-SR04 опрашивается каждые 250 мс. Монтируется в грудной пластине на эпоксидном клее. Два провода: Trig и Echo.
8. IR-приёмник
Скрыт в заческе куклы. Необязателен — автоматический режим игры работает без пульта. Минус: при повороте головы приёмник может оказаться не по линии визирования.
9. Таймер на 4-разрядном индикаторе
Самый labour-intensive узел. Использован сдвиговый регистр 74HC595 для управления сегментами. Обновление — 2 мс на разряд (невидимое мерцание). Индикатор вмонтирован в «пояс» куклы: вырезан прямоугольник дремелем, переходы сглажены эпоксидной шпаклевкой. 74HC595 размещён на прототипном шилде.
10. PIR-датчик движения
Требует 1 минуту прогрева при включении (отсюда минута ожидания перед стартом). Минимальный интервал срабатывания — ~5 с. Чувствительность занижена, но ложные срабатывания остаются. Решение: датчик помещён в 3D-печатный «блиндер» с отверстием 7 мм — сужает поле зрения и скрывает модуль внутри корпуса.
11. Кнопки управления
Пинов не хватило — три кнопки считываются через один аналоговый вход (A0) с резистивным делителем: 1 кОм, 2 кОм, 5 кОм + pull-down 220 Ом. Кнопки установлены на той же пластине, что и LCD.
12. Аудиомодуль DFPlayer Mini
Подключён к аппаратному UART (пины 0/1). Обязательны резисторы 1 кОм на TX/RX — иначе UNO перестанет прошиваться. Используется пин BUSY для ожидания окончания воспроизведения. Модуль на протошields, динамик 8 Ом / 3 Вт приклеен к основанию с отверстиями для звука.
13. Установка Arduino
UNO на платформе с протошields. Все провода подписаны. Платформа крепится на ввинчиваемые гайки в дне куклы.
14. Тестирование и отладка
Программа проверена и рабочая (GitHub), но индивидуальная калибровка датчиков и механики всё равно требуется.
15. Игровая логика
- Запуск: голова вперед, 60 с прогрева PIR. На 30-й секунде — смех и поворот головы назад. На 10-й — объявление готовности.
- Ожидание: в авторежиме просит нажать кнопку старта, в режиме пульта — кнопку питания пульта, затем старт.
- Подготовка (10 с): «Займите позиции», глаза белые, голова к игроку.
- Зелёный свет: глаза зелёные, голова к дереву. Цель — приблизиться < 50 см (ультразвук). На 100 см — фраза «ближе». Если время вышло — проигрыш. Каждые 3 с (авто) или по пульту — переключение на красный.
- Красный свет: глаза красные, голова к игроку. Запоминается дистанция. Ожидание прекращения движения (до 5 с). Движение (PIR) или приближение < сохранённой дистанции — проигрыш. Также проигрыш по таймауту. Голос: английский или корейский (настройка в меню).
- Победа/поражение: соответствующие фразы, глаза белые/фиолетовые, предложение сыграть снова → возврат в ожидание.
16. Видео
Монтаж занял ~30 часов. Результат: YouTube
Исходный код
Squid Game Doll Sketch (C/C++)
Полный скетч с логикой игры, работой датчиков, серво, дисплеев, DFPlayer и IR-пульта. Использует библиотеки: DFPlayerMini_Fast, FireTimer, IRremote, LiquidCrystal_I2C, SoftwareSerial, SR04, Wire. Таймер1 настроен на 2000 Гц для серво и мультиплексирования индикатора. Машина состояний: WARMUP → WAIT → READY → GREENLIGHT/REDLIGHT → WIN/LOSE → WAIT.
Репозиторий со всеми файлами: GitHub
Схемы подключения
Полная схема распиновки всех компонентов на Arduino UNO:
Все файлы проекта: GitHub
Производственный процесс
- Создание потрясающей системы Ambilight для монитора на Arduino
- Создание классической игры Pong на Arduino UNO с OLED-дисплеем: пошаговый урок
- Робот для поиска людей на базе Arduino Uno: пошаговая интеграция датчиков
- Умный вольтметр на Arduino и смартфоне — простое DIY-проект
- IoT-монитор пульса в реальном времени на Arduino и MAX30100
- Веб-сервер на Arduino Uno WiFi: управление LED через браузер
- Простой калькулятор на Arduino UNO — базовый проект для начинающих
- Измерение расстояния в реальном времени: Ардуино-сонар с визуализацией в Processing
- Сборка портативного дисплея на основе эффекта сохранения изображения с Arduino UNO и ATtiny85
- Учебный стенд Arduino Mega 2560: сенсоры, моторы, дисплеи и собственная PCB