Forum: Mikrocontroller und Digitale Elektronik Mehrere BH1750


von Andreas K. (manau21)


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
}

: Verschoben durch User
von STK500-Besitzer (Gast)


Lesenswert?

Andreas K. schrieb:
> in erster linie gehts mir darum 9 Sensoren auszulesen

Mit einem I²C-Bus? Das wird schwierig, mit dem eine Adresspin kann man 
zwischen zwei Adressen unterscheiden.
Du brauchst also einen Multiplexer oder mehrere Busse.

von hinz (Gast)


Lesenswert?

STK500-Besitzer schrieb:
> Du brauchst also einen Multiplexer

z.B. 2 St. 74HC4051

von STK500-Besitzer (Gast)


Lesenswert?

hinz schrieb:
> STK500-Besitzer schrieb:
>> Du brauchst also einen Multiplexer
>
> z.B. 2 St. 74HC4051

Es gibt auch welche die per I²C-Bus adressierbar sind.

von hinz (Gast)


Lesenswert?

STK500-Besitzer schrieb:
> hinz schrieb:
>> STK500-Besitzer schrieb:
>>> Du brauchst also einen Multiplexer
>>
>> z.B. 2 St. 74HC4051
>
> Es gibt auch welche die per I²C-Bus adressierbar sind.

Kenne ich nicht. Hast du eine Typennummer parat?

von Andreas K. (manau21)


Lesenswert?

Wow Ihr seid ja echt spitze.
Danke für die schnellen Antworten.
Also es ist ein BH1750FVI. (weiss nicht ob ich da einen Link posten 
darf)
Ich habe auch irgendwo gelesen dass der Adresspin auf HIGH gesetzt 
werden muss.
Aber momentan bilicke ich da garnicht durch.

von Andreas K. (manau21)


Lesenswert?

hinz schrieb:
> STK500-Besitzer schrieb:
>> Du brauchst also einen Multiplexer
>
> z.B. 2 St. 74HC4051

Ist das nicht ein Normales shiftregister?
Von denen hätte ich noch welche rumliegen.

von hinz (Gast)


Lesenswert?

Andreas K. schrieb:
>> z.B. 2 St. 74HC4051
>
> Ist das nicht ein Normales shiftregister?

Nein.

von STK500-Besitzer (Gast)


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.

von Andreas K. (manau21)


Lesenswert?

hinz schrieb:
> Andreas K. schrieb:
>>> z.B. 2 St. 74HC4051
>>
>> Ist das nicht ein Normales shiftregister?
>
> Nein.

Ok. was macht denn der muiplexer

Wenn ich das das Projekt umsetzen kann ob mit Adressieren oder 
multiplexen, dann nehme ich eure Hilfe gerne an. ;)
Oder sollte ich etwas andere Hardware organisieren RasPY oder ähnliches?

von STK500-Besitzer (Gast)


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.

von Heinz (Gast)


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.

von Jim M. (turboj)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jim M. schrieb:
> Bräuchte mann dann halt fünfmal mit jeweils unterschiedlichen Bus Pins.

Wenn man 10 Pins am Controller frei hat ...

von STK500-Besitzer (Gast)


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?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.