Isı Sensörü Uygulaması

Aşağıda LM35 sıcaklık sensörü pin yapısı ve uygulama devresi görülmektedir. LM35 sıcaklık sensörü 4-20 V’la beslenebilmektedir. Çıkış ucu ise 25 °C’de 250 mV gerilim
vermektedir. Bu değer her 1 °C’de 10 mV değişim gösterir.


10 bitlik analog giriş 0-5 V için 0-1023 arası değer almaktadır. Analog girişteki gerilim (5/ 1023)
*A0 işlemiyle volt cinsinden bulunur. Volt değeri 1000’le çarpıldığında mV değeri elde edilir.
LM35’te her 10 mV’ta sıcaklık değeri 1 °C değiştiğinden A0 girişindeki mV değeri 10’a bölündüğünde sıcaklık değeri elde edilir. Tek formüle indirgenirse Sıcaklık = (5/1024) *A0 formülü elde
edilir.

+V: 5 V besleme.
OUT: Analog veri çıkışı.
GND: Topraklama pini.

void setup() {
  Serial.begin(9600);
}

void loop() {
  int deger = analogRead(A0); //Analog girişi oku.
  float gerilim = (5000.0 / 1023.0) * deger; //Analog girişteki gerilim (mV).
  float  sicaklik = gerilim / 10.0; //Sıcaklık °C
  Serial.print(sicaklik);
  Serial.println(" °C");
  delay(1000);
}

unsigned int okuADC(byte kanal); // ADC'yi okumak için özel fonksiyon

void setup() {
  Serial.begin(9600); // Seri haberleşmeyi başlat, 9600 baud hızında
  ADCSRA = 0b10000111; // ADC'yi etkinleştir, ölçekleyiciyi 128 yap (ADC frekansı = f_CPU / ölçekleyici)
}

void loop() {
  int adcDeger = okuADC(8); // İç sıcaklık sensörünün bağlı olduğu ADC kanalından oku (Kanal #8)
  int sicaklik = 33 + ((float)(adcDeger - 363) / 1.074); // ADC değerinden sıcaklığı (Celsius cinsinden) hesapla (Gözlem: 33℃ @ ADC değeri = 363)
  
  Serial.println(sicaklik); // Sıcaklık değerini Seri Monitör'e yazdır
  delay(1000); // 1 saniye bekle
}

unsigned int okuADC(byte kanal) {
  if (kanal > 15) // ADC kanalı 0 ile 15 arasında değilse geçersiz kanal
    return 0;
    
  ADMUX = 0b11000000 | kanal; // ADC kanalını seç
  ADCSRA |= 0x40; // ADC dönüşümünü başlat
  
  while (ADCSRA & 0x40); // ADC dönüşümü tamamlanana kadar bekle
  
  unsigned int adcSonuc = ADCL; // ADC sonucunu (düşük byte) oku
  adcSonuc |= (ADCH << 8); // ADC sonucunun yüksek 2 bitini (bit-9, bit-8) oku
  
  return adcSonuc;
}

/*
 * Copyright (c) 2021 Sayantan Sinha
 *
 * MIT License
 */
//
//#include <LiquidCrystal_I2C.h>
//
//LiquidCrystal_I2C lcd(0x3F, 16, 2);                      // Connect 16x2 LCD through I2C (address = 0x3F)

unsigned int readADC(byte ch);                           // Own function to read ADC

void setup()
{
  Serial.begin(9600);
  ADMUX = 0b11000000;                                    // Select V_ref = internal 1.1 V [Ref. ATmega328P datasheet, p. 317]
  ADCSRA = 0b10000111;                                   // Enable ADC, Set prescaler = 128. (ADC_frequency = f_CPU / prescaler)
 // lcd.begin();
}

void loop()
{
  int a = readADC(8);                                    // Read internal temperature sensor value (connected to ADC channel #8)
  int t = 33 + ((float)(a - 363) / 1.074);               // Emperical formula to calculate temperature (in Celsius) from ADC reading. (from observation: ADC reading = 363 @ 33℃)
  Serial.println(t);
//  lcd.clear();
//  lcd.print(t);
  delay(1000);
}

unsigned int readADC(byte ch)
{
  if (ch > 15)                                           // If the ADC channel selector is more than 15 then it's invalid
    return 0;
  ADMUX &= 0xF0;                                         // Clear the old ADC channel multiplexer bits
  ADMUX |= ch;                                           // Load the ADC channel multiplexer bits
  ADCSRA |= 0x40;
  while (ADCSRA & 0x40);                                 // The ADC start conversion bit remains HIGH until the ongoing A/D conversion is finished
  unsigned int aRead = ADCL;                             // Read the ADC result (lower byte first)
  aRead |= (ADCH << 8);                                  // Read higher 2 bits (bit-9, bit-8) of the ADC result
  return (aRead);
}

const byte buzzer = 12, LED = 13;
void setup() {
  Serial.begin(9600);
  pinMode(buzzer, OUTPUT);
  pinMode(LED, OUTPUT);
}

void loop() {
  int deger = analogRead(A0); //Analog girişi oku.
  float gerilim = (5000.0 / 1023.0) * deger; //Analog girişteki gerilim (mV).
  float  sicaklik = gerilim / 10.0; //Sıcaklık °C
  Serial.print(sicaklik);
  Serial.println(" °C");
  if (sicaklik > 30)
    alarm(); //alarm() fonksiyonunu çağır.
  delay(1000); //Bir saniye bekle.
}

void alarm() {
  digitalWrite(buzzer, !digitalRead(buzzer)); // Çıkışı tersle.
  digitalWrite(LED, digitalRead(LED ^ 1)); // Çıkışı tersle.
}

#include <LiquidCrystal.h>

// LCD modülün Arduino pinlerne bağlantısı.
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
  lcd.begin(16, 2); //LCD modülün satır ve sütün sayısı.
}

void loop() {

  lcd.setCursor(0, 0);
  lcd.print((500.0 / 1023.0) * A0); //Sıcaklık değerini yaz yaz.
  lcd.setCursor(4, 0);
  lcd.print("°C");
}

Benzer Temrinler & Yazılar

  • Alev Dedektörü Devresi

    Alev sensörleri ortamda alev algıladığında uyarı sinyali verir. Alev sensörü 760 nm – 1100 nm arasındaki dalga boyuna sahip ışığı (kızılötesi ışınım) tespit etmek için kullanılır. Görselde alev sensörü pin yapısı, Görseldeki ise alev dedektörü devresi görülmektedir. A0: Analog veri çıkışı. GND: Toprak pini. +: 3,3 V-5 V besleme. D0: Dijital veri çıkışı. const byte buzzer…

  • EEPROM.read

    #include <EEPROM.h> byte deger; void setup() { Serial.begin(9600); int hafizaBoyutu = EEPROM.length(); //Kartın hafıza boyutunu al. for (int adres = 0; adres < hafizaBoyutu; adres++) { deger = EEPROM.read(adres); //Analog veriyi 10 ms aralıklarla tüm hafızadan sırayla oku. Serial.print("Adres = "); Serial.print(adres); Serial.print("\t Değer = "); Serial.println(deger); delay(10); } } void loop() { }

  • Hareket Dedektörü Devresi

    Görseldeki HC-SR501 hareket sensörü pin yapısı görülmektedir. Hareket sensörüne LDR eklendiğinde HC-SR501 yalnızca karanlıkta çalışacak şekilde ayarlanabilir. Görseldeki hareket dedektörü devresi ortamda canlı algıladığında LED’i yakmakta ve siren çalmaktadır. VCC: 5 V – 12 V besleme. Data: Dijital veri çıkışı (3,3 V). GND: Topraklama pini. const byte LED = 2, PIR = 3, buzzer =…

  • Google firebase kullanımı

    Google firebase kullanımı NodeMCU intenette herhangi bir server üzerinde database kullanılarak kontrol edilebilir. Google firebase ücretsiz bir database uygulamasıdır ve ESP kartları için yazılmış kütüphanelere Arduino IDE üzerinden ulaşılabilir. Database oluşturmak için “firebase.google.com” adresine Google hesabıyla giriş yapılarak “Got to console” tıklanır (Görsel 6.17). Görsel 6.17: Firebase konsoluna giriş “Add Project” tıklanır (Görsel 6.18). Görsel…

  • Alkışla Çalışan LED Uygulaması

    Görselde alkışla çalışan LED uygulaması görülmektedir. Analog çıkışlı mikrofon modülünden gelen sinyal belli bir seviyeyi aştığında çıkıştaki LED yanmaktadır. Seviye tekrar aşıldığındaLED sönmektedir. Görselde ise mikrofon devresinin pin sıralaması verilmiştir. A0: Analog veri çıkışı.GND: Toprak pini.VCC: 5 V besleme.D0: Dijital veri çıkışı. const byte led = 12; int mic; bool degistir = 1; //boolean tipinde…

Bir Yorum Yazın

E-posta adresiniz yayınlanmayacaktır. Gerekli alanlar * ile işaretlenmiştir.