Arduino ile SHT15 Nem Sensörü
SHT15 tümüyle nem ölçümü için ayarlanmış dijital bir nem sensörüdür. Aslında burada sıcaklıkla bağlantılı olarak bağıl nem ölçümü yapıyoruz. SHT15 sensörü kendi içinde yerleşik bir dijital termometreye sahip. Bu özelliğinden dolayı içinde yerleşik termometre bulundurmayan sensörlere göre kullanması daha kolay.
SHT15 iletişim için I2C ile benzerlik bulunan iki kablolu bir bağlantı kullanır. Dolayısıyla bunu için Arduinomuzun bölmelerini kullanmayacağız. Artı ve eksi özelliklerine de değinecek olursak, artı tarafı herhangi 2 dijital pine bağlayabiliyor olmamız, eksi tarafı ise sensörün değerleri okunmasının biraz uzun sürmesi. Biz bu bağlantıyı kurarken Arduinomuzda bulunan pin 2 ve 3 ü kullanacağız.
Ayarlamalar
Lehimlemeden Önce:
Bu board kesinlikle yıkanmamalı. Yani eğer flaks ya da normalde temizleyebildiğiniz lehim kullanıyorsanız kesinlikle bu proje için kullanmayın.( Temizlemeye gerek olmayan lehim kullanmanız her bakımdan daha iyi olacaktır.) Ve kesinlikle boardunuzu ıslatmamaya özen gösterin.
Lehimledikten Sonra:
Sensörden daha net değerler alabilmek için en az 12 saat % 75 nem bulunan bir ortamda muhafaza etmelisiniz böylece polimerlere Rehidre olmasına izin vermiş olursunuz. Eğer bu işlemi es geçerseniz SHT15 sensörünüz çevre koşullarına maruz kaldığında yavaşça kaybolan ofset bir değer okuyabilir. Rehidrasyon işlemini başka şekillerde de gerçekleştirebilirsiniz örneğin nem oranı %40 dan fazla bir ortamda 5 gün ya da daha fazla bekleterek de bu işlemi sağlayabilirsiniz.
► İlginizi Çekebilir : Arduino İle AVR Programlama
Bu uygulama için kodumuz dijital sensörlerin büyük çoğunluğunda olduğu gibi biraz karışık, fakat kodun kısımları güzel ayrılmış ve okuması olabildiğince kolaylaştırılmış.
Not: Sensörün okuduğu değerleri döndürmesi biraz uzun sürüyor (100+ ms kadar).
İşte kodumuz:
//http://wiring.org.co/learning/basics/humiditytemperaturesht15.htm sitesindeki kablo bağlantı kodu esas alınmıştır.
int SHT_clockPin = 3; // saat için kullanılan pin
int SHT_dataPin = 2; // veri için kullanılan pin
void setup(){
Serial.begin(9600); // seriyi 9600 bps de açın
}
void loop(){
//bunlar değerleri almamızı biraz uzatıyor (100ms civarı)
float temperature = getTemperature();
float humidity = getHumidity();
Serial.print(temperature);
Serial.print(" | ");
Serial.println(humidity);
}
float getTemperature(){
//Santigrat cinsinden sıcaklığı geri döndürür
SHT_sendCommand(B00000011, SHT_dataPin, SHT_clockPin);
SHT_waitForResult(SHT_dataPin);
int val = SHT_getData(SHT_dataPin, SHT_clockPin);
SHT_skipCrc(SHT_dataPin, SHT_clockPin);
return (float)val * 0.01 - 40; //Santigrata dönüştürür
}
float getHumidity(){
//Bağıl Nemi döndürür
SHT_sendCommand(B00000101, SHT_dataPin, SHT_clockPin);
SHT_waitForResult(SHT_dataPin);
int val = SHT_getData(SHT_dataPin, SHT_clockPin);
SHT_skipCrc(SHT_dataPin, SHT_clockPin);
return -4.0 + 0.0405 * val + -0.0000028 * val * val;
}
void SHT_sendCommand(int command, int dataPin, int clockPin){
// SHTx sensörüne komutu gönderir
// iletimi başlatır.
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
digitalWrite(dataPin, HIGH);
digitalWrite(clockPin, HIGH);
digitalWrite(dataPin, LOW);
digitalWrite(clockPin, LOW);
digitalWrite(clockPin, HIGH);
digitalWrite(dataPin, HIGH);
digitalWrite(clockPin, LOW);
// komutu dışarıya kaydırır (3 MSB adreslerdir ve 000 olmalı, son 5 bit komutlardır)
shiftOut(dataPin, clockPin, MSBFIRST, command);
// doğru ACK yı aldığımız tasdikler
digitalWrite(clockPin, HIGH);
pinMode(dataPin, INPUT);
if (digitalRead(dataPin)) Serial.println("ACK error 0");
digitalWrite(clockPin, LOW);
if (!digitalRead(dataPin)) Serial.println("ACK error 1");
}
void SHT_waitForResult(int dataPin){
// SHTx in cevap vermesi için bekler
pinMode(dataPin, INPUT);
int ack; //acknowledgement
//değer için 2 saniye kadar bekler
for (int i = 0; i < 1000; ++i){
delay(2);
ack = digitalRead(dataPin);
if (ack == LOW) break;
}
if (ack == HIGH) Serial.println("ACK error 2");
}
int SHT_getData(int dataPin, int clockPin){
// SHTx sensöründen veriyi alır
// MSB (çok önemli bitleri) yi alır
pinMode(dataPin, INPUT);
pinMode(clockPin, OUTPUT);
byte MSB = shiftIn(dataPin, clockPin, MSBFIRST);
// gerekli ACK yı gönderir
pinMode(dataPin, OUTPUT);
digitalWrite(dataPin, HIGH);
digitalWrite(dataPin, LOW);
digitalWrite(clockPin, HIGH);
digitalWrite(clockPin, LOW);
// LSB (az önemli bitleri) yi alır
pinMode(dataPin, INPUT);
byte LSB = shiftIn(dataPin, clockPin, MSBFIRST);
return ((MSB << 8) | LSB); // bitleri birleştirir
}
void SHT_skipCrc(int dataPin, int clockPin){
// SHTx sensöründen alınan CRC veriyi es geçer
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
digitalWrite(dataPin, HIGH);
digitalWrite(clockPin, HIGH);
digitalWrite(clockPin, LOW);
}
Kaynak:
►bildr.org
- Dünyanın En Görkemli 10 Güneş Tarlası
- Dünyanın En Büyük 10 Makinesi
- 2020’nin En İyi 10 Kişisel Robotu
- Programlamaya Erken Yaşta Başlayan 7 Ünlü Bilgisayar Programcısı
- Üretimin Geleceğinde Etkili Olacak 10 Beceri
- Olağan Üstü Tasarıma Sahip 5 Köprü
- Dünyanın En İyi Bilim ve Teknoloji Müzeleri
- En İyi 5 Tıbbi Robot
- Dünyanın En Zengin 10 Mühendisi
- Üretim için 6 Fabrikasyon İşlemi
- NA8 Serisi Açık Tip Şalter Kurulum Kılavuzu | Chint Turkiye
- NKG3 Dijital Zaman Saati Kurulum Kılavuzu | Chint Türkiye
- NXU Serisi Parafudr Kurulum Kılavuzu | Chint Türkiye
- CJ19 Kondansatör Kontaktörü Kurulum Kılavuzu | Chint Turkiye
- NXZM Serisi Otomatik Transfer Şalterleri Kurulum Kılavuzu | Chint Türkiye
- Nasıl Dönüşür | İleri Dönüşüm
- Nasıl Dönüşür | Çevresel Etki
- Nasıl Dönüşür | Ekolojik Ayak İzi
- Motor Testinin Temelleri | Megger Türkiye | Webinar
- Webinar I Büyüyen Veri, Artan Güç: Sürdürülebilir Çözümler