29 Mayıs 2014 Perşembe

Arduino - PWM ile Servo Motor Sürme


PWM ile DC motor sürmüştük. Şimdi ise aynı yöntemle Servo motor süreceğiz.Fakat transistörlü anahtar kullanmayacağız.Çünkü servo motor kendi içerisinde PWM sinyalini algılayabilecek ekipmana sahip.





Servo Motor Nedir ?
Servo motor özellikle robotik uygulamalarda kullanılan bir motor çeşitidir. Servo motorlar da çıkış; mekaniksel konum, hız veya ivme gibi parametrelerin kontrol edildiği bir düzenektir. 
PWM sinyal ile DC motorun hızını kontrol ederek sürmüştük. Servo motor ise DC motor gibi sürekli dönen bir yapıya sahip değildir. 360 veya 180 derece dönebilen motorlardır ve mühim olan bu motorlarda hız değil açı değeridir. PWM ile servo motor kaç derece dönmesi gerektiğini algılar ve sinyalin istediği derece kadar döner. Uygulamamızda bunu daha iyi anlayacağız.


Towerpro SG90 Servo Motoru
Piyasada bulunan en ucuz servo motor Towerpro SG90 markalı motorudur. Motor 180 derece dönebilmekte ve ekipmanları da fena değil. Kablolarının bağlantıları da aşağıdaki resimde.
PWM yazan kabloyu Arduino'muzun 9 nolu pinine takacağız ve potansiyometre ile ölçtüğümüz analog değeri açıya dönüştürüp PWM ile motoru süreceğiz.

!!! Programı yazarken Servo'yu 170 derece döndürebildim. 180 derece döndürmek için map komutunu ya da açı değerini float olarak girmeme rağmen bu sorunu çözemedim.

Arduino Komutlarımız ;

#include  //Arduino'nun kendi Servo Kütüphanesi var

int potPin = 0;  
int servoPin = 9;
Servo servo;  // servo ismiyle servo motorumuzu tanıttık

void setup() 
{ 
  servo.attach(servoPin);  // Servo'nun sinyali alacağı Arduino Pinini belirledik
} 

void loop() 
{ 
  int okunan = analogRead(potPin);     // 0'dan 1023'e, Pottan okunan değer
  int aci = okunan / 6;              // 0'dan 180 dereceye Açıya dönüştürülüyor.
  servo.write(aci);  

} 

Bu uygulamayı PIC ile de yapmanızı şiddetle tavsiye ediyorum. Çünkü Servo.h kütüphanesi ile tüm uygulamayı basite indirgeyebiliyoruz. İşin arka planını görmek isteyenler mutlaka PIC ile de denemeliler. 

Uygulamamızın resmi ve videosu ;







10 Mayıs 2014 Cumartesi

Kararsız Multivibratör - Flaşör Devresi

Mühendislik eğitimimle beraber elektronik devre tasarımı veya da hazır devreleri gerçekleştirebileceğim bir alan istemiştim. Hobi elektronik devreleri bu konuda imdadıma yetişmişti. Hobi elektronik alanında ilk devrem flaşör devresi olarak adlandırdığımız gerçekte ise Kararsız Multivibratör olan bu Kare Dalga üreticisiydi.


Devrenin mantığı ise basit. Transistörlerin aynı olsa bile birbirlerine nazaran yapısal farklılıklarından dolayı biri diğerinden daha önce iletime geçecektir. Örneğin Q1 iletimde,Q2 kesimde iken 1.Çıkış ==1, 2.Çıkış== 0 olur. Kondansatörlerin 0,7V 'a ulaşıp boşalmaları ile bu sıra sürekli değişir ve bir kare dalga üreteci ortaya çıkmış olur.

R1=R4, R2=R3 ve C1=C2 alınırsa devre simetrik ters dalga üretimi gerçekleştirilmiş olur.

Frekans hesabına gelince ;
T=T1+T2
T1=R1 * C1 * ln2
T2=R2 * C2 * ln2    ve  f= 1 / T ; formüllerinden bulunabilir.


