Sadržaj:

Stvaranje pjesama s Arduinom i istosmjernim motorom: 6 koraka
Stvaranje pjesama s Arduinom i istosmjernim motorom: 6 koraka

Video: Stvaranje pjesama s Arduinom i istosmjernim motorom: 6 koraka

Video: Stvaranje pjesama s Arduinom i istosmjernim motorom: 6 koraka
Video: 30 невероятных проектов Arduino, которые вы должны попробовать 2024, Juli
Anonim
Stvaranje pjesama s Arduinom i istosmjernim motorom
Stvaranje pjesama s Arduinom i istosmjernim motorom

Neki dan, dok sam listao neke članke o Arduinu, uočio sam zanimljiv projekt koji je koristio koračne motore kontrolirane Arduinom za stvaranje kratkih melodija. Arduino je koristio PWM (Pulse Width Modulation) pin za pokretanje koračnog motora na određenim frekvencijama, koje odgovaraju muzičkim notama. Mjerenjem vremena kada su se frekvencije reproducirale, jasna melodija mogla se čuti iz koračnog motora.

Međutim, kad sam to i sam isprobao, otkrio sam da se stepper motor koji imam ne može rotirati dovoljno brzo da stvori ton. Umjesto toga, koristio sam istosmjerni motor, koji je relativno jednostavan za programiranje i povezivanje s Arduinom. Uobičajeni L293D IC može se koristiti za jednostavno pokretanje motora s Arduino PWM pina, a funkcija izvornog tona () u Arduinu može generirati potrebnu frekvenciju. Na moje iznenađenje, na internetu nisam pronašao nijedan primjer ili projekt korištenja istosmjernog motora, pa je ovaj Instructables moj odgovor na to. Hajde da počnemo!

P. S. Pretpostavljam da već imate određeno iskustvo s Arduinom i da ste upoznati s njegovim programskim jezikom i hardverom. Trebali biste znati što su nizovi, što je PWM i kako ga koristiti, te kako rade napon i struja, samo da navedemo nekoliko stvari. Ako još niste tamo ili ste tek započeli s Arduinom, ne brinite: isprobajte ovu stranicu za početak sa službene web stranice Arduino i vratite se kad god budete spremni.:)

Supplies

  • Arduino (koristio sam UNO, ali možete koristiti i drugi Arduino ako želite)
  • Standardni 5V DC motor, po mogućnosti jedan s ventilatorom (vidi sliku u "Sklapanje kruga"
  • L293D IC
  • Onoliko dugmadi koliko nota u pjesmi želite reproducirati
  • Breadboard
  • Džemper žice

Korak 1: Pregled

Evo kako projekt funkcionira: Arduino će generirati kvadratni val na zadanoj frekvenciji, koji šalje na L293D. L293D je spojen na vanjsko napajanje koje koristi za napajanje motora na frekvenciji koju daje Arduino. Sprečavanjem rotacije vratila istosmjernog motora, može se čuti kako se motor isključuje i uključuje na frekvenciji koja proizvodi ton ili notu. Možemo programirati Arduino da svira note kada se pritisnu tipke ili da ih automatski svira.

Korak 2: Sastavljanje kruga

Sklapanje kola
Sklapanje kola
Sklapanje kola
Sklapanje kola

Da biste sastavili krug, jednostavno slijedite gornji dijagram Fritzinga.

Savjet: Napomena motora se najbolje čuje kada se vratilo ne okreće. Stavio sam ventilator na vratilo svog motora i upotrijebio malo ljepljive trake da držim ventilator mirno dok motor radi (vidi sliku). To je spriječilo okretanje vratila i proizvelo jasan, zvučan ton. Možda ćete morati malo prilagoditi kako biste dobili čisti ton iz vašeg motora.

Korak 3: Kako krug funkcionira

Kako radi kolo
Kako radi kolo

L293D je IC koji se koristi za pogon uređaja relativno visokog napona, velike struje, poput releja i motora. Arduino ne može pokretati većinu motora direktno sa svog izlaza (a stražnji EMF iz motora može oštetiti Arduino osjetljivo digitalno kolo), pa se IC poput L293D može koristiti s vanjskim napajanjem za jednostavno pokretanje istosmjernog motora. Unošenjem signala u L293D isti će se signal emitirati na istosmjerni motor bez rizika od oštećenja Arduina.

Gore je ispis/funkcionalna shema L293D iz njegove podatkovne tablice. Budući da upravljamo samo jednim motorom (L293D može voziti 2), potrebna nam je samo jedna strana IC -a. Pin 8 je napajanje, pinovi 4 i 5 su GND, pin 1 je PWM izlaz iz Arduina, a pinovi 2 i 7 kontroliraju smjer motora. Kada je iglica 2 visoka i iglica 7 niska, motor se okreće u jednom smjeru, a kada je iglica 2 niska i pin 7 visoka, motor se okreće u drugom smjeru. Budući da nas ne zanima na koji se način motor okreće, nije važno jesu li iglice 2 i 7 niske ili visoke, sve dok se međusobno razlikuju. Igle 3 i 6 spajaju se na motor. Sve možete spojiti na drugu stranu (pinovi 9-16) ako želite, ali imajte na umu da pinovi za napajanje i PWM mijenjaju mjesta.

Napomena: Ako koristite Arduino koji nema dovoljno pinova za svako dugme, možete upotrijebiti mrežu otpornika za povezivanje svih prekidača na jedan analogni pin, na primjer u ovim uputama. Kako ovo funkcionira izvan je opsega ovog projekta, ali ako ste ikada koristili R-2R DAC, trebalo bi vam biti poznato. Imajte na umu da će upotreba analognog pina zahtijevati prepisivanje velikih dijelova koda jer se knjižnica Button ne može koristiti s analognim pinovima.

Korak 4: Kako kôd funkcionira

Da bih olakšao rukovanje svim gumbima, koristio sam biblioteku Madleech koja se zove “Button”. Uključio sam biblioteku kao prvo. Zatim sam u redovima 8-22 definirao frekvencije za note potrebne za sviranje Twinkle, Twinkle, Little Star (primjer pjesme), pin koji ću koristiti za vožnju L293D i tipke.

U funkciji postavljanja inicijalizirao sam serijski broj, gumbe i postavio iglu upravljačkog programa za L293D u način rada za izlaz.

Konačno, u glavnoj petlji sam proverio da li je dugme pritisnuto. Ako jeste, Arduino reproducira odgovarajuću notu i ispisuje naziv bilješke na serijskom monitoru (korisno za znati koje su bilješke koje na vašoj matičnoj ploči). Ako se pusti nota, arduino zaustavlja svaki zvuk pomoću funkcije noTone ().

Nažalost, zbog načina na koji je biblioteka strukturirana, nisam mogao pronaći način da provjerim je li dugme pritisnuto ili otpušteno na manje detaljan način nego koristeći 2 uvjeta po noti. Još jedna mana ovog koda je da ako pritisnete dva dugmeta istovremeno, a zatim otpustite jedno od njih, obje bilješke bi bile zaustavljene, jer noTone () zaustavlja generiranje bilješki bez obzira na to koja je bilješka to pokrenula.

Korak 5: Programiranje pjesme

Umjesto gumba za reprodukciju nota, Arduino možete programirati i za automatsku reprodukciju melodije. Evo modificirane verzije prve skice koja igra Twinkle, Twinkle, Little Star na motoru. Prvi dio skice je isti - definira frekvencije note i tonPin. Dolazimo do novog dijela na bpm = "100". Postavio sam otkucaje u minuti (bpm), a zatim pomoću neke matematike izračunao broj milisekundi po taktu na koji je bpm jednak. Da bih to učinio, upotrijebio sam tehniku koja se zove dimenzionalna analiza (ne brinite - nije tako teško kao što zvuči). Ako ste ikada pohađali gimnazijski kurs hemije, definitivno ste koristili dimenzionalnu analizu za pretvaranje jedinica. Plovci () su tu da osiguraju da ništa u jednadžbi nije zaokruženo do samog kraja radi tačnosti.

Nakon što imamo broj ms/otkucaja, podijelio sam ga ili pomnožio na odgovarajući način kako bih pronašao milisekundne vrijednosti različitih trajanja nota koje se nalaze u muzici. Zatim pravim niz svake bilješke hronološkim redoslijedom i još jednu s trajanjem svake note. Vrlo je važno da se indeks svake note podudara s indeksom njenog trajanja, inače će vaša melodija zvučati isključeno. Ovdje sam stavio bilješke za Twinkle, Twinkle, Little Star kao primjer, ali možete isprobati bilo koju pjesmu ili niz bilješki koje želite.

Prava magija događa se u funkciji petlje. Za svaku notu sviram ton neko vrijeme koje sam naveo u nizu beat_values. Umjesto da ovdje koristim odgodu, što bi dovelo do toga da se ton ne pušta, zabilježio sam vrijeme od početka programa funkcijom millis () i oduzeo ga od trenutnog vremena. Kad vrijeme pređe vrijeme koje sam naveo u bilješci beat_values da bilješka traje, zaustavljam bilješku. Kašnjenje nakon for petlje postoji kako bi se povećao jaz između nota, osiguravajući da se sljedeće note iste frekvencije neće spojiti zajedno.

Korak 6: Povratne informacije

To je to za ovaj projekat. Ako imate nešto što ne razumijete ili imate bilo kakav prijedlog, slobodno me kontaktirajte. Kako je ovo moj prvi Instructables, bio bih jako zahvalan na komentarima i prijedlozima o tome kako poboljšati ovaj sadržaj. Vidimo se sljedeći put!

Preporučuje se: