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) - 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) - 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) - 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)
Aşağıdaki şekilde de SHT75 sıcaklık ve nem sensöründen, nem ölçümü gösterilemektedir.(Datasheet-sy7)
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
pic ile nemlendirici kontrol kartı yapmak istiyorum bunun için daha profesyonel ve mümkünse oda tipi bir sensör arayışı içerisinde
...
Bu sensörü buldum çıkış olarak 0-10Vdc veriyor bunu pic ile nasıl okuyabilirim
RSS beslemesi, bu iletideki yorumlar için