La scheda Waveshield per Arduino
La scheda Waveshield per Arduino
La scheda audio è uno schermo per Arduino che si innesta sopra di esso. I programmi creati per l’Arduino possono così suonare file wav mediante apposita libreria da aggiungere allo sketch. I file wav devono essere memorizzati dentro una scheda SD (blu nella foto) da inserire nell’apposito alloggiamento dello schermo waveshield.
Questo schermo per Arduino viene fornita da una società americana Adafruit Industries (www.adafruit.com), in kit e deve essere montate seguendo le indicazioni del sitohttp://www.ladyada.net/make/waveshield/index.html .
E’ molto semplice da realizzare, ma bisogna essere attenti a montare correttamente ogni componente seguendo le istruzioni che sono descritte passo passo con foto nel sito stesso. Nel progetto che ho realizzato, tale scheda non è montata sopra la Arduino così; come previsto dal produttore ma bensì al fianco come visibile nelle foto.
Purtroppo la libreria prevede l’utilizzo di buona parte della memoria di un Arduino standard. Questo é il motivo per cui ho dovuto utilizzare una seconda scheda Arduino collegata in I2C al primo in modo da liberare al massimo la memoria del primo Arduino.
Questo Arduino dedicato mediante la libreria dello schermo Waveshield suona i file audio. All’uscita audio dello schermo é collegata a un piccolo amplificatore da 10 Watt RMS che pilota 4 altoparlanti dislocati uno per piano.
Dividere il programma in pezzi per farli lavorare su schede Arduino diverse, rappresenta la complessità principale del programma. L’Arduino collegato alla scheda audio deve ricevere ogni comando I2C e memorizzare nome di file da suonare di un buffer per evitare di perderli. Un apposita routine poi suona i file nella sequenza di arrivo.
Ma per il file 099 c’è una gestione particolare. Tale file contiene qualche secondo del sonoro di una sirena di allarme. Quando arriva il comando I2C di suonare il file 099, questo mentre viene suonato è automaticamente rigenerato in coda nel buffer. In questo modo il file viene suonato continuamente, intervallato da altri file sonori che eventualmente arrivino successivamente. L’alternativa ad utilizzare un file sonoro di pochi secondi era quella di interrompere il file dell’allarme per suonare il nuovo file sonoro arrivato; ma questo avrebbe comportato la fastidiosa brusca interruzione del file dell’allarme.
Pertanto il numero 99 viene continuamente rigenerato dopo la sua esecuzione in coda all’ultimo valore nel buffer e quindi l’arduino suona continuamente una sirena. All’arrivo del file 098 che contiene una voce preregistrata “Allarme disattivato” una routine di eliminare tuttie le ricorrenze 099 nel buffer e quindi il sistema termina di suonare la sirena di allarme.
Infine una routine si occupa di eliminare dal buffer numeri di file identici, in modo da non suonare due volte di fila lo stesso file audio.
Il programma sulla scheda Arduino a cui é collegato lo schermo, imposta anche un suo pin utilizzato per comandare un rele che alimenta l’amplificatore. In questo modo questo é sempre spento ma si accende nel momento in cui deve suonare i file audio e si spegne dopo 5 secondi dal momento in cui é stato suono l’ultimo file. Così l’amplificatore oltre a non consumare corrente evita di produrre quel rumore di alternata che seppur con bassissimo volume e quasi impercettibile, é comunque fastidioso.
All’amplificatore é collegato in serie diversi altoparlanti uno per ogni piano della casa. Mediante questo arduino con waveshield é possibile quindi suonare diversi file wav a secondo di quale campanello venga attivato. Nella fattispecie viene suonato un file a audio DIN DON classico per il campanello principale della casa, una suoneria formato da alcune note per il campanello del bagno della zona giorno e notte altre note per il campanello della zona notte.
Ma allo stesso Arduino suona anche alcuni wav che sono registrazioni digitali della voce di mia figlia e indicano quale sensore si sia attivato. Ad esempio “Finestra bagno zona notte”.
Per fare un esempio, all’apertura della porta blindata suona la voce registrata che dice “Porta blindata”, all’apertura del cancelletto pedonale esterno sul perimetro della proprietà dice “cancelletto”.
Prima di concludere vorrei illustrare il motivo principale dell’adozione di una scheda arduino dedicata allo schermo waveshield. Inizialmente l’arduino principale controllava anche lo schermo waveshield. Però più si aumentava il programma e più si ottenevano problemi di instabilità dell’ardino e quindi ho optato per dividere il programmi su due ardunino distinti in una elaborazione distribuita che utilizza il bus i2c per comunicare tra loro.
Tale soluzione aumenta la capacità elaborativa del sistema poiché il carico é diviso su due CPU e a fronte di un costo di più schede si ottiene il vantaggio di un sistema più performante.
Nella foto generale si può notare che anche questo Arduino é collegato allo stesso bus I2C che collega tutte che le schede presentate in questo progetto.
Nel tempo, in questo sistema domotico, ho sostituito questo schermo waveshield con un modulo WTV020-SD-16P