neues Modul: Atlas Scientific Sensoren I2C_EZODO, I2C_EZOPH und I2C_EZOEC

Begonnen von danieljo, 05 Dezember 2015, 19:01:05

Vorheriges Thema - Nächstes Thema

danieljo

Ich möchte nun mein erstes Projekt vorstellen was sich über die letzten 6-8 Wochen entwickelt hat.

Ich suchte schon seit einiger Zeit nach einer passenden Lösung zur Elektronischen Messung vom pH-Wert meines Aquariums mittels RaspberryPI.

Damals äußerst schwer sowas zufinden zu teuer oder zu kompliziert. Dann fehlte Software oder es scheiterte an anderen Ursachen. Durch meinen Umstieg von pilight auf FHEM fing ich nach und nach an mir verschieden Steuerungen auf Basis des RaspberryPI zu verwirklichen.

Beschränken möchte ich mich hier allerdings auf die Sensoren.

Die Sensor(Platinen) des Hersteller Atlas Scientific sind kompakte Platinen auf denen alles vorhanden ist um von den Elektroden die entsprechenden Messwerte zu ermitteln und in einfache Werte zu übersetzen. Es gibt dort verschiedene Sensoren. Die Platinen selber kosten gerade mal zwischen 40 und 45€ was ich für mich recht günstig finde. Im gegensatz zu den Elektroden jenachdem welche man benötigt. Die pH-Elektrode ist weit verbreitet und bekommt man schon ab 25€ bis zur Preisen über 200€ für Industriequalität. Die Sauerstoff-Elektrode die ich verwenden habe ich mir im Kit mit der Sensor Platine gekauft Im Einsatz habe ich folgende:

EZO pH Circuit -> Zur Messung des pH-Wertes
EZO DO Circuit -> Zur Messung des Sauerstoffgehaltes und der Sauerstoffsättigung
EZO EC Circuit -> Zur Messung des Leitwertes (Salzgehalt, gelöste Stoffe im Wasser)

Alles Sensoren dieses Herstellers haben 2 Protokollarten einmal UART und I2C.

Zuerst wollte ich alles über UART und ECMD mittels einer classdef realisieren. Schnell wurde mir klar für jeden weiteren Sensor brauche ich einen USB2UART Adapter. Das gefiel mir nicht so. Deshalb versuchte ich mich an einem I2C Modul für FHEM. Am Anfang war es recht schwer für mich erstmal in PERL einzusteigen vorallem mit so einem "größeren" Projekt. Dank klauswitt der mich über PN großartig unterstützt hat, an dieser Stelle nochmal vielen vielen Dank an dich das du dir die Zeit genommen hast mir Tipps und Erklärungen zu geben,  so konnte ich innerhalb 2 Wochen es soweit bringen das ich nun ein Modul vorliegen habe mit dem sich die Sensoren über I2C ansprechen lassen.

Da der pH-Sensor noch über UART in Betrieb war hatte ich mir zum Testen und Entwickeln die EZO DO Platinen vorgenommen.

Wichtig ist vorallem das man alle Sensoren galvanisch komplett vom RaspberryPI trennt. Da es durch kleinste Spannungsunterschiede zu fehlerhaften Messwerten kommt oder sich sogar den Messeingang zerstört. Dazu habe ich ein 5V DC-DC Wandler genommen und ein ADuM1250 Baustein. Den Testaufbau habe ich heute fertiggestellt und funktioniert einwandfrei. Demnächst werde ich mir noch eine Paltine dafür anfertigen auf der ich mehrere Sensoren aufstecken kann. Fotos und Schaltplan werde ich später hier veröffentlichen.

Das I2C_EZODO (DO steht für Dissolved Oxygen) Modul ist ca. halb fertig. Es können über ein auswählbares poll_interval Messungen vorgenommen werden und als Reading erhält man sowohl den Sauerstoffgehalt im Wasser in mg/l als auch die Sauerstoffsättigung in %.
Desweiteren ist die Funktion eingebaut die Status LEDs auf der EZO DO Platine an und abzuschalten und es ist die Möglichkeit eingebaut einen Temperaturwert an den Sensor zu übermitteln. Damit erreichtman über einen externen Sensor z.B. einen DS18B20 und entsprechenden notifiy in FHEM das der Temperaturwert der zu Messenden Flüssigkeit an den Sensor übermittelt wird. Das ganze nennt sich dann Temperatur Kompensation. Was nun noch fehlt sind die Funktion zur Status Abfrage des Sensors und die Kalibrierungsfunktion.