Formüllerde yanlışlık çıkabilir  deneme yapmanızda fayda var :).
Bu devreyi çıkışlarını led üzerinden takip edebileceğimiz bir devre ile tasarlayalım. Aşağıdaki devreyi kurararak çıkışları gözlemleyebiliriz. Değerleri kendiniz de belirleyebilirsiniz tabii ki simetrik olması şartıyla. Devrede ki kapasitör değeri 4,7 mikrofarattır.





7 Mayıs 2014 Çarşamba

Arduino - PWM ile DC Motor Sürme

Darbe genişlik modülasyonu (PWM) ile ilgili uygulama gerçekleştirmiştik. Bu yazımda ise bu konuyu biraz daha aralayacağız ve bu modülasyon ile transistörün anahtarlama özelliğinden faydalanarak DC motor hızını kontrol edeceğiz.

PWM'den bahsetmeden önce gerekli olan malzemelerden bahsetmek istiyorum.
  • 2N2222 Transistör
  • 1N4001 Diyot
  • 5K ya da 10K Pot
  • DC Motor (9V'luk ya da daha küçük)
  • 470 Ώ direnç
PWM NEDİR ?
PWM en basit haliyle bir sinyal modülasyon tekniği olarak tanımlanabilir. Sinyal bilgisinin aktarım için uygun hale çevirilmesi amacının yanı sıra güç kontrolü sağlamak ve elektrik makineleri,güneş pili şarj üniteleri gibi özel devrelere destek olmak amacı da taşır. 


Bu kontrol de tamamen anahtarlama ile sağlanır. Anahtarlama ne kadar hızlı yapılırsa, PWM ile aktarılan sinyalin gücü o kadar da artar. Örneğin bir lambaya gönderilen sinyalde PWM tekniğine ihtiyaç duyuluyorsa, bu teknik 120 Hz frekans değerinde uygulandığında maksimum verim elde edilebilir. 

"Duty Cycle" yani görev döngüsü olarak tanımlanan bir kavram bulunuyor ve PWM tekniğinde de sıkça karşımıza çıkıyor. Görev döngüsü kavramı aslında yapılan işlemin periyodunu belirtiyor. Bu döngü düşük seviyelerde ise aktarılan güç düşük olurken, döngünün yüksek seviyelerinde yüksek güç aktarılıyor. 




Basitçe soldaki Duty Cycle grafikleri ile PWM'i şu şekilde anlatabiliriz. 10 bitlik bir ADC ile analog değerimiz 0-255 arasında değer alır. Bu yeni dijital değer ile anahtar olarak kullanacağımız transistörün bazına bu sayısal değerler ile PWM uygularız. Sayı ne kadar büyük ise "Pulse Width" yani "Darbe Genişliği" o kadar büyük olur.

Bir pervaneyi elimizle çevirdiğimizi düşünelim. Ne kadar çok çevirip az dinlenirsek pervanemiz o kadar çok dönecektir. Çevirim kısmını 1,dinlenme kısmını da 0 olarak düşünürsek 1'ler ne kadar çoksa pervane de o kadar çok hızlı dönecektir. İşte bu 1'ler transistörümüzün bazına uyguladığımız PWM sinyalinin Darbe Genişliği demek oluyor.

DC MOTOR SÜRMEK
Edindiğimiz bilgiler ile DC Motor sürmek artık kolay. İhtiyacımız yüksek akım kapasiteli bir transistör, PWM üretecimiz ki biz bunu Arduino'muz ile yapacağız ve 1 motor ile diyot.


Soldaki devreyi Arduino'muz ile kuracağız.Transistörün 2N2222 veya muadili olmasına dikkat etmekte fayda var hakeza BC547 vs. gibi transistörler ile bu iş mümkün değil.Çünkü motoru döndüren güç akımdır ve yüksek akım geçiremeyen transistörler ile motor süremeyiz.
Direnç olarak 1k Ώ da kullanabilirsiniz fakat ben 470 Ώ kullandım, bu konuda sıkıntı yok.







Çok kısa da olsa kullanacağımız transistörden de bahsetmek istiyorum. Tüm transistörlerin C,B,E bacakları standart değildir. O yüzden devreyi tamamlerken sağdaki resme bir göz atmanızda fayda görüyorum. Ben ilk seferde transistörü ters taktım ne yazık ki :D ve  transistör o kadar çok ısındı ki elimi yaktım. O yüzden dikkat !





ARDUINO ile DEVRE BAĞLANTISI
Arduino ile sadece motoru yavaşlatıp hızlandırmayacağız. Analog girişe taktığımız potansiyometre değerine göre motorumuzu süreceğiz ve bu işi en kısa yoldan yapmamızı sağlayan bir kod da öğrenmiş olacağız, map.
"map" komutu ile istediğimiz bir çıkış değerini, bağlı olan giriş değerine göre anında değiştirebiliriz.Örnek vermek gerekirse ki bu kodu motor sürme devremizde de kullandık;

motordegeri = map(potdegeri, 0, 1023, 0, 255);

Bu yukardaki kod ile "motordegeri" isimli değerimizi, potun durumuna bağlı kıldık ve okunan analog değeri 10 bit ile sayısal değere çevirdik ve bunu da çıkışa 8 bit olarak yansıttık. Bu sayede motorumuzun hızını potansiyometrenin değeri ile kontrol edebiliyoruz.

Devreyi kurarken motoru harici bir pil ya da adaptör ile sürmenizde fayda var yoksa motoru arduino üzerinden süremezsiniz. Kodlarımız ;

int potPin = A0;
int motorPin = 3;
int potDegeri = 0;
int motorDegeri = 0;
void setup() {
 Serial.begin(9600);
}
void loop() {
 potDegeri = analogRead(potPin);  
 motorDegeri = map(potDegeri, 0, 1023, 0, 255);
 analogWrite(motorPin, motorDegeri);  
 Serial.print("Potansiyometre = " );     
 Serial.print(potDegeri);
 Serial.print("\t motor = ");
 Serial.println(motorDegeri);
 delay(2);    

}

Devreyi çalıştıtırken Seri Haberleşme Monitörüne bakmayı da ihmal etmeyin :).
Bu da devremizin son halinin resmi ve videosu.






