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