arduino lm35 etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

Aslında oldukça sık kullanılan bir proje.Neredeyse ısınan her devrede bir sıcaklık sensörü ve bu sıcaklık sensörüne bağlı çalışan bir fan sistemi bulunmakta.Paylaşacağımız devreyi ise evinizdeki fanı oda sıcaklığına bağlı olarak hızlandırıp duruma göre yavaşlatabilirsiniz.


1 nolu analog pine bağlanmış olan lm35 sıcaklık sensöründen bilgi alınıyor.Sonrasında bu sıcaklık bilgisi bizim işleniyor ve sıcaklık durumuna göre DC fan hızlandırılıyor ya da yavaşlatılıyor.Nasıl mı ?

Arduninonun 11 nolu pwm çıkışı analog çıkış olarak kullanılmış.Daha önceki paylaşımlarımızda arduinonun pwm çıkışından nasıl analıg çıkış elde edilir paylaşmıştık.Burada kullanılan kapasitör ise fanın düzensiz çalışmasını engellemek amacı ile yani sarj ve desarj zamanları kullanılarak daha stabil bir base voltajı elde etmek için kullanılmış aynı zaman RC filtre devresi görmektedir.Burada esas husus siz pwm çıkışınızda ne kadar fazla cycle gönderir iseniz fanınız o kadar hızlı dönecektir.

Gelelim işin kod kısmına


#include <LiquidCrystal.h>
LiquidCrystal lcd(7,6,5,4,3,2);//lcd ekran noktaları belirlendi
int tempPin = A1; // lm35 sensörü okuma pini atandı
int fan = 11; // Fanın hız referans noktası
int led = 8; // led pin
int temp;
int tempMin = 30; // Fanın çalışması için min. sıcaklık seti
int tempMax = 70; // Fanın tam kapasitede çalışması için sıcaklık set değeri
int fanSpeed;// fan hızı için değişken tanımlanıyor
int fanLCD;
void setup() {
pinMode(fan, OUTPUT);// 11 nolu pwm çıkış olarak atandı
pinMode(led, OUTPUT);// fan devrede olup olmadıgını takip ledi çıkış atandı
pinMode(tempPin, INPUT);//sıcaklık degerini okuyacagımız 1 nolu analog pin giriş atandı
lcd.begin(16,2);// lcd başlatıldı
}
void loop() {
temp = readTemp(); // sıcaklık bilgisi okundu
if(temp < tempMin) { // sıcaklık bilgisi set degeri ile karsılastırıldı
fanSpeed = 0; // min set degerinden kucuk ise fan devrede degil ledi yakma
digitalWrite(fan, LOW);//fan cıkıs ucuna sıfır ver devreye sokma
}
if((temp >= tempMin) && (temp <= tempMax)) { // Sıcaklık min setten buyuk ise
fanSpeed = map(temp, tempMin, tempMax, 32, 255); // sıcaklık ile fan hızını map et
fanLCD = map(temp, tempMin, tempMax, 0, 100); // fan hızını lcd ye yaz
analogWrite(fan, fanSpeed); // 11 nolu pwm den fana hız ver
}

if(temp > tempMax) { // sıcaklıgımız maks. set degerinden fazla ise
digitalWrite(led, HIGH); // ledi yak
} else { // degilse
digitalWrite(led, LOW);//ledi sondur
}
lcd.print("TEMP: ");
lcd.print(temp); // lcd ye okdugumuz sıcaklık degerini yaz
lcd.print("C ");
lcd.setCursor(0,1); // lcd yazmayı bir alt satıra al
lcd.print("FANS: ");
lcd.print(fanLCD); // alt satıra fan hızını yaz
lcd.print("%");
delay(200);
lcd.clear();
}
int readTemp() { // int donuslu sıcaklık okuma fonksiyonumuz sıcaklıgı santigrata ceviriyor
temp = analogRead(tempPin);
return temp * 0.48828125;
}

Biraz daha bilgi verelim mesela nedir map() fonksiyonu.

Map fonksiyonu 2 fark limitlerdeki deişkenler arasında bir harita olusturur.Bu örnekte kullandığımız gibi fanımız 0 ile 255 (pwm çıkışında cycle kontrolü ile fan hızı kontrolü yapıldığından) ve sıcaklığımızın da min 30 ve maks 70 degerleri var.Map fonksiyonu bu degerler ve limitler arasındaki değişimler için karşılık oluşturur.30 sıcaklık için 10 0 cycle 40 için 50cycle 70 için 100cycle gibi.Bir nevi oransal bir kontrole sahip oluyoruz map fonksiyonu kullanarak.

Sistemin ise işleyişi gayet basit.Daha öncede bahsettiğimiz gibi her bir sıcaklık arasında bir fan hızı oluşturuluyor ve sıcaklıkla orantılı olarak fan kontrol ediliyor.Sıcaklığımız maks limit üzerine çıkarsa da uyarı ledimiz yakılıyor.



ELEKTRO BLOGGER A HOŞGELDINIZ

ARAMA YAP

EN COK OKUNANLAR

- Copyright © ELEKTRO-BLOGGER Blogger