-
        

Ergebnis 1 bis 2 von 2

Thema: Feuchtigkeitssensor HH10D

  1. #1
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9

    Feuchtigkeitssensor HH10D

    Anzeige

    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:


    Und den Code findet ihr hier:
    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()
    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)

    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
    Geändert von Kampi (08.02.2013 um 23:09 Uhr)
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    51
    Beiträge
    847
    Hallo Kampi,

    ich habe gelesen, dass der einzige Pin, der Hardware PWM zur Verfügung stellen kann, GPIO18 (PIN 12) ist. Wie das geht, weiss ich allerdings nicht...
    Mehr unter http://www.rpiblog.com/2012/11/pwm-on-raspberry-pi.html

Ähnliche Themen

  1. Feuchtigkeitssensor ab 3V gesucht
    Von PuraVida im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 6
    Letzter Beitrag: 14.12.2011, 11:50
  2. Feuchtigkeitssensor - Arduino
    Von Cfischer im Forum Sensoren / Sensorik
    Antworten: 3
    Letzter Beitrag: 13.04.2011, 17:53
  3. Feuchtigkeitssensor ???
    Von alecs im Forum Sensoren / Sensorik
    Antworten: 6
    Letzter Beitrag: 05.03.2010, 23:21
  4. Feuchtigkeitssensor an CCRP5
    Von solo im Forum Robby CCRP5
    Antworten: 7
    Letzter Beitrag: 13.07.2009, 17:02
  5. Feuchtigkeitssensor
    Von dark_flash01 im Forum Elektronik
    Antworten: 8
    Letzter Beitrag: 21.12.2006, 21:46

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •