Uno scrigno magico con un PIC12F1572

Questo progetto è davvero molto semplice ed è una cosa che ho fatto qualche anno fa per i bambini. A loro piace molto Legend Of Zelda e da buon retrogamer li ho fatti giocare a molti titoli a partire dal secondo (purtroppo il primo non ce l’ho!) sul NES e via via fino agli ultimi titoli sulla Wii passando per i vari episodi giocati rigorosamente ognuno sulla sua macchina originale.

Non hanno giocato ancora agli ultimi. Quando completeranno tutte le storie deciderò se acquistare la Switch.

Per tale motivo comprai loro il libro Hyrule Historia, ma ero deciso a farglielo trovare in maniera tutt’altro che semplice: organizzai una caccia al tesoro a tema Legend Of Zelda. In parte del percorso recuperarono una chiave e alla fine questa chiave apriva il forziere che conteneva il dono. Per dare un tocco in più feci in modo che il forziere, aprendolo, emettesse lo stesso suono di quando Link lo apre nel videogioco. Ed è così che nacque quello che ho chiamato LOZ Sound Toy (un nome dovevo pur darglielo!).

Il circuito

Il circuito di partenza per lo scrigno è proprio il LOZ Sound Toy, il cui sorgente trovate sul mio Github. C’è un PIC12F1572 che non fa altro che controllare, via seriale, un modulo MP3 di cui vi ho già abbondantemente parlato in passato. Sul LOZST (che non è ancora il circuito da mettere nello scrigno) ho messo 5 pulsanti: la pressione di ogni pulsante invia un messaggio seriale diverso al modulo, che esegue quindi il play della musica relativa:

Ho potuto collegare direttamente 5 pulsanti ai GPIO del minuscolo microcontrollore perchè per il modulo USART ho utilizzato soltanto la funzione TX, liberando il pin di RX e in aggiunta uso anche il pin RA3 che normalmente è usato come MCLR/VPP: in questo caso, se incontrate difficoltà nel programmare il PIC (ovvero la programmazione non va a buon fine), abilitate l’opzione Enable VPP first VDD nelle opzioni PICkit del progetto, e ovviamente evitate di premere i pulsanti durante la programmazione!

Il modulo seriale MP3 che ho utilizzato ha sia un’uscita cuffia su jack da 3.5mm, che potete collegare ad un amplificatore esterno, sia un’uscita amplificata che richiede un altoparlante da 4Ω e minimo 2W, oppure un’altoparlante da 8Ω 1W (che direi, per questa applicazione, va bene uguale anche se la potenza in uscita è dimezzata).

Il modulo seriale MP3 che ho utilizzato. Si trova, ad esempio su amazon, ma io tempo fa l’ho preso su ebay ad un prezzo di circa 4 euro spedito. Attualmente su Ebay non lo trovo più, ma si trova facilmente su Aliexpress eseguendo una ricerca del tipo mp3 serial module with speaker e rimarrete sopresi nel constatare che lo si trova a meno di 3 euro con tutto l’altoparlante da 8ohm.

Il modulo richiede una microSD (non fornita) sulla quale andrete a caricare i files MP3 o WAV.

La versione “da scrigno” chiaramente non utilizzerà i 5 pulsanti dal momento che deve emettere un solo suono  (ed una volta sola) all’apertura del coperchio. In questo caso ho fatto in modo che un microswitch, collegato al coperchio dello scrigno, stacchi direttamente l’alimentazione: così le batterie non vengono proprio utilizzate quando lo scrigno è chiuso e i consumo è nullo.

Questo video illustra il funzionamento della versione scrigno:

Nel video illustro anche come ho piazzato il microswitch. Il polo positivo della batteria andrà collegato al terminale comune e l’uscita dal positivo delle batterie sarà presa dal terminale NC (normalmente chiuso). In questo modo chiudendo il coperchio lo switch viene premuto e il contatto si apre, togliendo alimentazione:

