Posted by : MC
27 Şubat 2015 Cuma
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.
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.
Benzer Konular :
- Ana Sayfaya Dön »
- arduino devreleri , arduino ile lcd devresi , arduino ile sıcaklık kontrollü fan kontrolü , arduino lm35 , arduino projeleri »
- SICAKLIGA DUYARLI OLARAK KONTROL EDILEN FAN DEVRESI
temp=readTemp komutunda bir hata olabilir mi?
YanıtlaSilreadTemp burada kullanıcı tanımlı bir fonksiyon komut degil nasıl bir hata alıyorsunuz paylasabilirseniz yardımcı olmaya çalışırım
Silaynı sorun bendede var hata mesajı
YanıtlaSil'readTemp' was not declared in this scope
'read' was not declared in this scope
YanıtlaSilBU ŞEKİLDE BİRHATA KODU ÇIKIYOR.
Bu yorum yazar tarafından silindi.
SilHERKESE İYİ AKŞAMLAR.AYNIHATAYIBENDE GÖRÜYORDUM.HADDİM OLMAYARAK AŞAĞIDAKİİGİBİBİRDEĞİŞİKLİKYAPTIM ANCAK ELİMDE ARDUINO OLMADIĞI İÇİN DENEME ŞANSIM OLMADI. DENEYİP OLUMLU YADA OLUMSUZ BİLGİ VERİRSENİZ ÇOK SEVİNİRİM ÇÜNKÜ DAHA 5 GÜNDEN BERİ BU KONU İLE İLGİLENİYORUM. MAİL ATARSANIZ ÇOK İYİ OLUR. mahmutturkozmen@mynet.com
YanıtlaSil#include
LiquidCrystal lcd(7,6,5,4,3,2);
int tempPin = A1;
int fan = 11;
int led = 8;
int tempMin = 30;
int tempMax = 70;
int fanSpeed;
int fanLCD;
void setup()
{
pinMode(fan,OUTPUT);
pinMode(led,OUTPUT);
pinMode(tempPin,INPUT);
lcd.begin(16,2);
}
void loop()
{
int temp = analogRead (tempPin*0.48828125);
if(temp=tempMin)&&(temp<=tempMax))
{
fanSpeed = map(temp,tempMin,tempMax,32,255);
{
fanLCD = map(temp,tempMin,tempMax,0,100);
analogWrite(fan,fanSpeed);
}
if(temp<tempMax)
{
digitalWrite(led,HIGH);
}
else{
digitalWrite(led,LOW);
}
lcd.print("TEMP:");
lcd.print(temp);
lcd.print(" C ");
lcd.setCursor(0,1);
lcd.print(" FANS: ");
lcd.print(fanLCD);
lcd.print(" % ");
delay(200);
lcd.clear();
}
}
mahmut senin kodda baya sıkıntı var çalışmıyor ekranda hiç bişey gözükmüyor
YanıtlaSilabi doğrudur valla 5 günde ancak bu kadar :) ama doğru yolu bulacam yakındır. tabi desteklerinizle.. Ahmet abi doğruyu bulunca yayınla da hatalarımı öğreneyim. çünkü aklımda çok ciddi projeler var PLC olsa bin defa yaparım ama karta mecburum öğrenmem lazım. takip ettiğin bu konuda eğitim ve örnekler hakkında tavsiye edeceğin site varsa yazarsan sevinirim abi
SilAhmet abi şunu denermisin bi bende kart yokta
YanıtlaSil#include
LiquidCrystal lcd(7,6,5,4,3,2);
int tempPin = A1; // sıcaklık sensörünün bağlandığı pin
int fan = 11; // fan bağlandığı pin
int led = 8; // aşırısıcaklık LED i
int tempMin = 30; // sıcaklık minimum değeri
int tempMax = 70; // sıcaklık maximum değeri
int fanSpeed; //fan hızı
int fanLCD; // ekrana fan hız yazdırma
void setup()
{
pinMode(fan,OUTPUT); // fan çıkış pini yapıldı
pinMode(led,OUTPUT); // led çıkış piniyapıldı
pinMode(tempPin,INPUT); // sıcaklık sensörü giriş
lcd.begin(16,2);
}
void loop()
{
int temp = analogRead (tempPin)*(0.48828125);
if(temp=tempMin)&&(temp<=tempMax))
{
fanSpeed = map(temp,tempMin,tempMax,32,255);
{
fanLCD = map(temp,tempMin,tempMax,0,100);
digitalWrite(fan,fanSpeed);
}
if(temp<tempMax)
{
digitalWrite(led,HIGH);
}
else{
digitalWrite(led,LOW);
}
lcd.clear();
lcd.print("TEMP:");
lcd.print(temp);
lcd.print(" C ");
lcd.setCursor(0,1);
lcd.print(" FANS: ");
lcd.print(fanLCD);
lcd.print(" % ");
delay(200);
lcd.clear();
}
}
devrenin hatasız kodu aşagıdaki gibi kod uygulandı çalışıyor
YanıtlaSil#include
LiquidCrystal lcd(7,6,5,4,3,2); // LCD ekran noktaları belirlendi
int SicaklikPin = A0; // LM35 sensöre okuma pini atandı
int fan = 11; // Fanın hız referans noktası
int led = 8; // led pin
int Sicaklik;
int SicaklikMin = 30; // Fanın çalışması için min.sıcaklık seti
int SicaklikMax = 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ığını takip ledi çıkış atandı
pinMode(SicaklikPin, INPUT); // sıcaklık değerini okuyacagımız 1 nolu analog pin giriş atandı
lcd.begin(16,2); // LCD başlatıldı
}
void loop() {
Sicaklik = readSicaklik(); // sıcaklık bilgisi okundu
if(Sicaklik < SicaklikMin) { // sıcaklık bilgisi set degeri ile karsılastırıldı
fanSpeed = 0; // min set değerinden küçük ise fan devrede değil ledi yakma
digitalWrite(fan, LOW); // fan çıkış ucuna sıfır ver devreye sokma
}
if((Sicaklik >= SicaklikMin) && (Sicaklik <= SicaklikMax)) { // sıcaklık min setten büyük ise
fanSpeed = map(Sicaklik, SicaklikMin, SicaklikMax, 32, 255); // sıcaklık ile fan hızını map et
fanLCD = map(Sicaklik, SicaklikMin, SicaklikMax, 0, 100); // fan hızını LCD yaz
analogWrite(fan, fanSpeed); // 11 nolu pwm den fana hız vwe
}
if(Sicaklik > SicaklikMax) { // sıcaklığımız maks set değerinnden fazla ise
digitalWrite(led, HIGH); // ledi yak
} else { // değilse
digitalWrite(led, LOW); // ledi söndür
}
lcd.print("Sicaklik: ");
lcd.print(Sicaklik); // LCD okudugumuz sıcaklık değerini yaz
lcd.print("C ");
lcd.setCursor(0,1); // LCD yazmayı bir alt satıra al
lcd.print("FAN: ");
lcd.print(fanLCD); // alt satıra Fan hızını yaz
lcd.print("%");
delay(200);
lcd.clear();
}
int readSicaklik() { // int dönüşlü sıcaklık okuma fonksiyonumuz sıcaklığı santigrata ceviriyor
Sicaklik = analogRead(SicaklikPin);
return Sicaklik * 0.48828125;
}
AHMET bey merhaba bu devreyi yapacaktım ama bu arduino'nun ustundeki lcd ekran aparatının adını biliyormusunuz pot ayarıda sol köşesinde ben bulamadım?
SilSicaklik=readSicaklik(); hata veriyor. read ve Sicaklik ayrımı bitişikmi yazılacak. Bitişik yazılınca hata kalkıyor da. ayrıca lcd aparatın devreye montaj şeması mevcutmu?
SilArkadaşlar merhaba bir şey soracam hiç bir yerde bulamadım lütfen yardımcı olun..
YanıtlaSilörneğin , bir butona 5 sn basılı tutunca HIGH olmasını istiyorum bunu nasıl yazıcam örnek verebilir misin?
for komutuyla yazabilirsin dögüsel olarak işlem yapar sonuç elde edersin
SilMalzemelerin listesini paylaşabilir misiniz? Ayrıntılı liste olsa çok sevinirim yeni başladım sipariş verip alacağım hemen başlayacağım.
YanıtlaSilmstfrdgn123@gmail.com iletişim kurarsanız liste ve kod hakkında yardımcı olabilirim
Silkodları gönderebilir misiniz bugrapolat96@gmail.com
YanıtlaSil