Arduino Oda Sicaklik Kontrolu
-
internette birkac ornek gordum ancak 1 sensorle calisiyor benim istedigim 3-4 yerdeki sicakliklari kontrol edip ortalama sicakliga gore fan acmasi bildiginiz gordugunuz devre varmidir mesela su adamin yaptigi (http://www.electroschematics.com/9540/arduino-fan-speed-controlled-temperature/) tam istedigim gibi ancak programda 1-2 degisiklik yapip 4 sensor baglamak lazim bu konuda yardimci olabilecek bi arkads varsa cok sevinirim yada hazir bi devre mevcutsa onuda degistirip kulllanbilirim ancak bulamadim pek bi ornek
-
-
-
hocam bu yaptiginiz urunde tek sensor mevcut benim yonetecegim sistemde en az 4 sensor gerekiyor yani durum su
1.sensor: 23
2.sensor: 22
3.sensor: 25
4.sensor: 22
gereken sicaklik 23
aldigi ortalama: 23 fan kapali
1.sensor: 23
2.sensor: 26
3.sensor: 25
4.sensor: 26
gereken sicaklik 23
aldigi ortalama: 25 fan %20 acik
yani yukarida verdigim linkteki sisteme 3 sensor daha ekleyip bi ortalama aldirilacak bide kontrol eklenecek eger bu islerden anliyorsan kaca yaparsin verdigim sistemi
-
edit yanlış şey paylaştım altta doğrusu mevcut alıntıyı düzeltin lütfen.
caagroup tarafından 19/Eki/14 17:32 tarihinde düzenlenmiştir -
aşağıdaki kod jet hızıyla not defterinden düzenlenmiş olup, denenmemiştir eksik hata ve saçmalıklar mevcut olabilir
#include <dht11.h> // dht11 kütüphanesini ekliyoruz.
#define DHT11PIN1 2 // DHT11PIN olarak Dijital 2"yi belirliyoruz.
#define DHT11PIN2 3 // DHT11PIN olarak Dijital 3"yi belirliyoruz.
#define DHT11PIN3 4 // DHT11PIN olarak Dijital 4"yi belirliyoruz.
#define DHT11PIN4 5 // DHT11PIN olarak Dijital 5"yi belirliyoruz.
#define fanpin 6 // DHT11PIN olarak Dijital 6"yi belirliyoruz.
dht11 DHT11;
dht11 DHT12;
dht11 DHT13;
dht11 DHT14;
void setup()
{
pinMode(fanpin, OUTPUT);
Serial.begin(9600); // Seri iletişimi başlatıyoruz.
Serial.println("Ölçümler başlatılıyor");
}
void loop()
{
float fancalismasicakligi = 25; // fanın calismaya baslayacagi sicaklik;
// sensorlerin değiskenlerini tanimliyoruz
float sensor1sicaklik;
float sensor2sicaklik;
float sensor3sicaklik;
float sensor4sicaklik;
// Sensörden gelen verileri serial monitörde yazdırıyoruz.
sensor1sicaklik = (float)DHT11.temperature;
sensor2sicaklik = (float)DHT12.temperature;
sensor3sicaklik = (float)DHT13.temperature;
sensor4sicaklik = (float)DHT14.temperature;
//şimdide sicaklik ortalamasini alip fani calistiracagiz
float toplamsicaklik = sensor1sicaklik+sensor2sicaklik+sensor3sicaklik+sensor4sicaklik;
float ortalama = toplamsicaklik/4; //sensor adedine bölerek ortalamayı bulduk şimdi karşılaştırma yapacagız
if(ortalama>=fancalismasicakligi)
{
digitalWrite(fanpin, HIGH);
}
else
{
digitalWrite(fanpin, LOW);
}
// 2 saniye bekliyoruz. 2 saniyede bir kontrol yapılacak.
delay(2000);
}
hocam pek koddan anlamam ancak verdigin koda gore ortalama deger aldirmayi nerede yaptiriyorsun mesela su verdigim ornekteki sisteme sadece diger sensorlerden ortlama aldirmaya kalksak cokmu zor olur videosu su asagidaki gibi
http://www.youtube.com/watch?v=R7lmpIAsoQQ
kodlar icinde sitede gormussundur ama ben yinede ekliyorum bunda ortalamayi bi aldirsak tam istedigim sistem ama nasil aldirilir bilemiyorum.
#include<LiquidCrystal.h> //source: http://www.electroschematics.com/9540/arduino-fan-speed-controlled-temperature/ LiquidCrystal lcd(7,6,5,4,3,2); int tempPin = A1;// the output pin of LM35 int fan =11;// the pin where fan is int led =8;// led pin int temp; int tempMin =30;// the temperature to start the fan int tempMax =70;// the maximum temperature when fan is at 100% int fanSpeed; int fanLCD; void setup(){ pinMode(fan, OUTPUT); pinMode(led, OUTPUT); pinMode(tempPin, INPUT); lcd.begin(16,2); } void loop(){ temp = readTemp();// get the temperature if(temp < tempMin){// if temp is lower than minimum temp fanSpeed =0;// fan is not spinning digitalWrite(fan, LOW); } if((temp >= tempMin)&&(temp <= tempMax)){// if temperature is higher than minimum temp fanSpeed = map(temp, tempMin, tempMax,32,255);// the actual speed of fan fanLCD = map(temp, tempMin, tempMax,0,100);// speed of fan to display on LCD analogWrite(fan, fanSpeed);// spin the fan at the fanSpeed speed } if(temp > tempMax){// if temp is higher than tempMax digitalWrite(led, HIGH);// turn on led }else{// else turn of led digitalWrite(led, LOW); } lcd.print("TEMP: "); lcd.print(temp);// display the temperature lcd.print("C "); lcd.setCursor(0,1);// move cursor to next line lcd.print("FANS: "); lcd.print(fanLCD);// display the fan speed lcd.print("%"); delay(200); lcd.clear(); } int readTemp(){// get the temperature and convert it to celsius temp = analogRead(tempPin); return temp *0.48828125; }
ayhun tarafından 20/Eki/14 17:55 tarihinde düzenlenmiştir -
Yukarıdaki alıntıyı düzenle lütfen yanlış bilgilendirme olmasın, yanlışlıkla post olmuş Yönlendirme değil fikir vermesi açısından yazıyorum
http://arduinoturkiye.com/dht11-sicaklik-ve-nem-sensorunun-arduino-ile-kullanimi/şimdi bak buradaki örnek güzel
sensörü buuradan satın alabilirsin
http://www.robotistan.com/DHT11-Isi-ve-Nem-Sensoru-Kart,PR-2171.html
daha ucuz 4 liralık(analog) sensörlerde var onlarıda araştırabilirsin
hatta 0.5 derece hassasiyeti olan sensörlerde mevcur
bu sensör 0 ile 50°C arasında 2°C hata payı ile sıcaklık ölçer,20-90% RH arasında 5% RH hata payı ile nem ölçer.
not : arduino uno için digital pin 2 ve pin 3 resimde görüldüğü üzere
http://www.adafruit.com/blog/wp-content/uploads/2012/05/ArduinoUno_R3_Pinouts_600.png
interrupt pinleridir diğer 4 ve 5. pinlerde sorun yaşayabilirsin bunu bir incelemen gerek.
eğer uygunsa örnekte verilen kodu şu şekilde modifiye edebiliriz
aşağıdaki kod jet hızıyla not defterinden düzenlenmiş olup, denenmemiştir eksik hata ve saçmalıklar mevcut olabilir
#include <dht11.h> // dht11 kütüphanesini ekliyoruz.
#define DHT11PIN1 2 // DHT11PIN olarak Dijital 2"yi belirliyoruz.
#define DHT11PIN2 3 // DHT11PIN olarak Dijital 3"yi belirliyoruz.
#define DHT11PIN3 4 // DHT11PIN olarak Dijital 4"yi belirliyoruz.
#define DHT11PIN4 5 // DHT11PIN olarak Dijital 5"yi belirliyoruz.
#define fanpin 6 // DHT11PIN olarak Dijital 6"yi belirliyoruz.
dht11 DHT11;
dht11 DHT12;
dht11 DHT13;
dht11 DHT14;
void setup()
{
pinMode(fanpin, OUTPUT);
Serial.begin(9600); // Seri iletişimi başlatıyoruz.
Serial.println("Ölçümler başlatılıyor");
}
void loop()
{
float fancalismasicakligi = 25; // fanın calismaya baslayacagi sicaklik;
// sensorlerin değiskenlerini tanimliyoruz
float sensor1sicaklik;
float sensor2sicaklik;
float sensor3sicaklik;
float sensor4sicaklik;
// Sensörden gelen verileri serial monitörde yazdırıyoruz.
sensor1sicaklik = (float)DHT11.temperature;
sensor2sicaklik = (float)DHT12.temperature;
sensor3sicaklik = (float)DHT13.temperature;
sensor4sicaklik = (float)DHT14.temperature;
//şimdide sicaklik ortalamasini alip fani calistiracagiz
float toplamsicaklik = sensor1sicaklik+sensor2sicaklik+sensor3sicaklik+sensor4sicaklik;
float ortalama = toplamsicaklik/4; //sensor adedine bölerek ortalamayı bulduk şimdi karşılaştırma yapacagız
if(ortalama>=fancalismasicakligi)
{
digitalWrite(fanpin, HIGH);
}
else
{
digitalWrite(fanpin, LOW);
}
// 2 saniye bekliyoruz. 2 saniyede bir kontrol yapılacak.
delay(2000);
}
-
LM35 de kalibrasyon sıkıntısı yaşayabilirsin analog bir sensördür ama ucuzdur veridiğin örnekteki kodu bu şekilde fikir vermesi için düzenledim umarım hata yoktur hata olursa pm atarsın.
#include <LiquidCrystal.h>
//source: http://www.electroschematics.com/9540/arduino-fan-speed-controlled-temperature/
LiquidCrystal lcd(7,6,5,4,3,2);
int tempPin = A1; // the output pin of LM35 Sensör 1
int tempPin2 = A2; // the output pin of LM35 Sensör 2
int tempPin3 = A3; // the output pin of LM35 Sensör 3
int tempPin4 = A4; // the output pin of LM35 Sensör 4
int fan = 11; // the pin where fan is
int led = 8; // led pin
int temp;
int temp2;
int temp3;
int temp4;
int tempMin = 30; // the temperature to start the fan
int tempMax = 70; // the maximum temperature when fan is at 100%
int fanSpeed;
int fanLCD;
float kalibrasyon = 0.48828125;
float ortalama;
void setup() {
pinMode(fan, OUTPUT);
pinMode(led, OUTPUT);
pinMode(tempPin, INPUT);
pinMode(tempPin2, INPUT);
pinMode(tempPin3, INPUT);
pinMode(tempPin4, INPUT);
lcd.begin(16,2);
}
void loop() {temp = analogRead(tempPin) * kalibrasyon;
temp2 = analogRead(tempPin2)* kalibrasyon;
temp3 = analogRead(tempPin3)* kalibrasyon;
temp4 = analogRead(tempPin4)* kalibrasyon;
ortalama = temp+ temp2+ temp3+ temp4;
ortalama = ortalama/4;
if(ortalama < tempMin) { // if temp is lower than minimum temp
fanSpeed = 0; // fan is not spinning
digitalWrite(fan, LOW);
}
if((ortalama >= tempMin) && (ortalama <= tempMax)) { // if temperature is higher than minimum temp
fanSpeed = map(ortalama, tempMin, tempMax, 32, 255); // the actual speed of fan
fanLCD = map(ortalama, tempMin, tempMax, 0, 100); // speed of fan to display on LCD
analogWrite(fan, fanSpeed); // spin the fan at the fanSpeed speed
}
if(ortalama > tempMax) { // if temp is higher than tempMax
digitalWrite(led, HIGH); // turn on led
} else { // else turn of led
digitalWrite(led, LOW);
}
lcd.print("ORT TEMP: ");
lcd.print(ortalama); // display the temperature
lcd.print("C ");
lcd.setCursor(0,1); // move cursor to next line
lcd.print("FANS: ");
lcd.print(fanLCD); // display the fan speed
lcd.print("%");
delay(200);
lcd.clear();
} -
Hocam bende yeni merak sardım. Dün izledim bu videoyu tek sensörlü ama 3 e çıkarması zor değil gibi görünüyor. Belki işine yarar.
http://www.youtube.com/watch?v=y6bVZ9_h514
-
@musa o videoyu gordum ancak pek bise anladigim soylenemez raspberry pi ile yapayim dedim ancak pek bi videoda goremedim mantigi otutturabiliyorum ancak kodlama bilmedigimden yazamiyorum sikinti buyuk anliyacagin :(
@caagroup peki en iyi sicaklik sensoru hangisi? hangisi uzerinde yogunlasmam dogru olur? birde veri okuyacagi mesafe uzakta olacak 40 metre uzaktan veri alabilecegi birsey olmasi lazim bu sensor yerine rht05 kullanmakmi faydali olur veya daha stabil sensor hangisi var?
-
hatalı postu düzenlememişsin :)
RHT05 için datasheet'tehttp://sensorguys.com/wp-content/uploads/2014/05/Digital-humidity-and-temperature-sensor-RHT05.pdf
Long transmission distance, up to 100 meters demiş senin için iyi gibi duruyor fiyatıda uygunsa alabilirsin
yanınada bir adet Delta PLC alabilir ve kontrollerini gerçekleştirirsin.
arduino için :
uzun mesefelerde bu sensörleri kullanabilmen için güçlendirici transistör devresi hazırlaman ve kablo direnci gibi meseleler araya girecek bunları iyi hesaplaman gerekli. çünkü ölçüm şeklin analog.
http://www.cirris.com/learning-center/calculators/133-wire-resistance-calculator-table
analog sensör kullanacaksan uzun mesafe de slave olarak
arduino pro mini
http://www.robotistan.com/Arduino-Pro-Mini-328-5V16MHz-Headerli,PR-35.html
ve şu
http://www.robotistan.com/Wireless-NRF24L01-24GHz-Transceiver-Modul-24GHz-Alici-Verici-Modul,PR-1485.html
veya şu gibi
http://www.robotistan.com/Wireless-NRF905-1GHz-Transceiver-Modul-1GHz-Alici-Verici-Modul-Antenli,PR-1738.htmlyada kafana yatan...
ürüneler kullanarak kabolsuz haberleşme sağlayabilirsin ki ilkini kullanırsan kablo parasından ucuza gelir(40 m için ikisinede garanti veremem datasheet'lere iyi bak kullanacağın yere göre iyi hesapla ,ard. pro mini alırsan pinlerinide al arduino pro miniyi programlaya bilmekte bir iştir bunun için en azından bir adet arduino uno'ya ihtiyacın var http://www.instructables.com/id/Uploading-sketch-to-Arduino-Pro-Mini-using-Arduino/
)
caagroup tarafından 19/Eki/14 19:35 tarihinde düzenlenmiştir
linklerini veridiğim siteyle alakam yoktur birkaç defa alışveriş yaptım sıkıntım olmadı.
son olarak yaptığın bu proje eğer hobi projesi değilse hepsini boşver
git birazdaha fazla para verip endüstriyel otomasyon ürünleri al bunlarının hiçbirinin gerçek iş sahasında yerleri yoktur ve güvenilir değillerdir buna arduino ve raspberry de dahildir RHT05 gibi prof. ürünler kullanmanı tavsiye ederim.