Mehrere MLX90614 GY-906 auslesen

Hallo, wieder mal beschäftigt mich eine Frage ewig, ich habe ein MLX90614 GY-906
Infrarot Thermo-Sensor das Beispiel zum Temperratur auslesen aus der MLX Libarry ist Top!

Nur wie liest man 3 Stück davon aus? SDA und SCL Eingänge hab ich ja am Mega2560 ja nur 1 mal…

Muss ich die Datenleitung Parallel schalten und wie Muss ich die 3 Sensoren dann Adressieren?

Wie bekomme ich die I2C Adressen raus?

Gruß und danke im vorraus

Aja

der Testcode aus der Libarray:

/*************************************************** 
  This is a library example for the MLX90614 Temp Sensor

  Designed specifically to work with the MLX90614 sensors in the
  adafruit shop
  ----> https://www.adafruit.com/products/1748
  ----> https://www.adafruit.com/products/1749

  These sensors use I2C to communicate, 2 pins are required to  
  interface
  Adafruit invests time and resources providing this open source code, 
  please support Adafruit and open-source hardware by purchasing 
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.  
  BSD license, all text above must be included in any redistribution
 ****************************************************/

#include <Wire.h>
#include <Adafruit_MLX90614.h>

Adafruit_MLX90614 mlx = Adafruit_MLX90614();

void setup() {
  Serial.begin(9600);

  Serial.println("Adafruit MLX90614 test");  

  mlx.begin();  
}

void loop() {
  Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempC()); 
  Serial.print("*C\tObject = "); Serial.print(mlx.readObjectTempC()); Serial.println("*C");
  Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempF()); 
  Serial.print("*F\tObject = "); Serial.print(mlx.readObjectTempF()); Serial.println("*F");

  Serial.println();
  delay(500);
}

Die Sensoren kannst du parallel schalten und um die Adressen raus zu bekommen kannst du den arduino-i2c-scanner/I2CScanner.ino at master · todbot/arduino-i2c-scanner · GitHub verwenden.
Jewels einzeln abfragen.
Und die Pullup-Widerstände 4,7 k gegen +5Volt nicht vergessen.

HotSystems:
Die Sensoren kannst du parallel schalten ...

Nö, darum wird der Bibliothek auch keine Adresse als Parameter übergeben.

Ajatuksia:
Wie bekomme ich die I2C Adressen raus?

Ich lese: "I2C interface, 0x5A is the fixed 7-bit address". Mehrere geht also nicht am I2C-Bus, zumindest nicht einfach durch Parallelschalten. Bei I2C kann man Teilbusse aufbauen, habe ich gelesen. Da hat uns Adafruit was unterschlagen!

EDIT 22:25: Falsches gestrichen.

EDIT:

Geht doch. Die Adresse kann man im EEPROM ändern! Und im Datenblatt ist auch ein Schaltbild für mehrere Sensoren

Seite 39. Und Seite 11 für die EEPROM Adressen.

Serenifly:
Die Adresse kann man im EEPROM ändern!

Chapeau, mal wieder! 8)

Man kann eine Adresse als Parameter übergeben:

Adafruit_MLX90614 mlx1 = Adafruit_MLX90614(0x5C);
Adafruit_MLX90614 mlx2 = Adafruit_MLX90614(0x1B);

Eine Beschreibung habe ich jetzt auch gefunden: Giving an MLX90614 a New Address. Da steht dann auch, wie eine Temperatur ohne Bibliothek ausgelesen werden kann, sollte diese bei mehreren Sensoren mucken.

Die Library unterstützt sogar schon Alternative Adressen im Konstruktor:

Ansonsten ist die Lib etwas seltsam. Im Header ist zwar write16() deklariert, aber ich sehe keine Definition davon. Das ist problematisch, da beim Schreiben anscheinend eine CRC8 Checksumme verlangt wird. Dafür sollte man das nehmen können:
http://www.nongnu.org/avr-libc/user-manual/group__util__crc.html#gab27eaaef6d7fd096bd7d57bf3f9ba083

Auch die Adressierung von RAM und EEPROM muss man sich genau ansehen. 0x00 bis 0x1F sind nur die unteren 5 Bit. Das sechste Bit ist immer 1.
Genauso muss man beachten, dass an jeder Adresse 2 Bytes sind! Bei der Slave Adresse kann man allerdings nur das LSB ändern. Aber gesendet werden MSB, LSB und CRC (im Datenblatt PEC genannt)

Definitiv nichts für Anfänger

EDIT:
Ah, du hast fertigen Code gefunden :slight_smile: Das ist gut

Benötigt aber diese I2C Library:

Also irgend wie raff ich das nicht... :o

wie kann ich in mein code nun den 2 und 3 MLX auslesen?

Sorry das ich da recht beschränkt bin

Du musst erst mal die Adresse der Sensoren ändern! Die steht im EEPROM des jeweiligen Sensors. Jeder Sensor braucht eine andere Adresse.

Siehe hier:

Das ist ein Sketch um die Adresse anzupassen

Braucht das:

Danach kann man auch mehrere der Sensoren an einen Bus hängen in mit der normalen Adafruit Library auslesen.