Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Happy Birthday Melody op Arduino Nano met 3-Way Polyphony

Componenten en benodigdheden

Arduino Nano R3
× 1

Apps en online services

Arduino IDE

Over dit project

Speel polyfonie "Happy birthday" thema op Arduino Nano met drie zoemers op een enkele mini breadboard.

Allereerst - demonstratie

Sluit dit ding aan op een USB-stroombron (niet alleen een computer) en het zal voor onbepaalde tijd de "Happy birthday"-melodie spelen ... bijna ... totdat je er echt ziek van wordt =]

Trouwens, de lampjes knipperen bij elke nootverandering in een corresponderend kanaal/zoemer.

Schema's

Het idee was om een ​​supercompact apparaat te maken met (bijna) geen soldeerwerk.

Uiteindelijk ben ik erin geslaagd om alles wat nodig is op een klein breadboard zoals dit te passen:

Gaten zijn op deze manier met elkaar verbonden in het breadboard:

De truc hier is dat het Arduino Nano-bord in zo'n breadboard past, gewoon PERFECT waardoor we wat extra componenten aan beide zijden van het breadboard kunnen aansluiten.

Sorry, jongens... Ik ben te lui om hier diagrammen te tekenen, maar dit geval is ZO eenvoudig dat ik zeker weet dat deze close-ups meer dan genoeg zullen zijn om alles uit te zoeken =]

Zoals je kunt zien, gebruik ik hier het Arduino Nano v3.0-bord van Gravitech, maar elke analoog is voldoende. De zoemers en de LED's hier zijn ZEER gewone. Ze hoeven eigenlijk niet overeen te komen met speciale parameters.

De weerstanden hier zijn 100 Ohm... hoewel de gebruikelijke "standaard" voor LED-overbelastingsbeveiliging 220 Ohm is... maar wat maakt het uit... ¯\_(ツ)_/¯

Het enige dat hier op deze foto's waarschijnlijk niet zo duidelijk is, is dat de pinnen van de zoemers op deze manier in het breadboard worden gestoken:

Merk ook op dat de middelste groter is dan de andere - dat komt omdat deze wordt gebruikt voor het "bas"-muziekkanaal ☝🏻

... grapje! ^__^ Ze piepen allemaal als een gek muizenkoor zonder enig verschil in hun geluidsmogelijkheden =]

U kunt dus probleemloos drie identieke zoemers gebruiken, maar u moet ze op een iets andere positie op het breadboard plaatsen en ook de uitgangspinnummers in de programmacode wijzigen in overeenstemming met uw nieuwe plaatsing van de zoemers.

Let ook op nog een kleine "hack" hier... in ieder geval zijn we op Hack ster hier of wat? =] Dus ik gebruik verschillende Arduino's I/O pinnen hier als een grond pinnen voor zoemers en LED's 😱😱 . Ja dat klopt. Als u een "LAAG" -status instelt voor een Arduino I / O-pin in uw programma, dan kunt u deze pinnen op dezelfde manier gebruiken als standaard GND-pinnen op Arduino-kaarten. Cool toch?;)

Over het programma...

De volledige lijst van de Arduino IDE-schets vindt u hieronder. U moet echter een extra "Tone"-bibliotheek installeren om de schets te kunnen compileren die u hier kunt downloaden:

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

(als er een pop-upvenster is met een registratie "voorstel", sluit het dan gewoon met de "x"-knop in de hoek)

De eenvoudigste manier om deze bibliotheek te installeren is als volgt:kies in het hoofdmenu van Arduino IDE Sketch - Include Library - Add .ZIP Library... en selecteer vervolgens uw gedownloade zip-bestand... easy ¯\_(ツ)_/¯

Deze bibliotheek is nodig om gelijktijdig meerdere tonen op een enkele controller te genereren (het gebruikt enkele extra hardware-timers en hardware-interrupts "onder de motorkap" om dit doel te bereiken). Simpel gezegd, het is een soort "redneck-multitasking" op een enkele processorkern zonder enig besturingssysteem =]

Tussen haakjes, hier is de auteur van de bibliotheek (bedankt bro! =] ):

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

... en de GitHub-pagina van de bibliotheek:

https://github.com/bhagman/Tone

DISCLAIMER 🙂 :
Eerlijk gezegd is mijn programmacode hier nogal omvangrijk en moeilijk te lezen. Dat komt vooral door deze behoefte om te "goochelen" met drie "onafhankelijke" melodielijnen tegelijk vanuit slechts één lineaire opdrachtstroom. Ik dacht er echt aan om de code later te refactoren om de melodieën van elkaar te kunnen scheiden en in de toekomst te gebruiken voor het spelen van verschillende nummers... maar ik zal waarschijnlijk niet =]

Veel geluk. Alle feedback wordt op prijs gesteld.

Bedankt voor het lezen tot het einde =]

Code

  • Happy_birthday
Happy_birthdayArduino
Vergeet niet de Tone-bibliotheek te installeren!!
#include Tone solo;Tone bass;Tone ritme;const int t =600; // quater note durationconst 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; // bas led-signaalpin (ook bekend als A1) const int rythmLedPin =17; // ritme led-signaalpin (ook bekend als A3) const int soloLedPin =19; // solo led-signaalpin (ook bekend als A5) ongeldig wachten (Tone t) { while (t.isPlaying ()) {}} int bassLedState =LAAG; ongeldig switchBassLed () {if (bassLedState ==LAAG) bassLedState =HOOG; anders bassLedState =LAAG; digitalWrite(bassLedPin, bassLedState);}int rythmLedState =LAAG; ongeldig switchRythmLed(){ if (rythmLedState ==LAAG) rythmLedState =HOOG; anders rythmLedState =LAAG; digitalWrite(rythmLedPin, rythmLedState);}int soloLedState =LAAG; ongeldig switchSoloLed(){ if (soloLedState ==LAAG) soloLedState =HOOG; anders soloLedState =LAAG; digitalWrite (soloLedPin, soloLedState);} void setup (void) { pinMode (14, OUTPUT); // led grondpin (ook bekend als A0) pinMode (16, OUTPUT); // led grondpin (ook bekend als A2) pinMode (18, OUTPUT); // led grondpin (ook bekend als A4) pinMode (bassLedPin, OUTPUT); // bas led-signaalpin pinMode (rythmLedPin, OUTPUT); // ritme led-signaalpin pinMode (soloLedPin, OUTPUT); // solo led-signaalpin pinMode (2, OUTPUT); // solo zoemer grondpin pinMode (9, OUTPUT); // ritme zoemer grondpin solo.begin (6); // solo zoemer signaal pin bass.begin (12); // bas zoemer signaal pin rythm.begin (0); // ritme zoemer signaal pin solo.play (NOTE_D4, t34); switchSoloLed(); wacht (solo); solo.play (NOTE_D4, t14); switchSoloLed(); wacht (solo);} ongeldige lus (nietig) {bass.play (NOTE_G3, t); switchBassLed(); ritme.play (NOTE_G4, t24); switchRythmLed(); solo.play (NOTE_E4, t); switchSoloLed(); wacht (ritme); ritme.play (NOTE_B4, t14); switchRythmLed(); wacht (ritme); ritme.play (NOTE_D5, t14); switchRythmLed(); wacht(ritme);bas.play(NOTE_B3, t); switchBassLed(); ritme.play (NOTE_G4, t24); switchRythmLed(); solo.play (OPMERKING_D4, t); switchSoloLed(); wacht (ritme); ritme.play (NOTE_B4, t14); switchRythmLed(); wacht (ritme); ritme.play (NOTE_D5, t14); switchRythmLed(); wacht(ritme);bas.play(NOTE_D4, t); switchBassLed(); ritme.play (NOTE_G4, t24); switchRythmLed(); solo.play (NOTE_G4, t); switchSoloLed(); wacht (ritme); ritme.play (NOTE_B4, t14); switchRythmLed(); wacht (ritme); ritme.play (NOTE_D5, t14); switchRythmLed(); wacht(ritme);bas.play(NOTE_D4, t); switchBassLed(); ritme.play (NOTE_D5, t24); switchRythmLed(); solo.play (NOTE_FS4, tt); switchSoloLed(); wacht (ritme); ritme.play (NOTE_FS5, t14); switchRythmLed(); wacht (ritme); ritme.afspelen (NOTE_A5, t14); switchRythmLed(); wacht(ritme);bas.play(NOTE_FS4, t); switchBassLed(); ritme.play (NOTE_D5, t24); switchRythmLed(); wacht (ritme); ritme.play (NOTE_FS5, t14); switchRythmLed(); wacht (ritme); ritme.afspelen (NOTE_A5, t14); switchRythmLed(); wacht(ritme);bas.play(NOTE_A4, t); switchBassLed(); ritme.play (NOTE_D5, t24); switchRythmLed(); solo.play (OPMERKING_D4, t34); switchSoloLed(); wacht (ritme); ritme.play (NOTE_FS5, t14); switchRythmLed(); wacht (ritme); ritme.afspelen (NOTE_A5, t14); switchRythmLed(); solo.play (NOTE_D4, t14); switchSoloLed(); wacht(ritme);bas.play(NOTE_D4, t); switchBassLed(); ritme.play (NOTE_D5, t24); switchRythmLed(); solo.play (NOTE_E4, t); switchSoloLed(); wacht (ritme); ritme.play (NOTE_FS5, t14); switchRythmLed(); wacht (ritme); ritme.afspelen (NOTE_A5, t14); switchRythmLed(); wacht (ritme); bas.play (NOTE_FS4, t); switchBassLed(); ritme.play (NOTE_D5, t24); switchRythmLed(); solo.play (OPMERKING_D4, t); switchSoloLed(); wacht (ritme); ritme.play (NOTE_FS5, t14); switchRythmLed(); wacht (ritme); ritme.afspelen (NOTE_A5, t14); switchRythmLed(); wacht (ritme); bas.play (NOTE_A4, t); switchBassLed(); ritme.play (NOTE_D5, t24); switchRythmLed(); solo.play(NOTE_A4, t); switchSoloLed(); wacht (ritme); ritme.play (NOTE_FS5, t14); switchRythmLed(); wacht (ritme); ritme.afspelen (NOTE_A5, t14); switchRythmLed(); wacht (ritme); bas.play (NOTE_G3, t); switchBassLed(); ritme.play (NOTE_G4, t24); switchRythmLed(); solo.play(NOTE_G4, tt); switchSoloLed(); wacht (ritme); ritme.play (NOTE_B4, t14); switchRythmLed(); wacht (ritme); ritme.play (NOTE_D5, t14); switchRythmLed(); wacht(ritme);bas.play(NOTE_B3, t); switchBassLed(); ritme.play (NOTE_G4, t24); switchRythmLed(); wacht (ritme); ritme.play (NOTE_B4, t14); switchRythmLed(); wacht (ritme); ritme.play (NOTE_D5, t14); switchRythmLed(); wacht (ritme); bas.play (OPMERKING_D4, t); switchBassLed(); ritme.play (NOTE_G4, t24); switchRythmLed(); solo.play (OPMERKING_D4, t34); switchSoloLed(); wacht (ritme); ritme.play (NOTE_B4, t14); switchRythmLed(); wacht (ritme); ritme.play (NOTE_D5, t14); switchRythmLed(); solo.play (NOTE_D4, t14); switchSoloLed(); wacht(ritme);bas.play(NOTE_G3, t); switchBassLed(); ritme.play (NOTE_G4, t24); switchRythmLed(); solo.play (OPMERKING_D5, t); switchSoloLed(); wacht (ritme); ritme.play (NOTE_B4, t14); switchRythmLed(); wacht (ritme); ritme.play (NOTE_D5, t14); switchRythmLed(); wacht (ritme); bas.play (NOTE_B3, t); switchBassLed(); ritme.play (NOTE_G4, t24); switchRythmLed(); solo.play (NOTE_B4, t); switchSoloLed(); wacht (ritme); ritme.play (NOTE_B4, t14); switchRythmLed(); wacht (ritme); ritme.play (NOTE_D5, t14); switchRythmLed(); wacht (ritme); bas.play (OPMERKING_D4, t); switchBassLed(); ritme.play (NOTE_G4, t24); switchRythmLed(); solo.play (NOTE_G4, t); switchSoloLed(); wacht (ritme); ritme.play (NOTE_B4, t14); switchRythmLed(); wacht (ritme); ritme.play (NOTE_D5, t14); switchRythmLed(); wacht (ritme); bas.play (NOTE_C4, t); switchBassLed(); ritme.afspelen (NOTE_C5, t24); switchRythmLed(); solo.play (NOTE_FS4, t); switchSoloLed(); wacht (ritme); ritme.play (NOTE_E5, t14); switchRythmLed(); wacht (ritme); ritme.play (NOTE_G5, t14); switchRythmLed(); wacht (ritme); bas.play (NOTE_E4, t); switchBassLed(); ritme.afspelen (NOTE_C5, t24); switchRythmLed(); solo.play (NOTE_E4, t); switchSoloLed(); wacht (ritme); ritme.play (NOTE_E5, t14); switchRythmLed(); wacht (ritme); ritme.play (NOTE_G5, t14); switchRythmLed(); wacht (ritme); bas.play (NOTE_G4, t); switchBassLed(); ritme.afspelen (NOTE_C5, t24); switchRythmLed(); solo.play(NOTE_C5, t34); switchSoloLed(); wacht (ritme); ritme.play (NOTE_E5, t14); switchRythmLed(); wacht (ritme); ritme.play (NOTE_G5, t14); switchRythmLed(); solo.play (NOTE_C5, t14); switchSoloLed(); wacht(ritme);bas.play(NOTE_G3, t); switchBassLed(); ritme.play (NOTE_G4, t24); switchRythmLed(); solo.play (NOTE_B4, t); switchSoloLed(); wacht (ritme); ritme.play (NOTE_B4, t14); switchRythmLed(); wacht (ritme); ritme.play (NOTE_D5, t14); switchRythmLed(); wacht (ritme); bas.play (NOTE_D3, t); switchBassLed(); ritme.play (NOTE_G4, t24); switchRythmLed(); solo.play (NOTE_G4, t); switchSoloLed(); wacht (ritme); ritme.play (NOTE_B4, t14); switchRythmLed(); wacht (ritme); ritme.play (NOTE_D5, t14); switchRythmLed(); wacht (ritme); bas.play (NOTE_FS3, t); switchBassLed(); ritme.play (NOTE_D5, t24); switchRythmLed(); solo.play(NOTE_A4, t); switchSoloLed(); wacht (ritme); wacht (ritme); ritme.play (NOTE_FS5, t14); switchRythmLed(); wacht (ritme); ritme.afspelen (NOTE_A5, t14); switchRythmLed(); wacht (ritme); bas.play (NOTE_G3, t); switchBassLed(); ritme.play (NOTE_G4, t24); switchRythmLed(); solo.play(NOTE_G4, tt); switchSoloLed(); wacht (ritme); ritme.play (NOTE_B4, t14); switchRythmLed(); wacht (ritme); ritme.play (NOTE_D5, t14); switchRythmLed(); wacht(ritme);bas.play(NOTE_B3, t); switchBassLed(); ritme.play (NOTE_G4, t24); switchRythmLed(); wacht (ritme); ritme.play (NOTE_B4, t14); switchRythmLed(); wacht (ritme); ritme.play (NOTE_D5, t14); switchRythmLed(); wacht (ritme); solo.play (OPMERKING_D4, t34); switchSoloLed(); wacht (solo); solo.play (NOTE_D4, t14); switchSoloLed(); wacht (solo);}

Productieproces

  1. CO2-monitoring met K30-sensor
  2. Doofblinde communicatie met 1Sheeld/Arduino
  3. Bedien muntvangers met Arduino
  4. Bloemen - Arduino Nano, CrazyCircuits, DFRobot
  5. Arduino met Bluetooth om een ​​LED te bedienen!
  6. Capacitieve vingerafdruksensor met een Arduino of ESP8266
  7. Spelen met Nextion Display
  8. Nunchuk-gestuurde robotarm (met Arduino)
  9. Arduino Nano:bedien 2 stappenmotoren met joystick
  10. Handheld geigerteller met Arduino Nano
  11. Zonnestraling meten met Arduino