Dettaglio del montaggio del microswitch. L’alberino viene premuto da un pezzo di plastica che ho recuperato chissà dove (io non butto via mai niente e ho una scatola “minuteria” dove dentro metto tutte le porcherie che recupero smontando apparecchiature guaste!

Per quanto riguarda l’alimentazione, invece, ho utilizzato due batterie AA. Il modulo MP3 usato, però, non è in grado di funzionare a 3V per cui, dato che ne avevo in abbondanza perchè li uso per tanti altri miei progetti, ho collegato i 3V forniti dalle batterie ad un modulino MT3608, che è uno step-up Switching che fornisce in uscita una tensione più alta di quella in ingresso:

Prima di collegare questo modulo al resto del circuito dovete collegare la 3V in ingresso e ruotare il trimmer multigiro a bordo fino a leggere 5V sull’uscita con un tester. Mi raccomando: non collegate l’uscita a nulla prima di aver regolato la tensione! Questo modulo è in grado di erogare fino a 28V e non oso immaginare cosa accadrebbe al PIC e al modulo MP3! Il microswitch che stacca la tensione andrà messo ovviamente tra le batterie e l’ingresso del modulo per staccare la tensione a monte e isolare completamente le batterie a coperchio chiuso.

Questo è il layout completo di tutto il dispositivo così come l’ho montato sotto al coperchio dello scrigno:

I più attenti noteranno che c’è un condensatore di troppo sull’uscita del modulo switching: è una mia fissa da ex installatore di impianti car-audio: serve per garantire una riserva di corrente nel caso in cui il suono da amplificare sia particolarmente grave

Il codice

Il codice purtroppo non fa uso dell’MPLAB Code Configurator perchè l’ho realizzato due anni fa, quando ritenevo questa opzione di MPLABX ancora troppo acerba, per cui tutta la configurazione la feci a mano.  La versione coi pulsanti non fa altro che ciclare di continuo per controllare la pressione dei pulsanti. La versione “da scrigno”, che non ha pulsanti (e di cui non c’è il sorgente, ma è banale: spiego ora come modificarlo), avrà soltanto il play per l’unica  canzone (la prima, in ordine alfabetico, presente sulla microSD che metterete nel modulo):

mp3s_playIndex(1);

Questa istruzione, nel caso dello scrigno, andrà messa subito prima del while(1), in modo da far suonare al modulo la prima musica presente sulla scheda da subito, all’accensione del circuito. Il contenuto del while sarà invece vuoto per bloccare all’infinito l’esecuzione del programma: tanto non appena il coperchio viene chiuso, viene tolta l’alimentazione.

Quindi le modifiche da fare al sorgente per realizzare la versione scrigno sono: 1) dare il play per l’index 1 subito prima del while 2) eliminare tutto il contenuto del while(1) e lasciarlo vuoto

Le funzioni per far suonare il modulo sono del tutto simili a quelle che presentai anni fa per Arduino. Penso sia inutile specificarlo (ma lo faccio lo stesso perchè mi capita sempre il reclamo geniale) che quel codice funziona esclusivamente con quel tipo preciso di modulo MP3 e il problema è che in commercio ne esistono un’infinità.

Se volete usare un altro modulo MP3 vi prego di non contattarmi per farmi correggere/dare un occhio  al codice, perchè non ho tempo di farlo, piuttosto contattatemi per darmi la vostra versione del codice specificando per quale modulo l’avete scritta, in modo che possiate condividerla come ho fatto io adesso.

Per qualsiasi modulo MP3/WAV->Seriale, in genere il venditore mette a disposizione un documento con l’elenco dei comandi, per cui cambiare un paio di codici esadecimali nel sorgente (e/o le sequenze di invio dei comandi) non penso sia una cosa difficile dato che la libreria l’avete già pronta. 

L’unica accortenza, se volete cimentarvi nel cambiare modulo MP3, è di fare attenzione se il modulo che acquistate ha già un’uscita amplificata alla quale potete collegare un altoparlante: la grande maggioranza dei moduli economici che si trovano su Ebay, infatti, hanno solo un’uscita livello linea (solo il connettore cuffia), inadatta a pilotare un altoparlante, mentre questo utilizzato da me ha già un amplificatore a bordo e per realizzare un giocattolo è decisamente più adatta.

Links

Se questo articolo ti è piaciuto, condividilo su un social:
  • 26
  •  
  •  
  •  
  •  
  •  
Se l'articolo ti è piaciuto o ti è stato utile, potresti dedicare un minuto a leggere questa pagina, dove ho elencato alcune cose che potrebbero farmi contento? Grazie :)