dht11

Başlatan mitec, 26 Nisan 2012, 18:53:39

mitec

aranızda acaba bu dht 11 sensörünü kullanan oldumu?nem ölçen bir devre yapmam gerekiyor.sht lerde malumunuz biraz tuzlu elimde de dht 11 var acaba aynen sht kullanır gibi kullanabilirmiyiz(aslında daha önce sht de kullanmadım ama ete hocamın çalışmalarından bir şeyler çıkarabileceğimi umuyorum)
alttaki linkte  birşeyler var ama anlayamadım anlayabilen yada yardımcı olabilecek arkadaşlar varsa yardımlarınızı bekliyorum
http://embedded-lab.com/blog/?p=4333&mid=576

mitec

#1
ete hocam size zahmet şuraya bir bakıp bana yardımcı olurmusunuz nerde hata yapıyorum acaba
https://docs.google.com/viewer?a=v&q=cache:v0vXGtKN8zMJ:www.micropik.com/PDF/dht11.pdf+dht11&hl=tr&gl=tr&pid=bl&srcid=ADGEESh6q5O5J5ojdipreUfHbRWPEDSJzADZtzmrrBIfP4RAgc_1hFu2uZKlfOhX4kvXyyrBqxZbqEXd0hVfqfhYRRb96ijQF7qR-8uAC4iuAPkh232iYmLUsDlfaZjtbVqozmHl_Cfo&sig=AHIEtbT6jJ-bIojrEwGFV7pmdxcywozgrw

benim yazdığım kodlar şöyle

isioku:
        output okumapin
        okumapin=0:pause 18
        okumapin=1:pauseus 35
        input okumapin
okubekle:       
        if okumapin=0 then goto okudevam
        goto okubekle
okudevam:
        if okumapin=1 then goto bilgial
        goto okudevam
bilgial:
        OWIN    okumapin, 1, [nemtam,nemondalik,isitam,isiondalik]

        gosub isiyaz
       
        goto basla


sanırım sensörle haberleşebiliyorum çünkü değişik bilgiler alıyorum fakat sağlıklı değil bazen 00 bazen 28,bazen 45 vs ama çoğu zaman 100 ün üzerinde zaten gelen bilgilerin hiçbiri birbirini tutmuyor

wishes

#2
önümüzdeki ay ben de dht11 almayı düşünüyorum. aldıktan sonra çalıştırabilirsem forumda paylaşırım. şurada türkçe bir kaynak var:

http://myo.karatekin.edu.tr/mkt2012/calistay-cd/ekler/bildiriler/16.pdf

şurada da www.picbasic.co.uk sitesinde paylaşılan bir kod var. denemediğim için iş görür mü bilmiyorum:


INCLUDE "modedefs.bas"
DEFINE OSC 20                     ' declare xtal to give exact delays
ip      var    Byte               ' hi pulse from sensor
temp    var    Byte
hum     var    Byte
hum1    var    Byte
chksm   var    Byte
test    var    Byte
i       var    Byte
TRISB.0 = 0                       ' PORTB.0 = output, OneWire sensor
TRISB.1 = 0                       ' PORTB.1 = output, serout
Pause 1000                        ' give sensor time to settle
mainloop:
chksm = 0
'  TRISB.0 = 0                    ' portb o/p
PORTB.0 = 1                       ' make high
pause 50                          ' wait for a while
PORTB.0 = 0 : pause 18            ' send 18ms low
PORTB.0 = 1 : pauseus 30          ' send 30us hi
PulsIn PORTB.0, 1, ip             ' wait for hi
If ip < 130 Then GoTo subloop     ' if < 80us loop
ip = 0               
For i = 7 To 0 Step -1            ' 8 bits (1..8)
  PulsIn PORTB.0, 1, ip           ' receive pulses from sensor
  If ip > 70 Then
    hum = hum | 1 << i            ' SetBit hum, i
  Else
    hum = hum xor (1 << i)        ' ClearBit hum, i
