
Собираем компактное пианино на Arduino Nano с четырьмя кнопками и пассивным зуммером. Простая схема, понятный код, расширение до полной октавы. Проект для начинающих.
Музыкальные проекты на Arduino -- одни из самых увлекательных для школьников. Нажимаешь кнопку -- звучит нота. Всё просто, наглядно и моментально даёт результат. Наше мини-пианино использует Arduino Nano, четыре тактовые кнопки и пассивный пьезозуммер. Четыре ноты -- это немного, но достаточно, чтобы сыграть простую мелодию и разобраться в том, как Arduino генерирует звук.
Проект вдохновлён идеей максимальной компактности: Arduino Nano помещается на небольшой макетной плате, а готовое пианино можно перенести на паечную плату и поместить в миниатюрный корпус. Это проект, который собирается за 30 минут, но при этом затрагивает важные темы: частоты звуковых колебаний, цифровые входы, функцию tone() и принципы работы пьезоэлемента.
Проект подходит для учеников 5--8 классов и не требует опыта работы с Arduino.

Стоимость всех компонентов -- около 2 500--4 000 тенге. Важно использовать именно пассивный пьезозуммер: активный генерирует только один фиксированный тон и не подходит для воспроизведения разных нот. Отличить их можно по маркировке или по тому, что пассивный зуммер не пищит при простом подключении к питанию.
Каждая кнопка подключается через подтягивающий резистор 1 кОм к GND. При нажатии кнопка подаёт на цифровой пин Arduino напряжение HIGH (5V). Когда кнопка не нажата, резистор подтягивает пин к LOW (GND).
Подключение кнопок:
| Нота | Кнопка | Пин Arduino | Частота |
|---|---|---|---|
| До | 1 | D2 | 262 Гц |
| Ре | 2 | D3 | 294 Гц |
| Ми | 3 | D4 | 330 Гц |
| Фа | 4 | D5 | 349 Гц |
Каждая кнопка: один контакт к соответствующему пину Arduino и через резистор 1 кОм к GND, второй контакт к 5V.
Пьезозуммер: положительный вывод к пину D6, отрицательный к GND.
Схема намеренно проста: четыре одинаковых цепочки кнопка-резистор и один зуммер. Это позволяет ученикам легко разобраться в каждом соединении.

```cpp
// Мини-пианино на Arduino Nano
// 4 кнопки воспроизводят 4 ноты через пассивный пьезозуммер
// Пины кнопок
const int button1 = 2; // Нота До
const int button2 = 3; // Нота Ре
const int button3 = 4; // Нота Ми
const int button4 = 5; // Нота Фа
// Пин зуммера
const int buzzerPin = 6;
// Частоты нот первой октавы (в герцах)
// Можно изменить на любые другие ноты
const int NOTE_DO = 262; // До (C4)
const int NOTE_RE = 294; // Ре (D4)
const int NOTE_MI = 330; // Ми (E4)
const int NOTE_FA = 349; // Фа (F4)
void setup() {
// Настраиваем пины кнопок как входы
pinMode(button1, INPUT);
pinMode(button2, INPUT);
pinMode(button3, INPUT);
pinMode(button4, INPUT);
// Пин зуммера как выход
pinMode(buzzerPin, OUTPUT);
Serial.begin(9600);
Serial.println("=== Мини-пианино ===");
Serial.println("Нажимайте кнопки для игры");
// Приветственный звук при включении
tone(buzzerPin, NOTE_DO, 150);
delay(200);
tone(buzzerPin, NOTE_MI, 150);
delay(200);
tone(buzzerPin, NOTE_FA, 300);
delay(400);
noTone(buzzerPin);
}
void loop() {
// Проверяем каждую кнопку и воспроизводим ноту
if (digitalRead(button1) == HIGH) {
tone(buzzerPin, NOTE_DO);
Serial.println("До (262 Гц)");
}
else if (digitalRead(button2) == HIGH) {
tone(buzzerPin, NOTE_RE);
Serial.println("Ре (294 Гц)");
}
else if (digitalRead(button3) == HIGH) {
tone(buzzerPin, NOTE_MI);
Serial.println("Ми (330 Гц)");
}
else if (digitalRead(button4) == HIGH) {
tone(buzzerPin, NOTE_FA);
Serial.println("Фа (349 Гц)");
}
else {
// Ни одна кнопка не нажата -- выключаем звук
noTone(buzzerPin);
}
delay(10); // Небольшая пауза для стабильности
}
`
Функция `tone()`. Это встроенная функция Arduino, которая генерирует прямоугольный сигнал заданной частоты на указанном пине. Пьезоэлемент внутри зуммера вибрирует с этой частотой, создавая слышимый звук. Функция noTone() останавливает генерацию и выключает звук.
Частоты нот. Каждая музыкальная нота -- это колебания воздуха с определённой частотой. Нота Ля первой октавы -- 440 Гц, это международный эталон. До -- 262 Гц, Ре -- 294 Гц, и так далее. Между соседними нотами частота увеличивается примерно в 1.06 раза. Это можно использовать для обсуждения математики музыки на уроке.
Приоритет кнопок. Конструкция if-else if гарантирует, что при одновременном нажатии нескольких кнопок прозвучит только одна нота -- та, которая проверяется первой. Это предотвращает хаотичное переключение звука.
Подтягивающие резисторы. Без резистора цифровой пин Arduino находится в неопределённом состоянии, когда кнопка не нажата, и может произвольно считывать HIGH или LOW. Резистор 1 кОм надёжно удерживает пин в состоянии LOW, пока кнопка не замкнёт его на 5V.
Простота кода. Весь проект умещается в несколько десятков строк без единой внешней библиотеки. Это делает его идеальным первым проектом для тех, кто только начинает изучать Arduino.
Базовая версия с четырьмя кнопками легко расширяется. Добавьте ещё четыре кнопки на пины D7--D10 и четыре резистора, чтобы получить полную октаву:
```cpp
// Полная октава -- дополнительные ноты
const int NOTE_SOL = 392; // Соль (G4)
const int NOTE_LA = 440; // Ля (A4)
const int NOTE_SI = 494; // Си (B4)
const int NOTE_DO2 = 523; // До верхнее (C5)
`
Для более чистого кода с восемью кнопками используйте массивы:
```cpp
const int buttonPins[] = {2, 3, 4, 5, 7, 8, 9, 10};
const int noteFreqs[] = {262, 294, 330, 349, 392, 440, 494, 523};
const int numNotes = 8;
void loop() {
bool playing = false;
for (int i = 0; i < numNotes; i++) {
if (digitalRead(buttonPins[i]) == HIGH) {
tone(buzzerPin, noteFreqs[i]);
playing = true;
break;
}
}
if (!playing) noTone(buzzerPin);
delay(10);
}
`
Массивы делают код компактным и легко расширяемым: чтобы добавить новую ноту, достаточно дописать один элемент в каждый массив.
Arduino Nano, кнопки, пьезозуммеры, резисторы и макетные платы -- всё это входит в комплекты Alashed Hardware, собранные для школьных лабораторий. Для программирования используйте Alashed CodeStudio -- онлайн-среду разработки, которая позволяет писать, компилировать и загружать скетчи на Arduino прямо из браузера. Не нужно устанавливать Arduino IDE на каждый компьютер -- достаточно открыть страницу в браузере.
Подключите школу к пилоту. Генерируйте КМЖ за 2 минуты, ведите CodeStudio уроки, заказывайте оборудование — всё в одном месте.