- Hardware necesar:
- Înțelegerea funcției Tone () a Arduino:
- Pitches.h fișierul header:
- Redarea notelor muzicale pe Arduino:
- Schematică și hardware:
- Explicația programului Arduino:
- Funcționarea acestui circuit Melody Player Arduino:
Arduino este o modalitate excelentă de a simplifica și de a accelera proiectele de microcontroler, datorită comunității sale de dezvoltatori care au făcut ca totul să arate simplu. Există o mulțime de proiecte Arduino aici pentru a încerca și a vă distra. Unele dintre proiectele dvs. ar putea avea nevoie de acțiuni sonore pentru a notifica ceva sau doar pentru a impresiona spectatorii. Dacă ți-aș spune că aproape orice melodie tematică care ar putea fi cântată la un pian poate fi imitată pe Arduino cu ajutorul unui program simplu și a unui difuzor Piezo ieftin?
În acest tutorial vom învăța cât de simplu și ușor este să joci Melody pe Piezo Buzzer sau difuzor folosind funcția Arduino tone (). La sfârșitul acestui tutorial veți putea reda câteva tonuri celebre ale Piraților din Caraibe, Crazy Frog, Super Mario și Titanic. De asemenea, veți învăța cum să cântați orice piesă de muzică pentru pian cu Arduino. Verificați videoclipul la final.
Hardware necesar:
- Arduino (orice versiune - UNO este utilizată aici)
- Difuzor Piezo / Buzzer sau orice alt difuzor de 8ohm.
- Breadboard
- Conectarea firelor
- Apasa butoanele
- Rezistor 1k (opțional)
Înțelegerea funcției Tone () a Arduino:
Înainte de a putea înțelege cum funcționează un ton () ar trebui să știm cum funcționează un buzzer Piezo. S-ar putea să fi învățat despre cristalele piezo în școala noastră, nu este altceva decât un cristal care convertește vibrațiile mecanice în electricitate sau invers. Aici aplicăm un curent variabil (frecvență) pentru care cristalul vibrează astfel producând sunet. Prin urmare, pentru a face zgomotul Piezo să producă ceva zgomot, trebuie să facem cristalul electric Piezo să vibreze, tonul și tonul zgomotului depind de cât de repede vibrează cristalul. Prin urmare, tonul și tonul pot fi controlate prin variația frecvenței curentului.
Bine, deci cum obținem o frecvență variabilă de la Arduino ? Aici intervine funcția tone (). Tonul () poate genera o anumită frecvență pe un anumit pin. Durata de timp poate fi menționată, de asemenea, dacă este necesar. Sintaxa pentru tone () este
Ton de sintaxă (pin, frecvență) ton (pin, frecvență, durată) Parametri pin: pinul pe care se generează frecvența tonului: frecvența tonului în hertz - durata int nesemnată: durata tonului în milisecunde (opțional) - nesemnat lung
Valorile pinului pot fi oricare dintre pinul digital. Am folosit pinul 8 aici. Frecvența care poate fi generată depinde de dimensiunea temporizatorului de pe placa Arduino. Pentru UNO și majoritatea celorlalte plăci comune, frecvența minimă care poate fi produsă este de 31Hz, iar frecvența maximă care poate fi produsă este de 65535Hz. Cu toate acestea, noi, oamenii, putem auzi doar frecvențe între 2000Hz și 5000 Hz.
Pitches.h fișierul header:
Acum știm cum să producem un zgomot folosind funcția arduino tone () . Dar, de unde știm ce fel de ton se va genera pentru fiecare frecvență?
Arduino ne-a oferit un tabel de note care echivalează fiecare frecvență cu un anumit tip de notă muzicală. Acest tabel de note a fost scris inițial de Brett Hagman, pe a cărui lucrare se baza comanda tone () . Vom folosi acest tabel de note pentru a ne reda temele. Dacă sunteți cineva familiarizat cu partituri, ar trebui să puteți înțelege acest tabel, pentru alții ca mine, acestea sunt doar un alt bloc de cod.
#define NOTE_B0 31 #define NOTE_C1 33 #define NOTE_CS1 35 #define NOTE_D1 37 #define NOTE_DS1 39 #define NOTE_E1 41 #define NOTE_F1 44 #define NOTE_FS1 46 #define NOTE_G1 49 #define NOTE_GS1 52 #define NOTE_A1 55 #define NOTE_ NOTE_B1 62 #define NOTE_C2 65 #define NOTE_CS2 69 #define NOTE_D2 73 #define NOTE_DS2 78 #define NOTE_E2 82 #define NOTE_F2 87 #define NOTE_FS2 93 #define NOTE_G2 98 #define NOTE_GS2 104 #define NOTE_A2 110 #define NOTE_AS2 117 #define #define NOTE_C3 131 #define NOTE_CS3 139 #define NOTE_D3 147 #define NOTE_DS3 156 #define NOTE_E3 165 #define NOTE_F3 175 #define NOTE_FS3 185 #define NOTE_G3 196 #define NOTE_GS3 208 #define NOTE_A3 220 #define NOTE_AS3 233 #define NOTE_C4 262 #define NOTE_CS4 277 #define NOTE_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 349#define NOTE_FS4 370 #define NOTE_G4 392 #define NOTE_GS4 415 #define NOTE_A4 440 #define NOTE_AS4 466 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_CS5 554 #define NOTE_D5 587 #define NOTE_DS5 622 #define #define NOTE_FS5 740 #define NOTE_G5 784 #define NOTE_GS5 831 #define NOTE_A5 880 #define NOTE_AS5 932 #define NOTE_B5 988 #define NOTE_C6 1047 #define NOTE_CS6 1109 #define NOTE_D6 1175 #define NOTE_DS6 1245 #define NOTA_de6 #define NOTE_G6 1568 #define NOTE_GS6 1661 #define NOTE_A6 1760 #define NOTE_AS6 1865 #define NOTE_B6 1976 #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_DS7 2489 #define NOTE_E7 2637 #define NOTE_G7 3136 #define NOTE_GS7 3322 #define NOTE_A7 3520 #define NOTE_AS73729 #define NOTE_B7 3951 #define NOTE_C8 4186 #define NOTE_CS8 4435 #define NOTE_D8 4699 #define NOTE_DS8 4978
Codul de mai sus este dat în fișierul antet pitches.h din acest fișier zip , trebuie doar să descărcați și să includeți acest fișier în codul nostru Arduino, așa cum este dat la sfârșitul acestui tutorial sau să utilizați codul dat în fișierul zip.
Redarea notelor muzicale pe Arduino:
Pentru a reda o melodie decentă folosind Arduino, ar trebui să știm ce constituie aceste melodii. Cei trei factori principali necesari pentru a juca o temă sunt
- Notați valoarea
- Notă Durată
- Tempo
Avem fișierul antet pitches.h pentru a reda orice valoare a notei, acum ar trebui să aflăm durata specifică a notei sale pentru a o reda. Tempo nu este altceva decât cât de repede ar trebui să fie redată melodia. După ce cunoașteți valoarea Notei și durata Notei, le puteți folosi cu tonul () ca.
ton (pinName, Value Note, Note Duration);
Pentru tonurile redate în acest tutorial v-am dat nota Valoare și durata notei în fișierul antet „themes.h” cu ajutorul cărora le puteți reda în proiectele dvs. Dar dacă aveți un ton specific în al meu și doriți să-l redați în proiectul dvs. citiți mai departe… Altfel săriți peste acest subiect și treceți la următorul.
Pentru a reda orice ton specific, trebuie să obțineți partitura muzicii respective și să convertiți partitura în schița Arduino citind valoarea notei și durata notei din ea. Dacă sunteți student la muzică, ar fi o bucată de tort pentru dvs., altfel ați petrecut ceva timp și vă rupeți capul ca și mine. Dar la sfârșitul zilei, când sunetul dvs. se va auzi pe buzzer-ul Piezo, veți găsi efortul dvs. merită.
După ce aveți valoarea notei și durata notei, încărcați-le în program în fișierul antet „themes.h” așa cum se arată mai jos
// ############## ** ** EL ESTE UN PIRAT ”Cântec tematic al Piraților din Caraibe ** ############### // int Pirates_note = {NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTA, NOTA, NOTA, NOTA, NOTA, NOTA NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_G4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_C4, NOTE_C4, NOTE_D4, 0, NOTE_A3, NOTE_C4, NOTE_B, NOT_B, NOT_B, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4, NOTE_D4, 0, 0, NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_A4, NOTE_A, NOTA, NOTA, NOTA, NOTA 0, NOTE_D4, NOTE_E3, NOTE_F4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_D4, 0, NOTE_D4, NOTE_F4,NOTE_E4, NOTE_E4, NOTE_F4, NOTE_D4}; int Pirate_duration = {4,8,4,8,4,8,8,8,8,4,8,4,8,4,8,8,8,8,4,8,4,8, 4, 8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8, 8,4,8,8,8,4,4,8,8, 4,4,8,8,4,4,8,4, 4,8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8, 8,4,8,8,8,4,4,4,8,4,8,8,8,4,4,8,8}}; // ########### End of He is a Pirate song ############## //
Blocul de cod de mai sus arată valoarea notei și durata notei temei „El este un pirat” din filmul Pirații din Caraibe. Puteți adăuga tema în mod similar în acest fel.
Schematică și hardware:
Schema acestui proiect Arduino Tone Generator Project este prezentată în figura de mai jos:
Conexiunea este destul de simplă, avem un difuzor Piezo care este conectat la pinul 8 și la solul Arduino printr-un rezistor de 1K. Acest rezistor de 1k este un rezistor de limitare a curentului, care este utilizat pentru a menține curentul în limitele de siguranță. De asemenea, avem patru comutatoare pentru a selecta melodia dorită. Un capăt al comutatorului este conectat la masă, iar celălalt capăt este conectat la pinul 2, 3, 4 și respectiv 5. Comutatoarele vor avea rezistențe de tragere activate intern folosind software-ul. Deoarece circuitul este destul de simplu, acesta poate fi conectat folosind o placă de panificație, așa cum se arată mai jos:
Explicația programului Arduino:
Odată ce ați înțeles conceptul, programul Arduino este destul de simplu. Codul complet este dat la sfârșitul tutorialului. Dacă nu sunteți familiarizați cu adăugarea fișierelor antet, puteți descărca codul ca fișier ZIP de aici și încărcați-l direct pe Arduino.
Cele două de mai sus sunt fișierele antet care trebuie adăugate. „Pitchs.h” este utilizat pentru a echivala fiecare notă muzicală cu o anumită frecvență, iar „themes.h” conține valoarea notei și durata notei tuturor celor patru tonuri.
#include "pitches.h" #include "themes.h"
O funcție este creată pentru a reda fiecare ton atunci când este necesar. Aici, când funcția Play_Pirates () este numită, va fi redat tonul „He is a Pirate”. Această funcție constă din funcția de ton care produce frecvența la pinul 8. NoTone (8) este chemat să oprească muzica odată ce este redată. Dacă doriți să redați propriul ton, modificați Pirates_note și Pirates_duration cu noile valori ale notei și duratei pe care le-ați salvat în valoarea „themes.h”
void Play_Pirates () {for (int thisNote = 0; thisNote <(sizeof (Pirates_note) / sizeof (int)); thisNote ++) {int noteDuration = 1000 / Pirates_duration; // converti durata în ton de întârziere a timpului (8, Pirates_note, noteDuration); int pauseBetweenNotes = noteDuration * 1.05; // Aici 1.05 este tempo, creșteți pentru a reda o întârziere mai lentă (pauzăBetweenNotes); noTone (8); }}
Pinul 2, 3, 4 și 5 sunt folosite pentru a selecta tonul particular care trebuie redat. Acești pini sunt menținuți în mod implicit folosind rezistențele interne de tragere folosind linia de cod de mai sus. Când butonul este apăsat, este tras în jos la sol.
pinMode (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); pinMode (4, INPUT_PULLUP); pinMode (5, INPUT_PULLUP);
Blocul de cod de mai jos este folosit pentru a reda melodia când este apăsat un buton. Citește valoarea digitală a fiecărui buton și când devine scăzută (zero) presupune că butonul este apăsat și redă tonul respectiv apelând funcția dorită.
if (digitalRead (2) == 0) {Serial.println ("Selectat -> 'El este un pirat" "); Play_Pirates (); } if (digitalRead (3) == 0) {Serial.println ("Selected -> 'Crazy Frog'"); Play_CrazyFrog (); } if (digitalRead (4) == 0) {Serial.println ("Selectat -> 'Mario UnderWorld'"); Play_MarioUW (); } if (digitalRead (5) == 0) {Serial.println ("Selectat -> 'El este un pirat" "); Play_Pirates (); }
Funcționarea acestui circuit Melody Player Arduino:
Odată ce codul și hardware-ul dvs. sunt gata, pur și simplu ardeți programul în Arduino și ar trebui să puteți reda tonul prin simpla apăsare a butoanelor. Dacă aveți probleme, aruncați o privire la monitorul dvs. serial pentru depanare sau utilizați secțiunea de comentarii pentru a raporta problema și vă voi ajuta cu plăcere.
Lucrarea completă a proiectului este prezentată în videoclipul de mai jos. Sper că ți-a plăcut proiectul și l-ai folosi în unele dintre proiectele tale sau ai crea un ton nou pentru proiectul tău. Dacă da, nu ezitați să împărtășiți munca dvs. în secțiunea de comentarii.