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

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










11 Mart 2014 Salı

Arduino - Matematiksel İşlemler

Arduino matematiksel işlemler yapmak için matematiksel operatörleri kullanır. Bu operatörleri birlikte kullanarak karmaşık matematik işlemleri, arduinoya yaptırabilir sensörlerden elde ettiğimiz değerleri(V,mV) istediğimiz değerlere çevirebiliriz (K,C,metre vs.). 

Bu operatörlere örnek vermek gerekirse,

c= a + b  //  a değeri ile, b değerini toplayıp c değerine atar.
c= a - b  //  a değerinden b değerini çıkartıp c değerine atar.
c= a * b  //  a değeri ile, b değeriniçarpıp c değerine atar.
c= a / b  //  a değerini  b değerine bölüp c değerine atar.
c = a%b //  a değerinin b ye bölümünden kalanı c değerine atar, bu ifadeyi kullanmıştık.


Ledlerin veya butonların hangi pinlere bağlı olduğunu belirtmek için int değerini kullanmıştık.
Bu int değeri bizim belirttiğimiz sayının veya çıkışın tamsayı istendiği anlamına gelmekte.


Eğer bu istenen çıkışın veya girişin ondalık sayı olması isteniyorsa değer int olarak değil float ile girilir. Örneğin ;

int a=5;
float b=5,6;
float c=a+b;
int d= a+b;

Burda sadece olayın nasıl işlediğini anlatmak istiyorum yoksa bu kodlar direkt çalışmaz elbette ki :).

Sonuçlarda  float olarak girilen c değeri 10,6, int olarak girilen d değeri de 11 olarak çıkar.

ÜS Alma işlemi x üssü alınacak sayı, n üs olmak üzere;

 pow(x,n)   olarak alınır.

KAREKÖK alma işlemi x sayısı için de ;

 sqrt(x)           olarak alınır.

MUTLAK  değer alma işlemi yine x sayısı için;

 abs(x)       olarak alınır.

TRİGONOMETRİK ifadeler de  x RADYAN olmak üzere ;

sin(x),cos(x),tan(x) gibi bizim bildiğimiz ifadelerle alınabilir.


NOT : Genellikle radyan değerlerle değil açılarla direktman çalıştığımız için açıları otomatikman radyana çevirebiliriz. Bunun için arduinoda tanımlı DEG_TO_RAD ifadesini kullanabiliriz. Örnek vermek gerekirse açıyı dışardan okuduğumuzu farz edelim ve bunun karesini alalım. aci_d ifadesi dışardan okunuyor olsun.

aci_r = aci_d * DEG_TO_RAD;

y= pow(aci_d,2);

Bu kod ile açı olarak okunulan aci_d ifadesi radyana dönüştürülmüş olur.


BÜYÜK ve KÜÇÜK Olanı Bulma;

x ve y kıyaslanan 2 değer olsun,

max(x,y); // büyük olan hangisiyse çıkış o olur.

min(x,y); // küçük olan hangisiyse çıkış o olur.

22 Temmuz 2013 Pazartesi

Arduino - Analog Çıkışlara Hükmetmek (PWM & Ledler)

Daha önce dijital çıkışlara hakim olmuştuk. "1" ve "0" mantığı ile ledimizi yakmış ve söndürmüştük.Fakat hayatta ki ölçülebilen değerler sadece "1" ve "0" lardan oluşmuyor. Bu yazımda analog çıkışlarla ilgili çalışma yapacağız. Arduino UNO ve türevleri bu özelliği barındırmakta.




Bu özellik elbette ki tüm çıkış pinlerinde yok. Üzerinde ~ işareti bulunan pinleri kullanırsak analog özelliğini de kullanabiliriz.

Dijital çıkışlarda " digitalWrite(10, HIGH ), digitalWrite(10, LOW) " komutunu kullanıyorduk. Çıkışımız ya "1" ya da "0" oluyordu. Analog özelliğini kullanabilmemiz için ise aşağıdaki komuta ihtiyacımız olacak.

analogWrite( )

Öncelikle devremizi aşağıdaki gibi kuruyoruz.Tabi siz isterseniz üzerinde "~" işareti bulunan herhangi bir pini de kullabilirsiniz.

Kodlar ve açıklaması :


int led=9;
  