4 Nisan 2014 Cuma

Arduino - Kızılötesi Kullanarak (Infared Receiver) TV Kumandası ile Led Yakma

Yavaş yavaş kablosuz düzeneklere geçmenin fayda sağlayacağını düşündüm. Bunun için de aralarından en basiti olan kızılötesi haberleşmeyi seçtim. Kısaca bahsetmek gerekirse kızılötesi bizim gözümüzle göremediğimiz ışınlar ve bu ışınları görebilen alıcı ve vericiler sayesinde 2 ayrı bağımsız devre belirli kodlamalar sayesinde haberleşebiliyor.En basitinden telefonunuzun kamerası ile televizyon kumandasının önündeki lede bakarken herhangi bir tuşa bastığınızda led'in yandığını görebilirsiniz. Fakat çıplak gözle kendimiz bu ışınları göremiyoruz.

TV kumandası seçtim çünkü hem bu kumandalardaki kodları çözümlemeyi öğrenmek hem de hazır bir verici olduğu için bizi fazla uğraştan kurtarır diye düşündüm :). 

Kısaca yapacağımız projeyi anlatmam gerekirse önce TV kumandamızdaki tuşların kodlarını arduinomuz sayesinde öğreneceğiz ve bu kodları kullanarak sayısal çıkışlara hükmedeceğiz.


Ama önce aşağıdaki linkten arduino sketch kızılötesi kütüphanesini indirmemiz gerekiyor.

http://www.pjrc.com/teensy/arduino_libraries/IRremote.zip


Bunu arduino'nun kurulu olduğu klasördeki libraries içine atıyoruz. Adını sadece IR yaparsanız iyi olur. Bu kütüphane ile kullanacağımız kodları incelememiz gerekirse;

IRrecv irrecv(receivePin) ; // Adını koyabileceğimiz bir IR alıcı oluşturuyoruz.

irrecv.enableIRIn() ;  // IR ile veri alma işlemini başlatıyoruz.

irrecv.decode(&results); // Alınan kodu çözme teşebbüsüne girer.

results.value ; // Verinin kodudur. (bu değeri kullanacağız)

irrecv.resume(); // Veri alımından sonra diğer kodu almak için başa döner.

Önce aşağıdaki kodları yazıyoruz ve kullandığımız kumandanın kullanmak istediğimiz herhangi 4 tuşunun kodlarını yazıyoruz..Tabi önce Sketch>Import Library > IR'yi tıklıyoruz ki kütüphanemiz eklensin.


#include <IRremote.h>

int RECV_PIN = 11;  //IR'nin 3.bacağını taktığımız pin
IRrecv irrecv(RECV_PIN); 
decode_results kod; // dekode sonucu

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Alma başlıyor
  
}

void loop()
{
  if (irrecv.decode(&kod))
    {
     Serial.println(kod.value, DEC); // Kodun Decimal Değeri
     irrecv.resume();} // Yeni kod alımı

}
  


Benim kumandamda bu değerler çıktı. 1 tuştan 2 farklı değer çıkabilir. Mühim değil, 2 değeri de tek bir değere indirgeyeceğiz bu sorun da ortadan kalkmış olacak. Bunu da aşağıdaki örnekteki gibi yapacağım.

if(k==1874)
return 1;  // 1874 değerim 1 oldu

3 Led kullandım, 3 tuş açmak için kullanacağım , 1 tuşu da kapatmak için kullanacağım. 



#include <IRremote.h>

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results kod;

int kumanda(int k)
{

  if(k==3922)
    return 1;
  if(k==3907)
    return 2;  
  if(k==3906)
    return 3;
  if(k==3911)
    return 4;
  if(k==1874)
    return 1;
  if(k==1859)
    return 2;
  if(k==1858)
    return 3;
  if(k==1863)
    return 4;


return -1;    

}

void setup()
{ 
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);

  Serial.begin(9600);
  irrecv.enableIRIn(); 
}

void loop() {
  if (irrecv.decode(&kod)) {

    Serial.println(kumanda(kod.value));

    if(kumanda(kod.value) == 1)
      digitalWrite(9,HIGH);

    if(kumanda(kod.value) == 2)
      digitalWrite(8,HIGH);

    if(kumanda(kod.value) == 3)
      digitalWrite(7,HIGH);

    if(kumanda(kod.value) == 4){

      digitalWrite(7,LOW);    
      digitalWrite(8,LOW);  
      digitalWrite(9,LOW);  
 }
 irrecv.resume(); 
  }
}


Videomuz ;



26 Mart 2014 Çarşamba

Arduino - HC-SR04 Ultrasonik Sensör ile Mesafe Ölçer Uygulaması

Merhaba. Bu yazımda HC-SR04 ultrasonic sensörünü tanıyıp cisim algılama ve de mesafe ölçümü yapacağız. Ses dalgaları sınıflandırılmasında 20 KHz-1 GHz arasındaki ses sinyalleri ultrasonic ses olarak tanımlanmıştır.Bizim sensörümüz ve bir çok ultrasonic sensör 40Khz frekansında ultrasonic ses üretmektedir. Burada önemli olan sesin yüksekliğinde belirleyici olan etken frekanstır.Ses yüksekse frekansta yüksektir.Ultrasonic ses sinyallerini insan kulağı algılayamaz.


Aslında HC-SR04 tüm haliyle bir transdüserdir. Transdüser ile sensör arasındaki fark ise sensör herhangi fiziksel bir değişimi algılayan bir eleman iken, transdüser bu değişimi algılayıp elektrik,ısı vs. bir çok enerji formuna dönüştürebilen bir elektronik devredir.

