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

  • Şifreli Kilit Uygulaması

    Görseldeki uygulamada tuş takımından doğru şifre girildiğinde step motor 90 °C’lik dönüş yapar. Geçerli ve geçersiz şifreler için farklı ses sinyalleri verir. #include <Keypad.h> //Tuş takımı kütüphanesi. byte hane = 0; char sifre[] = "123ABC"; // Kullanılacak şifre. char giris[sizeof(sifre)]; //Şifre uzunluğu kadar dizi oluştur. const byte buzzer = 1; // Buzzer pini. //—Tuş takımı…

  • Bilgisayardan Arduino’ya Veri Gönderme

    Bu uygulamada Serial.read() fonksiyonuyla USB kablo üzerinden bilgisayardan gelen verilerokunarak seri port ekranına yazdırılmıştır. Bilgisayardan Arduino’ya veri göndermek için seri portekranının üst kısmındaki kutuya karakter yazıp gönder düğmesine tıklanır Görselde Çokkarakterli metin bilgisini okumak için Serial.readString() fonksiyonu kullanılır. void setup() {  Serial.begin(9600); //Seri iletişim başlatıldı. } void loop() {  if (Serial.available()>0) { //Seri iletişimde veri…

  • Gaz Dedektörü Devresi

    Görseldeki MQ-2 gaz sensörü pin yapısı görülmektedir. MQ-2 gaz sensörü, 300 ile 10.000 ppm seviyesindeki yanıcı gaz ve sigara dumanını algılar. Görselde görülen gaz sensörü devresi, ortamda gaz algıladığında uyarı sinyalleri verir. VCC: 5 V besleme. GND: Toprak pini. D0: Dijital veri çıkışı. A0: Analog veri çıkışı. const byte buzzer = 13; // Buzzer'ın takılacağı…

  • Çizgi İzleyen Robot Uygulaması

    Görseldeki Sparkfun TB6612fng motor sürücü kartı pin yapısı verilmiştir. Görseldeki çizgi izleyen robot devresinde Sparkfun TB6612fng (kırmızı renkli PCB) motor sürücü kartı kullanılmıştır. Pololu TB6612fng entegresini kullanan yeşil renkli PCB kartın boyutları ve pin yerleşim düzeni farklıdır. Çizgi izleyen robot programı L298N motor sürücüsüyle de kullanılabilir. VCC: 5 V besleme.GND: Topraklama pini.VM: Motor besleme girişi…

  • Yaklaşım Dedektörü Devresi

    Görseldeki yaklaşım sensörü modülü ve pin yapısı görülmektedir. Sensör modülü bir çift IR alıcı verici LED’e sahiptir.  Verici LED kızılötesi frekansta ışık verir. 2 cm-35 cm aralığında bulunan engelin yüzeyine çarpıp yansıyan ışık alıcı sensör tarafından okunur. Dijital çıkış veren modül üzerindeki yeşil ışık yanar ve dijital çıkıştan da LOW (lojik 0) okunur. Algılama uzaklığı…

Bir Yorum Yazın

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