Da ich blutiger Anfänger in PERL bin ist da Modul verbesserungswürdig es kann auch Fehler enthalten oder es können Funktion einfacher geschrieben sein. Das Modul werde ich nächste Woche hier reinstellen. Es folgt auch noch das Modul für den pH-Sensor und später für Leitwert etc. Ob das Modul mal eingecheckt wird weiß zu diesem Zeitpunkt noch gar nicht da ich mich mit der veröffentlichen von Sachen bei FHEM noch nicht mit beschäftigt habe. Ein Wiki Eintrag bei FHEM wäre aber Denkbar. Ich werde die nächste Woche das Modul noch ausbauen und verbessern und dann hier hochladen. Vielleicht kann ja der ein oder andere Programmierer unter uns mal drüber lesen.

Für wenn könnte das Interessant sein? Für durch FHEM begeisterte Aquarium und Pool Besitzer.

MFG, Daniel Joachims

UPDATE: Modul I2C_EZOPH auf Wunsch längere Poll-Time integriert
29.08.2016 UPDATE: Modul I2C_EZOEC kleinere Änderung wegen Fehlfunktion bei Reset und Set_K_Values

danieljo

kurzes update:

Das I2C_EZOPH Modul steht nun auch. Beim I2C_EZODO habe ich die Eingabe des (Luft)Druckwertes von kPa auf mbar geändert. Aus dem Grund das mbar weiter verbreitet ist.


danieljo

So weiter gehts. Ich habe heute die CO2 Regelung in Betrieb genommen. Natürlich mit Sicherheit gegenüber den Lebewesen im Aquarium. Mittels einem notify setze ich jetzt automatisch die Temperaturwert des Wasser bei jeder Änderung. Desweiteren habe ich das CO2 Ventil mittels THRESHOLD angesteuert funktioniert einwandfrei und der pH-Wert wird jetzt mittels CO2 gesteuert. Da die Planzen bei Tag (Licht an) CO2 benötigen und dadurch dder pH-Wert steigt.

Zur Sicherheit habe ich die Kommerzielle CO2 Steuerung parallel in Betrieb sollte der pH-Wert durch einen Fehler zuweit sinken steuert es notfalls das CO2-Ventil ab.

Das gleiche Verfahren funktioniert nun seit etwas einem halben Jahr auch bei der Heizungsregelung fürs Aquarium. Dort wird die Wassertemperatur bei 24°C gehalten sollte sie über 25°C schaltet der Heizstab über das eingebaute Thermostat des Heizstabes diesen ab.

Natürlich habe auch von extern Zugriff auf die Werte um immer mal einen Blick drauf zu werfen.

danieljo

Das I2C-EZODO Modul hat noch ein update bekommen:

* Die "Saturation" ausgabe kann nun aktviert oder deaktiviert werden
* Funktion zum setzen der Kalibrierungspunkte eingebaut

danieljo

Die Module habe ich im ersten Beitrag als Anhang eingefügt.

danieljo

Die Module laufen beide einwandfrei. Kalibrieren klappt ohne Probleme. Die Messwerte sind nahezu identisch mit den von Handelsüblichen Messgeräten. Die CO2 Regelung klappt ebenfalls Fehlerfrei. Hinzugekommen ist jetzt noch ein BMP180 Sensor zur Luftdruck Korrigierung.

Im neuem Jahr werde ich den Leitwert-Sensor noch in Angriff nehmen.

Wie ist es Möglich einen Wiki Eintrag dazu zu schreiben. Wie oder wo muss ich mich bei wem melden?

Mr.Pink

Vielen Dank  :)
Ich baue gerade mein allerestes Projekt auf Pi Basis und das ist GENAU das wonach ich gesucht habe,
und weshalb ich mich gerade eben hier angemeldet habe !


danieljo

Zitat von: Mr.Pink am 27 Dezember 2015, 16:24:27
Vielen Dank  :)
Ich baue gerade mein allerestes Projekt auf Pi Basis und das ist GENAU das wonach ich gesucht habe,
und weshalb ich mich gerade eben hier angemeldet habe !

Das freut mich zuhören und wünsche die hier viel Spaß und Erfolg mit FHEM.

Sollte es Probleme mit den Modulen oder Allgemein mit den Sensoren geben dann poste das hier im Thread ich versuche dir dann zu helfen. Das Leitwertmodul kommt zwischen 01/2016 und 02/2016. Muss die Platine und Elektrode noch bestellen.

Was hast du den vor wen man Fragen darf?


danieljo

#8
Funktionsübersicht und Beschreibung

