Bu dersimizde 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.[/li]
Buton bırakıldığında ayarlama işlemi tamamlanmış olur ve sistem çalışmaya başlar.
Gerekli malzemeler:
Devre şeması:
Baskı devresi:
Arduino kodları:
Saat resimine ait kodlar:
Termometre resimine ait kodlar:
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.[/li]
Buton bırakıldığında ayarlama işlemi tamamlanmış olur ve sistem çalışmaya başlar.
Gerekli malzemeler:
Devre şeması:
Baskı devresi:
Arduino kodları:
Kod:
#include "DHT.h" // ısı ve nem sensörü kütüphanesi eklendi
#define DHTPIN 2 // ısı ve nem sensörü 2 nolu pine bağlandı
#define DHTTYPE DHT22 // DHT 22 (AM2302)
#define isitici 3 // 3. pine isitici adı verildi
int buton=4; // 4 nolu pine buton adı verildi
DHT dht(DHTPIN, DHTTYPE);
int potansiyometrePin = A2; // Isı ayar potansiyometresi A2 pinine bağlanacak
int sensorValue = 0; // sensorValue isminde değişken oluşturuldu
int ayarlanan_sicaklik = 0; // ayarlanan_sicaklik isminde değişken oluşturuldu
int dakikaPin = A0; // dakika potu A0 pinine bağlanacak
int dakikaValue = 0; // dakikaValue isminde değişken oluşturuldu
int dakika = 0; // zaman isminde değişken oluşturuldu
#include <LCD5110_Basic.h> // LCD kütüphanesi eklendi
extern uint8_t SmallFont[]; // küçük yazı
extern uint8_t MediumNumbers[]; // orta boy numara
extern uint8_t BigNumbers[]; // orta boy numara
LCD5110 myGLCD(8,9,10,11,12); // CD pinlerinin hangi Arduino pinlerine bağlı olduğunu belirtiyoruz
extern uint8_t termometre[]; // Eklemek istediğimiz resimi belirttik
extern uint8_t saat[]; // Eklemek istediğimiz resimi belirttik
void setup()
{
pinMode(isitici, OUTPUT); // 3 nolu pin isitici için çıkış yapıldı
pinMode(buton, INPUT); // 1 nolu pin buton için giriş yapıldı
pinMode(7, OUTPUT); // 7 nolu pin aydınlatma için giriş yapıldı
Serial.begin(9600); // seri haberleşme
dht.begin();
myGLCD.InitLCD(); // Ekranı başlatıldı
myGLCD.setContrast(70); //0 ila 127 arası bir değer verilebilir
digitalWrite(7, HIGH); // Ekran aydınlatıldı
}
void loop()
{
if(digitalRead(buton) == HIGH)
{
delay(2000); // Başlangıçta 2 saniye bekliyoruz
sensorValue = analogRead(potansiyometrePin); // Isı ayar potundaki voltaj okundu
ayarlanan_sicaklik= map(sensorValue, 0, 1023, 0, 40); // Okunan voltaj 0 - 40 arası dereceye dönüştürüldü
dakikaValue = analogRead(dakikaPin); // dakika ayar potundaki voltaj okundu
dakika= map(dakikaValue, 0, 1023, 0, 30); // Okunan voltaj 0 - 30 arası milisaniyeye dönüştürüldü
myGLCD.clrScr(); //Ekranı temizliyoruz.
myGLCD.setFont(SmallFont); // Küçük boy yazı
myGLCD.print("AYAR SICAKLIK:", CENTER, 0); // Ekrana sayar sıcaklık kelimesi yazıldı
myGLCD.printNumI(ayarlanan_sicaklik,30,8); // ekrana okunan sıcaklık değeri yazıldı
myGLCD.setFont(SmallFont); // Küçük boy yazı
myGLCD.print("DERECE", RIGHT, 8); // Ekrana sayar sıcaklık kelimesi yazıldı
myGLCD.print("AYAR SURE:", CENTER, 24); // Ekrana ayar süre kelimesi yazıldı
myGLCD.printNumI(dakika,30,32); // ekrana okunan süre değeri yazıldı
myGLCD.setFont(SmallFont); // Küçük boy yazı
myGLCD.print("DAKIKA", RIGHT, 32); // Ekrana sayar sıcaklık kelimesi yazıldı
}
if(digitalRead(buton) == LOW)
{
sensorValue = analogRead(potansiyometrePin); // Isı ayar potundaki voltaj okundu
ayarlanan_sicaklik= map(sensorValue, 0, 1023, 0, 40); // Okunan voltaj 0 - 40 arası dereceye dönüştürüldü
delay(2000); // Başlangıçta 2 saniye bekliyoruz
float t = dht.readTemperature(); // sıcaklığı oku
myGLCD.clrScr(); //Ekranı temizliyoruz.
myGLCD.setFont(SmallFont); // Küçük boy yazı
myGLCD.print("SICAKLIK:", RIGHT, 0); // Ekrana sıcaklık kelimesi yazıldı
myGLCD.print("*C", RIGHT, 16); // Ekrana *C yazıldı
myGLCD.drawBitmap(0, 0, termometre, 24, 48); //termometreresimi çizildi.
myGLCD.setFont(BigNumbers); // Büyük boy numara
myGLCD.printNumI(t,40,16); // ekrana okunan sıcaklık değeri yazıldı
delay(2000); //2 saniye bekliyoruz
myGLCD.clrScr(); //Ekranı temizliyoruz.
myGLCD.setFont(SmallFont); // Küçük boy yazı
myGLCD.print("AYARLANAN", RIGHT, 0); // Ekrana sıcaklık kelimesi yazıldı
myGLCD.print("SICAKLIK:", RIGHT, 8); // Ekrana sıcaklık kelimesi yazıldı
myGLCD.print("*C", RIGHT, 16); // Ekrana *C yazıldı
myGLCD.drawBitmap(0, 0, termometre, 24, 48); //termometreresimi çizildi.
myGLCD.setFont(BigNumbers); // Büyük boy numara
myGLCD.printNumI(ayarlanan_sicaklik,40,16); // ekrana okunan sıcaklık değeri yazıldı
delay(2000); //2 saniye bekliyoruz
myGLCD.clrScr(); //Ekranı temizliyoruz.
myGLCD.setFont(SmallFont); // Küçük boy yazı
myGLCD.print("AYARLANAN", RIGHT, 0); // Ekrana ayarlanan kelimesi yazıldı
myGLCD.print("SURE:", RIGHT, 8); // Ekrana süre kelimesi yazıldı
myGLCD.print("DAKIKA", RIGHT, 40); // Ekrana süre kelimesi yazıldı
myGLCD.setFont(BigNumbers); // Büyük boy numara
myGLCD.printNumI(dakika,50,16); // ekrana okunan sıcaklık değeri yazıldı
myGLCD.drawBitmap(0, 0, saat, 40, 40); //saat resimi çizildi.
// ısı ayarlanan seviyenin altındaysa şunları yap burada başladı
if( t < ayarlanan_sicaklik && digitalRead(buton) == LOW)
{
digitalWrite(isitici, HIGH); // ısıtıcıyı çalıştır
dakikaValue = analogRead(dakikaPin); // dakika ayar potundaki voltaj okundu
dakika= map(dakikaValue, 0, 1023, 0, 30); // Okunan voltaj 0 - 30 arası milisaniyeye dönüştürüldü
Serial.print("Sure: "); // seri port ekranına süre yazıldı
Serial.print(dakika); // seri port ekranına hesaplanan dakika yazıldı
Serial.println(" dakika "); // seri port ekranına dakika yazıldı
sensorValue = analogRead(potansiyometrePin); // Isı ayar potundaki voltaj okundu
ayarlanan_sicaklik= map(sensorValue, 0, 1023, 0, 40); // Okunan voltaj 0 - 40 arası dereceye dönüştürüldü
delay(2000); // Başlangıçta 2 saniye bekliyoruz
float t = dht.readTemperature(); // sıcaklığı oku
myGLCD.clrScr(); //Ekranı temizliyoruz.
myGLCD.setFont(SmallFont); // Küçük boy yazı
myGLCD.print("SICAKLIK:", RIGHT, 0); // Ekrana sıcaklık kelimesi yazıldı
myGLCD.print("*C", RIGHT, 16); // Ekrana *C yazıldı
myGLCD.drawBitmap(0, 0, termometre, 24, 48); //termometreresimi çizildi.
myGLCD.setFont(BigNumbers); // Büyük boy numara
myGLCD.printNumI(t,40,16); // ekrana okunan sıcaklık değeri yazıldı
delay(2000); //2 saniye bekliyoruz
myGLCD.clrScr(); //Ekranı temizliyoruz.
myGLCD.setFont(SmallFont); // Küçük boy yazı
myGLCD.print("AYARLANAN", RIGHT, 0); // Ekrana ayarlanan kelimesi yazıldı
myGLCD.print("SICAKLIK:", RIGHT, 8); // Ekrana sıcaklık kelimesi yazıldı
myGLCD.print("*C", RIGHT, 16); // Ekrana *C yazıldı
myGLCD.drawBitmap(0, 0, termometre, 24, 48); //termometreresimi çizildi.
myGLCD.setFont(BigNumbers); // Büyük boy numara
myGLCD.printNumI(ayarlanan_sicaklik,40,16); // ekrana okunan sıcaklık değeri yazıldı
delay(2000); //2 saniye bekliyoruz
myGLCD.clrScr(); //Ekranı temizliyoruz.
myGLCD.setFont(SmallFont); // Küçük boy yazı
myGLCD.print("ISITICI", CENTER, 0); // Ekrana ısıtıcı kelimesi yazıldı
myGLCD.print("CALISIYOR", CENTER, 8); // Ekrana calışıyor kelimesi yazıldı
myGLCD.print("AYARLANAN", CENTER, 16); // Ekrana calışıyor kelimesi yazıldı
myGLCD.print("SURE SONUNDA", CENTER, 24); // Ekrana calışıyor kelimesi yazıldı
myGLCD.print("KAPANACAK", CENTER, 32); // Ekrana calışıyor kelimesi yazıldı
delay(2000); //2 saniye bekliyoruz
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);
}
// ısı ayarlanan seviyenin altındaysa şunları yap burada bitti
// ısı ayarlanan seviyenin üstündeyse şunları yap burada başladı
else
{
digitalWrite(isitici, LOW); // ısıtıcıyı kapat
}
// ısı ayarlanan seviyenin üstündeyse şunları yap burada bitti
Serial.print("Sicaklik: "); // seri port ekranına sıcaklık yazıldı
Serial.print(t); // seri port ekranına sıcaklık derecesi yazıldı
Serial.println(" *C "); // seri port ekranına *C yazıldı
Serial.print("Ayar: "); // seri port ekranına Ayar yazıldı
Serial.print(ayarlanan_sicaklik); // seri port ekranına potansiyometre ile ayarlanan sıcaklık değeri yazıldı
Serial.println(" *C "); // seri port ekranına *C yazıldı
dakikaValue = analogRead(dakikaPin); // dakika ayar potundaki voltaj okundu
dakika= map(dakikaValue, 0, 1023, 0, 30); // Okunan voltaj 0 - 30 arası milisaniyeye dönüştürüldü
Serial.print("Sure: "); // seri port ekranına süre yazıldı
Serial.print(dakika); // seri port ekranına hesaplanan dakika yazıldı
Serial.println(" dakika "); // seri port ekranına dakika yazıldı
}
}
Saat resimine ait kodlar:
Kod:
#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 resimine ait kodlar:
Kod:
#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
};