19 Aralık 2021 Pazar

ARDUINO SICAKLIK VE NEM ÖLÇÜMÜ (DHT11 Sensör ile)

 Sevgili Öğrenciler,


Arduino robotik setinizle projenin  kodları Arduino programında yazarak DHT11 sensör kullanıp  "Sıcaklık ve Nem ölçümü PROJESİ " yapıyoruz.

Projemizde, Kodla Türkiye Robotik setinde bulunan Junior Shield+ daki DHT11 bölümüne açık mavi renkteki sıcaklık&nem sensörünü takarak projeyi hazırlıyoruz.

Not: Projeyi başarıyla tamamladığınızda ölçüm sonuçları Arduino serial port ekranında görüntülenecektir.

Başarılar!






//Arduino Referans Kaynak Kodu:

// Global Değişkenler

int DHT11_Pin = 8; // DHT11 Data Pin


int Humidity = 0; 

int Temp = 0;

int TempComma = 0;

bool DHTError = false; // Checksum Error


 void DelayTimer(long int DelayValue){

  long int DelayTime = micros();

  do {

    

  }while (micros()-DelayTime < DelayValue);

  }


// Main DHT Void

void DHT11(){

long int DataTime = 0;

byte Result[45];

byte DataArray = 0;

byte DataCounter = 0;

byte DHTData[4];


bool BlockDHT=false;

 

 pinMode(DHT11_Pin,OUTPUT); 

 digitalWrite(DHT11_Pin,HIGH);

 DelayTimer(250000); //Wait 250millisec

 digitalWrite(DHT11_Pin,LOW);

 DelayTimer(30000);   //Wait 30millisec

 digitalWrite(DHT11_Pin,HIGH);

 DelayTimer(50); //Wait 50microsec

 pinMode(DHT11_Pin,INPUT); 


do {

  if (digitalRead(DHT11_Pin) == 0 && BlockDHT == false) {BlockDHT = true;Result[DataArray]=(micros()-DataTime);DataArray++;DataTime=micros();} //If DHT pin is low, go to next Dataset

  if (digitalRead(DHT11_Pin) == 1) {BlockDHT = false;} // As long as DHT pin is Hight add time in Microseconds to Result

  

}while((micros()-DataTime) < 150); // if DTH Sensor high for more than 150 usec, leave loop


for (int  i=2; i< DataArray; i++) {

  if (Result[i] <= 90) Result[i]=0; else Result[i]=1;

  //Serial.print(Result[i]);Serial.print(" ");

                                  }

 //Serial.println();

for (int  j=0; j< 5; j++){     // redo it for the 5 Bytes (40 Databits /8 = 5)

for (int  i=0; i< 8; i++) {bitWrite(DHTData[j], 7-i, Result[i+2+(j*8)]);}  // Create 5 Databytes from the 40 Databits (Ignoring the 2 first Databits)

}

// check checksum                            }

if (DHTData[4] == (DHTData[0]+DHTData[1]+DHTData[2]+DHTData[3])){Humidity = DHTData[0];Temp = DHTData[2];TempComma = DHTData[3];DHTError=false;} else DHTError=true; //If Checksum is worng, Temp=99 (Dataset 0-3 in addition = Dataset 4 = Checksum OK)

}

void setup() {

 Serial.begin(9600);

}

void loop() {

 DHT11();

  if (DHTError == false){Serial.print("NEM = ");Serial.print(Humidity);Serial.print("% ");Serial.print(" SICAKLIK = ");Serial.print(Temp);Serial.print(",");Serial.print(TempComma);Serial.println("°C ");} else Serial.println("Error");

  DelayTimer(500000); //wait 2,5 sec

}





Hiç yorum yok:

Yorum Gönder