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