Un pianoforte a 8 tasti su breadboard con Arduino Uno R3, otto pulsanti tattici da 6×6 mm e un buzzer piezoelettrico passivo. Ogni tasto premuto riproduce una nota della scala di Do maggiore, da C4 a 262 Hz fino a C5 a 523 Hz. Il risultato è abbastanza per suonare brani come Twinkle Twinkle Little Star. Non serve nessuna shield, nessuna libreria esterna e nessuna saldatura: bastano una breadboard, i jumper e un cavo USB.
Il montaggio è la parte più rapida. I pulsanti tattici vanno infilati sulla breadboard a cavallo della gola centrale, uno accanto all’altro. Ogni pulsante ha un lato collegato a un pin digitale di Arduino e l’altro lato a GND. Il buzzer passivo ha il positivo sul pin D10 e il negativo su GND. Un jumper collega la pista di GND della breadboard alla massa della scheda.
I tasti occupano i pin da D2 a D9, otto pin digitali consecutivi. L’Arduino Uno ha 14 pin digitali (D0-D13) e 6 pin analogici utilizzabili come ingressi digitali, quindi c’e’ spazio in abbondanza per aggiungere tasti in una versione successiva. Per i tasti il catalogo ha un minipulsante da circuito stampato 6×6 mm, lo stesso formato usato nel progetto.
INPUT_PULLUP e la funzione tone() nel firmware
Il codice non usa nessuna libreria: sfrutta la funzione tone() integrata nell’Arduino IDE. Ogni pulsante è collegato tra un pin e GND, quindi il firmware attiva la resistenza di pull-up interna con INPUT_PULLUP. Di conseguenza il pin legge HIGH quando il tasto è a riposo e LOW quando viene premuto. Il codice scorre gli otto pin, memorizza il primo tasto premuto e chiama tone() con la frequenza associata.
Il confronto if (pressedKey != lastKey) fa sì che tone() venga chiamato una sola volta per pressione, invece di ripetere la chiamata a ogni giro del loop. Quando nessun tasto risulta premuto, il codice chiama noTone() e il suono si ferma. Il monitor seriale si apre a 9600 baud e serve a controllare quali tasti vengono letti durante le prove.
- Tasto 1: C4 (Do) a 262 Hz
- Tasto 2: D4 (Re) a 294 Hz
- Tasto 3: E4 (Mi) a 330 Hz
- Tasto 4: F4 (Fa) a 349 Hz
- Tasto 5: G4 (Sol) a 392 Hz
- Tasto 6: A4 (La) a 440 Hz
- Tasto 7: B4 (Ti) a 494 Hz
- Tasto 8: C5 (Do) a 523 Hz
Il pianoforte è monofonico, e questo è un limite della funzione tone(): genera una sola frequenza alla volta. Perciò se premi due tasti insieme vince quello con il numero più basso, cioè il primo che il ciclo incontra. Chi vuole accordi veri deve cambiare approccio, ad esempio generando le forme d’onda a mano con un timer.
Buzzer passivo, consumi e altoparlante alternativo
Il buzzer piezoelettrico passivo lavora da 3,3V a 5V e assorbe meno di 30 mA, quindi lo puoi pilotare direttamente da un pin di Arduino senza transistor. La sua resa migliore sta intorno ai 2-4 kHz, mentre le note di questo pianoforte vanno da 262 Hz a 523 Hz. Il suono esce, ma non aspettarti un volume da concerto: per alzare la pressione sonora conviene un altoparlante.
Al posto del buzzer puoi usare un altoparlante da 8 ohm con un resistore in serie da 100 ohm. Il resistore limita la corrente e protegge il pin. Inoltre il suono risulta più pieno sulle frequenze basse della scala. Il resto del circuito non cambia: positivo su D10, negativo su GND.
Per rifare il progetto servono pochi pezzi: un Arduino Uno R3, otto pulsanti tattici da 6×6 mm, un buzzer piezoelettrico passivo, una breadboard, i jumper e un cavo USB. Il costo è basso e la difficoltà pure. Infatti è un primo progetto ideale per imparare gli ingressi digitali, INPUT_PULLUP e la funzione tone(), e si completa in una serata.
Se vuoi vedere il montaggio in funzione, sul sito del maker trovi il video con il pianoforte suonato tasto per tasto. Lì puoi capire come si comporta il buzzer sulle diverse note prima di saldare o comprare qualsiasi cosa.
Fonte: https://www.circuitschools.com/arduino-piano-project-with-8-keys-build-a-simple-piano/
