LabVIEW Üzerinden SHT15 Sensör ile Sıcaklık Nem Kontrolü

1 2.185

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:

  1. Arduino (model fark etmez)
  2. 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.

 

 

Bunlar da İlgini Çekebilir
Cevap bırakın

E-posta hesabınız yayımlanmayacak.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

1 yorum
  1. Mühendisce

    Sht15 muadili var mı Sht10 ya da Sht11 sensörü ile bu proje yapılabilir mi?