Cuprins:

Realizarea de melodii cu un Arduino și un motor DC: 6 pași
Realizarea de melodii cu un Arduino și un motor DC: 6 pași

Video: Realizarea de melodii cu un Arduino și un motor DC: 6 pași

Video: Realizarea de melodii cu un Arduino și un motor DC: 6 pași
Video: Home Automation: Change direction of rotation of DC motor using 2 relays and Arduino - Robojax 2024, Noiembrie
Anonim
Realizarea de melodii cu un Arduino și un motor DC
Realizarea de melodii cu un Arduino și un motor DC

Zilele trecute, în timp ce parcurgeam câteva articole despre Arduino, am văzut un proiect interesant care folosea motoare pas cu pas controlate de Arduino pentru a crea melodii scurte. Arduino a folosit un pin PWM (Pulse Width Modulation) pentru a rula motorul pas cu pas la frecvențe specifice, corespunzătoare notelor muzicale. Prin sincronizarea frecvențelor redate atunci când se putea auzi o melodie clară din motorul pas cu pas.

Cu toate acestea, când am încercat-o eu, am constatat că motorul pas cu pas pe care îl am nu se poate roti suficient de repede pentru a crea un ton. În schimb, am folosit un motor DC, care este relativ simplu de programat și conectat la un Arduino. Un IC comun L293D poate fi utilizat pentru a conduce cu ușurință motorul de la un pin Arduino PWM, iar funcția de ton nativ () din Arduino poate genera frecvența necesară. Spre surprinderea mea, nu am găsit niciun exemplu sau proiect care să folosească un motor de curent continuu online, așadar acest Instructables este răspunsul meu pentru a remedia acest lucru. Să începem!

P. S. Presupun că aveți deja o anumită experiență cu Arduino și sunteți familiarizați cu limbajul și hardware-ul său de programare. Ar trebui să știți ce sunt matricele, ce este PWM și cum să le utilizați și cum funcționează tensiunea și curentul, doar pentru a numi câteva lucruri. Dacă nu sunteți încă acolo sau pur și simplu ați început Arduino, nu vă faceți griji: încercați această pagină de pornire de pe site-ul oficial Arduino și reveniți ori de câte ori sunteți gata.:)