EndIf
Next i
For i = 7 To 0 Step -1            ' 8 bits (9..16)
  PulsIn PORTB.0,1, ip            ' receive pulses from sensor
  If ip > 70 Then
    hum1 = hum1 | 1 << i          ' SetBit hum1, i
  Else
    hum1 = hum1 XOR (1 << i)      ' ClearBit hum1,i
EndIf
Next i
For i = 7 To 0 Step -1            ' 8 bits (17..24)
  PulsIn PORTB.0, 1, ip           ' receive pulses from sensor
  If ip > 70 Then
    temp = temp | 1 << i          ' SetBit temp, i
  Else
    temp = temp xor (1 << i)      ' ClearBit temp,i
EndIf
Next i
For i = 7 To 0 Step -1            ' 8 bits (25..32)
  PulsIn PORTB.0, 1, ip           ' receive pulses from sensor
  If ip > 70 Then
    temp1 = temp1 | 1 << i        ' SetBit temp1, i
  Else
    temp1 = temp1 xor (1 << i)    ' ClearBit temp1,i
EndIf
Next i
For i = 7 To 0 Step -1            ' 8 bits (33..40)
  PulsIn PORTB.0, 1, ip
  If ip > 70 Then
    chksm = chksm | 1 << i        ' SetBit chksm,i
  Else
    chksm = chksm xor (1 << i)    ' ClearBit chksm,i
