dominoFiber     domiRobot     Forum


Projeler - DHT22 Termostat

DHT22 Termostat
Bu projemizde arduino ile termostat (ısı kontrol) devresi yapmayı öğreneceğiz.

Yapacağımız termostatın özellikleri şu şekilde:
  • Ortam sıcaklığı lcd ekranda okunacak.
  • Ortam sıcaklığı 0 ila 40 derece arasında arzu edilen bir seviyeye düştüğünde bir ısıtıcının 0 ila 30 dakika arasında arzu edilen süre kadar çalışması sağlanacak.

  • Isıtıcının devreye gireceği sıcaklık derecesi ve ısıtıcının devreden çıkacağı süre programda her hangi bir değişiklik yapmadan birer potansiyometre ile ayarlanabilir olacak.
  • Ayarlanan sıcaklık ve süre değerleri lcd ekrandan okunacak.

Kullanma talimatı:
Butona basılı tutularak ekranda ayarlanan sıcaklık ve ayarlanan süre değerleri gözlenir.
Arzu edilen sıcaklık derecesi ve ısıtıcının devrede kalacağı süre potansiyometreler ayarlanarak belirlenir. Ayarlanan değerler ekrandan okunur.
Buton bırakıldığında ayarlama işlemi tamamlanmış olur ve sistem çalışmaya başlar.

Amaç
Arduino, DHT22sıcaklık ve nem sensörü ve 5110 LCD ekran kullanarak elektronik termostat yapma becerisi kazanmak.

Seviye
Orta seviye

<a href="http://www.youtube.com/watch?v=7MVtaB9qnLk" target="_blank">http://www.youtube.com/watch?v=7MVtaB9qnLk</a>
Video 1: DHT22 İle Termostat

Fotoğraf 1: Ortam sıcaklığının okunması

Fotoğraf 2: Sıcaklığın ayarlanması

Fotoğraf 3: Ortam ve ayarlanan sıcaklığı

Fotoğraf 4: Isıtıcının çalışacağı süre

Şema 1: ISIS Devre Şeması

Şema 2: ARES Devre Şeması

Şema 3: ARES Devre Şeması Renkli Görünüm

İşlem basamakları
  • Şema 1, şema 2 ve şema 3' den faydalanarak baskı devre montajını tamamlayınız.
  • DHT22 kütüphanesini ekleyiniz.
  • saat.c, termometre.c, saat.bmp ve termometre.bmp isimli dosyaları arduino programınıza ait klasörün içine atınız.
  • Arduino kodunu yükleyiniz.
  • ​Devreye besleme gerilimi uygulayınız.
  • Kullanma talimatında belirtildiği gibi ısıtıcının devreye gireceği ve devreden çıkacağı parametreleri giriniz.

Malzeme listesi

