24 Mayıs 2014 Cumartesi

Arduino ile Analog Okuma

Sıra geldi 2. dersimize..

Bu derste Arduino kartımızın Analog girişlerinden 0. pini kullanarak potansiyometremizin orta ucundaki gerilim değerini okuyacağız ve aynı zamanda Serial Monitör'ü kullanmaya başlayacağız.

Potansiyometremizi orta ucunu yukarıda belirttiğimiz gibi A0'a, diğer uçlarını ise GND ve  +5V 'a bağlayacağız.

Kodumuz aşağıdaki gibi olmalı. Ancak burada önemli bir nokta var. UNO ya da Mega gibi kartlara sahip arkadaşlar kodu rahatlıkla çalıştırabilirken maalesef Leonardo da kod çalışmıyor. Burada yapılması geken arduinonu resmi sitesinde belirtildiği üzere Serial.begin(9600); satırından sonra while (!Serial); yazmak. Burası önemli dostlar...

Gelelim kodu incelemeye..

Setup içerisinde kartı seri haberleşmeyi başlatıyoruz. Peki seri haberleşme nedir? Hadi bunu biraz irdeleyelim.

Dijital haberleşmede temel olarak iki yöntem bulunuyor: seri ve paralel.
- Seri haberleşmede dijital veriler(bitler) tek bir hat üzerinden peşi sıra gönderilirken paralel haberleşmede ise belli gruplar halinde eş zamanlı olarak iletilirler. - Daha az veri hattı gerektiğinden seri haberleşme daha çok kullanılır.
Arduino ile PC arasındaki haberleşme bu birim üzerinden gerçekleşir.
- USB standartına sahiptir. - Arduino üzerinde bir adet seri-USB dönüştürücü çip bulunmaktadır.
- Neredeyse tüm mikrodenetleyicilerde seri haberleşme ünitesi bulunur.
- Arduino üzerindeki seri haberleşme ünitesi UART (Universal asynchronous receiver / transmitter)
- Kullanılan Arduino modeline göre farklı adette bulunabilir.
- Seri haberleşme için gönderme-TX ve alma-RX olmak üzere iki pin kullanılıyor.
- Programlama esnasında Arduino ile PC arasındaki iletişim bu pinler üzerinden sağlanır.

SERİ HABERLEŞME FONKSİYONLARI
 
Serial.begin()  ve Serial.end()

- Seri haberleşmeyi başlatır.
- 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 ve 115200 değerleri parametre olarak verilebilir.
- Bu değerlerin birimi bps(bit per second)’dir.
- Her bir byte için 10 bit gönderildiğinden byte miktarı değerin 10’a bölünmesiyle bulunur. (9600 bps hızında saniyede 960 karakter yollanabilir.)
  

!!! Seri iletişim başladıktan sonra 0 ve 1 nolu pinler sırasıyla veri alma ve veri gönderme işlemleri için kullanıldıklarından dijital giriş-çıkış işlemleri için kullanılamazlar.

- Bu pinlerin tekrar giriş-çıkış olarak kullanılabilmeleri için Serial.end() fonksiyonu programa dahil edilmelidir

Serial.print() ve Serial.println()  

- Arduino’dan karakter içeren verileri göndermek için kullanıyoruz.
-Karakterin yanı sıra verileri 16’lı(hexadecimal), 8’li (octal), veya 2’li (binary) tabanda yazdırabiliriz.


Serial.println(100);   // 100 olarak yazdırır.
Serial.println(1.23);   // 1.23 olarak yazdırır.
Serial.println(1.2345678);   // 1.23 olarak yazdırır.
Serial.println(1.2345678, 0);   // 1 olarak yazdırır.
Serial.println(1.2345678, 4);   // 1.2345 olarak yazdırır.
Serial.println(1.2345678, 0);   // 1 olarak yazdırır. 

Serial.println("BILTEK");   // BILTEK olarak yazdırır.
Serial.println(86, BIN);   // 1010110 olarak yazdırır.
Serial.println(86, OCT);   // 126 olarak yazdırır.
Serial.println(86, HEX);   // 56 olarak yazdırır. 



Serial.read()

- Seri birimden gelen veriler bytelar halinde alındıktan sonra tampon bellek bölgesine ayrılır.
- Programımızda gelen verileri kullanmak istediğimizde Serial.read() fonksiyonunu kullanarak okuruz.
- Okuma sırası geliş sırasına göredir.
- Eğer seri port tamponu boş ise fonksiyon -1 değerini döndürür.



Serial.available()

- Seri porta gelmiş ve henüz okunmamış verilerin sayısını döndürür.
- Sıfır döndürüse seriport boş demektir.


Buraya kadar seri haberleşme ile ilgili fonksiyonları tanımış olduk. Bu bilgileri Karabük Üniversitesi Bilgi Teknolojileri ve Yazılım Kulübünden Arduino Eğitimleri ni veren Volkan KANAT adlı arkadaşamızın hazırladığı bir slaytı kullanarak yazdım. Kendisini tanımıyorum ama kaynak göstermek lazım değil mi..Emeğe saygı. Neyse bizde bu işler pek böyle yürümüyor ama olsun...Etme bulma dünyası. Yarın belki bu yazdıklarımızı okuyanlar da bizi kaynak gösterirler.. Artık kodu inceleyebiliriz.

Loop içindeki ilk satır:

int sensorValue = analogRead(A0); Burada int tipnde sensorvalue adında bir değişken tanımlıyoruz ve A0 pinini okuyoruz.

Serial.println(sensorValue); Bu değeride Serial monitorde okuyoruz..Serial monitor nerede mi?? Onu da hemen gösterelim.

sağ üst köşedeki büyüteç simgesine tıklayın ve seraial monitor penceresi karşınızda..


ve son olarak delay(1); . Bu da okumalar arasında kararlığı sağlamak için...


Kalın sağlıcakla..
Saygılar sevgiler...

Hiç yorum yok :

Yorum Gönder

1- Yazıyı Facebook vb. gibi paylaş tuşları ile arkadaşlarınızla paylaşın.
2- Teşekkür etmekten ya da soru sormaktan çekinmeyin.
3- Sorularınızı olabildiğince hızlı cevaplamaya çalışacağım.
4- Cevap yazma süresi değişiklik gösterebilir.
5- Yorumlarınız lütfen küfür ve/veya argo içermesin.
6-Yorumunuz yorum denetiminden sonra yayınlanacaktır.