zondag 8 juli 2012

DHT11

Op EBAY kun je voor rond de €1,50 de DHT11 aantreffen, deze sensor meet
de temperatuur en de luchtvochtigheid., temperatuur bereik 0-50 graden vochtigheid van 20-95% nauwkeurigheid +/-2 graden en +/- 5% vochtigheid. De sensor werkt min of meer zoals een onewire van dallas. De resolutie is 1, het vreemde is wel dat de decimalen wel mee worden verstuurd maar die zijn dus altijd 0. De luxere uitvoering is de DHT21 of DHT22 met een betere resolutie en bereik.
De datasheet is hier te vinden.



Op de foto heb ik naast de DHT11 ook een SHT11, de bovenste regel is de DHT11 de onderste
de SHT11

En hier de software voor de DHT11, aansluitingen voor het lcd en DHT11 vind je in de software,
De pic is in mijn geval een 18f2620, maar andere typen werken ook, alleen we maken gebruik van "pulsin"
dus de xtal freq moet 20mhz zijn. Anders dien je de waarden aan te passen.
De sensor is vrij traag en heeft een 1 seconde nodig om op te starten.
Is er een probleem met de sensor krijgen we een foutmelding,
Is er een bitje omgevallen van de 40 bits die worden ingelezen dan krijgen we een bit error.

Device 18F2620
Xtal 20   
                  
LCD_DTPin PORTC.0
LCD_ENPin PORTC.4
LCD_RSPin PORTC.5

All_Digital = On

Dim hygro As Byte
Dim hygrodec As Byte
Dim temp As Byte
Dim tempdec As Byte
Dim checksum As Byte
Dim dhtin As Byte
Dim teller As Byte
Dim checkchks As Byte
Dim dataout As Byte


DelayMS 100

Print  $FE, $40, $08, $14, $08, $03, $04, $04, $03, $00 ' celcius
Print  $FE, $48, $04, $0E, $0E, $1F, $1F, $1F, $0E, $00 ' drupje
Print  $FE, $50, $1F, $0E, $04, $00, $04, $0E, $1F, $00 ' temp binnen

Start:

Cls

Print At 1,1,"DHT11"

DelayMS 1500

main:

checksum = 0

TRISB = 000000

PORTB.0 = 1                       
DelayMS 50                       
PORTB.0=0:DelayMS 20             'start data cycles min 18ms
PORTB.0=1:DelayUS 30             ' port weer hoog, min 20 us
dhtin = PulsIn PORTB.0,1

If dhtin < 20 Or dhtin > 60 Then GoTo senserror  ' sensor error

GoSub datain
hygro = dataout

GoSub datain
hygrodec = dataout

GoSub datain
temp = dataout

GoSub datain
tempdec = dataout

GoSub datain
checksum = dataout

checkchks = (hygro + hygrodec + temp + tempdec)
If checkchks <> checksum Then
Print At 1,1, "Bit error"
Else
Print At 1,1,2," ",Dec2 temp,".",Dec1 tempdec,0," ",1," ",Dec2 hygro,".",Dec1 hygrodec,"%"
EndIf

DelayMS 1000
GoTo main

datain:       
dhtin = 0
For teller = 7 To 0 Step -1
dhtin = PulsIn PORTB.0,1           
If dhtin >30 Then    
SetBit dataout,teller
Else
ClearBit dataout,teller
EndIf
Next teller
Return

senserror:
Print At 1,1,"Sensor error     "
DelayMS 2000
GoTo Start

Geen opmerkingen:

Een reactie posten