Bu sefer sıcaklığı ölçmek için DSTH01 kullanıyoruz
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.
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.
DSTH01 besleme gerilimi olarak 3.3 volt kullanıyor. Toprak ve yonga seçim uçlarını toprağa bağlayınız.
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.
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.
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