DHT22 termostat arduino kodu
Kod: [Seç]
#include "DHT.h" 
#define DHTPIN 2   
#define DHTTYPE DHT22   
#define isitici 3
int buton=4;
DHT dht(DHTPIN, DHTTYPE);
int potansiyometrePin = A2; 
int sensorValue = 0;
int ayarlanan_sicaklik = 0;
int dakikaPin = A0; 
int dakikaValue = 0;
int dakika = 0;
#include <LCD5110_Basic.h>
extern uint8_t SmallFont[];
extern uint8_t MediumNumbers[];
extern uint8_t BigNumbers[];
LCD5110 myGLCD(8,9,10,11,12);
extern uint8_t termometre[];
extern uint8_t saat[];
void setup()
{
  pinMode(isitici, OUTPUT);
  pinMode(buton, INPUT);
  pinMode(7, OUTPUT);
  Serial.begin(9600);
  dht.begin();
  myGLCD.InitLCD();
  myGLCD.setContrast(70);
  digitalWrite(7, HIGH);
}
void loop()
{
  if(digitalRead(buton) == HIGH)
  {
    delay(2000);
    sensorValue = analogRead(potansiyometrePin); 
    ayarlanan_sicaklik= map(sensorValue, 0, 1023, 0, 40);
    dakikaValue = analogRead(dakikaPin);
    dakika= map(dakikaValue, 0, 1023, 0, 30);
    myGLCD.clrScr();
    myGLCD.setFont(SmallFont);
    myGLCD.print("AYAR SICAKLIK:", CENTER, 0); 
    myGLCD.printNumI(ayarlanan_sicaklik,30,8);
    myGLCD.setFont(SmallFont);
    myGLCD.print("DERECE", RIGHT, 8);     
    myGLCD.print("AYAR SURE:", CENTER, 24); 
    myGLCD.printNumI(dakika,30,32);   
    myGLCD.setFont(SmallFont); 
    myGLCD.print("DAKIKA", RIGHT, 32); 
  }
    if(digitalRead(buton) == LOW)
  {
  sensorValue = analogRead(potansiyometrePin); 
  ayarlanan_sicaklik= map(sensorValue, 0, 1023, 0, 40);
  delay(2000);
  float t = dht.readTemperature(); 
  myGLCD.clrScr();
  myGLCD.setFont(SmallFont);
  myGLCD.print("SICAKLIK:", RIGHT, 0);
  myGLCD.print("*C", RIGHT, 16);
  myGLCD.drawBitmap(0, 0, termometre, 24, 48);
  myGLCD.setFont(BigNumbers);
  myGLCD.printNumI(t,40,16);
  delay(2000);
  myGLCD.clrScr();
  myGLCD.setFont(SmallFont); 
  myGLCD.print("AYARLANAN", RIGHT, 0); 
  myGLCD.print("SICAKLIK:", RIGHT, 8);
  myGLCD.print("*C", RIGHT, 16);
  myGLCD.drawBitmap(0, 0, termometre, 24, 48);
  myGLCD.setFont(BigNumbers);
  myGLCD.printNumI(ayarlanan_sicaklik,40,16);
  delay(2000);
  myGLCD.clrScr();
  myGLCD.setFont(SmallFont); 
  myGLCD.print("AYARLANAN", RIGHT, 0);
  myGLCD.print("SURE:", RIGHT, 8);
  myGLCD.print("DAKIKA", RIGHT, 40);
  myGLCD.setFont(BigNumbers);
  myGLCD.printNumI(dakika,50,16);
  myGLCD.drawBitmap(0, 0, saat, 40, 40);
  if( t < ayarlanan_sicaklik && digitalRead(buton) == LOW)
  {
  digitalWrite(isitici, HIGH);   
  dakikaValue = analogRead(dakikaPin); 
  dakika= map(dakikaValue, 0, 1023, 0, 30);
  Serial.print("Sure: ");
  Serial.print(dakika);
  Serial.println(" dakika ");
    sensorValue = analogRead(potansiyometrePin);
  ayarlanan_sicaklik= map(sensorValue, 0, 1023, 0, 40);
  delay(2000);
  float t = dht.readTemperature(); 
  myGLCD.clrScr();
  myGLCD.setFont(SmallFont); 
  myGLCD.print("SICAKLIK:", RIGHT, 0);
  myGLCD.print("*C", RIGHT, 16);
  myGLCD.drawBitmap(0, 0, termometre, 24, 48);
  myGLCD.setFont(BigNumbers);
  myGLCD.printNumI(t,40,16);
  delay(2000);
  myGLCD.clrScr();
  myGLCD.setFont(SmallFont);
  myGLCD.print("AYARLANAN", RIGHT, 0);
  myGLCD.print("SICAKLIK:", RIGHT, 8); 
  myGLCD.print("*C", RIGHT, 16);
  myGLCD.drawBitmap(0, 0, termometre, 24, 48);
  myGLCD.setFont(BigNumbers);
  myGLCD.printNumI(ayarlanan_sicaklik,40,16);
  delay(2000);
  myGLCD.clrScr();
  myGLCD.setFont(SmallFont); 
  myGLCD.print("ISITICI", CENTER, 0);
  myGLCD.print("CALISIYOR", CENTER, 8); 
  myGLCD.print("AYARLANAN", CENTER, 16); 
  myGLCD.print("SURE SONUNDA", CENTER, 24); 
  myGLCD.print("KAPANACAK", CENTER, 32); 
  delay(2000);   
  delay(dakika * 2000);
  delay(dakika * 2000);
  delay(dakika * 2000);
  delay(dakika * 2000);
  delay(dakika * 2000);
  delay(dakika * 2000);
  delay(dakika * 2000);
  delay(dakika * 2000);
  delay(dakika * 2000);
  delay(dakika * 2000);
  delay(dakika * 2000);
  delay(dakika * 2000);
  delay(dakika * 2000);
  delay(dakika * 2000);
  delay(dakika * 2000);
  delay(dakika * 2000);
  delay(dakika * 2000);
  delay(dakika * 2000);
  delay(dakika * 2000);
  delay(dakika * 2000);
  delay(dakika * 2000);
  delay(dakika * 2000);
  delay(dakika * 2000);
  delay(dakika * 2000);
  delay(dakika * 2000);
  delay(dakika * 2000);
  delay(dakika * 2000);
  delay(dakika * 2000);
  delay(dakika * 2000);
  delay(dakika * 2000);
  }
    else
  {
  digitalWrite(isitici, LOW);   
  }
  Serial.print("Sicaklik: ");
  Serial.print(t); 
  Serial.println(" *C ");
  Serial.print("Ayar: ");
  Serial.print(ayarlanan_sicaklik);
  Serial.println(" *C ");
  dakikaValue = analogRead(dakikaPin); 
  dakika= map(dakikaValue, 0, 1023, 0, 30);
  Serial.print("Sure: ");
  Serial.print(dakika); 
  Serial.println(" dakika ");
  }
  }

