Sommario:

Creare canzoni con un Arduino e un motore CC: 6 passaggi
Creare canzoni con un Arduino e un motore CC: 6 passaggi

Video: Creare canzoni con un Arduino e un motore CC: 6 passaggi

Video: Creare canzoni con un Arduino e un motore CC: 6 passaggi
Video: Tutorial Arduino ITA 14: gestire un motore DC con Arduino grazie ad un transistor 2024, Dicembre
Anonim
Fare canzoni con un Arduino e un motore DC
Fare canzoni con un Arduino e un motore DC

L'altro giorno, mentre scorrevo alcuni articoli su Arduino, ho notato un progetto interessante che utilizzava motori passo-passo controllati da Arduino per creare brevi melodie. L'Arduino utilizzava un pin PWM (Pulse Width Modulation) per far funzionare il motore passo-passo a frequenze specifiche, corrispondenti alle note musicali. Cronometrando quali frequenze suonavano quando, si poteva sentire una melodia chiara dal motore passo-passo.

Tuttavia, quando l'ho provato da solo, ho scoperto che il motore passo-passo che ho non può ruotare abbastanza velocemente per creare un tono. Invece, ho usato un motore DC, che è relativamente semplice da programmare e collegare a un Arduino. Un comune IC L293D può essere utilizzato per pilotare facilmente il motore da un pin PWM Arduino e la funzione tone() nativa in Arduino può generare la frequenza necessaria. Con mia grande sorpresa, non ho trovato alcun esempio o progetto online che utilizza un motore CC, quindi questo Instructables è la mia risposta per rimediare a questo. Iniziamo!

P. S. Presumo che tu abbia già una certa esperienza con Arduino e abbia familiarità con il suo linguaggio di programmazione e hardware. Dovresti sapere cosa sono gli array, cos'è il PWM e come usarlo e come funzionano la tensione e la corrente, solo per citarne alcune. Se non ci sei ancora o hai appena iniziato Arduino, non preoccuparti: prova questa pagina introduttiva dal sito Web ufficiale di Arduino e torna quando sei pronto.:)

Forniture

  • Arduino (ho usato un UNO ma puoi usare un Arduino diverso se lo desideri)
  • Motore standard 5V DC, preferibilmente uno in grado di avere una ventola collegata (vedere l'immagine in "Assemblaggio del circuito"
  • L293D IC
  • Tanti pulsanti quante sono le note della canzone che vuoi suonare
  • tagliere
  • Cavi per ponticelli

Passaggio 1: Panoramica

Ecco come funziona il progetto: Arduino genererà un'onda quadra a una data frequenza, che emetterà all'L293D. L'L293D è collegato a un alimentatore esterno che utilizza per alimentare il motore alla frequenza data da Arduino. Impedendo all'albero del motore CC di ruotare, si può sentire il motore spegnersi e accendersi alla frequenza, che produce un tono o una nota. Possiamo programmare Arduino per riprodurre le note quando vengono premuti i pulsanti o per riprodurle automaticamente.

Passaggio 2: assemblaggio del circuito

Assemblaggio del circuito
Assemblaggio del circuito
Assemblaggio del circuito
Assemblaggio del circuito

Per assemblare il circuito, segui semplicemente lo schema di Fritzing sopra.

Mancia: La nota del motore si sente meglio quando l'albero non gira. Ho messo una ventola sull'albero del mio motore e ho usato del nastro adesivo per tenere ferma la ventola mentre il motore funzionava (vedi foto). Ciò ha impedito all'albero di girare e ha prodotto un tono chiaro e udibile. Potrebbe essere necessario apportare alcune modifiche per ottenere un tono pulito dal motore.

Passaggio 3: come funziona il circuito

Come funziona il circuito
Come funziona il circuito

L293D è un IC utilizzato per pilotare dispositivi ad alta tensione e corrente relativamente alta come relè e motori. L'Arduino non è in grado di pilotare la maggior parte dei motori direttamente dalla sua uscita (e l'EMF posteriore del motore può danneggiare i circuiti digitali sensibili di Arduino), quindi un IC come L293D può essere utilizzato con un alimentatore esterno per guidare facilmente il motore CC. L'immissione di un segnale nell'L293D emetterà lo stesso segnale al motore CC senza rischiare di danneggiare l'Arduino.

