Sosyal Medya  

FacebookTwitterDiggLinkedinRSS Feed
   

   
   

Bu makalemde, SHT75 sensöründen sıcaklık ve nem verilerini nasıl okuyabileceğimizi anlatmaya çalışacağım. Makalemin genelin oluşturmuş olduğum kodlar PIC18F2550 mikrodenetleyicisi ile gerçeklenmiştir. PIC projelerimde genellikle Hi-Tech C veya C18 dillerini kullanmaktayım ama program çeşitliliği olması açısından, bu makalemde Proton Basic Pro yazılım dilini tercih ettim. SHT75 sensörünün çalışma mantığı anlaşıldığında, C dilinde de çok rahat bir şekilde program oluşturulabilir.

 

SHT75 Sensörünün Çalışma Mantığı

SHT7x sesörü 2hatlı seri haberleşme sistemini kullanmaktadır. Bu hatlardan biri clock, diğeri de data hattıdır. Her bir verinin gönderilişi veya alınışı data hattından sağlanır. Alınan verilerin alınma frekansı da clock aracılığı ile sağlanmaktadır.

SHT75 sensörünün varsayılan çözünürlük değerler: 14bit sıcaklık ve 12bit nem. İstersek sıcaklığı 12bit, nemi de 8bit çözünürlükte ayarlayabiliriz. Konuyla ilgili detaylı bilgiyi dahasheet'ine bakarak öğrenebilirsiniz. Makale boyunca göreceğiniz tüm resimler SHT75 sensörünün datasheet'inden alınmıştır.

Çalışma Mantığı

  • SHT75 Sensör Reset: SHT75 sensöründe CRC-8 hata kontrol byte'ı bulunmaktadır ve her ölçüm sonrasında CRC-8 Byte'ı gelir. Biz bu Byte'ı alıp kullanmayacağımız için, ihtiyacımız olan veriyi aldıktan sonra SHT75 sensörünü reset atıyoruz ve sensörün tekrardan değer ölçümüne hazır olmasını sağlıyoruz. Sensöre reset atabilmek için data hattını input konumunda tutup, clock hattından 10 adet pulse gönderirilir. Bu işlem sonrasında data hattı low konumun gelecek ve tekrardan high konumuna dönecektir.
    Şekilde SHT75 sensörünün reset için yapılması gereken haberleşme yeralmaktadır.(Datasheet-sy6)
    SHT75 Reset
  • Haberleşme Başlangıç(Transmission Start) Sinyali: SHT75 sensöründen sıcaklık ve nem ölçümü yapabilmek için haberleşmeyi başlatmamız gerekmekte. Sistem asenkron çalıştığı için, her asenkron seri haberleşmede olduğu gibi SHT75 sensöründe de haberleşme başlangıç sinyali yer almaktadır.
    Aşağıdaki şekilde haberleşme başlangıç sinyalini göstermektedir.(Datasheet-sy7)
    SHT75 Transmission Start

  • Komut Gönderimi: SHT75 sıcaklık ve nem sensörü dijital bir sensör olduğu için, sensör içerisinde ayrı bir işlemci bulunmakta. Biz bu işlemciye yapmak istediğimiz işlemi söylüyoruz ve o da o işlemi gerçekleştirip, sonucu bize döndürüyor. Örneğin: sıcaklık değerini istemek için SHT75 sensörüne 0x00011 değerini gönderiyoruz, nem için de 00101 değeri.
    Aşağıdaki tabloda SHT75 sensörünün desteklediği tüm komutlar yer almaktadır.(Datasheet-sy6)
    SHT75 Command List

  • ACK Alımı: SHT75 sıcaklık ve nem sensörüne ölçüm almak istediğimiz komutu gönderdiğimizde, sensörden bize ACK bilgisi gelir. Yani data hattı SHT75 sensörü tarafından data hattı önce low sonra da high konumuna çekilir.
  • Ölçüm İçin Bekleme: SHT75 sensörü tarafından ACK geldikten sonra ölçüm için beklenmeye başlanır. Sensör tarafından ölçüm bittiğinde ve gönderilmeye hazır olduğunda data hattı low konumuna çekilir.
  • Ölçüm Değerinin YüksekByte'ını Almak(15.Bit ile 8.Bit Arası): SHT75 sensöründen gelecek veriler 16bitliktir ve ilk önce yüksek değerli byte alınır.(15.bit ile 8.Bit Arası).
  • ACK Gönderimi: Yüksek değerli byte alındıktan sonra SHT75 sensörüne ACK göndeririz. Yani data hattını high konumundan low konumuna çekeriz.
  • Ölçüm Değerinin Düşük Byte'ını Almak(7.Bit ile 0.Bit Arası): ACK gönderdiğimizde SHT75 sensörü veri göndermeye devam eder ve düşük değerlikli byte gönderilir. Burada dikkat edilmesi gereken husus; önce en yüksek değerli bitler gönderilmektedir. Yani 15. bit ile başlayıp 8.bite kadar, daha sonra da 7.bitten başlayıp 0.bite kadar alınır.
  • Alınan HAM Değerler Sabitlerle İşleme Sokularak Sonuç Hesaplanır: SHT75 sensöründen alınan değerler ham değerlerdir. Bu değerler dahasheet'inde verilen bazı sabitlerle işleme sokularak sonucun hesaplanması gerekmektedir. 
    Aşağıdaki şekillerde sıcaklık ve nem verilerini nasıl hesaplayacağımızı anlatılmaktadır.(datasheet-sy8)
    Tempearture Conversion Coefficients
    Temperature Compensation Coefficients

    Aşağıdaki şekilde de SHT75 sıcaklık ve nem sensöründen, nem ölçümü gösterilemektedir.(Datasheet-sy7)
    SHT75 ile Nem Ölçümü

