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