LabVIEW Üzerinden SHT15 Sensör ile Sıcaklık Nem Kontrolü
Bu projemizde labview arayüz programında kontrol blokları oluşturup SHT15 sıcaklık ve nem ölçer sensörden verileri bilgisayara aktaracağız.
Malzemeler:
- Arduino (model fark etmez)
- Sht15 sıcaklık nem ölçer sensör
Elektronik Kısım:
Devre Şeması:
Şekildeki gibi bağlantılarımızı yapıyoruz.
Yazılım Kısmı:
Arduino Kodu:
int Sicaklik_pin = 3; // sıcaklık değer okuma pini int Nem_pin = 5; // nem değer okuma pini int clockPin = 2; // saat pin int dataPin = 3; // data pin int ack; // hataları izlemek için karakter int val; float temperature; float humidity; void setup() { Serial.begin(9600); } void loop() { // sıcaklık okuma sendCommandSHT(Sicaklik_pin, dataPin, clockPin); waitForResultSHT(dataPin); val = getData16SHT(dataPin, clockPin); skipCrcSHT(dataPin, clockPin); temperature = (float)val * 0.01 - 40; temperature = (float)temperature*9/5 + 32; //fahrenheit olarak çevirme // nerm okuma sendCommandSHT(Nem_pin, dataPin, clockPin); waitForResultSHT(dataPin); val = getData16SHT(dataPin, clockPin); skipCrcSHT(dataPin, clockPin); humidity = -4.0 + 0.0405 * val + -0.0000028 * val * val; // seriale yazdırma Serial.println(String((int)(temperature*100)) + String((int)(humidity*100))); delay(100); } // sensör verilerini okuyup gönderme int shiftIn(int dataPin, int clockPin, int numBits) { int ret = 0; for (int i=0; i<numBits; ++i) { digitalWrite(clockPin, HIGH); ret = ret*2 + digitalRead(dataPin); digitalWrite(clockPin, LOW); } return(ret); } // sensör verisini gönderme void sendCommandSHT(int command, int dataPin, int clockPin) { int ack; // transmission start 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); shiftOut(dataPin, clockPin, MSBFIRST, command); // ACK değerini doğrulama digitalWrite(clockPin, HIGH); pinMode(dataPin, INPUT); ack = digitalRead(dataPin); if (ack != LOW) Serial.println("ACK error 0"); digitalWrite(clockPin, LOW); ack = digitalRead(dataPin); if (ack != HIGH) Serial.println("ACK error 1"); } // sensörden cevap bekleme void waitForResultSHT(int dataPin) { int ack; pinMode(dataPin, INPUT); for(int i=0; i<100; ++i) { delay(10); ack = digitalRead(dataPin); if (ack == LOW) break; } if (ack == HIGH) Serial.println("ACK error 2"); } // sensörden veri alma int getData16SHT(int dataPin, int clockPin) { int val; // get the MSB (most significant bits) pinMode(dataPin, INPUT); pinMode(clockPin, OUTPUT); val = shiftIn(dataPin, clockPin, 8); val *= 256; // this is equivalent to val << 8; // gerekli ACK gönder pinMode(dataPin, OUTPUT); digitalWrite(dataPin, HIGH); digitalWrite(dataPin, LOW); digitalWrite(clockPin, HIGH); digitalWrite(clockPin, LOW); pinMode(dataPin, INPUT); val |= shiftIn(dataPin, clockPin, 8); return val; } void skipCrcSHT(int dataPin, int clockPin) { pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); digitalWrite(dataPin, HIGH); digitalWrite(clockPin, HIGH); digitalWrite(clockPin, LOW); }
Labview Kontrol Kısmı:
Kontrol arayüz yukarıdaki gibidir.
Labview dosyasını buradan indirin >> LabVIEW_SHT15
Aşağıdaki şekildeki gibi play butonuna tıklayıp çalıştırın.
Aşağıdaki gibi window menüsünden show block diagrama tıklayın. Buradan blok diyagram penceresi açılacaktır.
Buradaki sabit değerleri değiştirebilirsiniz.
Sensörden gelen değerler buradaki değerlerden büyük ise led yanacaktır.
Sht15 muadili var mı Sht10 ya da Sht11 sensörü ile bu proje yapılabilir mi?