Mehrere BH1750

OP #5377598
Lesenswert?

Hallo zusammen
Ich würde gerne mehrere Lichtsensoren des Typs BH1550 mit dem Arduino 
auslesen und auf dem LCD anzeigen.
Die Idee dahinter ist eine Messwand für die Lumenmessung für Projektoren
dazu müsste ich 9 Messpunkte aufzeichnen und dann den querschnitt der 
Messungen machen
desweiteren muss ich dann die lux in Lumen umrechnen.
in erster linie gehts mir darum 9 Sensoren auszulesen und jeweils im 
seriell monitor anzuzeigen.
Kennt sich da jemand aus?

1
#include <AS_BH1750.h>
2
#include <Wire.h>
3
#include <Adafruit_RGBLCDShield.h>
4
#include <math.h>
5

6
/*
7
* LightMeter_LCD
8
* BH1750:
9
* Sensor SCL pin an A5
10
* Sensor SDA pin an A4
11
* Sensor VDD pin an 5V
12
* Sensor GND pin an GND
13
* Sensor ADDR pin frei
14
*/
15

16
AS_BH1750 lightMeter;
17

18
// Setup LCD-Shield
19
Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield();
20

21
void setup() {
22
  // Display initialisieren
23
  lcd.clear();
24
  lcd.begin(16, 2); // 16x2 Zeichen
25
  lcd.setCursor(0,0);
26
  lcd.print("LightMeter v1.0");
27
  lcd.setCursor(0,1);
28
  lcd.print("Initializing...");
29
  delay(1000);
30
  lcd.clear();
31

32
  if(!lightMeter.begin()){
33
    // Prüfen, ob Sensor vorhanden ist
34
    lcd.clear();
35
    lcd.setCursor(0,0);
36
    lcd.print("BH1750 not found");
37
    lcd.setCursor(0,1);
38
    lcd.print("check wiring!");
39
    while (1) {
40
      delay(1000);
41
    }
42
  }
43

44
}
45

46
void loop() {
47
  char clux[9];
48

49
  // Werte auslesen und aufbereiten
50
  float lux = lightMeter.readLightLevel();
51
  dtostrf(lux, 8, 1, clux);
52

53
  lcd.setCursor(0,0);
54
  lcd.print("Light level: ");
55
  lcd.setCursor(5,1);
56
  lcd.print(clux);
57
  lcd.print(" lx");
58

59
  delay(500);
60
}
Gast #5377713
Lesenswert?

Andreas K. schrieb:
> Ist das nicht ein Normales shiftregister?
> Von denen hätte ich noch welche rumliegen.

Nö, ein Analog-Multiplexer.

Andreas K. schrieb:
> Ich habe auch irgendwo gelesen dass der Adresspin auf HIGH gesetzt
> werden muss.

Vermutlich im Datenblatt...
Entweder gegen GND oder gegen "+" schalten. Dadurch kann man zwei 
Bausteine an einem Bus betreiben.
Man könnte also mit einem vierfach I²C-Multiplexer zumindest 8 Bausteine 
betreiben.
Gast #5377722
Lesenswert?

Das Datenblatt:
http://www.mouser.com/ds/2/348/bh1750fvi-e-186247.pdf

Andreas K. schrieb:
> Ok. was macht denn der muiplexer

Google das mal bitte selber. Oder guck ins Wikipedia.

Andreas K. schrieb:
> Oder sollte ich etwas andere Hardware organisieren RasPY oder ähnliches?

Du hast das Problem nicht verstanden, oder?
Du brauchst nicht nur einen I²C-Bus, sondern 4-9, je nach gewählter 
Ansteuerung.
Gast #5380807
Lesenswert?

Ein TCA9548A wäre solch ein 1 zu 8 I2C-Multiplexer.
Den gibt es auch als kleines Breakout Board für den Arduino.
Pro Ausgangsport des TCA9548A kannst du dann zwei BH1750 anschließen.
Einen davon mit Adresspin auf LOW den zweiten mit Adresspin auf HIGH.
Insgesamt wären so 16 BH1750 möglich ohne dass diese sich mit ihren 
Adressen ins Gehege kommen.
Gast #5382231
Lesenswert?

Jim M. schrieb:
> Blöde Frage, aber wäre Software I²C hier nicht viel einfacher als
> irgendwelche Busumschalter?
>
> Grade der I²C Master ist doch relativ einfach umsetzbar. Bräuchte mann
> dann halt fünfmal mit jeweils unterschiedlichen Bus Pins.

Und das erwartest du von jemandem, der nicht mal in der Lage ist, ein 
Datenblatt zu lesen?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren