Heute ist der Lichtstärkesensor GY-30 angekommen und nach kurzem Löten der Steckerleiste an den Sensor konnte es schon mit der Verkabelung losgehen.
Beschaffung
Dieser Sensor kann bei Amazon.de* oder ebay.de* bestellt / ersteigert werden, wobei sich hier der Vergleich lohnt.
Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!
Technische Daten
- Chip – BH1750FVI
- Spannung – 3.3V – 5V
- Lichtstärke Bereich von 0 – 65535 lx
Modi
Der Lichtstärkesensor kann in 3 verschiedenen Modi betrieben werden welche jeweils eine andere Wandlungszeit und Auflösung haben.
Modus | Wandlungszeit | Auflösung |
H-Resolution Mode | 120ms | 1 lux |
H-Resolution Mode 2 | 120ms | 0,5 lux |
L-Resolution Mode | 120ms | 4 lux |
Aus dieser Tabelle ist nun gut ersichtlich, dass eine Wandlungszeit (Zeit die der Sensor benötigt, um die Werte bereitzustellen) von min. 120ms benötigt wird, somit kann in unserem Programm eine “pause” von 125ms eingegeben werden.
Der Schaltplan
Der Sensor wird folgendermaßen an den Arduino Uno angeschlossen.
- VCC – 3.3V
- SCL – analog A5
- SDA – analog A4
- GND – GND
Hier nun der Schaltplan wie dieser an einen Mikrocontroller angeschlossen werden kann.
Die Grafik enthält das Schaubild des Sainsmart Mega2560 welcher mehr analog und digitale Pins hat jedoch ziemlich baugleich mit dem Uno ist.
Der Quellcode
#include <Wire.h> //Bibliothek für die Kommunikation mit dem Sensor int baudrate = 9600; //Baudrate byte gy30ICAdress = 0x23; //Adresse des IC2Chips auf dem Sensor byte buffer[2]; //Array für das "speichern" von gelesenen Werten void setup(){ Wire.begin(); Serial.begin(baudrate); initSensor(); } void loop() { int value = 0; if (readSensor() == 2){ value = ((buffer[0] << 8) | buffer[1]); Serial.println(value); } delay(125); //Die Funktion 50ms pausieren und dann von vorne beginnen. } void initSensor(){ Wire.beginTransmission(gy30ICAdress); Wire.write(0x10); //Genauigkeit des Sensors Wire.endTransmission(); } int readSensor(){ byte value = 0; Wire.beginTransmission(gy30ICAdress); Wire.requestFrom(gy30ICAdress, 2); while(Wire.available()){ buffer[value] = Wire.read(); value++; } Wire.endTransmission(); return value; }
Das Video
Serieller Plotter
Die neue Version der Arduino IDE 1.6.6 enthält den seriellen Plotter, dieses integrierte Tool zeichnet aus den ausgegebenen Zahlen werten ein Diagramm.
Das Video mit der Ausgabe des seriellen Plotters
Download des Sketches
Wie gewohnt gibt es das Sketch als Download.
gracias me sirvio mucho desde pasto colombia