Saat ikonuna ait kodlar
Kod: [Seç]
#include <avr/pgmspace.h>
const unsigned char saat [] PROGMEM={
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x60, 0x30, 0x10, 0x18, 0x08, 0x0C, 0x0C,
0x04, 0x04, 0xE6, 0xE6, 0x06, 0x06, 0x04, 0x04, 0x04, 0x0C, 0x0C, 0x08, 0x18, 0x10, 0x30, 0x60,
0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF0, 0x1C, 0x07, 0x03, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x38, 0xE0, 0x80, 0x00,
0x00, 0x7C, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
0xC0, 0x00, 0x00, 0x00, 0x00, 0x83, 0xFF, 0x00, 0x00, 0x00, 0x07, 0x1E, 0x70, 0xC0, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0x38, 0x0F, 0x03, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x0C, 0x0C, 0x18, 0x10, 0x30, 0x20, 0x60, 0x60,
0x40, 0x40, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x40, 0x40, 0x60, 0x60, 0x20, 0x30, 0x10, 0x18, 0x0C,
0x06, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
};

Termometre ikonuna ait kodlar
Kod: [Seç]
#include <avr/pgmspace.h>
const unsigned char termometre [] PROGMEM={
0x00, 0x00, 0x00, 0x20, 0x70, 0x20, 0x00, 0x00, 0xFC, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x06,
0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0xCE, 0x84, 0x00, 0x00,
0xFF, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x39, 0x10, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0x60, 0x20, 0x10,
0x1F, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0x10, 0x20, 0x60, 0xC0, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFE, 0x03, 0x00, 0x00, 0x00, 0x00, 0x70, 0xF8, 0xFC, 0xFE, 0xFF, 0xFE, 0xFC, 0xF8,
0x70, 0x00, 0x00, 0x00, 0x01, 0x8F, 0xFC, 0x00, 0x00, 0x00, 0x01, 0x03, 0x0C, 0x18, 0x10, 0x20,
0x60, 0x40, 0x41, 0x43, 0x43, 0x43, 0x41, 0x60, 0x20, 0x20, 0x10, 0x18, 0x0E, 0x03, 0x00, 0x00
};

Download
Buraya tıklayıp proje ait dosyaları indirebilirsiniz.

DHT22 ısı ve nem sensörü satın al

  • DHT22 satın alDHT22 satın alDHT22 satın al