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