PIC18F2550 ile SHT75 Sensöründen Sıcaklık ve Nem Ölçümü

Aşağıdaki örnek yazılımda saniyede bir defa SHT75 sensöründen sıcaklık ve nem bilgileri ölçülere, ekrana yazdırılır.

 

'************************************************************************************
'*  Dosya Adi   : main.bas                                                          *
'*  Programci   : Muhammet EFE                                                      *
'*  Tarih       : 25.07.2015                                                        *
'*  Verisiyon   : 1.0.0.0                                                           *
'*  Özet        :SHT75 sensör uygulaması                                            *   
'*               Bu yazılım izin alınmadan hiçbir ticari uygulamada kullanılamaz    *
'*                                                                                  *                                 
'************************************************************************************
Device 18F2550

Xtal 20

Config_Start
PLLDIV=5   '4MHz ayarlanacak. Divide by 5 (20 MHz oscillator input)
CPUDIV=OSC1_PLL2  ' [OSC1/OSC2 Src: /1][96 MHz PLL Src: /2]
FOSC=HSPLL_HS   ' HS oscillator, PLL enabled, HS used by USB
Config_End


Dim KONTROL As Byte   
Dim HATA As Bit
Dim HAM As Word ' Sensör HAM okuma değeri
Dim ISI As Float = 0 ' Hesaplanmış ISI değeri
Dim NEM As Float = 0
            
Dim W As Word  
Dim RHlin As Float
Dim RHlin2 As Float
Dim c1 As Float = -2.0468
Dim c2 As Float =  0.0367
Dim c3 As Float = -0.0000015955
Dim t1 As Float =  0.01
Dim t2 As Float =  0.00008
Dim d1 As Float = -39.6 '5V => -40.1,  3V => -39.6
Dim d2 As Float =  0.01

TRISA=0
TRISB=0
TRISC=0

PORTA=0
PORTB=0
PORTC=0

ADCON0=0x3C
ADCON1=0x0F

'*** Donanimsal Seri Haberlesme ***
TRISC.6=0 ' Tx
TRISC.7=1 ' Rx
Declare Hserial_RCSTA %10010000
Declare Hserial_TXSTA %00100010;%00100110
BAUDCON=%01001000
SPBRG=25.LowByte
SPBRGH=25.HighByte
Declare Hserial_Clear = On

'***************************************************
GoTo Main
Dim shtBitIndeks As Byte
  
Symbol CLK=PORTB.5
Symbol DTA=PORTB.4 

Symbol H0=HAM.Byte0
Symbol H1=HAM.Byte1
             
sht75_SensoruOku: 
              KONTROL=%00000101:HAM=0   'NEM ÖLÇME
        GoSub OLCUMAL
        GoSub RUTHESAP
              KONTROL=%00000011:HAM=0   'SICAKLIK ÖLÇME
        GoSub OLCUMAL
        GoSub ISIHESAP
        
