În acest proiect vom construi o piesă de divertisment folosind Arduino. Cu toții avem acel obicei de a atinge Table sau Pix pentru a crea orice muzică aleatorie. Desigur, s-ar putea să nu fie considerat un bun manierism, dar tuturor ne place să o facem cel puțin o dată. Prin urmare, m-am gândit să-l duc la nivelul următor folosind capacitatea Arduino de a reda tonuri. Odată ce ați construit acest proiect, veți putea genera tonuri atingând degetele pe orice element conductiv și creați propriile ritmuri, cum ar fi să cântați la pian pe palmă. Sună bine, așa că hai să-l construim.
Componente necesare:
Materialele necesare pentru acest proiect sunt enumerate mai jos, nu este obligatoriu să rămânem la aceleași. Odată ce ați luat conceptul, puteți folosi propriul mod de a-l construi.
- Arduini Pro Mini
- Peizoare Speaker
- Senzor flexibil
- Mănuși deget
- Rezistențe 10K
- BC547 Tranzistoare
- Baterie de 9V
Schema și explicația circuitului:
Schema circuitului pentru acest pian Arduino Palm este prezentată mai jos.
Proiectul utilizează un total de patru senzori, adică două senzori flex și două perechi Darlington care acționează ca senzor tactil. De asemenea, am folosit două rezistențe de tragere R1 și R2 de 10k fiecare, care vor acționa ca rezistență de tragere pentru senzorul Flex. Aici senzorul Flex este utilizat pentru a genera trei tonuri diferite folosind un singur deget, în funcție de cât de mult s-a îndoit. Deci putem produce 6 sunete folosind două degete. Aflați aici despre senzorul flexibil.
Pereche Darlington:
Înainte de a continua, este important să știm ce este un Darlington și cum funcționează exact în proiectul nostru. Perechea Darlington poate fi definită ca doi tranzistori bipolari conectați în așa fel încât curentul amplificat de primul să fie amplificat în continuare de cel de-al doilea tranzistor. O pereche Darlington este prezentată în imaginea de mai jos:
După cum se arată mai sus, am folosit doi tranzistori BC547 ale căror colectoare sunt legate pentru a aduna și emițătorul primului tranzistor este conectat la baza celui de-al doilea tranzistor. Acest circuit acționează ca un amplificator cu un câștig, ceea ce înseamnă că orice semnal mic dat la baza primului tranzistor este suficient pentru a influența baza celui de-al doilea tranzistor. Corpul nostru acționează ca un sol aici, de aceea ori de câte ori atingem baza tranzistorului, al doilea tranzistor devine părtinitor. Folosind acest lucru în favoarea noastră, am construit senzorul tactil pentru acest proiect.
Pinii 2 și 3 sunt pinii de întrerupere de pe Arduino care vor fi trecuți cu ajutorul rezistențelor interne de tragere și apoi acei pin vor fi ținuți la sol ori de câte ori comutatorul Darlington se închide. În acest fel, de fiecare dată când atingem firul (de la baza primului tranzistor) se va declanșa o întrerupere din Arduino.
Folosirea a două degete poate produce doar două tipuri de tonuri, prin urmare, am adăugat și un senzor flex care va modifica tonul în funcție de cât de mult este îndoit. Am programat să produc trei tonuri diferite pe deget în funcție de cât de mult este îndoit degetul (senzorul flex). Puteți crește numărul dacă doriți să aveți mai multe tonuri la vârful degetelor.
Am făcut placa completă pe o tablă perf, astfel încât să se încadreze cu ușurință în palmele mele, dar puteți utiliza și o pană. Asigurați-vă că corpul dvs. atinge solul circuitului la un moment dat. Odată ce ați lipit totul, ar trebui să arate cam așa
Am folosit două mănuși pentru a fixa firele de la perechea Darlington și senzorul flex în poziție așa cum se arată mai sus. Puteți veni cu propria dvs. idee (mai bună dacă este posibil) pentru a le asigura în loc în timp ce redați tonurile.
Programare Arduino:
Programul pentru acest Arduino Tap Tone Generator este destul de simplu. Trebuie doar să ne uităm la întreruperile din firele Darlington și, dacă găsim una, trebuie să redăm tonul care depinde de cât de mult este îndoit senzorul flex. Codul complet este dat la sfârșitul acestui post, dar am explicat câteva bucăți importante mai jos.
Notă: Acest program funcționează cu ajutorul bibliotecii „pitches.h”. Deci, asigurați-vă că ați adăugat fișierul antet la programul dvs. înainte de al compila. Puteți descărca fișierul antet pitches.h de aici.
În funcția de configurare , inițializăm pinii 2 și 3 ca intrare cu rezistențe pull-up. Noi, de asemenea, să le declare ca pini de întrerupere și executa tone1 () atunci când există o întrerupere pe pinul 2 și funcția tone2 () atunci când există o întrerupere pe 3 rd PIN - ul. Aceste întreruperi vor fi declanșate ori de câte ori acești pini scad din starea lor de tragere.
void setup () {pinMode (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); attachInterrupt (digitalPinToInterrupt (2), tone1, LOW); attachInterrupt (digitalPinToInterrupt (3), tone2, LOW); Serial.begin (9600); }
În interiorul funcției buclă , verificăm constant cât de mult este îndoit senzorul flex. FlexSensor 1, de exemplu, a dat valori în jur de 200 când a fost lăsat plat și a coborât până la 130 când l-am îndoit la maxim, așa că am mapat valoarea de la 200 la 130 ca 1 la 3, deoarece trebuie să joc 3 tipuri diferite de tonuri. Trebuie să modificați aceste două linii pe baza valorilor senzorului Flex și a numărului de tonuri.
bucla void () {flexSensor1 = map (analogRead (A0), 200,130,1,3); // Mapează-ți propriile valori pe baza senzorului flex flexSensor2 = map (analogRead (A1), 170,185,1,3); // Hărțiți-vă cu propriile valori pe baza senzorului flex}
După cum am văzut mai devreme, funcția tone1 () va fi executată atunci când se detectează o întrerupere la pinul 2. Ce se întâmplă în interiorul funcției tone1 () este prezentat mai sus. Ne uităm la valorile FlexSensor1 și redăm un ton bazat pe valoarea flexSesnor. Tonurile vor fi redate folosind funcția de ton Arduino. Am explicat funcția tone () în proiectul nostru anterior.
void tone1 () {if (flexSensor1 == 1) tone (8, NOTE_D4,50); altfel dacă (flexSensor1 == 2) ton (8, NOTE_A3,50); altfel if (flexSensor1 == 3) ton (8, NOTE_G4,50); else ton (8, NOTE_D4,50); }
Linia de mai jos este utilizată pentru a reda tonul. Puteți reda orice ton disponibil în fișierul antet „pitches.h”. De exemplu, linia de mai sus redă NOTE_A3 pe pin pentru o durată de 50 de mili secunde.
ton (8, NOTE_A3,50); // ton (PinNum, Numele notei, Durata);
Lucru:
Odată ce hardware-ul dvs. este gata, încărcați codul și montați-l pe degete. Asigurați-vă că corpul dvs. atinge solul circuitului la un moment dat. Acum pur și simplu atingeți orice material conductiv sau corpul dvs. și ar trebui să puteți auzi tonul respectiv. Puteți reda propria melodie sau muzică atingând la intervale diferite și poziții diferite.
Video de mai jos arată lucrarea completă a mii de proiect. Sper că ți-a plăcut să construiești proiectul, orice sugestii sau întrebări pot fi postate în secțiunea de comentarii de mai jos. Verificați, de asemenea, proiectul nostru Arduino Audio Player și Arduino Tone Generator Project.