Allgemeine Information und Hinweise für alle Module


Für die Module EZOpH und EZODO muss zuerst das IODEV konfiguriert werden z.B. RPII2C. Siehe auch hier: http://fhem.de/commandref.html#RPII2C. Die I2C Adresse ist fix und basiert auf die vom Werk aus eingestellten Standart Werte:

EZOpH = 0x63 = 99
EZODO = 0x61 = 97

Zum Einbinden in FHEM ladet ihr euch die entsprechende Modul-Datei 52_I2C_EZOPH oder 52_I2C_EZODO runter und kopiert diese Dateien in euren FHEM Ordner z.B.: "/opt/fhem/FHEM/". Die Dateien findet ihr im ersten Beitrag als Anhang. Danach ein "shutdown restart" ausführen, damit FHEM die Module lädt.

Zum konfigurieren der Module tippt ihr in die FHEM Kommandozeile folgendes ein:

Für EZOPH = define <DeineBezeichnung> I2C_EZOPH
Für EZODO = define <DeineBezeichnung> I2C_EZODO

Die Sensorplatinen werden ab Werk auf das UART Protokoll ausgeliefert um eine Verwendung mit diesen Modulen zu ermöglichen müssen die Platinen zuerst manuell in den I2C-Modus gesetzt werden, wie das geht steht in den Entsprechenden Datenblättern des Herstellers.

Ich möchte hier noch kurz drauf Hinweisen das die Sensorplatinen äußerst empfindlich sind. Sollten sich in der zu messenden Flüssigkeit noch anderen Elektrische Geräte z.B. Pumpen, Heizstäbe etc. befinden sowie es im Aquarium oder Pool der Fall ist so empfehle ich eine galvansiche Trennung der Sensor Platine zum Raspberry Pi oder ähnlichen. Die galvanische Trennung sollte sowohl die Spannungsversorgung betreffen als auch die Datenleitungen. Nur so kann gewährt werden das ihr keine durch Kriechströme (es reichen schon µA aus) verfälschlten Messwerte erhaltet. Eine Beispiel Schaltung werde ich hier demnächst veröffentlichen. Der Umgang mit Spannung/Strom in Verbindung mit Wasser sollte jedem Klar sein!

Funktionsbeschreibung EZOpH:

Die EZOpH Sensor Platine misst den pH-Wert jeglicher Flüssigkeiten im Bereich von pH 0 - 14. 0 steht für stark sauer, 7 für neutral und 14 für stark basisch. Es kann z.B. der pH-Wert im Süsswasseraquarium gemessen werden und mittels Co2 auf einen entsprechend Wert eingestellt werden. Somit lässt sich bei Planzenaquarien der für Wasserpflanzen notwendige Co2-Gehalt auf einen konstanten Wert halten.

set <DeineBezeichnung> CalibrateMiddle 7.00

Setzt den Mittelpunkt meistens pH 7. Dieser Kalibrierungspunkt muss als ersten gesetzt werden.

set <DeineBezeichnung> CalibrateLow 4.00

Setzt den Unterenpunkt meistens pH 4. Dieser Kalibrierungspunkt muss NICHT zwingend gesetzt werden. Erhöht aber die Messgenaugigkeit.

set <DeineBezeichnung> CalibrateHigh 10.00

Setzt den Oberenpunkt meistens pH 10. Dieser Kalibrierungspunkt muss NICHT zwingend gesetzt werden. Erhöht aber die Messgenaugigkeit.

set <DeineBezeichnung> CalibrateReset

Löscht alle Kalibrierungspunkte.

set <DeineBezeichnung> TemperaturCompensation 23.456

Setzt den Temperaturwert der zu messenden Flüssigkeit. Der Eingabewert muss als °C erfolgen im Format 23.456. Dies kann auch Automatisch geschehen mittels einem Temperatursensor z.B. DS18B20 und einem notifiy der bei Änderung der Temperatur den Wert an EZOpH übermittelt.

Readings

Als Readings werden unter anderem Folgende Information ausgegeben:

Set_DebugLED

Zeigt an ob die DebugLED auf der Sensorplatine ein- oder aus-geschaltet ist. (Ist nur zu Debug Zwecken)

Set_ReadTempComp

Zeigt den letzten übermittelten Temperaturwert zur Kompensation an. (Ist nur zu Debug Zwecken)

Set_pHCalLow

Zeigt den zuletzt gesetzten Wert der Unterenpunkt Kalibrierung an. Somit kann man sehen wann das letzte mal Kalibriert worden ist. (Ist nur zur DebugZwecken)

