Anschluss eines Feuchtigkeitssensors

Raspberry Pi

Hier zeige ich euch wie ihr einen Feuchtigkeitssensor der Firma Hope RF an euer Raspberry Pi anschließt und diesen auslest.
Da dieser Sensor mit 3V arbeitet, ist er ideal um ihn an euer Raspberry Pi anzuschließen, da ihr keinerlei Zusatzbeschaltung benötigt.
Ich muss allerdings dazu sagen, dass die Lösung nicht die genaueste ist, da ich für die Frequenzmessung keinen Timer bzw. Interrupt verwende (etwa +- 10% Genauigkeit). Der Sensor ist u.a. hier erhältlich.

-> Der Schaltungsaufbau:

Die Schaltung ist recht klein gehalten, da der Sensor (wie eben schon gesagt) keinerlei Zusatzbeschaltung benötigt:

HH10D PinoutHH10D Pining

-> Das Python-Programm:

Der Sensor gibt eine Frequenz aus, mit der die aktuelle Luftfeuchtigkeit berechnet werden kann.
Hierfür besitzt der Sensor ein EEPROM, welches zwei mit zwei 16-Bit Kalibrationswerten beschrieben worden ist.
Diese Kalibrationswerte werden vom Hersteller während des Fertigungsprozesses in das EEPROM geschrieben und müssen nur ausgelesen werden.
Die Luftfeuchtigkeit kann anschließend mit folgender Formel berechnet werden:

Relative Luftfuechtigkeit: RF
Offset: Off
Frequenz: Freq
Sensitivity: Sens

Latex formula

Das EEPROM ist wie folgt beschrieben:

Sens: Low-Byte (0x0A), High-Byte (0x0B)
Off: Low-Byte (0x0C), High-Byte (0x0D)

Das Python-Programm ließt als erstes die Kalibrationswerte aus dem EEPROM aus.
Leider sind die Sensorkalibrationsdaten in der „falschen“ Reihenfolge im EEPROM hinterlegt, sodass ich die Pythonfunktion read_word_data nicht verwenden kann und das Auslesen für jedes Byte einzeln erfolgen muss.
Das Auslesen geschieht mit Hilfe dieser Zeilen:

Als erstes wird die Startadresse auf den Bus geschrieben (0x0A).
Danach werden die beiden For-Schleifen durchlaufen. Jede Schleife umfasst zwei Zyklen und bei jedem Zyklus wird der Inhalt der aktuellen Speicherzelle des EEPROMs ausgelesen und in einer zweistelligen Liste gespeichert.
Die Werte der beiden Listen werden anschließend mit diesen Zeilen vereint:

Dadurch erhalte ich die beiden Zahlenwerte, die ich für die Berechnung der Luftfeuchtigkeit benötige.
Jetzt benötige ich nur noch die Frequenz am Sensorausgang.
Die Frequenzmessung ist nicht sehr genau, da ich keinen Timer bzw. CTC verwende (u.a. weil ich nicht weiß wie ich die vernünftig programmiere. Wenn mir jemand bei dem Problem helfen kann würde ich mich sehr dadrüber freuen), aber für eine ungefähre Messung reicht es vollkommen.
Die Frequenzmessung wird mit dieser Schleife realisiert:

Die Anzahl der Messzyklen kann durch den Wert der Variable Zyklen bestimmt werden.
Das Prinzip der Messung ist recht einfach.
Mit der ersten While-Schleife wartet das Programm solange bis der Pin einen High-Pegel führt, oder die While-Schleife wird solange durchlaufen wie der Pin einen Low-Pegel führt.
Sobald der Pegel High ist, wird die aktuelle Systemzeit festgehalten:

Anschließend wird wieder eine While-Schleife durchlaufen. Diesmal allerdings solange wie der Pegel High ist, sprich sobald ein Low-Pegel anliegt, wird die Schleife verlassen.
Jetzt wird ein weiteres Mal die Systemzeit festgehalten:

Danach bilde ich mit

die Zeitdifferenz. Damit erhalte ich die Zeit, die der Pin einen High-Pegel geführt hat.
Diese Zeiten addiere ich alle und speichere diese in der Variable Frequenz.
Nun kann die Zeit in eine Frequenz umgerechnet werden:

Als erstes bilde ich eine Durchschnittszeit und multipliziere die Zeit mit 2, da ich die komplette Periodenzeit benötige und nicht nur die High-Level Zeit.
Nach diesem Schritt wird die eigentliche Frequenz berechnet und gespeichert.
Der Rest vom Programm ist die Berechnung der Luftfeuchtigkeit, sowie die Ausgabe des Ergebnisses.
Eine Ausgabe sieht dann z.B. so aus:

HH10D Ausgabe

 

Dokumentation:

 

-> Zurück zu den Basteleien mit dem Raspberry Pi

11 thoughts on “Anschluss eines Feuchtigkeitssensors
  1. Hallo Daniel,
    zuerst einmal ein ganz großes Kompliment für die vielen kompetent erklärten Anwendungsbeispiele. Vielleicht kannst du mir bei einem kleinen Problem helfen. Ich habe alles genauso angeschlossen und auch i2cdetect bringt mir dieselbe Adresse, wenn ich haber das python-Skript laufen lasse, bekomme ich folgende Fehlermeldung: Traceback (most recent call last):
    File „(home/pi/HH10D.py“, line 41, in
    Bus.write_byte(HH10D_EEPROM,0x0A)
    IOError: [Errno 5] Input/output error
    Hast du einen Tipp?

    • Hallo Roman,

      hast du die GPIOs / den I2C bereits wo anders im Einsatz?
      Ansonsten probier mal:

      $ sudo adduser pi i2c

      Gruß
      Daniel

      • Hi Daniel,
        ich habe den Fehler: es war der falsche smbus eingestellt, da ich die neuere Version vom RPi habe. Trotzdem vielen Dank für deine Hilfe!
        Gruß
        Roman

        • Hallo Roman,
          ich habe einen ähnlichen Fehler in meinem Skript. Magst du mir bitte einmal genau schreiben, was du wo geändert hast? Ich weiß, lang lang ist es her. Du würdest mir damit aber sehr helfen.
          MfG
          Michael S.

    • Hey Volker,

      theoretisch kannst du das, nur du brauchst noch einen A/D Wandler dafür, weil der Sensor eine analoge Spannung ausgibt.

      Gruß
      Daniel

      • Hallo Daniel,

        danke für die schnelle Antwort! Kanst du mir für den Sensor ein Shield empfehlen, das mit dem Raspi zusammenarbeitet und ähnlich gut dokumentiert ist wie deine Projekte, sodass auch ein Elektronik-Honk damit klar kommt?
        Mein Plan: Schock den Nachbarn!
        Will meine Tomaten und Chili mit dem Sensor überwachen und bei Bedarf wässern. Die Relaisschaltung für die Minipumpe in der Regentonne funktioniert. Die Sensorik ist eine Klippe! Da komme ich ohne deine Hilfe nicht weiter. Im Gegenzug packe ich gerne ultimative Gartentipps aus 40 Jahren Erfahrung aus! :)

        Danke schon mal!
        Volker

  2. Hallo Daniel

    Ich bin durch (ehrlicher Weise) Zufall auf Deine Seite „gelandet“.
    Seit ca. 8 Wochen habe ich jetzt einen Pi B und probiere und bastel in meinem Hobbykeller und (da ich auch eine Anwesendheitspflicht bei meiner Frau habe) in der Küche rum.
    Da ich wie gesagt am Anfang bin muss ich erst einmal Schritt für Schritt meine Ziele erreichen. Mit den GPIO LEDs ansteuern, Schrittmotoren,Relais, Funkschalter „Fernschaltung“ vom Hand über die Fritzbox zum Pi, WebCAM über Handy usw waren meine letzten Versuche.
    Nun werde ich mir einige Deiner „Basteleien“ oben ansehen und versuchen noch etwas zu lernen.

    Viel Glück noch auf Deinem beruflichen Wege und mach weiter so.

    Gruß aus Dorsten
    Herbert

    PS: in Münster war ich mit meinem Sohn auch mal in einer Skaterhalle(Titus??)

    • Hallo Herbert,

      ich wünsche dir viel Erfolg mit dem Basteln und Experimentieren :)
      Du wirst sicher noch einige Interessante Anwendungsfälle für den Pi finden und sie hoffentlich auch erfolgreich umsetzen können ;)

      Gruß
      Daniel

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Time limit is exhausted. Please reload CAPTCHA.