Sopra c'è uno schema di piedinatura/funzionale dell'L293D dalla sua scheda tecnica. Poiché stiamo guidando solo 1 motore (l'L293D può guidarne 2), abbiamo bisogno solo di un lato dell'IC. Il pin 8 è alimentazione, i pin 4 e 5 sono GND, il pin 1 è l'uscita PWM dall'Arduino e i pin 2 e 7 controllano la direzione del motore. Quando il pin 2 è ALTO e il pin 7 è BASSO, il motore gira in un senso e quando il pin 2 è BASSO e il pin 7 è ALTO, il motore gira nell'altro senso. Dal momento che non ci interessa in che modo gira il motore, non importa se i pin 2 e 7 sono LOW o HIGH, purché siano diversi l'uno dall'altro. I pin 3 e 6 si collegano al motore. Se lo desideri, puoi collegare tutto all'altro lato (pin 9-16), ma tieni presente che i pin di alimentazione e PWM cambiano posizione.

Nota: se stai usando un Arduino che non ha abbastanza pin per ogni pulsante, puoi usare una rete di resistori per connettere tutti gli switch a un pin analogico, come in questo instructables. Il modo in cui funziona è al di fuori dello scopo di questo progetto, ma se hai mai usato un DAC R-2R dovresti trovarlo familiare. Si noti che l'utilizzo di un pin analogico richiederà la riscrittura di grandi porzioni del codice, poiché la libreria Button non può essere utilizzata con pin analogici.

Passaggio 4: come funziona il codice

Per semplificare la gestione di tutti i pulsanti, ho utilizzato una libreria chiamata "Button" di madleech. Ho incluso la libreria per prima cosa. Successivamente, nelle righe 8-22, ho definito le frequenze per le note necessarie per suonare Twinkle, Twinkle, Little Star (la canzone di esempio), il pin che userò per pilotare l'L293D e i pulsanti.

Nella funzione di configurazione, ho inizializzato la seriale, i pulsanti e ho impostato il pin del driver per l'L293D in modalità di uscita.

Infine, nel ciclo principale ho verificato se è stato premuto un pulsante. In caso affermativo, Arduino riproduce la nota corrispondente e stampa il nome della nota sul monitor seriale (utile per sapere quali note sono sulla breadboard). Se viene rilasciata una nota, l'arduino interrompe qualsiasi suono con noTone().

Sfortunatamente, a causa del modo in cui è strutturata la libreria, non sono riuscito a trovare un modo per verificare se un pulsante è stato premuto o rilasciato in modo meno dettagliato rispetto all'utilizzo di 2 condizionali per nota. Un altro difetto di questo codice è che se dovessi premere due pulsanti contemporaneamente e poi rilasciarne uno, entrambe le note verrebbero fermate, perché noTone() interrompe qualsiasi nota generata indipendentemente da quale nota l'ha attivata.

Passaggio 5: programmare una canzone

Invece di utilizzare i pulsanti per riprodurre le note, puoi anche programmare Arduino per riprodurre automaticamente una melodia. Ecco una versione modificata del primo sketch che riproduce Twinkle, Twinkle, Little Star sul motore. La prima parte dello schizzo è la stessa: definire le frequenze delle note e il tonePin. Arriviamo alla nuova parte a bpm="100". Ho impostato i battiti al minuto (bpm), quindi uso un po' di matematica per calcolare il numero di millisecondi per battito a cui il bpm corrisponde. Per fare questo, ho usato una tecnica chiamata analisi dimensionale (non preoccuparti, non è così difficile come sembra). Se hai mai seguito un corso di chimica al liceo, hai sicuramente usato l'analisi dimensionale per convertire tra le unità. I floats() sono lì per garantire che nulla nell'equazione sia arrotondato fino alla fine per la precisione.

Dopo aver ottenuto il numero di ms/battito, l'ho diviso o moltiplicato in modo appropriato per trovare i valori in millisecondi delle diverse durate delle note trovate nella musica. Quindi creo un array di ogni nota in ordine cronologico e un altro con la durata di ogni nota. È fondamentale che l'indice di ogni nota corrisponda all'indice della sua durata, altrimenti la tua melodia suonerà a vuoto. Ho inserito le note per Twinkle, Twinkle, Little Star qui come esempio, ma puoi provare qualsiasi canzone o sequenza di note che desideri.

La vera magia avviene nella funzione loop. Per ciascuna delle note, suono il tono per un tempo che ho specificato nell'array beat_values. Invece di usare il ritardo qui, che farebbe sì che il tono non venga riprodotto, ho registrato il tempo dall'avvio del programma con la funzione millis() e lo ho sottratto dall'ora corrente. Quando il tempo supera il tempo in cui ho specificato la nota per durare nell'array beat_values, interrompo la nota. Il ritardo dopo il ciclo for è lì per aggiungere uno spazio tra le note, assicurando che le note successive con la stessa frequenza non si fondono insieme.

Passaggio 6: feedback

Questo è tutto per questo progetto. Se c'è qualcosa che non capisci, o se hai qualche suggerimento, non esitare a contattarmi. Poiché questo è il mio primo Instructables, apprezzerei molto commenti e suggerimenti su come migliorare questo contenuto. Arrivederci alla prossima!

Consigliato: