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");
}

Categories:

Tags:

No responses yet

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Dersler