Hallo,
für mein Projekt habe ich einen Adafruit TSL2591 mit dem ESP8266 per I2C
verbunden. Ich möchte (draußen) die Beleuchtungsstärke messen und per
WLAN an den Server übertragen.
Im Moment habe ich nur einen einzigen TSL2591, es soll aber noch ein
weiterer (abgeschatteter) dazukommen, mit dem ich dann Sonnnenschein
oder Bewölkung unterscheiden kann. Irgendwann könnte ich mit der
Information dann die Rollläden steuern, vor allem im Sommer, damit es
nicht so warm wird, wenn die Sonne reinscheint.
Anbei der Code, wobei ich das Hauptsächlich vom TSL2591 übernommen habe
und die bekannten Teile für den ESP8266 hinzugefügt. Ich habe versucht,
eine Logik zu erstellen, dass die Verstärkung des Chips an die Messwerte
angepasst wird und dynamisch nach Bedarf gewählt wird. Die Daten werden
an den Volkszähler übermittelt.
Aktuell ist es so, dass die Daten bei 5% Änderung übertragen werden oder
nach ca. 5 Minuten. Teilweise erfolgt dann die Datenübermittlung sehr
oft hintereinander, wenn sich so wie heute ständig die Bewölkung ändert,
teilweise im Sekundentakt.
Was nicht so funktioniert (und ich würde mich über einen Kommentar oder
Anregung zur Abhilfe freuen):
1.) Ich bekomme nur 2 Nachkommastellen. Laut Beschreibung, soll der
TSL2591 aber bis 0,000118 Lux herunter können. Ich würde gern auch die
Nächte unterscheiden können, ob z.B. der Mond schien oder Schnee liegt.
Ich habe den Quellcode schon auf Double geändert, auch in der Lib, aber
es blieb bislang bei 2 Ausgabestellen nach dem Komma. Ich kann das nicht
ganz nachvollziehen, denn selbst das Basic vom C64 hatte da mehr
Stellen. Oder liegt es eher an den Ausgabefunktionen (Serial.print)?
Aber auch die Werte in der Datenbank haben nur 2 Nachkommastellen.
2.) Kennt jemand eine Lösung, dem Volkszähler-Frontend eine
logarithmische Skala zu verschaffen? Gibt es überhaupt eine Möglichkeit,
die Skalierung selbst festzulegen? So ärgert es mich auch, dass die
Skala für Luftdruck von 0 bis 1000+ geht, dabei wäre ein Bereich von
800-1100 sinnvoller.
Für die Außenanwendung wollte ich alles in ein Einportion-Marmeladenglas
packen und zuschrauben. Ich bin noch nicht sicher, ob da alles reingeht:
Also 2x TSL2591, ESP-03, Si7021, Mini-Schaltregler.
Für die TSL2591 brauche ich einen I2C-Muxer, aber die fertigen
Baugruppen sind mir alle zu groß. Außerdem brauche ich 8-fach nicht. Ich
habe in einem Thread gefunden, dass es mit dem HC4066 geht. Als SO-14
auf einer Adapterplatine sollte es klein genug werden.
Außerdem wäre vielleicht ein Widerstand als Beheizung nicht schlecht.
Mit dem Si7021 wollte ich die Umgebungsbedingungen im Gläschen
überwachen. Vorteil, ich bleib' bei I2C.
Anbei noch ein Screenshot mit Ausschnitt vom heutigen Tag. Wir hatten
stark wechselnde Bewölkung (typisches Aprilwetter halt). Der Sensor lag
im Fenster (Ostseite) und hat leider nur kurz die Sonne gesehen.
Christian
Nachtrag: Für 1 ist eine Lösung in Sicht. Für alle .print-Ausgaben kann
man die Anzahl der Stellen nach einem Komma angeben. Für die
Übermittlung an den Server wird das bei mir erst in einen String
umgewandelt und zusammengebastelt. Aber ich habe eine Seite gefunden, wo
das auch gelöst werden konnte. Das wird sich sicher übertragen lassen.
Noch eine Frage dazu: Der Arduino Uno hat nur float und kein double. Ist
das dann synonym (damit's kein Fehler gibt) oder wird für den ESP doch
double verfügbar (wie bei Arduino Due)? Ok, kann man bestimmt auch
wieder googeln.