HC-SR04'te 2 adet araba farını andıran bir tanesi ses iletici diğeri de ses alıcı olan transdüser bulunmakta. Sol taraftan 40 KHz'de üretilen ses sinyal darbesi engele çarpıp sağ tarafa gelir ve biz bu gidiş-geliş arasındaki zamanı, cm'ye çevirerek uzaklığı ölçeceğiz.


T=0 zamanında darbe iletilir(ultrasonic ses sinyali), cisimden yansır, transdüser tarafından algılanır ve tekrar
gönderilir.



Sonraki darbe ilk darbenin ultrasonik enerjisinin hepsi absorbe edildiğinde iletilmelidir.Bu yüzden sensöre bir pals gönderilir sensör okunur ve sensörün datasheetinde yazan süre kadar sensöre tekrar pals gönderilmez.Eğer bekleme yapmaksak sensör saçma değerler döndürür.Çünkü ilk yolladıgımız sinyal bir yerden yansıyarak sensöre geri dönmeye devam eder.


Sensör üzerinde 4 adet pin mevcut.Bunlar;vcc,gnd,trig,echo pinleri.Sensör kendi içerisinde 40khz frekansında bir sinyal üretip  8 pals verici transdüsere gönderiyor.Bu ses dalgası  
havada, deniz seviyesinde ve 15 °C sıcaklıkta 340 m/s bir hızla yol alır.Bir cisme çarpar ve geri sensöre yansır.Cismin sensörden uzaklıgı ile doğru orantılı olarak echo pini bir süre lojik 1 seviyesinde kalır ve tekrar lojik 0 olur.Bizim bu mesafeyi ölçmekiçin tek yapmamız gereken echo pininin ne kadar lojik1 oldugunun süresini bulmaktır.Bu yapı yukarıdaki resimden daha iyi görülebilir.

Echo pininin lojik 1de kalma süresini mikrodenetleyici timerı ile ölçelim. Klasik yol=hız*zaman dan ve sesin 340m/sn lik hızınıda 34000cm/1000000us (340000/1000000=1/29) olarak düzenlersek  formül x=t/29 olarak bulunur.Fakat burada önemli bir nokta sensörün bize döndürdüğü süre, ses sinyalinin gönderilmesi ile alınması arasındaki oluşan süre. Yani yol=zaman/29 ile aradaki mesafeyi iki ile çarpmış oluyoruz.Çünkü ses hem gitti hem geldi.Bu yüzden x=t/58 formulüyle aradaki mesafeyi ölçmüş olacağız . Bazı yerlerde 58 yerine 58.2 veya 59 yazanı da gördüm artık sizin kararınıza kalmış birşey.

Buna ek olarak da 13.pine led bağladım ve mesafe 15 cm altına düştüğünde led yansın istedim.Siz isterseniz bir buzzer koyabilirsiniz. Buyrun kodlar ;

#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
int trigPin=2; //define trigPin 2
int echoPin=3; //define echoPin 3
int led=13;
void setup() {
  
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(led,OUTPUT); 
 lcd.begin(16,2);
}

void loop() {
  int sure, uzaklik;
  lcd.clear(); 
  lcd.setCursor(0,0);
  
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(1000);
  digitalWrite(trigPin, LOW);
  sure = pulseIn(echoPin, HIGH);
  uzaklik = (sure/58);
  
  if (uzaklik<15)
  {digitalWrite(led,HIGH);}
  else {digitalWrite(led,LOW);} 
  
  lcd.print("Uzaklik = ");
  lcd.print(uzaklik);
  lcd.print(" cm"); 
   delay(400);   
}








Video ;




Not: Resimlerin birçoğu www.mcu-turkey.com adresinden alınmıştır. Aynı programı PIC için yapmak isteyenler aşağıdaki adresi ziyaret edebilirler.


http://www.mcu-turkey.com/hc-sr04-ultrasonic-sensor-ile-cisim-algilama-ve-mesafe-olcumu/








15 Mart 2014 Cumartesi

Arduino- Çıkışları 9Volt veya 12 Volt Yapmak


Bildiğiniz üzere Arduino çıkışları 5V olmak üzere tasarlanmış. Fakat bazı devrelerde yönetmek istediğimiz elemanların çalışma voltları 12V,9V olabilmekte. Arduino ile bu elemanları yönetebilmek için mikrodenetleyicimizin ilgili pin çıkışına yandaki devreyi kurduğumuzda çıkışı 12V olarak yani transistörleri kaç volt ile besliyorsak o gerilimde alabileceğiz.  Bunu bir nevi DC-DC Inverter olarak da düşünebiliriz .





***Q1 transistörünün NPN,Q2 transistörünün PNP olduğunu gözden kaçırmamakta fayda var.***



Fritzingde 9V batarya bağlayarak bu devreyi çizdim. Gerilim değerini değiştirerek istediğiniz gerilimi çıkıştan alabilirsiniz...










Bu devreyi öğrenmemde yardımcı olan arkadaşım Ebru YAVUZ'a teşekkür ederim :)...


Arduino - LM35 Sıcaklık Sensörü ve LCD ile Termometre Uygulaması


Bu yazımda geçen yazıda yaptığımız termometre uygulamasında kullandığımız seri haberleşme yerine LCD ekranı kullanarak yine aynı projeyi yaptım.

Bu projeyi PCB karta işlerken elbette seri haberleşme portu yerine portatif olan LCD'yi kullanmak durumunda kalırız. Bu yüzden LCD'yi de öğrenmek mühim. Zaten Seri Haberleşmeyi tam olarak öğrenebilirsek LCD'yi de kullanmak zor olmayacaktır.

Burda sadece LCD Ekran kullanımı ve LM35 Termometre projelerini birleştirdim ve aşağıdaki kodu koştum. LCD Bağlantılarını tekrar yazacağım uğraşmak istemeyenler için :).








LCD'nin
1 - VSS (Toprak)
2-  +VDD
3-  Potansiyometrenin Ortası
4-  Arduino 7.pinine
5-  Toprak
6-  Arduino 8.pinine

11- Arduino  9.pinine
12- Arduino 10.pinine
13- Arduino 11.pinine
14- Ardunio 12.pinine
15- +VDD   
16-  Toprak

***Şemada 15. ve 16.pinlerin yerlerini ters yazmışım çok özür diliyorum. 15 VDD, 16 Toprağa bağlı olmalı. Potansiyometrenin



Sağ Bacak Toprak, Sol Bacak +VDD

Kodlarımız :

#include <LiquidCrystal.h> // Kütüphane Gerekli
LiquidCrystal lcd(7, 8, 9, 10, 11, 12); //Arduino pinleri LCD için
float sicaklik; //Analog değeri dönüştüreceğimiz sıcaklık 
float analoggerilim; //Ölçeceğimiz analog değer

void setup(){
  lcd.begin(16,2); 
}

void loop(){
  lcd.clear(); 
  lcd.setCursor(0,0); //komutu ile imleci istediğimiz karakter kutusunda konumlanmasını sağlıyoruz.İlk satırın 6.sütununa.
  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

  lcd.print("Sicaklik Degeri"); // İmlecten itibaren bu yazı yazılacak
  lcd.setCursor(0,1); // 1.satırın ilk sütunundayız 
  lcd.print(sicaklik); // Ardndan Bu değişken değer yazılacak
  lcd.print(" Derece"); //Değer ardından da bu yazı yazılacak
  lcd.setCursor(1,7);  //Derece yazısının yeri (2.satır,7.sütun)
  delay(1000); //Bu kısım LCD'lerin frekans çalışma aralığı yüzünden giriliyor.

}


Videomuz :








12 Mart 2014 Çarşamba

Arduino - LM35 Sıcaklık Sensörü ile Termometre Uygulaması

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 :).