Provizii

  • Arduino (am folosit un UNO, dar puteți folosi un alt Arduino dacă doriți)
  • Motor standard de 5V DC, de preferință unul capabil să aibă un ventilator atașat (vezi imaginea din „Asamblarea circuitului”
  • L293D IC
  • La fel de multe butoane de apăsare ca note în melodia pe care doriți să o redați
  • Pană de pâine
  • Sârme jumper

Pasul 1: Prezentare generală

Iată cum funcționează proiectul: Arduino va genera o undă pătrată la o frecvență dată, pe care o transmite către L293D. L293D este conectat la o sursă de alimentare externă pe care o folosește pentru a alimenta motorul la frecvența dată de Arduino. Prin împiedicarea arborelui motorului de curent continuu să se rotească, motorul poate fi auzit oprindu-se și pornind la frecvența care produce un ton sau o notă. Putem programa Arduino pentru a reda note atunci când butoanele sunt apăsate sau pentru a le reda automat.

Pasul 2: Asamblarea circuitului

Asamblarea circuitului
Asamblarea circuitului
Asamblarea circuitului
Asamblarea circuitului

Pentru a asambla circuitul, pur și simplu urmați diagrama Fritzing de mai sus.

Sfat: Nota de la motor este cel mai bine auzită atunci când arborele nu se rotește. Am pus un ventilator pe arborele motorului meu și am folosit niște bandă adezivă pentru a menține ventilatorul liniștit în timp ce motorul funcționa (vezi imaginea). Acest lucru a împiedicat rotirea arborelui și a produs un ton clar, sonor. Este posibil să trebuiască să faceți câteva modificări pentru a obține un ton curat de la motor.

Pasul 3: Cum funcționează circuitul

Cum funcționează circuitul
Cum funcționează circuitul

L293D este un IC utilizat pentru conducerea dispozitivelor de înaltă tensiune, cu curent ridicat, precum relee și motoare. Arduino nu este capabil să acționeze majoritatea motoarelor direct din ieșirea sa (iar EMF din spate a motorului poate deteriora circuitele digitale sensibile ale Arduino), astfel încât un IC precum L293D poate fi utilizat cu o sursă de alimentare externă pentru a acționa cu ușurință motorul de curent continuu. Introducerea unui semnal în L293D va emite același semnal către motorul de curent continuu fără a risca deteriorarea Arduino.

Mai sus este o schemă funcțională / pinout a L293D din foaia sa tehnică. Deoarece conducem doar un motor (L293D poate conduce 2), avem nevoie doar de o parte a circuitului IC. Pinul 8 este putere, pinii 4 și 5 sunt GND, pinul 1 este ieșirea PWM de la Arduino, iar pinii 2 și 7 controlează direcția motorului. Când pinul 2 este HIGH și pinul 7 este LOW, motorul se rotește într-un sens și când pinul 2 este LOW și pinul 7 este HIGH, motorul se rotește invers. Deoarece nu ne pasă în ce direcție se rotește motorul, nu contează dacă pinii 2 și 7 sunt LOW sau HIGH, atâta timp cât sunt diferiți unul de celălalt. Pinii 3 și 6 se conectează la motor. Puteți conecta totul la cealaltă parte (pinii 9-16) dacă doriți, dar fiți conștienți de faptul că pinii de alimentare și PWM schimbă locul.

Notă: dacă utilizați un Arduino care nu are pini suficienți pentru fiecare buton, puteți utiliza o rețea de rezistențe pentru a conecta toate comutatoarele la un pin analogic, cum ar fi în acest instructable. Modul în care funcționează este în afara scopului acestui proiect, dar dacă ați folosit vreodată un RAC-2R DAC, ar trebui să vi se pară familiar. Rețineți că utilizarea unui pin analogic va necesita rescrierea unor porțiuni mari din cod, deoarece biblioteca de butoane nu poate fi utilizată cu pinii analogici.

Pasul 4: Cum funcționează codul

Pentru a face mai ușoară manipularea tuturor butoanelor, am folosit o bibliotecă numită „Buton” de madleech. Am inclus biblioteca în primul rând. Apoi, în rândurile 8-22, am definit frecvențele pentru notele necesare pentru a reda Twinkle, Twinkle, Little Star (piesa de exemplu), pinul pe care îl voi folosi pentru a conduce L293D și butoanele.

În funcția de configurare, am inițializat Serial, butoanele și am setat pinul driverului pentru L293D în modul de ieșire.

În cele din urmă, în bucla principală am verificat dacă a fost apăsat un buton. Dacă are, Arduino redă nota corespunzătoare și imprimă numele notei pe Serial Monitor (util pentru a ști care note sunt pe panoul dvs.). Dacă se eliberează o notă, arduino oprește orice sunet cu noTone ().

Din păcate, datorită modului în care este structurată biblioteca, nu am putut găsi o modalitate de a verifica dacă un buton a fost apăsat sau eliberat într-un mod mai puțin detaliat decât folosirea a 2 condiționale per notă. Un alt defect al acestui cod este că, dacă ar fi să apăsați simultan două butoane și apoi să eliberați unul dintre ele, ambele note ar fi oprite, deoarece noTone () oprește generarea oricăror note indiferent de nota care a declanșat-o.

Pasul 5: Programarea unei melodii

În loc să utilizați butoane pentru a reda note, puteți programa și Arduino pentru a reda automat o melodie pentru dvs. Iată o versiune modificată a primei schițe care joacă Twinkle, Twinkle, Little Star pe motor. Prima parte a schiței este aceeași - definirea frecvențelor notei și tonul Pin. Ajungem la noua parte la bpm = "100". Am setat ritmurile pe minut (bpm) și apoi folosesc câteva calcule pentru a afla numărul de milisecunde pe ritm pe care îl echivalează bpm. Pentru a face acest lucru, am folosit o tehnică numită analiză dimensională (nu vă faceți griji - nu este atât de greu pe cât pare). Dacă ați urmat vreodată un curs de chimie la liceu, cu siguranță ați folosit analiza dimensională pentru a converti între unități. Flotatoarele () sunt acolo pentru a se asigura că nimic din ecuație nu este rotunjit până la sfârșit pentru precizie.

După ce avem numărul de ms / beat, l-am împărțit sau înmulțit corespunzător pentru a găsi valorile de milisecunde ale diferitelor durate ale notelor găsite în muzică. Apoi fac o serie de fiecare notă în ordine cronologică și o alta cu durata fiecărei note. Este esențial ca indicele fiecărei note să se potrivească cu cel al duratei sale, altfel melodia dvs. va suna. Am pus notele pentru Twinkle, Twinkle, Little Star aici ca exemplu, dar puteți încerca orice melodie sau secvență de note pe care doriți.

Adevărata magie se întâmplă în funcția de buclă. Pentru fiecare dintre note, redau tonul pentru o perioadă specificată în matricea beat_values. În loc să folosesc întârzierea aici, ceea ce ar face ca tonul să nu fie redat, am înregistrat timpul de când programul a început cu funcția millis () și l-am scăzut din ora curentă. Când timpul depășește timpul în care am specificat că nota va dura în matricea beat_values, opresc nota. Întârzierea după bucla for este acolo pentru a adăuga un decalaj între note, asigurându-se că notele ulterioare cu aceeași frecvență nu se vor amesteca.

Pasul 6: Feedback

Gata pentru acest proiect. Dacă aveți ceva ce nu înțelegeți sau dacă aveți sugestii, vă rugăm să nu ezitați să mă contactați. Deoarece acesta este primul meu instructable, aș aprecia foarte mult comentariile și sugestiile despre cum să îmbunătățesc acest conținut. Ne vedem data viitoare!

Recomandat: