Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Полифонический плеер темы «Мстители» на 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) — показывает активность канала. Не влияет на звук.

Полифонический плеер темы «Мстители» на Arduino UNO

Сборка на макетке

Легко собирается на беспаечной плате. Лучше использовать динамик в корпусе (даже без усилителя) — звук полнее.

Полифонический плеер темы «Мстители» на Arduino UNO
Полифонический плеер темы «Мстители» на Arduino UNO

Автор использовал динамик из мультимедийного набора (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.

Ссылки

Схемы, макетка, PCB

Архив с файлами: avengers_XPBiYYW5Xc.zip (схемы, монтаж на макетке, топология печатной платы).

Производственный процесс

  1. Умный датчик полива «Thirst Alert» на Arduino — DIY сигнализация засухи для растений
  2. Итальянские словесные часы на Arduino Nano, NeoPixel, LCD и RTC
  3. Экономия пинов Arduino: подключение 4×3 клавиатуры по трём аналоговым входам
  4. Надежный счетчик кВт·ч на Sigfox с Arduino MKR Fox 1200
  5. Bluetooth-монитор температуры на Arduino Nano с NTC-термистором
  6. DIY Автоматический измеритель емкости (10 пФ – 10 мкФ) на Arduino Nano
  7. Бесконтактный жестовый замок: APDS-9960 + Arduino для безопасного доступа
  8. Набор-компаньон для Arduino Nano — необходимые компоненты и инструменты для DIY-электроники
  9. Гальванически разделённый аналоговый вход для Arduino на LM331 и оптопаре 4N25
  10. Точный тест времени реакции на Arduino UNO