Termostat devresi fritzing çizimi:
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 pinsLiquidCrystal 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ıyoruzint 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ştirmeif(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 Celsiusbyte data[12];byte addr[8];if ( !ds.search(addr)) {//no more sensors on chain, reset searchds.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 endbyte present = ds.reset();ds.select(addr);ds.write(0xBE); // Read Scratchpadfor (int i = 0; i < 9; i++) { // we need 9 bytesdata[i] = ds.read();}ds.reset_search();byte MSB = data[1];byte LSB = data[0];float tempRead = ((MSB << 8) | LSB); //using two's complimentfloat TemperatureSum = tempRead / 16;return TemperatureSum;}
Devrenin dosyalarını buradan indirebilirsiniz.
digital thermostat circuit with arduino
7 yorum:
cok iyi olmus ama ben lcd yi calistiramadim devamli donen rakamnar var
yardimci olabilirmisiniz tesekur ettim
bu devreyi 128x64 grafik ekran ile nasil yapabiliriz
bu devreyi 128x64 grafik ekranla nasil yapabiliz
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
Röle kullanıyor musunuz ?
Direk elektrik verirseniz Arduino'nun kilitlenmesi normaldir.
Yorum Gönder