Set_pHCalMid

Zeigt den zuletzt gesetzten Wert der Mittelpunkt Kalibrierung an. Somit kann man sehen wann das letzte mal Kalibriert worden ist. (Ist nur zur DebugZwecken)

Set_pHCalHigh

Zeigt den zuletzt gesetzten Wert der Oberenpunkt Kalibrierung an. Somit kann man sehen wann das letzte mal Kalibriert worden ist. (Ist nur zur DebugZwecken)

Status

Zeigt den Sensor Status an. 1, 2, 254 oder 255.
Hinweis! Es kann vorkommen das dort hin und wieder statt 1, 129 angezeigt wird noch konnte ich nicht herausfinden woran das liegt. Der Sensor arbeitet aber ganz normal weiter.

1 = Success
2 = Failed
254 = Pending
255 = No Data

pH

Zeigt den gemessen pH-Wert an z.B. 6.447

state

Zeigt die zuletzt empfangenen Information des Sensors an z.B. S: 1 pH: 6.457
S = Sensor-Status
pH = gemessener pH -Wert

Neben den Standart Attributen kann man noch folgende Attribute setzten:

DebugLED on/off
Hiermit besteht die Möglichkeit die DebugLED auf der Platine an oder auszuschalten.

poll_interval 1/2/5/10/20/30
Mess-Interval in Sekunden.

Funktionsbeschreibung EZODO:

Die EZODO Sensor Platine misst den Sauerstoffgehalt in Wasser. als Messwert erhält man die gelöste Menge an Sauerstoff in mg/l. Desweiteren kann in Abhängigkeit von Salzgehalt, Temperatur und Druck die Sauerstoffsättigung in der gemessenen Flüssigkeit bestimmt werden. Bei Süßwasser unter normalen Umgebungsdruck reicht es aus den Temperaturwert anzugeben. Alternativ kann man noch Leitwert in µS angeben und/oder den Druck z.B. den Umgebungsdruck in mBar.

FORTSETZUNG FOLGT ...





Mr.Pink

Zitat von: danieljo am 28 Dezember 2015, 19:13:14
Das freut mich zuhören und wünsche die hier viel Spaß und Erfolg mit FHEM.

Sollte es Probleme mit den Modulen oder Allgemein mit den Sensoren geben dann poste das hier im Thread ich versuche dir dann zu helfen. Das Leitwertmodul kommt zwischen 01/2016 und 02/2016. Muss die Platine und Elektrode noch bestellen.

Was hast du den vor wen man Fragen darf?

vielen Dank
Ich automatisiere nach und nach mein Aquarium (inzwischen die ganze Wohnung^^) und mit fhem funktioniert das Super !

danieljo

Hier mal ein paar Bilder.

Der Screenshot von dem Modul und 2 Bilder von der Platine mit galvanischer Trennung über DC/DC Wandler und einem I2C Baustein zur galvanischen Trennung der Signale.


danieljo

UPDATE: Modul I2C_EZOEC hinzugefügt. (TESTPHASE)

Das Modul ist für den Atlas Scientific EZO EC Sensor. Damit lässt sich nun auch der Leitwert einer Flüssigkeit in FHEM einfügen.

Florian11

Hallo danieljo,

hast du vielleicht einen Schaltplan von der Platine mit galvanischer Trennung?

Gruß Flo

danieljo

Hier der Schaltplan:

Es kann jeder DC-DC Wandler genommen werden mit 5V Eingang / 5V Ausgang Spannung 0,5W aufwärts.
Der I2C Bus-Isolator ist von Analog-Devices ADuM1250ARZ.
Ansonsten 2 Elkos 6,3V / 470µF. Es können auch Typen mit höhere Spannung eingesetzt werden sowie die Kapazität. Bei der Kapazität sollte der Elko am Ausgang des DC-DC-Wandler meist nicht über 470µF gewählt werden. Am besten vorher ins Datenblatt des DC-DC-Wandler schauen. Die Z-Diode dient dazu Die Spannung sicher unter 5,1V zuhalten. Da die meisten DC-DC-Wandler im Leerlauf eine höhere Spannung ausgeben und somit der Atlas-Scientific Sensor eine Fehlermeldung ausgibt. Aufgrund der wenigen Bauteile habe ich es auf eine Lochrasterplatine aufgebaut.

Am sichersten ist es wenn man für jeden Sensor eine eigene galvanische Trennung aufbaut.


Florian11

Danke Schön, dann werde ich mir das jetzt mal alles Bestellen und nach bauen.  ;)