Talaan ng mga Nilalaman:

Paggawa ng Mga Kanta Sa Isang Arduino at isang DC Motor: 6 Mga Hakbang
Paggawa ng Mga Kanta Sa Isang Arduino at isang DC Motor: 6 Mga Hakbang

Video: Paggawa ng Mga Kanta Sa Isang Arduino at isang DC Motor: 6 Mga Hakbang

Video: Paggawa ng Mga Kanta Sa Isang Arduino at isang DC Motor: 6 Mga Hakbang
Video: Isang bata sinaksak ang kutsara sa extension.. Patay馃槶馃槶 2024, Hunyo
Anonim
Paggawa ng Mga Kanta Sa Isang Arduino at isang DC Motor
Paggawa ng Mga Kanta Sa Isang Arduino at isang DC Motor

Noong isang araw, habang nag-scroll sa ilang mga artikulo tungkol sa Arduino, nakita ko ang isang kagiliw-giliw na proyekto na gumagamit ng mga motor na stepper na kinokontrol ng Arduino upang lumikha ng mga maikling himig. Gumamit ang Arduino ng isang PWM (Pulse Width Modulation) na pin upang patakbuhin ang stepper motor sa mga tukoy na frequency, naaayon sa mga tala ng musikal. Sa pamamagitan ng tiyempo kung aling mga frequency ang nagpatugtog kung kailan, isang malinaw na himig ang maririnig mula sa stepper motor.

Gayunpaman, nang subukan ko ito mismo, nalaman ko na ang stepper motor na mayroon ako ay hindi maaaring paikutin nang sapat upang lumikha ng isang tono. Sa halip, gumamit ako ng isang DC motor, na medyo simple upang mai-program at kumonekta sa isang Arduino. Ang isang karaniwang L293D IC ay maaaring magamit upang madaling himukin ang motor mula sa isang Arduino PWM pin, at ang function ng katutubong tone () sa Arduino ay maaaring makabuo ng kinakailangang dalas. Sa aking sorpresa, wala akong nakitang anumang mga halimbawa o proyekto na gumagamit ng isang DC motor online, at sa gayon ang Instructables na ito ay ang aking tugon upang malunasan iyon. Magsimula na tayo!

P. S. Ipinapalagay ko na mayroon ka nang ilang karanasan sa Arduino at pamilyar sa wika ng pag-program at hardware nito. Dapat mong malaman kung ano ang mga array, kung ano ang PWM at kung paano ito gamitin, at kung paano ang boltahe at kasalukuyang trabaho, upang pangalanan lamang ang ilang mga bagay. Kung wala ka pa o nagsimula lamang ang Arduino, huwag mag-alala: subukan ang panimulang pahina na ito mula sa opisyal na website ng Arduino at bumalik tuwing handa ka na.:)

Mga gamit

  • Arduino (Gumamit ako ng isang UNO ngunit maaari kang gumamit ng ibang Arduino kung nais mo)
  • Karaniwang 5V DC Motor, mas mabuti na may isang nakakabit na fan (tingnan ang larawan sa "Assembling the Circuit"
  • L293D IC
  • Tulad ng maraming mga pindutan ng push bilang mga tala sa kanta na nais mong i-play
  • Breadboard
  • Jumper Wires

Hakbang 1: Pangkalahatang-ideya

Narito kung paano gumagana ang proyekto: ang Arduino ay bubuo ng isang parisukat na alon sa isang naibigay na dalas, na kung saan ito output sa L293D. Ang L293D ay naka-hook hanggang sa isang panlabas na supply ng kuryente na ginagamit nito upang paandarin ang motor sa dalas na ibinibigay ng Arduino. Sa pamamagitan ng pagpigil sa baras ng motor na DC mula sa pag-ikot, maririnig ang motor na patayin at nakabukas sa dalas, na gumagawa ng isang tono, o tala. Maaari naming i-program ang Arduino upang i-play ang mga tala kapag pinindot ang mga pindutan, o upang awtomatikong i-play ang mga ito.

Hakbang 2: Pag-iipon ng Circuit

Pag-iipon ng Circuit
Pag-iipon ng Circuit
Pag-iipon ng Circuit
Pag-iipon ng Circuit

Upang tipunin ang circuit, sundin lamang ang diagram ng Fritzing sa itaas.

Tip: Ang tala mula sa motor ay pinakamahusay na naririnig kapag ang baras ay hindi umiikot. Inilagay ko ang isang fan sa baras ng aking motor at gumamit ng ilang duct tape upang hawakan pa rin ang fan habang tumatakbo ang motor (tingnan ang larawan). Pinigilan nito ang baras mula sa pag-on at gumawa ng isang malinaw, naririnig na tono. Maaaring kailanganin mong gumawa ng ilang pag-aayos upang makakuha ng isang malinis na tono mula sa iyong motor.

Hakbang 3: Paano Gumagana ang Circuit

Paano Gumagana ang Circuit
Paano Gumagana ang Circuit

Ang L293D ay isang IC na ginagamit para sa pagmamaneho ng medyo mataas na boltahe, mataas na kasalukuyang aparato tulad ng mga relay at motor. Ang Arduino ay hindi maaaring magmaneho ng karamihan sa mga motor nang direkta mula sa output nito (at ang likod na EMF mula sa motor ay maaaring makapinsala sa sensitibong digital circuitry ng Arduino), kaya ang isang IC tulad ng L293D ay maaaring magamit sa isang panlabas na suplay ng kuryente upang madaling maitaboy ang DC motor. Ang pag-input ng isang senyas sa L293D ay maglalabas ng parehong signal sa DC motor nang hindi nanganganib ang pinsala sa Arduino.

Sa itaas ay isang pinout / functional na eskematiko ng L293D mula sa datasheet nito. Dahil sa nagmamaneho lamang kami ng 1 motor (ang L293D ay maaaring magmaneho ng 2), kailangan lamang namin ang isang bahagi ng IC. Ang Pin 8 ay kapangyarihan, ang mga pin na 4 at 5 ay GND, ang pin 1 ay ang output ng PWM mula sa Arduino, at ang mga pin 2 at 7 ay kumokontrol sa direksyon ng motor. Kapag ang pin 2 ay HINDI at ang pin 7 ay mababa, ang motor ay umiikot sa isang paraan, at kapag ang pin 2 ay LOW at ang pin 7 ay HIGH, ang motor ay umiikot sa ibang paraan. Dahil wala kaming pakialam kung aling paraan ang motor ay umiikot, hindi mahalaga kung ang mga pin 2 at 7 ay Mababa o MATAAS, hangga't magkakaiba ang mga ito sa bawat isa. Ang mga pin 3 at 6 ay kumonekta sa motor. Maaari mong ikonekta ang lahat sa iba pang mga bahagi (pin 9-16) kung nais mo, ngunit magkaroon ng kamalayan na ang kapangyarihan at PWM pin lumipat lugar.

Tandaan: Kung gumagamit ka ng isang Arduino na walang sapat na mga pin para sa bawat pindutan, maaari mong gamitin ang isang network ng mga resistors upang ikonekta ang lahat ng mga switch sa isang analog pin, tulad ng mga itinuturo na ito. Paano ito gumagana ay nasa labas ng saklaw ng proyektong ito, ngunit kung gumamit ka man ng isang R-2R DAC dapat mong malaman na pamilyar ito. Tandaan na ang paggamit ng isang analog pin ay mangangailangan ng malalaking mga bahagi ng code upang muling maisulat, dahil ang library ng Button ay hindi maaaring magamit sa mga analog pin.

Hakbang 4: Paano Gumagana ang Code

Upang gawing mas madali ang paghawak ng lahat ng mga pindutan, gumamit ako ng isang silid-aklatan na tinatawag na "Button" ni madleech. Isinama ko muna ang library. Susunod, sa mga linya 8-22, tinukoy ko ang mga frequency para sa mga tala na kinakailangan upang i-play ang Twinkle, Twinkle, Little Star (ang halimbawang kanta), ang pin na gagamitin ko upang himukin ang L293D, at ang mga pindutan.

Sa pag-andar ng pag-setup, sinimulan ko ang Serial, ang mga pindutan, at itinakda ang driver pin para sa L293D sa output mode.

Sa wakas, sa pangunahing loop tiningnan ko upang makita kung ang isang pindutan ay pinindot. Kung mayroon ito, nilalaro ng Arduino ang kaukulang tala at inililimbag ang pangalan ng tala sa Serial Monitor (kapaki-pakinabang para malaman kung aling mga tala ang alin sa iyong breadboard). Kung ang isang tala ay inilabas, ang arduino ay tumitigil sa anumang tunog gamit ang noTone ().

Sa kasamaang palad, dahil sa paraan ng pagkakabuo ng silid-aklatan, hindi ako makahanap ng isang paraan upang suriin kung ang isang pindutan ay pinindot o pinakawalan sa isang hindi gaanong salita na paraan kaysa sa paggamit ng 2 mga kundisyon bawat tala. Ang isa pang kamalian sa code na ito ay kung pipindutin mo nang sabay ang dalawang mga pindutan at pagkatapos ay pakawalan ang isa sa kanila, titigil ang parehong mga tala, sapagkat pinipigilan ng noTone () ang anumang mga tala na nabuo anuman ang aling tala ang nag-trigger dito.

Hakbang 5: Pagprograma ng isang Kanta

Sa halip na gamitin ang mga pindutan upang i-play ang mga tala, maaari mo ring i-program ang Arduino upang awtomatikong maglaro ng isang himig para sa iyo. Narito ang isang nabagong bersyon ng unang sketch na gumaganap ng Twinkle, Twinkle, Little Star sa motor. Ang unang bahagi ng sketch ay pareho - pagtukoy ng mga frequency ng tala at ang tonePin. Nakakarating kami sa bagong bahagi sa bpm = "100". Itinakda ko ang mga beats bawat minuto (bpm), at pagkatapos ay gumamit ng ilang matematika upang malaman ang bilang ng mga milliseconds bawat talunin na katumbas ng bpm. Upang magawa ito, gumamit ako ng diskarteng tinatawag na dimensional analysis (huwag mag-alala - hindi ito mahirap ganoong tunog). Kung nakakuha ka na ng kurso sa kimika ng high school, tiyak na gumamit ka ng dimensional na pagtatasa upang mag-convert sa pagitan ng mga yunit. Ang mga float () ay nariyan upang matiyak na wala sa equation ang bilugan hanggang sa pinakadulo para sa kawastuhan.

Matapos magkaroon kami ng bilang ng ms / beat, hinati ko o pinarami ito nang naaangkop upang makita ang mga halagang millisecond ng iba't ibang mga tagal ng tala na matatagpuan sa musika. Gumagawa ako pagkatapos ng isang hanay ng bawat tala nang magkakasunud-sunod, at isa pa na may tagal ng bawat tala. Kritikal na ang index ng bawat tala ay tumutugma sa index ng tagal nito, kung hindi man, ang iyong himig ay tatunog. Inilagay ko ang mga tala para sa Twinkle, Twinkle, Little Star dito bilang isang halimbawa ngunit maaari mong subukan ang anumang kanta o pagkakasunud-sunod ng mga tala na gusto mo.

Ang tunay na mahika ay nangyayari sa pagpapaandar ng loop. Para sa bawat tala, pinapatugtog ko ang tono nang isang oras na tinukoy ko sa beat_values array. Sa halip na gamitin ang pagkaantala dito, na maaaring maging sanhi ng hindi pag-play ng tono, naitala ko ang oras mula nang magsimula ang programa sa pagpapaandar ng millis (), at ibawas ito mula sa kasalukuyang oras. Kapag lumampas ang oras sa oras na tinukoy ko ang tala na tatagal sa beat_values array, ihihinto ko ang tala. Ang pagkaantala pagkatapos ng para sa loop ay naroon upang magdagdag ng isang agwat sa pagitan ng mga tala, tinitiyak na ang mga kasunod na tala na may parehong dalas ay hindi magkakasama.

Hakbang 6: Puna

Iyon lang para sa proyektong ito. Kung may isang bagay na hindi mo naiintindihan, o kung mayroon kang anumang mga mungkahi, mangyaring huwag mag-atubiling makipag-ugnay sa akin. Dahil ito ang aking unang Mga Tagubilin, lubos kong pinahahalagahan ang mga komento at mungkahi tungkol sa kung paano mapapabuti ang nilalamang ito. Magkita tayo sa susunod!

Inirerekumendang: