Создание портативного ёмкостного сенсорного пианино на Arduino: пошаговое руководство
Компоненты и материалы
| Корпус ProtoStax для Arduino | 1 |
| Adafruit 12-канальный ёмкостной сенсорный шилд MPR121 | 1 |
| Пьезо-зуммер Adafruit PS1240 | 1 |
| Arduino UNO | 1 |
| Медлентая фольга с проводимым клеем | 1 |
| Набор монтажных проводов 22 AWG | 1 |
О проекте
В этом проекте описывается создание портативного сенсорного пианино с:
- Arduino
- Шилдом MPR121 (12 ёмкостных входов)
- Пьезо-зуммером
- Медной фольгой в форме клавиш (проводимый клей обязателен)
- Прозрачным акриловым корпусом ProtoStax для Arduino (модульный, стыкуемый, с резиновыми ножками)
12 полутонов в октаве (C, C#, D, D#, E, F, F#, G, G#, A, A#, B) идеально под 12 входов MPR121. Библиотека Adafruit_MPR121 упрощает опрос сенсоров. Звук генерируется через встроенную библиотеку tone(). Можно запрограммировать «секретные комбинации» клавиш для воспроизведения мелодий любой октавности.
Корпус ProtoStax — стеклянный акрил, подходит для Uno/Leonardo и Mega/Due, позволяет добавлять стенки и крышку по мере готовности. Верхняя крышка служит клавиатурой — на неё клеится медная фольга.
Шаг 1: Монтаж Arduino на базовую плату корпуса
Установите Arduino на базовую плату ProtoStax в конфигурации «Platform» (открытый доступ). Добавьте ножки и крепеж. Анимированная инструкция в проекте.
Шаг 2: Подготовка шилда MPR121
Припаяйте 12 проводов 22 AWG к входам шилда (между большими отверстиями для крокодилов — маленькие для проводов). Припаяйте пьезо-зуммер: один вывод в pin 12, второй в GND. Изолируйте свободные концы проводов. Используйте 6 цветов для 12 проводов (цветовое кодирование).
Шаг 3: Подготовка корпуса
- Установите шилд на Arduino в корпусе.
- Вставьте верхние распорки и боковые стенки.
- В стандартной крышке ProtoStax прорежьте 12 отверстий (лазерная резка или дрилл 1/8" с малярным скотчем).
- Пропустите провода в отверстия: провод 0 — в левое, далее по порядку.
- Установите верхние распорки, закрутите винты.
- Выдвиньте провода, оставив металлические концы наружу.
- Вырежьте клавиши из медной фольги по шаблону и аккуратно наклейте на крышку, соединяя фольгу с соответствующим проводом.

Шаг 4: Демонстрационный код
Установите библиотеку Adafruit_MPR121. Загрузите пример-скетч — пианино готово!
Секретные комбинации:
- C E G B — «Twinkle Twinkle Little Stars»
- C D E F G — гамма вверх-вниз
- C D A B — «Oh Susanna!»
- C C# A# B — «Frere Jacques / Brother John»
Основные части кода:
- Опрос MPR121 через
Adafruit_MPR121:cap.touched()возвращает битмаску нажатых клавиш. - Реакция на касание:
tone(TONE_PIN, scale[i])при нажатии,noTone()при отпускании (с sustain-эффектом — удерживайте одну клавишу, играйте другой). - Воспроизведение мелодий по секретным битовым маскам через функцию
playTune().
Пример структуры мелодии:
typedef struct Note { int frequency; float duration; } Note;
Note melody2[] = {
{NOTE_C, NOTE_WHOLE}, {NOTE_CS, NOTE_WHOLE}, {NOTE_D, NOTE_WHOLE}, {NOTE_DS, NOTE_WHOLE},
{NOTE_E, NOTE_WHOLE}, {NOTE_F, NOTE_WHOLE}, {NOTE_FS, NOTE_WHOLE}, {NOTE_G, NOTE_WHOLE},
{NOTE_GS, NOTE_WHOLE}, {NOTE_A, NOTE_WHOLE}, {NOTE_AS, NOTE_WHOLE}, {NOTE_B, NOTE_WHOLE},
{NOTE_AS, NOTE_WHOLE}, {NOTE_A, NOTE_WHOLE}, {NOTE_GS, NOTE_WHOLE}, {NOTE_G, NOTE_WHOLE},
{NOTE_FS, NOTE_WHOLE}, {NOTE_F, NOTE_WHOLE}, {NOTE_E, NOTE_WHOLE}, {NOTE_DS, NOTE_WHOLE},
{NOTE_D, NOTE_WHOLE}, {NOTE_CS, NOTE_WHOLE}, {NOTE_C, NOTE_WHOLE}
};
Используйте константы из pitches.h и noteDurations.h (NOTE_C, NOTE_WHOLE, DOTTED(NOTE_QUARTER) и т.д.) для переноса нот из нотных листов.
Шаг 5: Дальнейшее развитие
- Создавайте свои мелодии и секретные комбинации.
- Добавьте второй пьезо-зуммер для 2-голоса (библиотека
NewToneиспользует Timer1, стандартныйtone— Timer2). - Добавьте кнопки для смены октавы (расширение диапазона).
Идеи и вопросы — в комментариях! Приятного творчества!
Код
Демо-скетч: GitHub ProtoStax_CapacitiveTouch_Piano_Demo
Печатные детали и корпуса
Шаблон клавиш и отверстий для крышки (печать на A4/Letter): 
Схемы

Производственный процесс
- Фортепиано: от древних корней к современному мастерству
- Переносной туалет: история, дизайн и экологическое влияние
- Ройаль: слияние акустической традиции и автоматизированной точности
- Сборка Bluetooth-робота-шпиона на Arduino с управлением с телефона
- FlickMote: жестовое IR-пульт для умного дома на Arduino 101 и ультразвуковом датчике
- DIY Arduino TV-B-Gone: универсальный пульт для выключения любого телевизора
- Создание пользовательских LED-часов с будильником — видно с 12 метров
- Arduino Breakout на сенсорном TFT 2.4″: классическая аркада своими руками
- Превратите MIDI-клавиатуру в интерактивного репетитора по фортепиано с Arduino, LED-лентой и MuseScore
- Интеграция ёмкостного сканера отпечатков DFRobot с Arduino или ESP8266