PiBot: Робот-пианист на Arduino для точного исполнения музыки
Компоненты и материалы
| Компонент | Кол-во | Примечание |
|---|---|---|
| Arduino 101 (или Uno/Nano) | 1 | Управляющий контроллер |
| Сдвиговый регистр 74HC595 | 11 | По одному на 8 соленоидов (11×8=88) |
| MOSFET IRFZ44N (N-канал) | 88 | Ключи для соленоидов |
| Аккумулятор 12 В (автомобильный) | 2 | Питание соленоидов (перепитаны до 24 В) |
| Конденсатор 100 мкФ | 11 | По одному на плату регистра |
| Провода (много) | — | Соединения соленоидов и плат |
| Платы макетные / прототипирования | 11 | По одной на регистр |
| Панельки DIP-8 под 74HC595 | 11 | Рекомендуется (защита от перегрева при пайке) |
| Резистор 10 кОм | 88 | Pull-down на гейты MOSFET (опционально) |
| Диод 1N4007 | 88 | Флюсный, параллельно соленоидам (опционально) |
Инструменты
- Пистолет для клея (горячий клей / двусторонний скотч до 150 °C)
- Паяльница, припой, пинцет
Софт и онлайн-сервисы
- Processing — передача данных на Arduino по COM-порту
- Python — конвертация MIDI в битовые массивы
- Онлайн-конвертер MIDI → текст: mid2txt.php
Как всё начиналось
Автор увидел автоматическое пианино Yamaha в витрине магазина и решил построить своё. Главная цель — управлять 88 соленоидами, нажимающими клавиши, с минимальными затратами.
Обзор решения
Вместо двух Arduino Mega ($80) использован один дешевый контроллер + 11 сдвиговых регистров 74HC595. Каждый регистр даёт 8 выходов → 88 каналов. PC преобразует MIDI в последовательность бит и отправляет по UART. Arduino лишь сдвигает биты в регистры и защёлкивает.
Железо: проблемы и решения
Соленоиды
Заказанные в Китае 12-вольтовые соленоиды оказались слабыми для нажатия клавиш изнутри. Решение: подать 24 В (два автомобильных аккумулятора последовательно). Внимание: это перегруз, соленоиды греются — нужны паузы и охлаждение.
Платы управления
Каждая из 11 плат содержит: 74HC595 (в панельке), 8×IRFZ44N, конденсатор 100 мкФ, разъемы под соленоиды. Схема — классическая каскадная сдвиговыходная (пример 2 из datasheet 74HC595), только вместо LED — гейты MOSFET. Pull-down резисторы не ставили — MOSFETы открываются от 5 В, закрываются ниже 4 В (проверено экспериментально).
Механика
Соленоиды клеятся на пластиковую пластину (позже заменена на двусторонний термостойкий скотч). Один вывод всех соленоидов — на «+» батареи, вторые — на драйны MOSFET. Источники MOSFET — на «−» батареи (общая земля с Arduino).
Программная цепочка
- MIDI → текст: загружаем .mid на mid2txt.php → получаем строки:
time On/Off ch=1 n=60 v=100. - Python-скрипт читает текст, группирует ноты по времени, формирует 11 байт (по 8 бит на регистр) для каждого временного шага. Выходной файл:
time,byte0,byte1,…,byte10. - Processing читает файл, умножает тайминги на коэффициент темпа (по умолчанию ×5), отправляет байты на Arduino в обратном порядке (младший регистр — правая октава). Протокол: старт
888f, 11 байт с суффиксомf, стоп999f. - Arduino принимает байты, сдвигает в 74HC595, защёлкивает (LATCH). Код прост: прием по Serial,
shiftOutв цикле.
Траблшутинг
- Перегрев клея: горячий клей плавился от соленоидов. Заменили на двусторонний скотч, выдерживающий 150 °C.
- Пропуски срабатываний: добавили диоды 1N4007 параллельно каждому соленоиду (гасят самовоздух).
- Питание: при одновременном нажатии многих клавиш просадка напряжения — используйте толстые шины и хорошие контакты аккумуляторов.
Код
Все исходники (Python, Processing, Arduino) доступны в репозитории проекта. Python-скрипт содержит функции set_bit, set_bit_prev для упаковки нот в байты регистров. Processing-скетч реализует временной драйвер с мультипликатором темпа. Arduino-код — минималистичный приёмник байт.
Схема
Полная схема (с MOSFET и 74HC595) приведена в разделе Schematics. Рекомендую также посмотреть официальный пример Arduino ShiftOut — принцип идентичен.
Производственный процесс
- Создание Bluetooth-робота на Raspberry Pi с аудио-обратной связью
- Создание интернет-управляемого видеostreaming-робота на Arduino и Raspberry Pi
- Построение Wi-Fi-управляемого робота на Raspberry Pi с Python — пошаговое руководство
- Управление светодиодами через Alexa с помощью Raspberry Pi – простое пошаговое руководство
- Строим Iron Man на Arduino: компоненты, сенсоры и пошаговый гайд
- Find Me: Умный поисковик вещей на Arduino и Bluetooth
- DIY-контроллер увлажнителя на Arduino с реле: безопасная работа с высоким напряжением
- Голосовой робот на Arduino Nano: Управление речью через Bluetooth
- MobBob: Самостоятельная сборка Arduino-робота под управлением Android-смартфона
- Своё рулевое управление (джойстик) для игр на Arduino