Il kit da saldare gratuito per principianti di Arduino è provvisto di tutto quello che occorre per realizzare un lettore MP3, ma JJ ha fatto un ulteriore passo avanti aggiungendo un sensore luce ambientale Vishay al mixer.
Aprendo la scatola, abbiamo Adafruit music maker per ascoltare la musica.
Visualizza prodotti correlati
Creiamo la nostra applicazione, dove la musica che viene suonata dipenderà dalla luce ambiente. Il VEML6030 di Vishay viene usato come sensore luce ambientale per indicare il numero di lux. I dati si ottengono attraverso un bus I2C.
Visualizza prodotti correlati
Anche se Arduino ha reso molto facile la programmazione del bus I2C, è necessario comprendere gli elementi fondamentali per poterlo programmare.
Il bus I2C è diventato uno standard ampiamente usato per i sensori. È stato progettato da Philips (chiamato NXP oggi) e lavora con solo 2 linee: una linea per il clock (chiamata SCL) e una linea per i dati (chiamata SDA). Questa ultima linea è bidirezionale. Queste due linee sono resistori di pull-up e open drain. Questi sono i resistori che si vedono sul montaggio sperimentale. Naturalmente, su un'applicazione finale, questi resistori vengono progettati sul circuito elettrico. Il bus master genera il clock e avvia la comunicazione con uno slave. Ogni dispositivo slave ha un indirizzo da 7-bit.
Visualizza prodotti correlati
Il protocollo è il seguente: il master invia un bit di start (che è una transizione da basso ad alto di SDA con SCL alto), seguito dall'indirizzo da 7 bit al quale si vuole effettuare la comunicazione e poi è seguito da un singolo bit, se si vuole scrivere (bit a 0) o leggere (bit a uno) dallo slave. Dopo ogni trasmissione di 8 bit, lo slave risponde ad un bit ACK (SDA è basso). Se il trasmettitore vede un bit 1, si tratta di un NACK (non Riconosciuto)
La comunicazione termina con un bit di ARRESTO. È una transizione da basso ad alto di SDA con SCL alto. Poiché il bit di start e di arresto avviene quando SCL è alto, tutte le altre transizioni di SDA si verificano con SCL basso.
Ora che si comprende come funziona I2C, occorre leggere i dati indicati nella scheda dati di VEML6030 per conoscere i valori da scrivere nel nostro programma.
Innanzitutto, leggendo la scheda tecnica di VEML6030, si può trovare un pin dell'indirizzo che consente di configurare il valore dell'indirizzo. Sul nostro circuito questo pin è collegato a terra e ciò significa che l'indirizzo del dispositivo è 0x10.
La scheda dati spiega l'interfaccia I2C e come inviare i comandi. Quando occorre scrivere al dispositivo, si deve inviare l'indirizzo, il codice di comando. In VEML6030, tutti i registri sono a 16 bits e LSB deve essere il primo. Pertanto, se si vuole configurare VEML6030 con un guadagno di un quarto e un tempo di integrazione di 100 ms, occorre accendere il sensore luce ambientale e LSB è uguale a 0x00 e MSB è uguale a 0x18. Nel nostro programma vengono definiti i microfoni, inclusa nel setup la biblioteca via cavo, chiamata Wire.begin() e poi nella funzione loop parte una trasmissione con l'indirizzo di VEML6030, con il registro di comando (0x00 nel caso attuale) si invia LSB e MSB ed, infine, endTransmission. Per avere una spiegazione approfondita su questi comandi, visitare il sito web di Arduino, dove vengono spiegate le biblioteche.
In modo simile, per leggere i dati, si inizia con una trasmissione, si invia il valore del registro dove si vogliono leggere i dati, la funzione requestFrom con l'indirizzo e 2 byte da leggere ed, infine, si leggono i dati.
Il livello di illuminamento in Lux viene convertito in numero intero ed infine si decide quale musica suonare a seconda del valore dei lux.
Se è al di sotto di 20, si suona una musica per dormire. Tra 20 e 50 lux una musica per rilassarsi, tra 50 e 800 una musica per una vita attiva e sopra a 800 si presume quando si è fuori per una festa e si è pronti per la musica techno.
Ora si è pronti per creare la propria app con qualsiasi tipo di sensore e personalizzare il proprio lettore musicale.