Jeder nur einen Sensor

Moin,

ich würde unsere Box gern dazu verwenden, das Delta zwischen Innen- und Außentemperatur eines Gewächshauses zu messen. Arduino meckert, die Variable „TEMPERSENSOR_ID“ wäre schon gesetzt.

Kann das sein, dass man generell bei der Sensebox nur einen Sensor je Typ verwenden kann?

Patrick

Hi @Gaensewurz,

generell ist es möglich zwei Temperatursensor anzuschließen. Sobald es sich allerdings um Sensoren von exakt dem selben Typ handelt (was bei einem Vergleich Sinn macht) muss ein Multiplexer (https://sensebox.kaufen/product/multiplexer) verwendet werden.

Hast du auf der openSenseMap die senseBox als senseBox:home registriert oder über das Formular als senseBox:edu?

Viele Grüße
Mario

Zur Motivation: um mit dem Projekt Gewächshausstation fertig werden zu können, habe ich mich für die Sensebox entschieden statt das alles selber von Hard- und Software her anzugehen.

Daher Sensebox:home und Sourcecode über die Webseite.

Ich bin immer noch irritiert darüber, einen „Mehrfachstecker“ zu verwenden, so lange noch Stecker frei sind. Wie funktioniert I2C? Kann man nicht nacheinander alle Ports durchgehen und die Werte dessen was immer da angesteckt ist, verwenden? Oder ist jach Typ Sensor eine Adresse fest „verlötet“?
Patrick

Ich bin immer noch irritiert darüber, einen „Mehrfachstecker“ zu verwenden, so lange noch Stecker frei sind. Wie funktioniert I2C? Kann man nicht nacheinander alle Ports durchgehen und die Werte dessen was immer da angesteckt ist, verwenden? Oder ist jach Typ Sensor eine Adresse fest „verlötet“?

Jeder Sensor/Jedes Bauteil welches über I2C angesprochen wird hat eine eindeutige Adresse, z.B. 0x40 beim Temperatur- und Luftfeuchtigkeitssensor. Verwendet du mehrere Sensoren des gleichen Typ haben diese die gleiche Adresse. An dieser Stelle kommt der Multiplexer ins Spiel. Die Funktionsweise des Multiplexers ist auch hier: https://sensebox.de/projects/de/2019-10-08-multiplex.html erläutert.

Im Standardcode der senseBox:home und bei der Registrierung auf der openSenseMap wird immer davon ausgegangen jeweils nur einen Sensor eines bestimmten Typs anzuschließen. Falls du also mehrere Sensoren des gleichen Typ anschließen willst muss es über die manuellen Konfiguration durchgeführt und auch der Arduino Code angepasst werden.

Moin,

Danke für die Rückmeldung. Ich beginne zu verstehen…
Auf dem Bild des Sensors bei Watterott

Sind zwei Lötbrücken zu sehen. Wozu dienen diese? Legen die womöglich die Adresse fest? Könnte das ein Plan B sein?

Patrick

Leider hat die neue Version des Sensors diese Lotbrücken nicht mehr, da das nachfolge Modell des Sensorchips (TI HDC1008 > TI HDC1080) es nicht mehr ermöglicht die Adresse zu ändern.

Instead it is not possible to connect more than one HDC1080 on the same bus, because it is not possible to modify the slave address of the device. (https://e2e.ti.com/support/sensors/f/sensors-forum/584844/hdc1080-multiple-connection-on-i2c-line)

Eine alternative könnte noch ein anstatt einen zweiten HDC1080 zu verwenden, den zweiten Temperaturwert über einen BMP280/BME680 zu bestimmen. Es kommt ein bisschen darauf an wie genau du es brauchst :wink:

Viele Grüße
Mario

Alles klar, nun wird mir das Thema noch klarer :slight_smile:

Wenn ich den Multiplexer drantüdel’ kann ich denn dann immer noch den Code Generator der Webseite nehmen, oder muss ich das noch modifizieren?

Patrick

Wenn du den Multiplexer verwendest muss der Code noch modifiziert und der zweite Temperatur Sensor manuell hinzugefügt werden.

Für diese Schritte muss dann in der Arduino IDE gearbeitet und der Code anschließend auch kompiliert werden.

Sodele, der Multiplexer ist da. Kleiner Tipp: Schreibt doch mal auf Eure Seite, dass selbstverständlich ein Kabel zum Lieferumfang gehört. Ich habe jetzt 2 :slight_smile:
Wie sage ich`s denn jetzt dem Arduino, dass ich jetzt so einen Multiplexer habe?

Patrick

Wenn du den zweiten Temperatursensor hinzugefügt hast musst du den Code, der unter Skript auf der openSenseMap angezeigt wird, in die Arduino IDE kopieren.

Anschließend musst du folgende Sachen ändern:

  • das doppelte #define HDC1080_CONNECTED entfernen
  • die TEMPERATURSENSOR_ID wie folgt ändern:
// Temperatur drinnen
const char TEMPERSENSORI_ID[] PROGMEM = "deineID";
// Temperatur draußen
const char TEMPERSENSORO_ID[] PROGMEM = "deineID";
  • anschließend bei
  //-----Temperature-----//
  //-----Humidity-----//
#ifdef HDC1080_CONNECTED
   Wire.beginTransmission(0x77);
   Wire.write(1 << channels[0]);
   Wire.endTransmission();
   addMeasurement(TEMPERSENSORI_ID, HDC.readTemperature());
   delay(10);
   Wire.beginTransmission(0x77);
   Wire.write(1 << channels[1]);
   Wire.endTransmission();
   addMeasurement(TEMPERSENSORO_ID, HDC.readTemperature());
  delay(200);
#endif

Beachte, dass du noch den Namen von deinem Wifi Netzwerk und das Passwort unter:

// Wifi Credentials
const char *ssid = ""; // your network SSID (name)
const char *pass = ""; // your network password

setzten musst.

Falls du neben der Temperatur auch die Luftfeuchtigkeit beider Sensoren auslesen möchtest musst du das natürlich noch ähnlich wie oben beschrieben hinzufügen.

Wenn du alles gemacht hast, kannst du den Code kompilieren und auf deine senseBox MCU übertragen.

Viele Grüße
Mario

Moin,

Ok, soweit fast OK:

  • habe erstmalig den bisherigen Arduino Sketch kompilieren können, in Eurer Library Sammlung fehlt der SDC Sensor, die musste ich mir nachinstallieren
  • Ich habe analog zu TEMPERSENSORO_ID auch den Sensor RELLUFSENSORO_ID angelegt. Der Schnipsel heißt daher

#ifdef HDC1080_CONNECTED
Wire.beginTransmission(0x77);
Wire.write(1 << channels[0]);
Wire.endTransmission();
addMeasurement(TEMPERSENSORI_ID, HDC.readTemperature());
delay(10);
addMeasurement(RELLUFSENSORI_ID, HDC.readHumidity());
delay(10);
Wire.beginTransmission(0x77);
Wire.write(1 << channels[1]);
Wire.endTransmission();
addMeasurement(TEMPERSENSORO_ID, HDC.readTemperature());
delay(10);
addMeasurement(RELLUFSENSORO_ID, HDC.readHumidity());
delay(200);
#endif

Nur - beim kompilieren kennt das System „channels“ nicht. Muss da noch was eingebunden werden?

Patrick

Ah, jetzt ja:
Beim Initialisieren habe ich - analog des Tutorials - in die Kopfzeilen noch:

// Multiplexer gedöns
byte multiplexAddress = 0x77;
byte channels[] = {0,1,2};

zugefügt. Nun kompiliert das zumindest schon mal durch.

Gleich mal in die Kälte stapfen und im Gewächshaus die Kiste flashen.

Patrick

Yeah, Tut.
Nur - warum soll die Temperatur im Gewächshaus kälter sein als draußen?
Kann das sein, dass die Stecker verkehrtherum sind? Im Scrit wird ja channels[0] und [1] den Sensoren zugeordnet. Ist das den Steckern zugeteilt? Auf der Hardware ist das ja mit 1 und 2 beschriftet. Können die unterschiedlichen Messwerte daran liegen, dass ich die Stecker vertauscht habe? Wäre das auch gegangen, wenn ich die am Multiplexer unter 3 und 5 gesteckt hätte?

Patrick

Mal doof gefragt - wenn ichgenug gespart habe, mir einen zweiten Bodenfeuchte Sensor zu leisten, kann der dann an Eingang B und gut, oder muss man den auch Multiplexen? Was ist das eigentlich für ein Standard? I2C wohl nicht, oder?

Patrick