Come Trasformare una Pianola Giocattolo in un Robot Musicale con il Driver Octopus e Arduino

Con il driver per servomotori Octopus facciamo suonare una pianola giocattolo che riprodurrร  motivi musicali nati con le suonerie Nokia.

Da parecchi anni le tastiere elettroniche, in special modo i sintetizzatori musicali, hanno la possibilitร  di suonare โ€œda soliโ€ brani, opportunamente pilotati tramite lโ€™interfaccia MIDI o riproducendo file in formato standard caricati da supporti esterni di memorizzazione di massa.

Ma quello che ci siamo proposti di fare รจ far suonare motivi a nostra scelta a strumenti musicali piรน abbordabili, come piccole tastiere musicali e pianole giocattolo acquistabili nei centri commerciali per poche decine di euro, che per evidenti ragioni non dispongono di interfacce dati o slot per supporti di memorizzazione di massa e che quindi non possono essere pilotate elettronicamente. In questi casi lโ€™unica soluzione รจ farle suonare in maniera tradizionale, agendo sui tasti con qualcosa che trasformi le note dei brani musicali in comandi meccanici. Insomma, unโ€™interfaccia da elettronica a meccanica.

Questo lo abbiamo fatto e ha dato origine al progetto descritto in queste pagine, ossia un gadget che abbiamo sviluppato affinchรฉ possa essere utilizzato in varie occasioni, come ad esempio da demo in una vetrina o nel reparto giocattoli di un negozio, come pure da intrattenimento per grandi e piccoli in eventi e manifestazioni, per esempio, di robotica applicata.

Il progetto รจ nato dal desiderio di poter riprodurre con una tastiera musicale low cost (una tastiera giocattolo) delle musiche standard, perรฒ suonandole premendo effettivamente i tasti, pur senza metterci un dito. Abbiamo quindi pensato a una soluzione automatizzata che consiste in un piccolo robot che suona per noi i tasti della pianola.

Le musiche che abbiamo scelto non sono file audio qualsiasi ma, per praticitร , abbiamo pensato ai ring tone (vale a dire le suonerie) sviluppati dalla Nokia e definiti RTTTL (acronimo di Ring Tone Text Trasfer Language), โ€œsuonatiโ€ dai cellulari del costruttore.

La nostra piattaforma robotica, che va applicata alla pianola adattandosi a forma e distanza dei tasti di questโ€™ultima, รจ composta da un โ€œcervelloโ€ basato sulla ormai popolare scheda Fishino Uno (ma si puรฒ benissimo utilizzare un Arduino UNO) e da un sistema di attuazione realizzato col driver Octopus, giร  presentato in questo post.

Il tutto รจ stato โ€œcarrozzatoโ€ in stile fondale marino, con il risultato visibile nella Fig. 1.

Fig. 1 il sistema di carrozzato con tre piovre รจ applicato alla pianola

 

La gestione dei toni รจ affidata ad uno sketch appositamente creato per la nostra board, mentre il controllo fisico dei tasti รจ ottenuto mediante un sistema elettromeccanico composto da 24 servomotori (cod. SERVO206 del catalogo Futura Elettronica, reperibili su www.futurashop.it) gestiti da due shield Octopus (codice OCTOPUS Futura Elettronica) a cui sono collegati gli otto tentacoli di tre amene piovre color rosso stampate in PLA con la stampante 3D, azionati dai servo mediante un semplice ma preciso sistema di leveraggio (Fig. 2).

Fig. 2 Il sistema di attuatori, comprendente la meccanica, i servocomandi e la board Fishino Uno con sopra gli shield Octopus.

 

Tramite i 24 servo รจ possibile gestire due ottave (sulla pianola da noi utilizzata corrispondono alla 4^ e alla 5^ del pianoforte), quindi 12 tasti per ottava corrispondenti alle 7 note intere (Do, Re ecc..) piรน i semitoni (ad esempio Do Diesis o RE Bemolle).

Per chi volesse approfondire lโ€™argomento, i tasti di ciascuna ottava sono convenzionalmente i seguenti:

C = nota DO
C# = DO Diesis o RE Bemolle
D = nota RE
D# = RE Diesis o Mi Bemolle
E = nota MI
F = nota FA
F# = FA Diesis o Sol Bemolle
G = nota SOL
G# = SOL Diesis o LA Bemolle
A = nota LA
A# = LA Diesis o SI Bemolle
B = nota SI

Le note intere sono i tasti bianchi e quelli neri rappresentano i semitoni standard della tastiera del pianoforte.

Schema di cablaggio della piovra che suona il piano con OCTOPUS

Sulla scheda Fishino Uno (o Arduino UNO) si montano uno sullโ€™altro due shield Octopus, ognuno dei quali controlla 12 servocomandi per modellismo collegati ciascuno a uno dei connettori preposti. รˆ importante collegare allo shield chiamato Scheda 0 i primi 12 servo (quelli che comanderanno i tasti a sinistra della pianola) e allo shield Scheda 1 gli ultimi 12 (tasti di destra). Dai pin degli header si prendono i segnali per il conAtrollo del display LCD e per i pulsanti, che prenderanno posto sul pannello di controllo. Lโ€™alimentazione si fornisce a Fishino Uno, che la distribuisce agli shield e da essi a display e servocomandi.

Il sistema

Bene, detto ciรฒ possiamo entrare nel vivo del progetto, che consta di unโ€™elettronica e una meccanica (lโ€™insieme รจ visibile, smontato, nella Fig. 2) quindi ci limitiamo a dire che gli shield sono due e vengono impilati uno sullโ€™altro su Fishino Uno. Gli shield sono gestiti attraverso lโ€™IยฒC-Bus di questโ€™ultimo.

Sebbene gli shield Octopus dispongano di 16 uscite per controllo di servo, nella nostra applicazione ognuna ne pilota 12; le schede prelevano lโ€™alimentazione per i servocomandi dal pin Vin di Fishino (qui arrivano circa 5,25V) e quella per il proprio funzionamento dal pin 5V. Lโ€™intero sistema viene alimentato da un alimentatore switching da 6V – 2A che fornisce tutta la corrente necessaria alla Fishino Uno.

Lโ€™interfaccia utente รจ rappresentata da un display LCD 2 righe e 16 caratteri alfanumerici (cod. LCD1602ABLU Futura Elettronica) a cui รจ stata applicata unโ€™interfaccia IยฒC (cod. LCDI2CINTERFACE Futura Elettronica) e da un tastierino a 5 pulsanti che permettono di selezionare il tono che si desidera riprodurre ed anche di effettuare la taratura dei servo ed eseguire un test di verifica della pressione dei tasti della pianola.

Agli header sono collegati i cinque pulsanti, come segue:

Mem/PLAY -> pin 2
Piรน -> pin 8
Meno -> pin 6
Esci/STOP -> pin 3
R -> pin di reset/riavvio di Fishino

Invece il display รจ collegato cosรฌ:
SDA display -> SDA
SCL display -> SCL
Vcc display -> 5V
GND display -> GND.

I pin sono, anche in questo caso, quelli degli header. Lโ€™utilizzo di un display con interfaccia IยฒC permette di limitare il numero minimo di pin della board Fishino Uno utilizzati.

Nella Fig. 3 potete vedere come abbiamo realizzato il pannello di controllo del nostro sistema, che poi รจ stato collocato nella parte posteriore dellโ€™insieme, appena sotto allโ€™elettronica di controllo formata da Fishino Uno e dagli shield Octopus.

Fig. 3 Il pannello di controllo contenuto in un contenitore stampato in 3D con del PLA.

Parte meccanica

Dopo aver analizzato lโ€™elettronica del progetto, occupiamoci della meccanica, che รจ ugualmente importante perchรฉ รจ la sezione attuatrice che interviene fisicamente sui tasti della pianola.

Tutta la struttura necessaria a sostenere i 24 tentacoli e a ospitare gli altrettanti servomotori (provvisti ciascuno di un braccetto avvitato allโ€™alberino con le viti in dotazione), nonchรฉ le schede elettroniche (il telaio, quindi…) รจ stata progettata con Google SketchUp e realizzata mediante stampa 3D con del PLA; il telaio vero e proprio si stampa utilizzando il file STL da noi fornito insieme agli altri file del progetto (sketch ecc.) nella sezione download in fondo a questo post.

Al telaio devono poi essere applicati i particolari metallici richiesti per lโ€™assemblaggio delle parti, come il fulcro dei tentacoli; piรน esattamente, il telaio consta di piรน parti (lati, elemento di congiunzione posteriore, traversa anteriore…) da unire mediante viti.

Ciascun servocomando aziona un tentacolo (anche questo realizzato per stampa 3D il cui file STL รจ reperibile sul nostro sito insieme agli altri file del progetto) mediante unโ€™astina di rinvio (opportunamente sagomata) ottenuta stirando un filo in acciaio inox da 0,9 mm di diametro (Fig. 4).

Fig. 4 Tentacolo e relativa asta di rinvio.

 

Il filo va poi ripiegato per vincolarlo sia dalla parte dellโ€™albero del servocomando, sia dal lato del foro previsto nel tentacolo corrispondente (Fig. 5).

Fig. 5 Dettaglio dellโ€™azionamento dei tentacoli da parte dei servocomandi, tramite la relativa asta di rinvio piegata per entrare nel braccetto dei servo.

 

Lโ€™insieme dei tentacoli รจ libero di oscillare per assecondare il movimento imposto dai servocomandi; allo scopo ogni tentacolo, disposto affiancato agli altri, รจ imperniato su unโ€™asta in metallo da 4 mm di diametro.

La lunghezza delle aste di rinvio non รจ uguale ma va scelta di volta in volta sulla base delle distanze tra il braccetto del servocomando e la base della leva di attuazione del tentacolo corrispondente, come si vede nella Fig. 6, che mostra lโ€™insieme della meccanica di un lato (manca la parte destra dei servocomandi e il relativo sostegno.

La Fig. 7 dettaglia, invece, lโ€™aggancio delle aste alla base dei tentacoli, Le fotografie fatte al prototipo chiariscono meglio dโ€™ogni parola come si assembla la struttura meccanica, la quale, una volta terminata, va montata a ridosso della pianola, frontalmente, in modo che ogni tentacolo prema uno dei tasti.

 

 

Siccome รจ probabile che la pianola si sposti durante il funzionamento a causa della pressione esercitata dai tentacoli, รจ opportuno vincolare il telaio alla stessa: ad esempio con delle strisce metalliche ripiegate a squadra allโ€™altezza del fondo dello strumento musicale, oppure appoggiando e avvitando la meccanica a una piastra di base in legno o plastica (forex, per esempio…) e fissando alla stessa, una volta determinata la posizione ottimale, la pianola mediante squadrette in plastica opportunamente stampate in 3D e avvitate alla piastra di base).

La Fig. 8 propone un possibile fissaggio dellโ€™insieme.

Fig. 8 La meccanica a ridosso della tastiera della pianola.

Funzioni dei tasti

Bene, descritta anche la parte meccanica possiamo vedere come si utilizza e quindi in che modo possiamo far suonare il nostro speciale strumento.

Descriviamo di seguito il funzionamento dei pulsanti.
โ€ข Mem/PLAY: permette di avviare lโ€™esecuzione del tono occupante la posizione visualizzata sul display. Se tenuto premuto allโ€™accensione permette di entrare in โ€œModalitร  impostazione posizione servoโ€.
โ€ข Piรน: permette di passare al tono successivo. In โ€œModalitร  impostazione posizione servoโ€ permette di modificare la posizione del tentacolo al fine di premere + o – il tasto della pianola. Se viene tenuto premuto allโ€™accensione permette di entrare in modalitร  TEST.
โ€ข Meno: permette di passare al tono precedente. In โ€œModalitร  impostazione posizione servoโ€ permette di modificare la posizione del tentacolo al fine di premere + o – il tasto della pianola. Se tenuto premuto allโ€™accensione permette di entrare in modalitร  TEST.
โ€ข Esci/STOP: permette di interrompere lโ€™esecuzione di un tono. Se viene premuto quando ci si trova in โ€œModalitร  impostazione posizione servoโ€ permette di uscire da tale modalitร  e di tornare alla schermata principale.
โ€ข R: permette di resettare e/o riavviare il sistema.

Reset della posizione di tutti i servo

Prima di applicare la leva di comando, facente capo al tentacolo, sul perno di ciascun servo, occorre posizionare tutti i servo a metร  corsa (posizione centrale, -90ยฐ); tale operazione รจ necessaria per essere certi che una volta portati a zero i servocomandi, i braccetti siano tutti nella posizione che lascia a riposo i tentacoli.

Per effettuare il reset della posizione di tutti i servocomandi bisogna premere e tenere premuto il tasto Esci/STOP quindi fornire alimentazione; il display indicherร  la scritta โ€œReset in corsoโ€ dopodichรฉ tutti i perni dei servo si collocano in posizione centrale e sul display apparirร  la scritta โ€œReset eseguitoโ€.

Ora rilasciate il tasto. Fatto ciรฒ applicate su ciascun perno la propria levetta in modo che il relativo tentacolo sfiori (senza premere) il corrispondente tasto della pianola.

Modalitร  programmazione

Vediamo adesso come si programma la posizione di pressione del tasto corrispondente al singolo tentacolo. Ad ogni servo deve essere assegnata una posizione che permette la pressione del tasto assegnato. Per effettuare lโ€™impostazione del caso bisogna seguire la procedura seguente.
1) Accendere la pianola, premere e tenere premuto il tasto Mem/PLAY quindi fornire alimentazione; il display visualizza la scritta โ€œProgrammazioneโ€ (Fig. 9).

 

2) Rilasciare il tasto. Il servo gestito sarร  il primo a sinistra (la prima nota della prima ottava); il display visualizzerร  la scritta โ€œProgrammazione Servo no.1โ€ (Fig. 10).

Fig. 10 Programmazione dei servo.

 

3) Premere il tasto + o – in modo che il relativo tentacolo prema sul corrispondente tasto quanto basta per emettere la nota. Raggiunto lโ€™obbiettivo, premere nuovamente il tasto Mem/PLAY per passare alla programmazione del servo successivo.
4) Giunti allโ€™ultimo servo premere il tasto Mem/PLAY per concludere la programmazione (sul display apparirร  la scritta โ€œProgrammazione Completataโ€ (Fig. 11).

TEST del sistema

Ora verificate se tutti i tentacoli premono correttamente il tasto assegnato: per fare ciรฒ bisogna:
โ€ข accendere la pianola, premere e tenere premuto il tasto Piรน (o Meno) quindi fornire alimentazione; il display visualizza la scritta โ€œTestโ€ (Fig. 12).
โ€ข Rilasciare il tasto.

Ora i tentacoli verranno azionati in successione, da sinistra verso destra, cosรฌ da verificare la corretta pressione di tutti i tasti ad essi assegnati. Al termine del test il sistema tornerร  alla schermata principale โ€œScelta tracciaโ€.

Scelta traccia / PLAY / STOP

Quando il sistema รจ in standby, sul display appare la scritta โ€œScelta tracciaโ€ seguita dal numero della traccia (della suoneria) attuale (Fig. 13). Per avviare lโ€™esecuzione della traccia indicata premete il tasto PLAY (il display mostra ad esempio โ€œPlay Traccia no.1โ€); per arrestare lโ€™esecuzione premete STOP.

Per scegliere unโ€™altra traccia premete il tasto Piรน o il Meno (il comando non ha effetto se il pulsante viene premuto durante lโ€™esecuzione della traccia); prima ricordate di premere STOP.

Il firmware

Concludiamo questo articolo con un accenno al firmware, nel quale sono contenuti sia i Ringtone da riprodurre, sia le istruzioni per suonarli.

Partiamo proprio dagli RTTTL, dicendo che nel sistema รจ previsto ne vengano suonati 30: ciรฒ viene definito nellโ€™istruzione int Tracce_Max = 29; nellโ€™inizializzazione dello sketch. Notate che 30 corrisponde al valore 29 perchรฉ si considera di partire da 0. Modificando tale valore si puรฒ modificare il numero massimo di suonerie richiamabile.

Ciascun motivo viene costruito secondo lo standard RTTTL, che prevede la definizione di ogni nota con la relativa durata, separata da una virgola dalla seguente e dalla precedente.

Il formato tipico di una stringa รจ:
const char PROGMEM MusicSongPlay1[] = โ€œwewish:d=4,o=5,b=140:d,g,8g,8a,8g,8f#,e,c,e,a,8a,8b,8a,8g,f#,d,f#,b,8b,8c6,8b,8a,g,e,8d,8d,e,a,f#,2g.โ€; che riguarda lโ€™esecuzione del Ringtone wewish, composto dalle note definite dalla lettera con, seguita da uguale, la durata, quindi d=4, o=5, b=140 ecc. (d รจ la durata, o lโ€™ottava e b le battute).

Notate che tali istruzioni possono essere composte scrivendole nellโ€™IDE Arduino, ovvero copiate direttamente dai siti sul web che riportano i Ringtone, dato che li espongono con detta sintassi.

In genere tali siti forniscono dei file che si possono aprire con un editor di testo (sono dei .txt); per scrivere la musica vi basta copiare la stringa di testo interessata e incollarla nellโ€™editore dellโ€™IDE di ARduino.

Nello sketch, ciascuna nota viene definita dallโ€™istruzione del tipo:
#define NOTE_C4 262

che specifica la posizione del servo da far attivare per premere il tasto corrispondente sulla tastiera della pianola.

Quanto allโ€™indirizzamento degli shield, la libreria Octopus.h รจ preimpostata in modo che le uscite 0รท15 competano allo shield indirizzato come 0, le 16รท32 a quello indirizzato come 1, ecc. Quindi prima di applicare gli shield ad Arduino o Fishino dovete impostare i jumper dellโ€™indirizzo del primo shield come 000 e quelli del secondo come 001, altrimenti non verrร  rispettata la corrispondenza tra note e servocomandi stabilita dal firmware.

Lo sketch per Arduino/Fishino รจ piuttosto voluminoso e, per ragioni di spazio, non possiamo riportarlo in queste pagine; lo potete comunque trovare e scaricare nella sezione Download del nostro sito www.elettronicain.it, insieme agli altri file del progetto.

Bene, con questo diciamo che abbiamo concluso; lasciamo a voi e alla vostra fantasia eventuali sviluppi e personalizzazioni.

 

Download

Lascia un commento

Il tuo indirizzo email non sarร  pubblicato. I campi obbligatori sono contrassegnati *

Menu