Sıcaklık ölçmek 2

Bu sefer sıcaklığı ölçmek için DSTH01 kullanıyoruz

Giriş

Tekrardan bir sıcaklık ölçme yazısı ile karşınızdayız.

Önceki derste LM35 sıcaklık ölçer kullanarak sıcaklık ölçmüştük.

LM35 sıcaklık ölçer ile normal kullanımda bir hata gözükmüyor. Takıyorsunuz yaklaşık bir sıcaklık değeri veriyor.

Allah nasip ederse ileriki derslerde ilginç uygulamalar yapacağız.

Hatta bu uygulamaların denemesini yaptık.

Bir metale bağlı iki tane ısıtıcı var. Bu metali ısıtıp, zamana bağlı sıcaklık değişimini kaydediyoruz.

Ancak LM35 sıcaklık değiştiğinde tutarsız ölçümler yapıyor.

Bir misal vermek için bazı rakamlar yazıyorum : 24 29 25 30 ..

Python ile bu verileri çizdirince adeta iki tane sıcaklık ölçer çalışıyor ve farklı veriler getiriyor gibi oluyor.

Sorunun neden kaynaklandığını çözemedim.

Bu nedenle sıcaklığı ölçmek için DSTH01 kullanacağız. DSTH01 Silikon Laboratuvarlarının Si7005 yongasını üzerinde taşıyor.

DSTH01 sıcaklık ve nem ölçer

DSTH sıcaklık ölçer

Kullandığımız sıcaklık ölçerin resmini yukarıda görebilirsiniz. Sıcaklığın yanında nem de ölçebiliyor.

Bu sıcaklık ölçeri kullanmak için Si7005 Arduino kütüphanesini indirmek gerekiyor.

Kütüphanenin sıkıştırılmış kütüğünü indirdikten sonra Arduino geliştirme ortamında Taslak->library ekle->.ZIP Kitaplığı Ekle yolunu takip ederek kurabilirsiniz.

Bu kütüphanenin Python karşılığı olmadığı ya da yazmak gerektiği için biz normal Arduino geliştirmeye döneceğiz.

Seri porttan gelen verileri almak için ise pySerial kütüphanesi kullanacağız.

DSTH sıcaklık ölçer

DSTH01 besleme gerilimi olarak 3.3 volt kullanıyor. Toprak ve yonga seçim uçlarını toprağa bağlayınız.

DSTH sıcaklık ölçer

2 numaralı saat SCL, 3 numaralı veri SDA ve besleme VCC uçları sırasıyla Arduino üzerinde A5, A4 ve 3.3 volt girişine bağlanıyor.

Sıcaklık ve nemi ölçelim

Devreyi kurduktan sonra sıcaklık ve nemi ölçebiliriz.

Arduino geliştirme ortamını açınız.

#include <Wire.h>
#include <Si7005.h>

const int Si7005_CS_PIN = 8;

Si7005 alici(Si7005_CS_PIN);

void setup()
{
  Wire.begin();
  Serial.begin(9600);

  if (alici.detectSensor())
  {
      Serial.println("Aygit tanindi");
  }
  else
  {
      Serial.println("Sizi taniyamadim");
      while (1)
      {
          // Boş boş dönelim
      }
  }  
}

void loop()
{
    float sicaklik, nem;

    sicaklik = alici.getTemperature();
    sicaklik = sicaklik - 0.5;

    nem = alici.getHumidity();

    Serial.print("Sicaklik = ");
    Serial.print(sicaklik);

    Serial.print(" °C ");
    Serial.print("Bagil nem = %");
    Serial.println(nem);
    delay(1000);
}

Bu uygulamayı Arduino'ya yükleyiniz.

Her şey yolunda gitti ise seri port ekranında sıcaklık ve nem bilgisinin gösterildiğini görebilirsiniz.

Aygit tanindi
Sicaklik = 23.81 °C Bagil nem = %77.30
Sicaklik = 23.81 °C Bagil nem = %77.37
Sicaklik = 23.78 °C Bagil nem = %77.29

Linux üzerinde screen yazılımı kurulu ise

screen /dev/ttyACM0

komutunu vererek de seri porttan gelen verileri görebilirsiniz.

Uygulamayı kapatmak için Ctrl-A tuşlarına aynı anda, sonra tek olarak K ve Y tuşuna basınız.

Sıcaklık verilerini kaydetmek

Arduino'nun 2 numaralı ucuna bir ışık ve direnç bağlıyoruz.

İlk yazdığımız uygulamada bazı değişiklikler yapacağız.

#include <Wire.h>
#include <Si7005.h>

const int Si7005_CS_PIN = 8;
Si7005 alici(Si7005_CS_PIN);

int kirmiziIsik = 2;
int isitici = 3;
float sicaklik, nem;

void setup()
{
  Wire.begin();
  Serial.begin(9600);

  if (alici.detectSensor())
  {
  }
  else
  {
      while (1)
      {
      }
  }

  pinMode(kirmiziIsik, OUTPUT);
  pinMode(isitici, OUTPUT);
  digitalWrite(kirmiziIsik, 0);

  for (int i = 0; i < 10; ++i)
  {
    sicaklik = alici.getTemperature();
    sicaklik = sicaklik - 0.5;
    Serial.println(sicaklik);
    delay(1000);
  }
}

void loop()
{
  analogWrite(isitici, 0);
  digitalWrite(kirmiziIsik, 1);
  delay(1000);
  digitalWrite(kirmiziIsik, 0);
  delay(1000);
}

Eğer uygulamayı Arduino'ya yüklerseniz sıcaklık 10 kere yazılacak.

Sonra işlemin bittiğini göstermek için kırmızı ışık yanıp sönmeye başlayacak.

Şimdi daha önce Python uygulamalarını yazdığımız dizinde gene çalışma alanını etkinleştirelim.

. venv/bin/activate

Daha sonra pySerial kütüphanesini kuralım.

pip install pyserial

Aşağıdaki kütüğü serioku.py ismi ile kaydediniz.

import serial
seri = serial.Serial('/dev/ttyACM0')
seri.flushInput()

sıcaklıkListesi = []

while (len(sıcaklıkListesi) < 10):
    satır = seri.readline()
    sıcaklık = float(satır[0:len(satır)-2].decode("utf-8"))
    print(sıcaklık)
    sıcaklıkListesi.append(sıcaklık)

print('Sıcaklık listesi')
print(sıcaklıkListesi)

with open('sıcaklık.txt', 'w') as çıkış:
  çıkış.write('\n'.join(str(i) for i in sıcaklıkListesi))

with open('sıcaklık.txt') as kütük:
    satırlar = kütük.read().splitlines()

print('Sıcaklıkları tekrar kütükten okuyorum')

for satır in satırlar:
    print (float(satır))

Uygulamayı çalıştırmak için python serioku.py komutunu veriniz.

Uygulamayı her çalıştırdığınızda, uygulama 10 adet sıcaklık verisini seri porttan okuyup bu verileri sıcaklık.txt isimli bir kütüğe kaydediyor.

Linux üzerinde cat sıcaklık.txt komutu vererek kütüğün içeriğine bakabilirsiniz.

Yorumlar

yorum yaz

Yorum yaz

Henüz yorum yok.