Return      

'------------------------------- İŞLEM START -----------------------------------
T_START:
      DelayMS 40
      Output DTA:Output CLK
        High DTA
         Low CLK
       DelayUS 10
        High CLK
         Low DTA
       DelayUS 10
         Low CLK
       DelayUS 10
        High CLK
       DelayUS 10
        High DTA
       DelayUS 10
        Low CLK
       DelayUS 10 

Return
'-----------------------SENSORE KOMUT GÖNDER -----------------------------------
OLCUMAL:
           GoSub shtReset
           GoSub T_START
           GoSub KomutGonder
           
           Input DTA
           High CLK
           DelayUS 10
           Low CLK
           DelayUS 10
           HATA=0
           For W=0 To 65500
              If DTA=0 Then GoTo GIT
              DelayUS 5
           Next W
           HATA=1
    GIT:         
         If HATA=1 Then
             GoTo HATALI
         EndIf
         GoSub sht75VeriAl
         GoTo CIK

    HATALI:
        HSerOut["Hata\r"]
    CIK:
Return
'----------------------ISI HESAP ALT PROGRAMI-----------------------------------   

KomutGonder:    
      Dim KontrolBit As Byte
      Output DTA:Output CLK
      Low CLK
      For  shtBitIndeks=7 To 0 Step -1
        KontrolBit = GetBit KONTROL,shtBitIndeks
        If KontrolBit=1 Then
            High DTA
        Else
            Low DTA
        EndIf
        DelayUS 10
        High CLK
        DelayUS 10
        Low CLK
      Next shtBitIndeks
Return

shtReset:
     Output CLK:Input DTA
     Low CLK
     For shtBitIndeks=0 To 9
        High CLK
        DelayUS 10
        Low CLK
        DelayUS 10
     Next shtBitIndeks
Return

sht75VeriAl:
    Low CLK
    For shtBitIndeks=15 To 0 Step -1
           If DTA=1 Then
                SetBit HAM,shtBitIndeks
           Else
                ClearBit HAM,shtBitIndeks
           EndIf
           DelayMS 10
           High CLK
           DelayUS 10
           Low CLK
           
       If shtBitIndeks=8 Then     'ACK
            Output DTA
            High DTA
            Low CLK
            DelayUS 10
            Low DTA
            High CLK
            DelayUS 10
            Low CLK
            DelayUS 10
            Input DTA      
       EndIf
    Next shtBitIndeks
Return
  
ISIHESAP:  
        ISI=d1+(d2*HAM) 
Return       
'-------------------------RUTUBET HESAP ALT PROGRAMI----------------------------
RUTHESAP: 
    RHlin = c1 + c2 * HAM 
    RHlin2 = c3 * HAM * HAM
    RHlin = RHlin + RHlin2
    NEM = ( t1 + t2 * HAM)
    NEM = NEM * ( ISI - 25)
    NEM = NEM + RHlin
    If NEM>100 Then
        NEM=100
    Else If NEM<0 Then
        NEM=0
    EndIf
Return
 
    Main:
        BASLA:
            sonsuzDongu:
                GoSub sht75_SensoruOku
                HSerOut ["Sicaklik: ",Dec4 ISI,"\t\r"]
                HSerOut ["Nem: ",Dec4 NEM,"\t\r"]
                DelayMS 2400
            GoTo sonsuzDongu
    Stop

Bu makalemin de sonuna geldim. Umarım sizler için faydalı bir yazı olmuştur. Bir sonraki makalemde görüşmek üzere sağlıcakla kalın.

Muhammet EFE

Yorumlar   

0 # caner 04-01-2016 10:19
Merhabalar yazınız gerçektende çok açılayıcı ve doyurucu olmuş

pic ile nemlendirici kontrol kartı yapmak istiyorum bunun için daha profesyonel ve mümkünse oda tipi bir sensör arayışı içerisinde

http://www.otomasyonekipmanlari.com/Sicaklik-ve-Nem-Duyar-Elemani,PR-19.html

Bu sensörü buldum çıkış olarak 0-10Vdc veriyor bunu pic ile nasıl okuyabilirim
Cevap | Alıntıyla Cevapla | Alıntı

Yorum ekle


Güvenlik kodu
Yenile

   
   
© muhammetefe.com