14 Şubat 2016 Pazar

Arduino ile dijital termostat

  Bu devremizde arduino, 2x16 LCD, DS 18B20 kullanarak, set değeri ayarlanabilen ve hafızaya keydedilen bir termostat devresiyaptık. Devredeki butonlar ile set değerini arttırıp azaltabiliyoruz, ortam ısısı set değerine ulaştığında 7.pine bağlı ledlerimizin durumunun değiştiğini görebilirsiniz. Ben devrede daha iyi gözlemlenebilmesi için led kullandım. siz isteseniz led yerine röle kullanabilirsiniz, böylece ısı değerine geldiğinde bişeyleri açıp kapatabilirsiniz. devrenin diagramını aşağıdan inceleyebilirsiniz.

Termostat devresi fritzing çizimi:

Arduino ile termometre DS18B20
Arduino dijital termostat



Devrede kullanılan malzemeler:

1 Adet arduino UNO yada Nano
1 Adet 2X16 standart karakter LCD
1 Adet DS18B20
2 Adet tact buton
2 Adet farklı renklerde LED diyot
3 Adet 4K7 ( Sarı - Mor - Kırmızı )
2 Adet 220R ( Kırmızı - Kırmızı - Kahverengi )
1 Adet 10K trimpot
1 Adet breadbord
yeteri kadar jumper kablo....

Devrenin Kodaları :

//   www.elektronikya.com
//    www.hobidevre.com
// www.elektronikya.com Dijital termostat devresi
#include <LiquidCrystal.h>
#include <OneWire.h> // OneWire kütüphanesini ekliyoruz.
#include <EEPROM.h>
int addr = 0;
// Initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// Sıcaklık sensörünü bağladığımız dijital pini 2 olarak belirliyoruz.
int DS18S20_Pin = 6; 
// Sıcaklık Sensörü Giriş-Çıkışı
OneWire ds(DS18S20_Pin);  // 6. Dijital pinde.
#define led1 7 // Ledimizi 7 nolu pine baplıyoruz
int SET;
int buton1 = 8;
int buton2 = 9;
int buton3 = 10;
void setup(void) {
 lcd.begin(16,2);
 pinMode(led1,OUTPUT);
 pinMode(buton1,INPUT);
 pinMode(buton2,INPUT);
 pinMode(buton3,INPUT);
 SET = EEPROM.read(0);// enerji verildiğinde set edilen ısı değeri epromdan okunuyor
}
void loop(void) {
  // temperature değişkenini sıcaklık değerini alma fonksiyonuna bağlıyoruz.
  float temperature = getTemp();
  // Sensörden gelen sıcaklık değerini Serial monitörde yazdırıyoruz.
  //lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("SET:");lcd.print(SET);lcd.print(" C");
  lcd.setCursor(0,1);
  lcd.print("Sicaklik:");
  lcd.print(temperature);lcd.print(" C");
  
  if(temperature>=SET){
    digitalWrite(led1,HIGH);
  }
 else{
  digitalWrite(led1,LOW);
 }
// Burası SET değerini değiştirme
  if(digitalRead(buton1)==HIGH)
  {
    delay(100);
  SET++;
  delay(50);
  }
  else if(digitalRead(buton2)==HIGH)
  {
    delay(100);
    SET--;
    delay(150);
  }
  EEPROM.write(0, SET); // burada set değerini eproma kaydediyoruz
  // SET değer değiştirme buraya kadar

  
 //delay(100);
 // 1 saniye bekliyoruz. Monitörde saniyede 1 sıcaklık değeri yazmaya devam edecek.
}

// Aşağıdaki fonksiyon DS18B20 sıcaklık sensörümüzden gelen verileri
// Celcius cinsinden sıcaklık değerlerine çevirmek için kullanılıyor.
// Herhangi bir değişiklik yapmamız gerekmiyor.

float getTemp(){
  //returns the temperature from one DS18S20 in DEG Celsius

  byte data[12];
  byte addr[8];

  if ( !ds.search(addr)) {
      //no more sensors on chain, reset search
      ds.reset_search();
      return -1000;
  }

  if ( OneWire::crc8( addr, 7) != addr[7]) {
      lcd.setCursor(0,1);
      lcd.print("CRC is not valid!");
      return -1000;
  }

  if ( addr[0] != 0x10 && addr[0] != 0x28) {
      lcd.setCursor(0,1);
      lcd.print("Device is not recognized");
      return -1000;
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44,1); // start conversion, with parasite power on at the end

  byte present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE); // Read Scratchpad

  for (int i = 0; i < 9; i++) { // we need 9 bytes
    data[i] = ds.read();
  }

  ds.reset_search();

  byte MSB = data[1];
  byte LSB = data[0];

  float tempRead = ((MSB << 8) | LSB); //using two's compliment
  float TemperatureSum = tempRead / 16;

  return TemperatureSum;

}

Devrenin dosyalarını buradan indirebilirsiniz.



digital thermostat circuit with arduino




7 yorum:

Unknown dedi ki...

cok iyi olmus ama ben lcd yi calistiramadim devamli donen rakamnar var

Unknown dedi ki...

yardimci olabilirmisiniz tesekur ettim

Adsız dedi ki...

bu devreyi 128x64 grafik ekran ile nasil yapabiliriz

ugur dedi ki...

bu devreyi 128x64 grafik ekranla nasil yapabiliz

Erdoğan dedi ki...
Bu yorum yazar tarafından silindi.
Unknown dedi ki...

Ben bu devreyi yaptim fakat 220 volt bagladigimda thermostat devreye girdiginde set kismindaki gosterge bozuluyor ve arduino kitlenip ısı degeride sabit kaliyor cozumu hakkinda yardimci olursaniz memnun olurum. Ozenerek kutulamistim suanda isime yaramiyor. Bu durumu nasil cozebilirim

Adsız dedi ki...

Röle kullanıyor musunuz ?
Direk elektrik verirseniz Arduino'nun kilitlenmesi normaldir.