void setup()
{
  pinMode(led, OUTPUT);

}
void loop()
{
  int parlaklik;
  {
  for (parlaklik=0;parlaklik<=255;parlaklik+=5)
  {analogWrite(led,parlaklik);
  delay(100);
  }
  for(parlaklik=255;parlaklik>=0;parlaklik-=5)
  {
    analogWrite(led,parlaklik);
    delay(100);
  }
}
}


  • 9. pinimizi çıkış olarak ayarladık
  • Parlaklık ismiyle integer bir değer okuttuk.Bu değerimiz analog çıkış almamızı sağlayacak.
  • 8 bitlik dijital değeri analog değere çevirmiş olduk 2^8=256 formülünden analog çıkışımız 0-255 arasında değişecek.
  • Biz bu değeri 5'er 5'er 255'e kadar arttırdık ve sonra da 255'ten 5'er 5'er azalttık.
  • Böylece analog olarak ledimizin parlaklığını arttırmış ve azaltmış olduk.




17 Temmuz 2013 Çarşamba

Arduino - Dijital Çıkışlara Hükmetmek (Led Yakma)

Elektronik dünyasına giriş için bir mikroişlemci seçmemiz gerektiğinden bahsetmiştim . Tercihimi Arduino UNO'dan yana kullandım. Elimde PIC programlayıcım var fakat hazır bir launchpadi olan Arduino ile bu dünyaya giriş yapmak bana daha cazip geldi. 

Ardunio, kodların yazıldığı sayfaya sketch adını veriyor yani karalama.Setup() ve Loop() bölümeri bu karalamalarda mutlaka olmak zorunda.

void setup ()
          { ilk değerler ve ilk başta bir kere çalışacak kodlar 
      }
         void loop() 
      {
// devamlı tekrarlanarak sırasıyla çalışacak  kodları burada yazıyoruz     } 

Bu yazımda Arduino'nun çıkışlarına led bağlayarak, bir kaç örnekle çıkışlara hükmedeceğiz.Yazımda yapacağımız uygulamalardaki malzemeler ise şunlar:

- 4 adet Led (Farklı renklerde olursa güzel olur.)
- Jumper Kablolar
- Direnç (İsteğe bağlı ben şahsen kullanmadım.)


Öncelikle her mikroişlemciye girişte olduğu gibi klasik bir giriş ile yani led flaşör ile giriş yapalım.

Launchpad 10.pinini çıkış olarak aldım ve oraya bir led bağladım. Dileyen ledin önüne direnç de koyabilir.

İsteğimiz şu olacak, led 1 saniye yanacak ve 1 saniye sönecek. Kodlar ve şeması;


void setup() {                
  // Pinler Çıkış olarak belirleniyor
  pinMode(10, OUTPUT);       // MAVI LED
}
void loop() {
  digitalWrite(10, HIGH);    // LED yanik
  delay(500);                // 500mS bekle 
  digitalWrite(10, LOW);     // LED sonuk
  delay(500);                // 500ms bekle

}







Biraz daha görsel tabiri caizse cix birşey yapalım :) . 4 adet ledi yanyana sırayla yakalım ve 4'ü aynı anda yanmadan hiçbiri sönmesin. Kodlar ve Şema :

int led1=7;
int led2=8;
int led3=9;
int led4=10;

void setup() 
{
  pinMode(led1, OUTPUT); //7.pin led1
  pinMode(led2,OUTPUT);  //8.pin led2
  pinMode(led3,OUTPUT);  //9.pin led3
  pinMode(led4,OUTPUT); //10.pin led4
}
int i;
void loop() {

 for(i=0;i<=1;i++) 
 {
   digitalWrite(led1,HIGH); //1.ledi yak
   delay(250);              // 0.25 saniye bekle
   digitalWrite(led2,HIGH); //2.ledi de yak
   delay(250);              // 0.25 saniye bekle
   digitalWrite(led3,HIGH); // 3.ledi de yak
   delay(250);              // 0.25 saniye bekle  
   digitalWrite(led4,HIGH); // 4.ledi de yak
   
 }
for(i=0;i<=1;i++) 
 {
   digitalWrite(led1,LOW); //1.ledi söndür
   delay(250);             //0.25 saniye bekle
   digitalWrite(led2,LOW); //2.ledi de söndür
   delay(250);             //0.25 saniye bekle
   digitalWrite(led3,LOW); //3.ledi de söndür
   delay(250);             //0.25 saniye bekle
   digitalWrite(led4,LOW); //4.ledi de söndür
   

}}

Videosunu şu linkten izleyebilirsiniz. 





Arduino ile güzel bir giriş yaptığımızı düşünüyorum ve umuyorum ki bu konuda daha hızlı ilerleyeceğiz.