Полифонический плеер темы «Мстители» на Arduino UNO
Компоненты и материалы
| Arduino UNO | 1 |
| Половинчатая беспаечная макетная плата | 1 |
| Динамик 3 Вт, 4 Ом (рекомендуется динамик, не пьезо-зуммер — громче и качественнее) | 1 |
| Резисторы 220 Ом | 3 |
| Резистор 10 кОм | 1 |
| Резистор 4.75 кОм | 1 |
| Резистор 56 Ом | 1 |
| Светодиоды (любые) — опционально, для визуализации каналов | 3 |
О проекте
Простой и интересный проект: полифоническое воспроизведение темы «Мстители» (The Avengers) на Arduino.
Стандартная функция tone(pin, frequency, duration) играет только одну ноту — для сложной музыки не подходит. Решение — библиотека PlayTune (Len Shustek), умеющая играть до 6 тонов одновременно (на Uno — 3 канала, на Mega — 6).
Библиотека: https://github.com/LenShustek/arduino-playtune
Схема
Цифровые пины 10, 11, 12 → резисторы 220 Ом → соединены вместе → один контакт динамика. Второй контакт динамика — на GND.
Опционально: светодиод на каждый канал (анод через резистор к пину, катод к GND) — показывает активность канала. Не влияет на звук.
Сборка на макетке
Легко собирается на беспаечной плате. Лучше использовать динамик в корпусе (даже без усилителя) — звук полнее.
Автор использовал динамик из мультимедийного набора (4 Ом, без усилителя).
Программирование
Загрузите скетч ниже, предварительно установив библиотеку PlayTune (ссылка выше или прямая: Google Drive).
Код
Основной скетч
// Полифоническое воспроизведение на 3 прерываниях
// Требуется библиотека Playtune: https://github.com/LenShustek/arduino-playtune
// 2019 - Marcelo Maximiano - Maxblitz.com
#include <Playtune.h>
const byte PROGMEM avengers[] = {
// ... массив байтов с партитурой (очень большой, см. оригинал) ...
0x90,0x3E,0x00,0x7A,0x80,0x00,0x02,0x90,0x3E,0x00,0x7A,0x80,0x00,0x02,0x90,0x3E,
0x00,0x7A,0x80,0x01,0x79,0x90,0x3E,0x00,0x7A,0x80,0x00,0x02,0x90,0x3E,0x00,0x7A,
0x80,0x00,0x02,0x90,0x3E,0x00,0x7A,0x80,0x01,0x79,0x90,0x3E,0x00,0x7A,0x80,0x00,
0x02,0x90,0x3E,0x00,0x7A,0x80,0x00,0x02,0x90,0x3E,0x00,0x7A,0x80,0x00,0x02,0x90,
0x3E,0x00,0x7A,0x80,0x00,0x02,0x90,0x3F,0x00,0x7A,0x80,0x00,0x02,0x90,0x3F,0x00,
0x7A,0x80,0x00,0x02,0x90,0x3F,0x00,0x7A,0x80,0x01,0x79,0x90,0x3F,0x00,0x7A,0x80,
0x00,0x02,0x90,0x3F,0x00,0x7A,0x80,0x00,0x02,0x90,0x40,0x00,0x7A,0x80,0x01,0x79,
0x90,0x40,0x00,0x7A,0x80,0x00,0x02,0x90,0x40,0x00,0x7A,0x80,0x00,0x02,0x90,0x40,
0x00,0x7A,0x80,0x00,0x02,0x90,0x40,0x00,0x7A,0x80,0x00,0x02,0x90,0x41,0x00,0x7A,
0x80,0x00,0x02,0x90,0x41,0x00,0x7A,0x80,0x00,0x02,0x90,0x41,0x00,0x7A,0x80,0x01,
0x79,0x90,0x41,0x00,0x7A,0x80,0x00,0x02,0x90,0x41,0x00,0x7A,0x80,0x00,0x02,0x90,
0x40,0x00,0x7A,0x80,0x01,0x79,0x90,0x40,0x00,0x7A,0x80,0x00,0x02,0x90,0x40,0x00,
0x7A,0x80,0x00,0x02,0x90,0x40,0x00,0x7A,0x80,0x00,0x02,0x90,0x40,0x00,0x7A,0x80,
0x00,0x02,0x90,0x3F,0x00,0x7A,0x80,0x00,0x02,0x90,0x3F,0x00,0x7A,0x80,0x00,0x02,
0x90,0x3F,0x00,0x7A,0x80,0x01,0x79,0x90,0x3F,0x00,0x7A,0x80,0x00,0x02,0x90,0x3F,
0x00,0x7A,0x80,0x00,0x02,0x90,0x3A,0x00,0xF7,0x80,0x00,0xFC,0x90,0x3C,0x00,0xF7,
0x80,0x00,0xFC,0x90,0x4A,0x91,0x37,0x92,0x4F,0x00,0x7A,0x80,0x81,0x00,0x02,0x90,
0x3E,0x91,0x4A,0x00,0x7A,0x80,0x81,0x00,0x02,0x90,0x3E,0x91,0x4A,0x00,0x7A,0x80,
0x81,0x01,0x79,0x90,0x3E,0x91,0x4A,0x00,0x7A,0x80,0x81,0x00,0x02,0x90,0x3E,0x91,
0x4A,0x00,0x7A,0x80,0x81,0x00,0x02,0x90,0x3E,0x91,0x4A,0x00,0x7A,0x80,0x81,0x01,
0x79,0x90,0x3E,0x91,0x4A,0x00,0x7A,0x80,0x81,0x00,0x02,0x90,0x3E,0x91,0x4A,0x00,
0x7A,0x80,0x81,0x00,0x02,0x90,0x3E,0x91,0x4A,0x00,0x7A,0x80,0x81,0x00,0x02,0x90,
0x3E,0x91,0x4A,0x00,0x7A,0x82,0x80,0x81,0x00,0x02,0x92,0x4F,0x90,0x3F,0x91,0x4B,
// ... (массив продолжается, полный код в оригинале) ...
0x92,0x4C,0x91,0x58,0x0F,0x9D,0x82,0x81,0x80,0xF0
};
Playtune p;
void setup() {
p.tune_initchan(10); // канал 1 на пине 10
p.tune_initchan(11); // канал 2 на пине 11
p.tune_initchan(12); // канал 3 на пине 12
}
void loop() {
p.tune_playscore(avengers); // старт воспроизведения
while (p.tune_playing); // ждём окончания
p.tune_delay(3000); // пауза 3 с (не использовать Arduino delay!)
}
Примечание: массив avengers[] содержит сотни байт нотовых данных. Полный код см. в оригинале или на GitHub.
Ссылки
- Библиотека PlayTune: GitHub
Схемы, макетка, PCB
Архив с файлами: avengers_XPBiYYW5Xc.zip (схемы, монтаж на макетке, топология печатной платы).
Производственный процесс
- Умный датчик полива «Thirst Alert» на Arduino — DIY сигнализация засухи для растений
- Итальянские словесные часы на Arduino Nano, NeoPixel, LCD и RTC
- Экономия пинов Arduino: подключение 4×3 клавиатуры по трём аналоговым входам
- Надежный счетчик кВт·ч на Sigfox с Arduino MKR Fox 1200
- Bluetooth-монитор температуры на Arduino Nano с NTC-термистором
- DIY Автоматический измеритель емкости (10 пФ – 10 мкФ) на Arduino Nano
- Бесконтактный жестовый замок: APDS-9960 + Arduino для безопасного доступа
- Набор-компаньон для Arduino Nano — необходимые компоненты и инструменты для DIY-электроники
- Гальванически разделённый аналоговый вход для Arduino на LM331 и оптопаре 4N25
- Точный тест времени реакции на Arduino UNO