Hallo Forum,
ich habe nun (mehr oder weniger gut) erfolgreich einen HH10D Feuchtigkeitssensor an mein Raspberry Pi anschließen könne.
Bei dem Sensor handelt es sich um diesen hier:
http://www.hoperf.com/upload/sensor/HH10D.pdf
Dieser gibt eine Frequenz aus, welche abhängig von der Luftfeuchtigkeit ist.
Da ich nicht weiß wie ich in Python Timer und GPIO Interrupts anspreche (falls das überhaupt geht), habe ich die Frequenzmessung erstmal ohne entsprechende Hardware gemacht.
Das Ergebnis ist, dass der Wert für die Frequenz um etwa 30Hz schwank, was sich natürlich auf das Messergebnis auswirkt (+-10% im Vergleich zum ausgerechneten Messwert mit einer vom Oszi gemessenen Frequenz).
Sobald ich eine Möglichkeit gefunden habe Timer oder ähnliches zu nutzen, werde ich das Programm dementsprechend anpassen
Eine Ausgabe sieht atm so aus:
Bild hier
Und den Code findet ihr hier:
Ich werde morgen oder so auch noch einen ausführlichen Artikel auf meiner HP veröffentlichen (und nächste Woche die Werte mal mit einem "richtigen" Messgerät checken)Code:# !/usr/bin/python import smbus import time import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) FOUT = 25 # Anschluss von FOUT des Sensors # GPIO als Eingang schalten GPIO.setup(FOUT, GPIO.IN) # Adresse HH10D_EEPROM = 0x51 # I2C Adresse vom EEPROM des Sensors # Variablen # EEPROM-Werte Sens = [0, 0] # Variable fuer die Sensitivity (LSB, MSB) Off = [0, 0] # Variable fuer den Offset (LSB, MSB) Sensitivity = 0 # Fertige Sensitivity (16-Bit) Offset = 0 # Fertiger Offset (16-Bit) # Frequenzmessung Frequenz = 0.0 # Variable fuer die Frequenz Start = 0.0 # Startzeit Stop = 0.0 # Stopzeit Differenz = 0.0 # Zeitdifferenz Zyklen = 2000 # Anzahl der Messzyklen Korrektur = 0.80 # Korrekturfaktor in % (abhaengig von den Messzyklen!) # Berechnung Feuchtigkeit = 0.0 # Variable fuer die Luftfeuchtigkeit # I2C Bus 0 oeffnen Bus = smbus.SMBus(0) # Kalibrationswerte auslesen Bus.write_byte(HH10D_EEPROM, 0x0A) # Startadresse auf 10 einstellen for Adresse in range(2): # Beide Sensitivity Bytes auslesen Sens[Adresse - 1] = Bus.read_byte(HH10D_EEPROM) for Adresse in range(2): # Beide Offset Bytes auslesen Off[Adresse - 1] = Bus.read_byte(HH10D_EEPROM) # Daten umwandeln Sensitivity = Sens[0] + (Sens[1] << 8) Offset = Off[0] + (Off[1] << 8) # Periodenzeit ermitteln Differenz = 0 for Counter in range(Zyklen): while GPIO.input(FOUT) == 0: # Warten bis ein High-Pegel anliegt pass Start = time.time() # Startzeit festhalten while GPIO.input(FOUT) == 1: # Warten bis ein Low-Pegel anliegt pass Stop = time.time() # Stopzeit festhalten Differenz = Stop - Start # Differenz der Messzeit errechnen Frequenz = Frequenz + Differenz # Gesamtdifferenz berechnen # Frequenz ermitteln Frequenz = Frequenz / Zyklen # Durchschnittliche Differenz berechnen Frequenz = Frequenz * 2 # Differenz auf einen kompletten Zyklus hochrechnen Frequenz = 1 / Frequenz # Differenz in eine Frequenz umrechnen # Korrekturfaktor einrechnen Frequenz = Frequenz * (1.0 + (Korrektur/100.0)) # Luftfeuchtigkeit berechnen Feuchtigkeit = Offset - round(int(Frequenz), 0) Feuchtigkeit = Feuchtigkeit * (float(Sensitivity) / 4096) Feuchtigkeit = round(Feuchtigkeit, 2) # Ergebnis runden print "Sens:" , Sensitivity print "Offset:", Offset print "Frequenz:", Frequenz print "Feuchtigkeit:", Feuchtigkeit, "%" GPIO.cleanup()
Btw.....den Shebang habe ich erstmal ausgeklammert, da mir Programmers Notepad immer fiese Steuerzeichen in den Code geschmuggelt hatte und ich jedesmal den Code mittels "vi" nacharbeiten durfte sobald ich diesen geändert habe![]()







Zitieren

Lesezeichen