Con alcune resistenze e pulsanti è possibile costruire una piccola tastiera musicale con Arduino.
Anche se è possibile semplicemente collegare un numero di pulsanti a ingressi digitali per avere toni diversi, in questo progetto useremo una rete di resistenze a scala.
Questa permette di leggere più pulsanti usando un solo input analogico: è una tecnica utile se ti trovi a corto di ingressi digitali.
Per fare ciò si devono collegare i pulsanti in parallelo a un piedino analogico come A0. La maggior parte di questi pulsanti è collegata all’alimentazione attraverso una resistenza. Quando premi ogni pulsante, un livello diverso di tensione viene applicato al piedino di ingresso. Se premi due bottoni insieme hai un unico input basato sulla relazione tra due resistenze in parallelo.
Le scale di resistenze sono un modo semplice per aumentare gli ingressi digitali di un sistema collegandosi a un ingresso analogico.
Componenti da utilizzare:
- 1x Arduino Uno
- 4x Pulsanti
- 1x buzzer passivo
- 1x resistenza da 220 ohm
- 2x resistenza da 10 kilo ohm
- 1x resistenza da 1 mega ohm
- Vari jumper
Diagramma di collegamento:
Posiziona i pulsanti sulla breadboard come mostrato qui sopra. Questa disposizione di resistenze e pulsanti che alimenta un ingresso analogico è chiamato retee di resistenze a scala. Collega la prima resistenza direttamente all’alimentazione. Collega il secondo, il terzo e il quarto pulsante all’alimentazione attraverso, rispettivamente, resistenze da 220 ohm, 10 kilo ohm e 1 mega ohm. Collega tutte le uscite dei pulsanti insieme in unico punto. Collegalo a massa con una resistenza da 10 kilo ohm e collegalo anche al piedino analogico 0. Ognuna di queste resistenze si comporta da partitore di tensione.
Il codice
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
/* Crea un array di 4 note usando delle frequenze opportune. Rendi questo array una variabile globale dichiarandolo al di fuori di setup e loop */ int notes[] = {262, 295, 330, 349}; /* Nel setup inizia la comunicazione seriale del computer */ void setup() { Serial.begin(9600); } /* nel loop si dichiara una variabile locale per memorizzare il valore del piedino a0. dato che ogni pulsante è collegato all'alimentazione tramite una resistenza di valore diverso, ognuno produce un diverso valore. Per vedere i valori inviali al computer aggiungendo la riga Serial.printlin(keyVal). */ void loop() { int keyVal = analogRead(A0); Serial.println(keyVal); /* usando l'interazione if...esle puoi assegnare ogni valore a un tono diverso. I numeri inclusi nel codice sono valori approssimativi per queste resistenze. siccome tutte le resistenze hanno una certa tolleranza, questi potrebbero essere non perfetti. Usa le info dal monitor seriale per sistemarli se necessario. con la funzione tone vengono generate le diverse note */ if (keyVal == 1023) { tone(8, notes[0]); } else if (keyVal >= 830 && keyVal <= 1003) { tone(8, notes[1]); } else if (keyVal >= 705 && keyVal <= 940) { tone(8, notes[2]); } else if (keyVal > 0 && keyVal <= 600) { tone(8, notes[3]); } else { noTone(8); } } |
La funzione tone ha alcune limitazioni. Può creare solo onde quadre, non sinusoidi o triangoli. Le onde quadre non sembrano davvero delle onde e sono una serie di impulsi acceso/spento.
In questo codice abbiamo utilizzando un array. Che cosa è?
Si può immaginare un array come una sorta di contenitore, le cui caselle sono dette celle (o elementi) dell’array stesso. Ciascuna delle celle si comporta come una variabile tradizionale; tutte le celle sono variabili di uno stesso tipo preesistente, detto tipo base dell’array. Si parlerà perciò di tipi come “array di interi”, “array di stringhe”, “array di caratteri” e così via. Quello che si ottiene dichiarandolo è dunque un contenitore statico ed omogeneo di valori, variabili o oggetti.
L’array è un insieme di elementi omogenei tra loro. Con una variabile possiamo indicare un solo dato, con l’array possiamo indicare tanti dati dello stesso tipo con un solo nome collettivo di variabile: l’identificatore dell’array. Gli elementi si distinguono uno dall’altro attraversi l’indice che viene assegnato nell’array, e che viene posto accanto all’identificatore dell’array.
Per maggiori info vi invito di leggere il mio articolo: Arduino IDE: che cos’è un array o vettore #8.
Conclusione
Se le resistenze sono vicine ai valori nel programma di esempio, quando premi i tasti dovresti sentire alcuni suoni dal buzzer. In caso contrario, controlla il monitor seriale per assicurarti che ciascuno dei pulsanti sia in un intervallo che corrisponde alle note contenute nella condizione if…else. Se stai ascoltando un suono stentoreo, prova ad aumentare un po’ l’intervallo.
Iscriviti ai nostri gruppi Telegram
Link utili