Taula de continguts:

Fer cançons amb un Arduino i un motor de CC: 6 passos
Fer cançons amb un Arduino i un motor de CC: 6 passos

Vídeo: Fer cançons amb un Arduino i un motor de CC: 6 passos

Vídeo: Fer cançons amb un Arduino i un motor de CC: 6 passos
Vídeo: Не выбрасывайте двигатель стеклоподъемника автомобиля 2024, Desembre
Anonim
Fer cançons amb un Arduino i un motor de corrent continu
Fer cançons amb un Arduino i un motor de corrent continu

L’altre dia, mentre rodejava alguns articles sobre Arduino, vaig veure un interessant projecte que feia servir motors pas a pas controlats per Arduino per crear melodies curtes. L'Arduino utilitzava un pin PWM (Pulse Width Modulation) per fer funcionar el motor pas a pas a freqüències específiques, corresponents a notes musicals. En temporitzar quines freqüències es reproduïen quan es podia escoltar una melodia clara des del motor pas a pas.

Tot i això, quan ho vaig provar jo mateix, vaig comprovar que el motor pas a pas que tinc no pot girar prou ràpid com per crear un to. En canvi, he utilitzat un motor de corrent continu, que és relativament senzill de programar i connectar a un Arduino. Es pot utilitzar un IC L293D comú per conduir fàcilment el motor des d’un pin Arduino PWM i la funció de to natiu () a Arduino pot generar la freqüència necessària. Per a la meva sorpresa, no vaig trobar cap exemple ni projecte que utilitzés un motor de corrent continu en línia, i per tant, aquest Instructables és la meva resposta per solucionar-ho. Comencem!

P. S. Suposo que ja teniu experiència amb l'Arduino i que esteu familiaritzat amb el llenguatge de programació i el maquinari. Heu de saber què són les matrius, què és el PWM i com utilitzar-lo, i com funcionen els voltatges i els corrents, només per citar algunes coses. Si encara no hi sou o només inicieu Arduino, no us preocupeu: proveu aquesta pàgina d’inici des del lloc web oficial d’Arduino i torneu-hi quan estigueu a punt.:)

Subministraments

  • Arduino (he utilitzat un UNO, però podeu utilitzar un Arduino diferent si voleu)
  • Motor estàndard de 5 V CC, preferiblement un capaç de tenir un ventilador connectat (vegeu la imatge a "Muntatge del circuit"
  • L293D IC
  • Tants botons polsadors com notes de la cançó que vulgueu reproduir
  • Taula de pa
  • Filferros de pont

Pas 1: Visió general

Així és com funciona el projecte: l’Arduino generarà una ona quadrada a una freqüència determinada, que emet al L293D. El L293D està connectat a una font d'alimentació externa que utilitza per alimentar el motor a la freqüència que li proporciona l'Arduino. En evitar que l’eix del motor de CC giri, es pot escoltar i encendre el motor a la freqüència, que produeix un to o nota. Podem programar l’Arduino per reproduir notes quan es premen els botons o per reproduir-les automàticament.

Pas 2: Muntatge del circuit

Muntatge del circuit
Muntatge del circuit
Muntatge del circuit
Muntatge del circuit

Per muntar el circuit, simplement seguiu el diagrama de Fritzing anterior.

Consell: la nota del motor s’escolta millor quan l’eix no gira. Vaig posar un ventilador a l’eix del motor i vaig utilitzar una cinta adhesiva per mantenir el ventilador quiet mentre el motor funcionava (veure imatge). Això va evitar que l’eix girés i va produir un to clar i sonor. És possible que hàgiu de fer algunes modificacions per obtenir un to net del motor.

Pas 3: Com funciona el circuit

Com funciona el circuit
Com funciona el circuit

El L293D és un CI que s’utilitza per conduir dispositius de corrent relativament alt, com relés i motors. L'Arduino no pot conduir la majoria dels motors directament des de la seva sortida (i la CEM posterior del motor pot danyar els sensibles circuits digitals de l'Arduino), de manera que un CI com el L293D es pot utilitzar amb una font d'alimentació externa per accionar fàcilment el motor de corrent continu. Si introduïu un senyal al L293D, es generarà el mateix senyal al motor de corrent continu sense arriscar cap dany a l’Arduino.

A la part superior es mostra un esquema funcional / pinout del L293D del seu full de dades. Com que només estem conduint 1 motor (el L293D pot accionar-ne 2), només necessitem un costat de l'IC. El pin 8 és alimentat, els pins 4 i 5 són GND, el pin 1 és la sortida PWM de l’Arduino i els pins 2 i 7 controlen la direcció del motor. Quan el pin 2 és ALT i el pin 7 és BAIX, el motor gira d’una manera i, quan el pin 2 és BAIX i el pin 7 és HIGH, el motor gira a l’altre sentit. Com que no ens importa de quina manera gira el motor, no importa si els passadors 2 i 7 són BAIXOS o ALTS, sempre que siguin diferents entre si. Els pins 3 i 6 es connecten al motor. Podeu connectar-ho tot a l'altre costat (pins 9-16) si voleu, però tingueu en compte que els pins d'alimentació i PWM canvien de lloc.

Nota: Si utilitzeu un Arduino que no té prou pins per a cada botó, podeu utilitzar una xarxa de resistències per connectar tots els commutadors a un pin analògic, com ara en aquest instructable. El funcionament d’això està fora de l’abast d’aquest projecte, però si alguna vegada heu utilitzat un R-2R DAC, hauríeu de resultar familiar. Tingueu en compte que, per utilitzar un pin analògic, cal que reescriviu una gran part del codi, ja que la biblioteca de botons no es pot utilitzar amb pins analògics.

Pas 4: Com funciona el codi

Per facilitar el maneig de tots els botons, he utilitzat una biblioteca anomenada "Button" de madleech. Vaig incloure la biblioteca primer. A continuació, a les línies 8-22, vaig definir les freqüències de les notes necessàries per tocar Twinkle, Twinkle, Little Star (la cançó d’exemple), el pin que utilitzaré per conduir el L293D i els botons.

A la funció de configuració, vaig inicialitzar el serial, els botons i vaig configurar el pin del controlador del L293D al mode de sortida.

Finalment, al bucle principal vaig comprovar si s’ha premut un botó. Si és així, l'Arduino reprodueix la nota corresponent i imprimeix el nom de la nota al monitor sèrie (útil per saber quines notes es mostren a la vostra taula). Si s’allibera una nota, l’arduino atura qualsevol so amb noTone ().

Malauradament, a causa de la manera com s’estructura la biblioteca, no he pogut trobar la manera de comprovar si s’ha premut o alliberat un botó d’una manera menys detallada que no pas amb 2 condicionals per nota. Un altre defecte d’aquest codi és que si premeu dos botons simultàniament i deixeu anar un d’ells, s’aturarien les dues notes, perquè noTone () impedeix que es generin notes independentment de la nota que l’hagi activat.

Pas 5: programació d'una cançó

En lloc d’utilitzar botons per reproduir notes, també podeu programar l’Arduino perquè reprodueixi una melodia automàticament. Aquí teniu una versió modificada del primer esbós que reprodueix Twinkle, Twinkle, Little Star al motor. La primera part de l’esbós és la mateixa: defineix les freqüències de les notes i el to Pin. Arribem a la part nova a bpm = "100". He definit els temps per minut (bpm) i, a continuació, faig servir algunes matemàtiques per esbrinar el nombre de mil·lisegons per cop que equivalen a la ppm. Per fer-ho, he utilitzat una tècnica anomenada anàlisi dimensional (no us preocupeu, no és tan difícil com sembla). Si alguna vegada heu fet un curs de química a l’institut, heu utilitzat definitivament l’anàlisi dimensional per convertir entre unitats. Els flotadors () hi són per garantir que res de l’equació no s’arrodoneixi fins al final per obtenir una precisió més gran.

Després de tenir el nombre de ms / beat, el vaig dividir o multiplicar adequadament per trobar els valors de mil·lisegons de les diferents durades de les notes que es troben a la música. A continuació, faig una matriu de cada nota en ordre cronològic i una altra amb la durada de cada nota. És fonamental que l’índex de cada nota coincideixi amb l’índex de la seva durada; en cas contrari, la melodia sonarà. He posat aquí les notes de Twinkle, Twinkle, Little Star com a exemple, però podeu provar qualsevol cançó o seqüència de notes que vulgueu.

La màgia real passa a la funció de bucle. Per a cadascuna de les notes, toco el to durant un temps que he especificat a la matriu beat_values. En lloc d'utilitzar el retard aquí, que faria que no es reproduís el to, vaig enregistrar el temps des que el programa va començar amb la funció millis () i el restava de l'hora actual. Quan el temps supera el temps en què he especificat que la nota duraria a la matriu beat_values, aturo la nota. El retard després del bucle for existeix per afegir un buit entre les notes i garantir que les notes posteriors amb la mateixa freqüència no es combinin.

Pas 6: comentaris

Això és tot per a aquest projecte. Si hi ha alguna cosa que no enteneu o si teniu algun suggeriment, no dubteu en posar-vos en contacte amb mi. Com que són els meus primers instructables, agrairia molt els comentaris i suggeriments sobre com millorar aquest contingut. Ens veiem a la propera!

Recomanat: