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

Мелодия с днем ​​рождения на Arduino Nano с 3-полосной полифонией

Компоненты и расходные материалы

Arduino Nano R3
× 1

Приложения и онлайн-сервисы

IDE Arduino

Об этом проекте

Воспроизведите тему полифонии «С днем ​​рождения» на Arduino Nano с помощью трех зуммеров на одном мини-макете.

Прежде всего - демонстрация

Подключите эту штуку к любому источнику питания USB (не только к компьютеру), и она будет бесконечно воспроизводить мелодию «С днем ​​рождения» ... почти ... пока она вам не надоест =]

Кстати, индикаторы мигают при каждом изменении ноты в соответствующем канале / зуммере.

Схема

Идея заключалась в том, чтобы сделать сверхкомпактное устройство (почти) без пайки.

В конце концов мне удалось уместить все необходимое на такой крошечной макетной плате:

Отверстия внутри макета соединяются таким образом:

Хитрость здесь в том, что плата Arduino Nano помещается в такой макет, просто ИДЕАЛЬНО позволяя нам подключать некоторые дополнительные компоненты с обеих сторон макета.

Извините, ребята ... Мне лень рисовать здесь какие-либо схемы, но этот случай НАСТОЛЬКО прост, что я уверен, что этих крупных планов будет более чем достаточно, чтобы во всем разобраться =]

Как видите, здесь я использую плату Arduino Nano v3.0 от Gravitech, но подойдет любой аналог. Зуммеры и светодиоды здесь ОЧЕНЬ обычные. На самом деле им не обязательно соответствовать каким-либо специальным параметрам.

Резисторы здесь 100 Ом ... хотя общий "стандарт" защиты светодиодов от перегрузки 220 Ом ... да кого это волнует ... ¯ \ _ (ツ) _ / ¯

Единственное, что, вероятно, не так очевидно здесь, на этих фотографиях, - это то, что контакты зуммеров вставлены в макет следующим образом:

Также обратите внимание, что центральный канал больше остальных - это потому, что он используется для «басового» музыкального канала ☝🏻

... просто шучу! ^ __ ^ Они все пищат как сумасшедший хор мышей без разницы в звуковых возможностях =]

Таким образом, вы можете без проблем использовать три идентичных зуммера, однако вам придется разместить их в немного разных положениях на макетной плате, а также изменить номера выходных контактов в программном коде в соответствии с вашим новым размещением зуммеров.

Также обратите внимание на еще одну небольшую "хитрость" ... в любом случае, мы находимся на взломе тут стер что ли? =] Итак, я использую несколько ввода / вывода Arduino. здесь булавки как заземление контакты для зуммеров и светодиодов 😱😱. Да это правильно. Фактически, если вы установите состояние «LOW» для любого вывода ввода / вывода Arduino в своей программе, вы можете использовать эти выводы точно так же, как вы используете стандартные выводы GND на платах Arduino. Круто, правда?;)

О программе ...

Полный список скетча Arduino IDE представлен ниже. Однако вам придется установить дополнительную библиотеку «Tone», чтобы скомпилировать скетч, который вы можете скачать здесь:

https://www.dropbox.com/s/q1udxg4yi47emeo/Tone.zip?dl=0

(если есть всплывающее окно с регистрационным «предложением», просто закройте его кнопкой «x» в углу)

Самый простой способ установить эту библиотеку:в главном меню Arduino IDE выберите Sketch - Include Library - Add .ZIP Library ... а затем выберите загруженный zip-файл ... легко ¯ \ _ (ツ) _ / ¯

Эта библиотека необходима для одновременной генерации нескольких тонов на одном контроллере (для достижения этой цели она использует некоторые дополнительные аппаратные таймеры и аппаратные прерывания "под капотом"). Проще говоря, это что-то вроде "многозадачности деревенщины" на одном ядре процессора без какой-либо ОС =]

Кстати, вот автор библиотеки (спасибо братан! =]):

http://playground.arduino.cc/Profiles/Bhagman

... и страницу библиотеки на GitHub:

https://github.com/bhagman/Tone

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ 🙂:
Честно говоря, мой программный код здесь довольно громоздкий и его трудно читать. Это в основном из-за необходимости «жонглировать» тремя «независимыми» потоками мелодий одновременно только из одного линейного потока команд. Я действительно собирался реорганизовать код позже, чтобы иметь возможность отделить мелодии друг от друга и использовать его в будущем для воспроизведения разных песен ... но я, вероятно, не буду =]

Удачи. Любые отзывы приветствуются.

Спасибо, что дочитали до конца =]

Код

  • С Днем Рождения
Happy_birthday Arduino
Не забудьте установить библиотеку тонов !!
 #include  Tone solo; Tone bass; Tone rythm; const int t =600; // продолжительность четвертой ноты const int tt =t * 2; const int t14 =round (t * 1/4); const int t24 =round (t * 2/4); const int t34 =round (t * 3/4); const int bassLedPin =15; // вывод сигнала басового светодиода (он же A1) const int rythmLedPin =17; // ритм вывода сигнала светодиода (он же A3) const int soloLedPin =19; // вывод сигнала соло (он же A5) void wait (Tone t) {while (t.isPlaying ()) {}} int bassLedState =LOW; void switchBassLed () {if (bassLedState ==LOW) bassLedState =HIGH; иначе bassLedState =LOW; digitalWrite (bassLedPin, bassLedState);} int rythmLedState =LOW; void switchRythmLed () {if (rythmLedState ==LOW) rythmLedState =HIGH; иначе rythmLedState =LOW; digitalWrite (rythmLedPin, rythmLedState);} int soloLedState =LOW; void switchSoloLed () {if (soloLedState ==LOW) soloLedState =HIGH; иначе soloLedState =LOW; digitalWrite (soloLedPin, soloLedState);} установка void (void) {pinMode (14, OUTPUT); // вывод заземления светодиода (он же A0) pinMode (16, OUTPUT); // вывод заземления светодиода (он же A2) pinMode (18, OUTPUT); // вывод заземления светодиода (он же A4) pinMode (bassLedPin, OUTPUT); // сигнал басового светодиода pinMode (rythmLedPin, OUTPUT); // ритм светодиодного сигнала pin pinMode (soloLedPin, OUTPUT); // одиночный сигнал светодиода pinMode (2, OUTPUT); // вывод заземления соло зуммера pinMode (9, OUTPUT); // ритм зуммера заземляющий контакт solo.begin (6); // сигнал соло зуммера bass.begin (12); // сигнал басового зуммера rythm.begin (0); // Ритм зуммера, сигнальный пин solo.play (NOTE_D4, t34); switchSoloLed (); ждать (соло); solo.play (NOTE_D4, t14); switchSoloLed (); ждать (соло);} пустая петля (пустота) {bass.play (NOTE_G3, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_E4, t); switchSoloLed (); ждать (ритм); rythm.play (ПРИМЕЧАНИЕ_B4, t14); switchRythmLed (); ждать (ритм); rythm.play (NOTE_D5, t14); switchRythmLed (); ждать (rythm); bass.play (NOTE_B3, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_D4, t); switchSoloLed (); ждать (ритм); rythm.play (ПРИМЕЧАНИЕ_B4, t14); switchRythmLed (); ждать (ритм); rythm.play (NOTE_D5, t14); switchRythmLed (); ждать (rythm); bass.play (NOTE_D4, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_G4, t); switchSoloLed (); ждать (ритм); rythm.play (ПРИМЕЧАНИЕ_B4, t14); switchRythmLed (); ждать (ритм); rythm.play (NOTE_D5, t14); switchRythmLed (); ждать (rythm); bass.play (NOTE_D4, t); switchBassLed (); rythm.play (NOTE_D5, t24); switchRythmLed (); solo.play (NOTE_FS4, tt); switchSoloLed (); ждать (ритм); rythm.play (NOTE_FS5, t14); switchRythmLed (); ждать (ритм); rythm.play (NOTE_A5, t14); switchRythmLed (); ждать (rythm); bass.play (NOTE_FS4, t); switchBassLed (); rythm.play (NOTE_D5, t24); switchRythmLed (); ждать (ритм); rythm.play (NOTE_FS5, t14); switchRythmLed (); ждать (ритм); rythm.play (NOTE_A5, t14); switchRythmLed (); ждать (rythm); bass.play (NOTE_A4, t); switchBassLed (); rythm.play (NOTE_D5, t24); switchRythmLed (); solo.play (NOTE_D4, t34); switchSoloLed (); ждать (ритм); rythm.play (NOTE_FS5, t14); switchRythmLed (); ждать (ритм); rythm.play (NOTE_A5, t14); switchRythmLed (); solo.play (NOTE_D4, t14); switchSoloLed (); ждать (rythm); bass.play (NOTE_D4, t); switchBassLed (); rythm.play (NOTE_D5, t24); switchRythmLed (); solo.play (NOTE_E4, t); switchSoloLed (); ждать (ритм); rythm.play (NOTE_FS5, t14); switchRythmLed (); ждать (ритм); rythm.play (NOTE_A5, t14); switchRythmLed (); ждать (ритм); bass.play (NOTE_FS4, t); switchBassLed (); rythm.play (NOTE_D5, t24); switchRythmLed (); solo.play (NOTE_D4, t); switchSoloLed (); ждать (ритм); rythm.play (NOTE_FS5, t14); switchRythmLed (); ждать (ритм); rythm.play (NOTE_A5, t14); switchRythmLed (); ждать (ритм); bass.play (NOTE_A4, t); switchBassLed (); rythm.play (NOTE_D5, t24); switchRythmLed (); solo.play (NOTE_A4, t); switchSoloLed (); ждать (ритм); rythm.play (NOTE_FS5, t14); switchRythmLed (); ждать (ритм); rythm.play (NOTE_A5, t14); switchRythmLed (); ждать (ритм); bass.play (NOTE_G3, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_G4, tt); switchSoloLed (); ждать (ритм); rythm.play (ПРИМЕЧАНИЕ_B4, t14); switchRythmLed (); ждать (ритм); rythm.play (NOTE_D5, t14); switchRythmLed (); ждать (rythm); bass.play (NOTE_B3, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); ждать (ритм); rythm.play (ПРИМЕЧАНИЕ_B4, t14); switchRythmLed (); ждать (ритм); rythm.play (NOTE_D5, t14); switchRythmLed (); ждать (ритм); бас. игра (NOTE_D4, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_D4, t34); switchSoloLed (); ждать (ритм); rythm.play (ПРИМЕЧАНИЕ_B4, t14); switchRythmLed (); ждать (ритм); rythm.play (NOTE_D5, t14); switchRythmLed (); solo.play (NOTE_D4, t14); switchSoloLed (); ждать (rythm); bass.play (NOTE_G3, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_D5, t); switchSoloLed (); ждать (ритм); rythm.play (ПРИМЕЧАНИЕ_B4, t14); switchRythmLed (); ждать (ритм); rythm.play (NOTE_D5, t14); switchRythmLed (); ждать (ритм); bass.play (NOTE_B3, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_B4, t); switchSoloLed (); ждать (ритм); rythm.play (ПРИМЕЧАНИЕ_B4, t14); switchRythmLed (); ждать (ритм); rythm.play (NOTE_D5, t14); switchRythmLed (); ждать (ритм); бас. игра (NOTE_D4, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_G4, t); switchSoloLed (); ждать (ритм); rythm.play (ПРИМЕЧАНИЕ_B4, t14); switchRythmLed (); ждать (ритм); rythm.play (NOTE_D5, t14); switchRythmLed (); ждать (ритм); бас. игра (NOTE_C4, t); switchBassLed (); rythm.play (NOTE_C5, t24); switchRythmLed (); solo.play (NOTE_FS4, t); switchSoloLed (); ждать (ритм); rythm.play (NOTE_E5, t14); switchRythmLed (); ждать (ритм); rythm.play (NOTE_G5, t14); switchRythmLed (); ждать (ритм); bass.play (NOTE_E4, t); switchBassLed (); rythm.play (NOTE_C5, t24); switchRythmLed (); solo.play (NOTE_E4, t); switchSoloLed (); ждать (ритм); rythm.play (NOTE_E5, t14); switchRythmLed (); ждать (ритм); rythm.play (NOTE_G5, t14); switchRythmLed (); ждать (ритм); бас. игра (NOTE_G4, t); switchBassLed (); rythm.play (NOTE_C5, t24); switchRythmLed (); solo.play (NOTE_C5, t34); switchSoloLed (); ждать (ритм); rythm.play (NOTE_E5, t14); switchRythmLed (); ждать (ритм); rythm.play (NOTE_G5, t14); switchRythmLed (); solo.play (NOTE_C5, t14); switchSoloLed (); ждать (rythm); bass.play (NOTE_G3, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_B4, t); switchSoloLed (); ждать (ритм); rythm.play (ПРИМЕЧАНИЕ_B4, t14); switchRythmLed (); ждать (ритм); rythm.play (NOTE_D5, t14); switchRythmLed (); ждать (ритм); bass.play (NOTE_D3, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_G4, t); switchSoloLed (); ждать (ритм); rythm.play (ПРИМЕЧАНИЕ_B4, t14); switchRythmLed (); ждать (ритм); rythm.play (NOTE_D5, t14); switchRythmLed (); ждать (ритм); bass.play (NOTE_FS3, t); switchBassLed (); rythm.play (NOTE_D5, t24); switchRythmLed (); solo.play (NOTE_A4, t); switchSoloLed (); ждать (ритм); ждать (ритм); rythm.play (NOTE_FS5, t14); switchRythmLed (); ждать (ритм); rythm.play (NOTE_A5, t14); switchRythmLed (); ждать (ритм); bass.play (NOTE_G3, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_G4, tt); switchSoloLed (); ждать (ритм); rythm.play (ПРИМЕЧАНИЕ_B4, t14); switchRythmLed (); ждать (ритм); rythm.play (NOTE_D5, t14); switchRythmLed (); ждать (rythm); bass.play (NOTE_B3, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); ждать (ритм); rythm.play (ПРИМЕЧАНИЕ_B4, t14); switchRythmLed (); ждать (ритм); rythm.play (NOTE_D5, t14); switchRythmLed (); ждать (ритм); solo.play (NOTE_D4, t34); switchSoloLed (); ждать (соло); solo.play (NOTE_D4, t14); switchSoloLed (); ждать (соло);} 

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

  1. Мониторинг CO2 с помощью датчика K30
  2. Слепоглухое общение с 1Sheeld / Arduino
  3. Управление монетоприемником с помощью Arduino
  4. Цветы - Arduino Nano, CrazyCircuits, DFRobot
  5. Arduino с Bluetooth для управления светодиодом!
  6. Емкостной датчик отпечатков пальцев с Arduino или ESP8266
  7. Игра с дисплеем Nextion
  8. Роботизированная рука, управляемая нунчук (с Arduino)
  9. Arduino Nano:управление двумя шаговыми двигателями с помощью джойстика
  10. Портативный счетчик Гейгера с Arduino Nano