18B20 ve 16×2 LCD ile Termometre yapımı

Elektronik proje yapımında en ilgi çekici projelerden biri termometredir. Bu projemizde 18B20 dallas ısı sensörü kullanılmıştır .18B20 ısı sensörü çok hassas ölçümler yapabilmektedir.18B20 Dallas ısı sensörü ölçtüğü değeri

Elektronik proje yapımında en ilgi çekici projelerden biri termometredir. Bu projemizde 18B20 dallas ısı sensörü kullanılmıştır .18B20 ısı sensörü çok hassas ölçümler yapabilmektedir.18B20 Dallas ısı sensörü ölçdüğü değeri 16×2 LCD üzerine göndererek ortamın sıcaklığını ölçmemiz mümkündür.Bu projemiz için gerekli olan kütüphanemiz aşağıda eklenmiştir. Devremiz şu şekildedir.

Programımızda yapacağınız küçük değişikliklerle hava durumunu LCD üzerinde görmeniz mümkün.

#include <OneWire.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);
// initialize the library with the numbers of the interface pins
 
OneWire  ds(8);  // on pin 12
void setup(void) {
  lcd.begin(16, 2);
  Serial.begin(9600);
 
}
 
void loop(void) {
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius, fahrenheit;
 
  if ( !ds.search(addr)) {
    Serial.println("No more addresses.");
    Serial.println();
    ds.reset_search();
    delay(2500);
    return;
  }
 
  Serial.print("ROM =");
  for( i = 0; i < 8; i++) {
    Serial.write(' ');
    Serial.print(addr[i], HEX);
  }
 
  if (OneWire::crc8(addr, 7) != addr[7]) {
    Serial.println("CRC is not valid!");
    return;
  }
  Serial.println();
 
  // the first ROM byte indicates which chip
  switch (addr[0]) {
  case 0x10:
    Serial.println("  Chip = DS18S20");  // or old DS1820
    type_s = 1;
    break;
  case 0x28:
    Serial.println("  Chip = DS18B20");
    type_s = 0;
    break;
  case 0x22:
    Serial.println("  Chip = DS1822");
    type_s = 0;
    break;
  default:
    Serial.println("Device is not a DS18x20 family device.");
    return;
  }
 
  ds.reset();
  ds.select(addr);
  ds.write(0x44,1);         // start conversion, with parasite power on at the end
 
  delay(1000);     // maybe 750ms is enough, maybe not
  // we might do a ds.depower() here, but the reset will take care of it.
 
  present = ds.reset();
  ds.select(addr);   
  ds.write(0xBE);         // Read Scratchpad
 
  Serial.print("  Data = ");
  Serial.print(present,HEX);
  Serial.print(" ");
  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();
    Serial.print(data[i], HEX);
    Serial.print(" ");
  }
  Serial.print(" CRC=");
  Serial.print(OneWire::crc8(data, 8), HEX);
  Serial.println();
 
  // convert the data to actual temperature
 
  unsigned int raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // count remain gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  }
  else {
    byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw << 3;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw << 2; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw << 1; // 11 bit res, 375 ms
    // default is 12 bit resolution, 750 ms conversion time
  }
  celsius = (float)raw / 16.0;
  fahrenheit = celsius * 1.8 + 32.0;
  lcd.clear();
  lcd.print("    SICAKLIK ");
  lcd.setCursor(0, 1);
  lcd.print(celsius);
  lcd.print(" C /");
  lcd.print(fahrenheit);
  lcd.print("F");
  Serial.print("  Temperature = ");
  Serial.print(celsius);
  Serial.print(" Celsius, ");
  Serial.print(fahrenheit);
  Serial.println(" Fahrenheit");
  delay(3000);
  if (celsius <= 20)   {       lcd.clear();     lcd.print(celsius);     lcd.print(" C /");     lcd.print(fahrenheit);     lcd.print("F");     Serial.print("  Temperature = ");     Serial.print(celsius);     Serial.print(" Celsius, ");     Serial.print(fahrenheit);     Serial.println(" Fahrenheit");     lcd.setCursor(0, 1);     lcd.print("  Hava Suğuk");   }   if (celsius >=30){//sıcaklık yüksek olunca
    lcd.clear();
    lcd.print(celsius);
    lcd.print(" C /");
    lcd.print(fahrenheit);
    lcd.print("F");
    Serial.print("  Sicaklik= ");
    Serial.print(celsius);
    Serial.print(" Celsius, ");
    Serial.print(fahrenheit);
    Serial.println(" Fahrenheit");
    lcd.setCursor(0, 1);
    lcd.print(" Hava Cok Sicak");
    delay(2000);
}
}

Bir Cevap Yazın

Time limit is exhausted. Please reload CAPTCHA.