Das lötfreie Arduino Starter-Paket enthält alles, was Sie brauchen, um einen MP3-Player zu schaffen, aber JJ ging einen Schritt weiter und fügte einen Vishay-Umgebungslichtsensor zum Mix hinzu.
Wir haben den Adafruit Music Maker direkt nach dem Auspacken dazu gebracht, Musik zu spielen.
Ähnliches Produkt:
Erstellen wir unsere eigene Anwendung, bei der die wiedergegebene Musik vom Umgebungslicht abhängt. Der VEML6030 von Vishay wird als Umgebungslichtsensor zur Ermittlung des Lux-Werts genutzt. Die Daten werden über einen I2C-Bus abgefragt.
Ähnliches Produkt:
Mit Arduino ist die Programmierung des I2C-Bus zwar sehr leicht, zur Programmierung muss man aber trotzdem die Grundlagen verstehen.
Der I2C-Bus ist ein Standard, der oft für Sensoren zum Einsatz kommt. Er wurde von Philips konzipiert (heute NXP) und arbeitet mit nur 2 Leitungen: eine für den Zeitgeber (SCL genannt) und eine Leitung für Daten (SDA genannt). Diese letztere Leitung ist bidirektional. Diese Teo-Leitungen sind Open-Drain und benötigen Pull-Up-Widerstände. Diese Widerstände sehen Sie auf der Leiterplatte. Natürlich sind diese Widerstände bei einer fertigen Anwendung direkt auf der Platine. Der Master des Bus generiert den Takt und initiiert die Kommunikation mit dem Slave. Jedes Slave-Gerät verfügt über eine 7-Bit-Adresse.
Ähnliches Produkt:
Das Protokoll lässt sich wie folgt beschreiben: Der Master sendet ein Start-Bit (das ist ein Hoch-Niedrig-Übergang des SDA mit SCL hoch) gefolgt von der 7-Bit-Adresse der Adresse, mit der kommuniziert werden soll. Anschließend folgt ein einzelnes Bit, das angibt, ob auf den Slave geschrieben (Bit ist 0) oder von diesem gelesen werden soll (Bit ist 1). Nach jeder 8-Bit-Übertragung antwortet der Slave mit einem ACK-Bit (SDA ist niedrig). Wenn der Sender ein Bit 1 sieht, ist dies ein NACK (nicht bestätigt).
Das Ende der Kommunikation entspricht einem STOP-Bit. Dabei handelt es sich um einen Niedrig-Hoch-Übergang des SDA mit SCL hoch. Start und Stop erfolgen mit SCL hoch und alle anderen SDA-Übergänge mit SCL niedrig.
Jetzt verstehen wir, wie I2C funktioniert, und können die Daten im Datenblatt des VEML6030 lesen und dadurch die Werte kennenlernen, die wir in unserem Programm schreiben wollen.
Beim Lesen des VEML6030-Schemas sehen wir als Erstes einen Adresse-Pin, der die Konfiguration des Adresswerts ermöglicht. Auf unserer Platine ist dieser Pin geerdet, die Adresse des Geräts ist also 0x10.
Im Datenblatt werden die I2C-Schnittstelle und das Senden von Befehlen erläutert. Wenn wir auf das Gerät schreiben müssen, müssen wir die Adresse und den Befehlscode senden. Im VEML6030 sind alle Register 16-Bit und das LSB muss zuerst kommen. Wir möchten den VEML6030 also mit einem Gain von einem Viertel und einer Integrationszeit von 100 ms konfigurieren. Zudem müssen wir den Umgebungslichtsensor einschalten, der LSB beträgt 0x00 und der MSB 0x18. In unserem Programm haben wir die Mikros definiert, binden die Wire-Bibliothek ein, rufen im Setup Wire.begin() auf und beginnen dann in der Schleifenfunktion eine Übertragung mit der Adresse des VEML6030, den Register-Befehl (im aktuellen Fall 0x00), dann senden wir LSB und MSB und schließlich rufen wir endTransmission auf. Eine genauere Erklärung dieser Befehle finden Sie auf der Arduino-Website bei den Bibliotheksbeschreibungen.
Ähnlich können wir die Daten auch lesen. Wir beginnen eine Übertragung, senden den Wert des Registers, dessen Daten wir lesen möchten, indem wir die requestFrom-Funktion mit der Adresse und 2 zu lesenden Bytes aufrufen und lesen schließlich die Daten.
Wir konvertieren den Lux-Wert in eine Ganzzahl und entscheiden schließlich je nach Lux-Wert, welche Musik gespielt werden soll.
Falls unter 20, spielen wir eine Musik zum Einschlafen. Bei zwischen 20 und 50 Lux entspannende Musik, zwischen 50 und 800 belebende Musik und bei über 800 Lux stellen wir uns eine Party draußen vor und entscheiden und für Techno-Musik.
Jetzt können Sie Ihre eigene App mit beliebigen Sensoren erstellen und Ihren Musikplayer anpassen.