EndIf
Next i
SerOut PORTB.1, 4, ["Check sum = ", #chksm, 13]
serout PORTB.1, 4, ["Humidity = ", #hum1, 13]
serout PORTB.1, 4, ["Temperature = ", #temp, "C.", 13]
test = (temp1 + hum1 + hum + temp)
If chksm <> test Then serout PORTB.1, 4, ["Checksum error", 13] 'HRSOut "error",13
pause 3000                 ' give sensor time to settle
GoTo mainloop
subloop:
  serout PORTB.1, 4, ["Sensor not ready", 13]
GoTo mainloop

ete

Mitec,

Mesajına cevap yazmadım.Çünkü sensörü daha önce hiç kullanmadım. Data sheet inceleyecek vaktimde olmadı.
Sonradan cevaplara bakınca verlen örnekkodların işine yaraması gerektiğini düşündüm.
Ayrıca senin kodların ile o sensörü okuman zor . Bu nedenle verilen kodlardan esinlenerek yeniden kod yazmalısın.

Ete


Maxim

bence dht11 ile uğraşmaya değmez
nem hatası +-%5
sıcaklık okuma hatası +-2C

çok kötü, o yüzdende ucuz herelde
2 derece ne demek!

dht22 var o çok daha iyi

bilsisco

dht içinde ntc ve basit bir bakır plaket var

bilsisco

denendi ve çalışıyor, alıntıdır.
Include "modedefs.bas"         
@ DEVICE pic16F628A
@ DEVICE pic16F628A, WDT_OFF
@ DEVICE pic16F628A, PWRT_ON
@ DEVICE pic16f628A, BOD_OFF
@ DEVICE pic16f628A, LVP_OFF
@ DEVICE pic16F628A, PROTECT_OFF
@ DEVICE pic16f628A, MCLR_OFF
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT

DEFINE OSC 4
'-------------------------- LCD Tanımlama --------------------
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 5
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
'DEFINE LCD_COMMANDUS 2000   ' Set command delay time in us
'DEFINE LCD_DATAUS 50        ' Set data delay time in us

TRISA=0  'A portu çıkış olarak ayarlandı.
TRISB=0  'B portu çıkış olarak ayarlandı.
PORTA=0
CMCON=7

SURE    var byte
I       VAR BYTE
TAMRUT  VAR BYTE
ONDARUT VAR BYTE
TAMISI  VAR BYTE
ONDAISI VAR BYTE
control var byte
DERECE  CON 223     ' ° işareti

symbol Dta=portA.0  'sensor dATA PİNİ PORTA.0 A BAĞLI


BASLA:


output  dta
LOW     DTA
    Pause   18      '18 ms bekle
HIGH    DTA         'Data pinini High yap
    Pauseus 40      '40 us bekle
input   dta
WHILE   DTA=0:WEND
PAUSEUS 85

IF DTA=1 then HATA

TAMRUT=0
FOR I=7 to 0 STEP-1  'MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
  WHILE DTA=0:WEND 
  Pauseus 40
  IF DTA=1 then TAMRUT.0[I]=1
  while dta=1:wend
Next

ONDARUT=0
FOR I=7 to 0 STEP-1  'MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
  WHILE DTA=0:WEND
   Pauseus 40
  IF DTA=1 then ONDARUT.0[I]=1
  while dta=1:wend
Next

TAMISI=0
FOR I=7 to 0 STEP-1  'MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
  WHILE DTA=0:WEND
    Pauseus 40
  IF DTA=1 then TAMISI.0[I]=1
  while dta=1:wend 
Next

ONDAISI=0
FOR I=7 to 0 STEP-1  'MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
  WHILE DTA=0:WEND 
   Pauseus 40
  IF DTA=1 then ONDAISI.0[I]=1
  while dta=1:wend
 
Next

control=0
FOR I=7 to 0 STEP-1  'MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
  WHILE DTA=0:WEND
   Pauseus 40
  IF DTA=1 then control.0[I]=1
  while dta=1:wend
 
Next
    LCDOUT  $FE,1
    LCDOUT  $FE,$80,"NEM=",DEC TAMRUT,"%"        ',DEC ONDARUT
    LCDOUT  $FE,$C0,"ISI=",dec TAMISI,derece,"C" ',DEC ONDAISI
    PAUSE   200

GOTO BASLA

hata:
    LCDOUT  $FE,1,"SENSOR HATASI"
    PAUSE   200
GOTO BASLA

END

sinasos

Evet devreyi az önce kurdum ve çalıştırdım. sorun yok gayet güzel çalışıyor.

yusiskan

#8
Alıntı yapılan: mitec - 26 Nisan 2012, 18:53:39
aranızda acaba bu dht 11 sensörünü kullanan oldumu?nem ölçen bir devre yapmam gerekiyor.sht lerde malumunuz biraz tuzlu elimde de dht 11 var acaba aynen sht kullanır gibi kullanabilirmiyiz(aslında daha önce sht de kullanmadım ama ete hocamın çalışmalarından bir şeyler çıkarabileceğimi umuyorum)
alttaki linkte  birşeyler var ama anlayamadım anlayabilen yada yardımcı olabilecek arkadaşlar varsa yardımlarınızı bekliyorum
http://embedded-lab.com/blog/?p=4333&mid=576

Alıntı yapılan: wishes - 16 Haziran 2012, 21:17:21
önümüzdeki ay ben de dht11 almayı düşünüyorum. aldıktan sonra çalıştırabilirsem forumda paylaşırım. şurada türkçe bir kaynak var:

http://myo.karatekin.edu.tr/mkt2012/calistay-cd/ekler/bildiriler/16.pdf

şurada da www.picbasic.co.uk sitesinde paylaşılan bir kod var. denemediğim için iş görür mü bilmiyorum:


Alıntı yapılan: bilsisco - 22 Ağustos 2014, 02:28:05
denendi ve çalışıyor, alıntıdır.


Alıntı yapılan: sinasos - 07 Aralık 2015, 19:53:30
Evet devreyi az önce kurdum ve çalıştırdım. sorun yok gayet güzel çalışıyor.

Alıntı yapılan: ete - 18 Haziran 2012, 07:58:53
Mitec,

Mesajına cevap yazmadım.Çünkü sensörü daha önce hiç kullanmadım. Data sheet inceleyecek vaktimde olmadı.
Sonradan cevaplara bakınca verlen örnekkodların işine yaraması gerektiğini düşündüm.
Ayrıca senin kodların ile o sensörü okuman zor . Bu nedenle verilen kodlardan esinlenerek yeniden kod yazmalısın.

Ete

Merhaba,

Bir devreden ilk istenen şey çalışması, ikinci istenen şey ise doğru ve kararlı çalışmasıdır. Yani bir ölçüm yapıyorsa doğru ölçümler yapması ve bunu makul şartlar altında sürekli yapması istenir. biz kuluçka sistemi kurmak için DHT11, DHT21 ve DHT22 ile ısı-nem ölçme devreleri yaptık. Kuluçka devrelerinde ısı ve nem çok önemlidir. ısıdaki 4-5 derecelik fark veya nemdeki %10-15 lik fark civciv oluşumunda sıkıntılar meydana getirir diye ilgili forumlardan bilgi edindim. iki farklı sensörle yapılan devreler çalıştı. Fakat şöyle bir fark vardı iki devre arasında. aynı ortamlarda ölçtükleri nem değerleri çok farklı idi. Isıda da farklılık vardı ama kabul edilebilir bir farktı. Bu ölçümlerden hangisinin doğru olduğunu denetlemek için daha önceden 18B20 ile yaptığımız LCD li termostat devresini, bir laboratuvar termostatı, ve piyasada  satılan pille çalışan oda ısı-nem ölçerler kullandık. gördük ki DHT2/DHT22 ile yapılan devre daha doğru ölçüm yapıyor. Bunun üzerine kuluçka sistemlerimizde DHT22 kullandık. sonuçta kuluçkalardan civcivler çıktı. Ancak bu devrede de kilitlenme sorunları çıktı. Bu durum başka bir başlık altında

http://etepic.com/index.php/topic,2441.0.html

Bu forumda tartışılıyor.

Sonuç olarak demek istediğim devrenin çalışıyor olması yeterli değil. Acaba doğru ölçüm yapıyor mu ?

NOT: incelediğim kadarı ile DHT21 ve DHT22 aynı sensör. Sadece kılıf farkı var. ikisi ile yaptığımız devreler aynı değerleri gösteriyor.

ete

#9
Sensörün çalışıp da yanlış ölçüm yapması diye bir şey söz konusu değil maalesef. Sensör ya çalışır ve ölçer yada çalışmaz ve ölçmez. Yanlış ölçüm yanlış hesap yaptırmakla mümkün olabilir ancak.
Sensörleri hassasiyet dereceleri (toleransları) ile karşılaştırmak lazım.
DHT11 sensörü bulunabilecek en az hassas olan sensör. Ölçüm toleransları çok yüksek ve bu ölçtüğü değerlere yansımaktadır.
Üreticisi bunu görmüş olacak ki sonradan daha düşük toleranslarla çalışan DHT21 ve 22 sensörlerini çıkartmış. Farkları ölçüm toleransları başka bir şey değil.
Bu sensörler tek pinden haberleşmekte ve ölçüm sonuçlarının alınması hemen hemen aynıdır. Aralarındaki fark yalnızca ölçme komutunun verilme süreleri yada haberleşmeye başlamak için verilen LOW-HIGH süreleridir.

Şunuda unutmayın data sheetlerinde DHT sensörleri için 2sn den önce ikinci ölçümü yaptırmayın diyor. Bunu yaparsanız stabil olmayan sonuçlar alabilirsiniz diyor. Buda gösteriyorki yanlış sonuçlar alıyorsanız mutlaka data sheetleri iyi okumanız sensörü okuma ve sonuç hesap mantığını doğru bir şekilde uygulamanız gerekir.

SHT sensörleri elbette DHT sensörlerinden daha hassas sonuçlar üretmektedirler.


Ete

Powered by EzPortal