Analog giriş fonksiyonları ile sadece potansiyometre gibi elemanların çıkışlarını değil aynı zamanda analog çıkış veren bütün sensörlerin gerilim değerlerini Arduino'ya aktarabiliriz.Elbette ki bu değerler 5V değerini aşmamalı.
Sol taraftaki resimde sıcaklık değerini analog çıkış olarak vermekte olan LM35 sensörü ve pinlerinin ne için kullanıldığı gösterilmekte.
Vs+ Arduino'muzun 5V, Toprak pini GND'ye ve Vçıkış olarak gösterilen pin de herhangi bir analog girişe takılarak Arduino ile sıcaklık ölçümü yapabiliriz.
Bu proje ile hem sensör ölçümlerine başlamış olacağız, hem de bir önceki yazıda görmüş olduğumuz "float" kodunu da kullanmış olacağız.
Analog giriş için Arduino'daki A1 pin girişini kullandım. Analog girişler sol tarafta olduğundan devre kurma işininin rahat olması için breadboard un sağ tarafının kullanılması sağlıklı olur.
Matematiksel ifadeyi kurabilmek için yani analog değeri sayısal değere çevirmek için LM35'in analog çıkış yapısını bilmemiz gerekir.
Orta bacağından verilen mV mertebesindeki gerilim her °C için 10 mV üretir. Yani 25 °C için çıkış 250 mV olur.
Daha ayrıntılı bilgi için http://www.ti.com/lit/ds/symlink/lm35.pdf
Arduino'daki ADC 10 bitlik olduğu için ve en yüksek değerimiz 5000 mV olduğu için bu 5000 mV'u 1024 parçaya işlemcimiz ayıracaktır. Yani 1023.değer bize 5V'u verecek ve her 10 mV bize 1 °C 'yi verecek şekilde programımızı yazıyoruz.
Kodlarımız ;
float sicaklik; //Analog değeri dönüştüreceğimiz sıcaklık
float analoggerilim; //Ölçeceğimiz analog değer
void setup () {
Serial.begin(9600); //Seri haberleşme,Sıcaklığı ekranda görücez
}
void loop () {
analoggerilim = analogRead(A1); //A1'den değeri ölç
analoggerilim = (analoggerilim/1023)*5000;//değeri mV'a dönüştr
sicaklik = analoggerilim /10,0; // mV'u sicakliğa dönüştür
Serial.print("Sicaklik Degeri: ");
Serial.print (sicaklik);
Serial.println (" derece");
delay (1000);
}
Seri Haberleşme monitörü ile okuduğumuz değerler. Sensörün etrafında ateş yakarak değeri arttırabilirsiniz. Tabi sensörü yakmayın ateşle :))).
Bu da devremizin videosu.En kısa zamanda bu sensör ile yaptığımız sıcaklık ölçümünü LCD'ye bağlayarak burda yayınlayacağım. Video'yu beğenmeyi unutmayın :).
selamlar.. devre için yazdığın kodları şekildeki devreyi arduino mega üzerinde kurdum. Doğrulamada ve yüklediğimde efeler gibi çalışıyor. Fakat hassasiyet ile ilgili bir problem var; 32,93 yerine 329,32 gibi değerler yazıyor. Nedeni ne olabilir?
YanıtlaSil"sicaklik = analoggerilim /10,0 " komutundaki 10,0 yerine direkt 10 yazarak deneyin.Bildiğim kadarıyla Mega'nın da ADC'si 10 bit o yüzden UNO kodlarının Mega için uyumsuz olacağı söylenemez.
YanıtlaSilLM35'in hassasiyeti çok iyi değil , bunun yerine ds18b20 sıcaklık sensörünü öneririm. Daha stabil ve hassas.
Merhaba; peki bu devreye bir servo motor ekleyerek sıcaklık lımıtı ornegın 30 derecenın uzerıne cıksaydı nasıl bır yazılım yada setup a ıhtıyac duyardım yardımcı olabilecek var mı?
YanıtlaSilMerhabalar, İsteğinize uygun bir kodu internette buldum, incelersiniz. https://dl.dropboxusercontent.com/u/76467041/LM35%20Temp%20Sensor%20Arduino%20Code.txt
Siladresinden alıntıdır!
4 tane ısı sensörünü nasıl bağlayacagız
YanıtlaSilve isteddiğimiz ısı sensörünü sectiğimizde o degeri nasıl ekrena yansıtıcak?
YanıtlaSilİstediğiniz 4 sensörü de analog pinlere yazın. Her birinden değerleri sırayla okuyun. Parametre oluşturmanız gerekebilir, parametre seçimlerine göre de sensörlerden gelen verileri ekranda gösterebilirsiniz.
Silint sicaklikpin=1; olarak pin tanımlanmış, pin numarası A1 olarak değer verilmemiş. 1 verince otomatik analog giriş olduğunu algılıyor mu?
YanıtlaSilanalogread fonksiyonunun içinde yazdığımızdan algılıyor direkt. Siz dilerseniz A1 olarak define edebilirsiniz sicaklikpin değişkenini.
SilAli arkadaşın soruna ilave olarak;
Sil1-Bu giriş pinMode ile giriş olarak neden tanımlanmamış?
2-Devreyi isiste denediğimde 0'ın altındaki sıcaklıklarda sadece 0 gösteriyor?
1-)Analog okumalarda pinMode ile giriş yapmanıza gerek yok..
Sil2-) Google'a " lm35 negative temperature arduino" yazarak bilgi edinebilirsiniz. 0 derecenin altında sıcaklık değeri okuma biraz farklı :).
çok teşekür ederim çok güzel bir paylaşım
YanıtlaSilBen teşekkür ederim :)
Silkolay gelsin.yazmış olduğunuz kodları arduino due nin atmega16u2 portundan yükledim. program çok güzel bir şekilde çalışıyor. fakat programı çalıtırdığımda sıcaklığı 48-50 derece arasında gösteriyor dışarısı 25 derece olmasna rağmen lm35 i soğuttuğum zaman enfazla 28 dereceye kadar düşüyor.lm35 in aldığı değerleri bakmak için programı değiştirdiğim zaman ise 90-96 arasında değerler alıyor. sorum şu acaba bir yerlerde yanlışmı yapıyorum devreyi yukarıda gösterildiği gibi kurdum breadboardın üzerinde ve dişi-erkek jumper kablolarlada ayrı ayrı denedim yine olmadı.acaba due de mi bi hata var
YanıtlaSilAynı pinden potansiyometre değeri okumaya çalışın, due bozuk mu değil mi anlayabilirsiniz.
SilBaşıma böyle bir durum hiç gelmedi, sensörü değiştirmenizi önerebilirim ancak. Çünkü çok komplike bir bağlantısı yok devrenin.
Yazılımsal bir sıkıntı var dostum. Aşağıda mücahit arkadaşımıza verdiğim cevabı inceleye bilirsin.
SilTeşekkürler uyarınız için. Kodu düzeltiyorum.
Silben komutları ve bağlantıları yaptığımda 307 derece gibi bir değer görüyorum nerede hata yapıyor olabilirim acaba.
YanıtlaSilAşağıda Mücahit arkadaşımıza verdiğim cevabı incelerseniz sevinirim.
SilMerhabalar ben aynı projeyi yapıyorum lakin mobil uygulama kontrollü yapıyorum. Uygulamayı hazırladım ama arduino kodlarına eklenmesi gereken şeyler varmış o kısım hakkında yardım edebilecek var mı????
YanıtlaSilMerhabalar,
YanıtlaSilben eksi(-30, -25 gibi ) değerleride almak istiyorum, fakat LM35 proteus üzerinde eksi değeri göstermeme rağmen terminalden 0 değeri dönüyor konu hakkında bilgisi olan varsa yardımcı olabilirmi, şimdiden teşekkürler
Piyasada genelde LM35'in "D" veya "DZ" türevleri bulunmakta. LM35DZ'nin teknik detaylarına baktığınızda da 0-150 derece aralığında ölçüm yaptığını görebilirsiniz. Saygılarımla.
SilMerhaba Hocam ben bu uygulama ve devreyi yaptım fakat değerler 440-500 arası çıkıyor 10,0 sadece 10 yaptım ama sonuç değişmedi yardımcı olabilirmisiinz ?
YanıtlaSilMerhaba. Bende dediğiniz gibi sıkıntı yaşadım. ancak biraz uğraştan sonra programın üçüncü satırındaki "int sicaklikpin=1;" kodda hata buldum. bu satırıdaki 1 rakamı birinci porttan okuma yapmaya çalışıyor sanırım. onun yerine "A1" yazarsanız düzelecektir. Ben "A0" portuna bağladığım için o satırı "int sicaklikpin=A0;" olarak düzelttim ve doğru sonuçlar almaya başladım. Saygılar
Silöncelikle paylaşım için teşekürler. ben de bir termometre yapmak istiyorum ama sıcaklığını ölçeceğim mesafe uzakta . yani 50m uzaklıktaki bir seranın sıcaklığını ölçeceğim ve bir referans değeri gireceğim ve o referans değerini geçince beni bilgilendirecek( buzzer veya LED ile) neyse asıl soruma geçeyim 50m mesafeden doğru sonuç alabilirmiyim. ve bu mesafeyi daha fazla uzatabilirmiyim mesela 100m gibi.
YanıtlaSil