Ana sayfa > Arduino Dersleri > Arduino ile Seri Haberleşme

Arduino ile Seri Haberleşme

Perşembe, 21 Nis 2011 yorum ekle yorumlara git

Merhaba arkadaşlar bu dersimizde Arduino ile seri haberleşme kullanımını öğreneceğiz. Elimizde Arduino boardumuz varsa bir bilgisayar veya diğer cihazlar arasında iletişim kurabilir istediğimizi yaptırabilir veya veri aktarımı yapabiliriz. İlk uygulamamızda 13numaralı pine bağlı bir ledin yanıp sönmesini seri monitöre aktarımını sağlayalım ardından birkaç uygulama ile seri haberleşmeyi pekiştirelim…

1.Uygulama için gereken malzemeler:

1 Adet Arduino Duemilanove

1 Adet Bread Board

1 Adet Led

1 Adet 220 ohm veya 330 ohm direnç

1.Uygulamalara ait şematik ve çizimler:


1.Uygulamaya ait yazılım:

/*
 Blink-seri haberlesme
 Arduino ile led yakıp söndürme programı seri haberlesme...
 Bu yazılım açık kaynakdır.
 */

 void setup() {
 pinMode(13, OUTPUT);       // 13 numaralı pini çıkış pini yap.
 Serial.begin(9600);  //seri haberleşme başlatıldı
 }

 void loop() {
 digitalWrite(13, HIGH);   // Ledi yak
 Serial.println("Led yandi");  //led yandi bilgisini gönder
 delay(1000);              // 1sn bekle
 digitalWrite(13, LOW);    // Ledi söndür
 Serial.println("Led sondu"); //led söndü bilgisini gönder
 delay(1000);              // 1sn bekle
 }


Programımızı boardumuza attıktan sonra seri monitörü kullanmak için Arduino programının araç çubuklarında bulunan simgesine tıklamalıyız.

Serial Monitor açıldığında alttaki gibi görünecektir, ve bilgi gelmeye başlayacatır.

1. Uygulamaya ait görüntüler:

Daha önceki dersimizde kullanmış olduğumuz led yakma prgramını biraz geliştirip seri haberleşeye uyarladık şimdi programımızda önemli kısımları  adım adım inceleyelim.

void setup() {
pinMode(13, OUTPUT);       // 13 numaralı pini çıkış pini yap.
Serial.begin(9600);  //seri haberleşme başlatıldı
}

“Serial.begin(9600);” komutu ile birlikte seri haberleşme portunu açıp haberleşme hızını 9600 olacak şekilde seçtik.

void loop() {
digitalWrite(13, HIGH);   // Ledi yak
Serial.println(“Led yandi”);  //led yandi bilgisini gönder
delay(1000);              // 1sn bekle
digitalWrite(13, LOW);    // Ledi söndür
Serial.println(“Led sondu”); //led söndü bilgisini gönder
delay(1000);              // 1sn bekle
}

“Serial.println(“Led yandi”);” 13numaralı pine bağlı ledi yaktıktan hemen sonra led yandı ardın da  söndü bilgisini bilgisayara gönderme işlemlerini yapmış oluyoruz.  Altta arduinoda seri haberleşme ile ilgili kullanılan tanımlama ve işlem komutlarını verdim incelerseniz size faydası olucaktır.

* begin() = Seri haberleşmeyi başlat.
* end() = Seri haberleşmeyi kapat.
* available() = Seri haberleşmede gelen bayt sayısını okumak için kullanılır.
* read() = Seri haberleşmede gelen veriyi okumak için kullanılır.
* peek() = Seri haberleşmede ard arda gelen verilerin aktarılmasında kullanılır.(Arduino Mega)
* flush() = En son alınan veri veriyi tekrar okumak için kullanılır.(Arduino Mega)
* print() = Seri Haberleşmede veri almak için kullanılırbir çok türde veri aktarımı yapabilir. (Detaylar için arduino referansa bakınız lütfen.)
* println() = print’in yaptıklarının aynısı yapmakla beraber tek farkı her veriyi satır başından itibaren gösterir.
* write() = Seri haberleşmede boarda veri yazmak(aktarmak) için kullanılır.

Not: Seri haberleşme kullanırken şuna dikkat etmeliyiz seri haberleşme kullandığımız durumda Arduino boardun dijital giriş-çıkışlarından 0 ve 1 numuralı pinler giriş çıkış olarak kullanılamaz çünkü o pinler üzerinden seri haberleşme yapılacağı için o pinlere bağlantı yapılmamalıdır.

2.Uygulama için gereken malzemeler:

1 Adet Arduino Duemilanove

1 Adet Bread Board

1 Adet Led

1 Adet 220 ohm veya 330 ohm direnç

1 Adet 10K ohm ayarlı direnç(pot)

2.Uygulamalara ait şematik ve çizimler:


2.Uygulamaya ait yazılım:

/*
Seri haberlesme ve analog giris uygulamasi
 */
int led = 13; //13 numarali pin led olarak tanimlandi
int pot = A0; //Analog giris pini pot olarak tanimlandi
void setup() {
 pinMode(led, OUTPUT); //led cikis yapildi.
 Serial.begin(9600);  //seri iletisim baslatildi.
}

void loop() {
 //potu oku degerini analog_deger degiskenine at.
 int analog_deger = analogRead(pot);
 //potu ondalikli ve % cinsinden hesapla yuzde_oran degiskenine at.
 float yuzde_oran = analogRead(pot) * 100.0 / 1023;

 Serial.print("Ham = "); //ham basligi gonder
 Serial.print(analog_deger); //ham analog degeri gonder
 Serial.print("\t Pot  = %" ); //bosluk birakip pot basligi gonder
 Serial.print(yuzde_oran); //yuzdesi hesaplanmis degeri gonder.
 //eger analog deger %70i gectiyse ledi yak ve led yandi gonder.
 if (yuzde_oran > 70) digitalWrite (led, HIGH),
 Serial.println("\t Led Yandi ");
 //analog deger %70i gecmediyse ledi sondur ve led sondu gonder.
 else digitalWrite (led, LOW),
 Serial.println("\t Led Sondu ");
 delay(100);
}

Yukarıdaki uygulamamızda geçen dersimizde öğrendiğimiz analog giriş okumayı pekiştirmek amaçlı seri haberleşmeyle birlikte sunulmuştur, bu programda A0′a bağlı pot değişkeninin 10 bitlik ham değerini ve bu değerin % cinsinden hesaplanıp bilgisayara aktarım işlemini yapar ayrıca seri porttan aldığımız bilgileri kullanıp birde led yakıcaz. Şimdi programımızı inceliyelim;

/*
Seri haberlesme ve analog giris uygulamasi
*/
int led = 13; //13 numarali pin led olarak tanimlandi
int pot = A0; //Analog giris pini pot olarak tanimlandi
void setup() {
pinMode(led, OUTPUT); //led cikis yapildi.
Serial.begin(9600);  //seri iletisim baslatildi.
}

Tanımlamalar yapildi seri haberleşme başlatıldı.

void loop() {
//potu oku degerini analog_deger degiskenine at.
int analog_deger = analogRead(pot);
//potu ondalikli ve % cinsinden hesapla yuzde_oran degiskenine at.
float yuzde_oran = analogRead(pot) * 100.0 / 1023;

“int analog_deger = analogRead(pot);” Bu satırda Analog girişde okunan değeri analog_deger degişkenine attıyoruz. Alt satırda “float yuzde_oran = analogRead(pot) * 100.0 / 1023;” Okuduğumuz bu analog veriyi % cinsinden görmek istersek basit matematik işlemi yapmalıyız ilk önce “* 100.0″ ile çarpıp çıkan sonucu “/ 1023″ değeri ile bölmeliyiz, böylelikle okunan değer %51.10, %99,95 gibi net olucakdır.

Serial.print(“Ham = “); //ham basligi gonder
Serial.print(analog_deger); //ham analog degeri gonder
Serial.print(“\t Pot  = %” ); //bosluk birakip pot basligi gonder
Serial.print(yuzde_oran); //yuzdesi hesaplanmis degeri gonder.

“Serial.print(“Ham = “);” Ham başlığını gönderiyoruz. “Serial.print(analog_deger);” bu satırda Ham= başlığından itibaren analog girişten okunan 10bitlik bilgi gönderilicek.

“Serial.print(“\t Pot  = %” );” Pot başlığını gönderiyoruz  fakat burda “\t ” var buda iki veri yada başlık arası boşluk bırakmaya yaramaktadır. “Serial.print(yuzde_oran);” Potun % olarak hesaplanmış verisi gönderilmektedir.

if (yuzde_oran > 70) digitalWrite (led, HIGH),
Serial.println(“\t Led Yandi “);
//analog deger %70i gecmediyse ledi sondur ve led sondu gonder.
else digitalWrite (led, LOW),
Serial.println(“\t Led Sondu “);
delay(100);

“if (yuzde_oran > 70) digitalWrite (led, HIGH), Serial.println(“\t Led Yandi “);” bu satırda daha önceki derslerimizde kullandığımız if…else  karşılaştırma deyimini tekrar kullanıyoruz potdan okunan değer %70i geçerse ledi yak ve led yandi bilgisini gönder.

“else digitalWrite (led, LOW), Serial.println(“\t Led Sondu “);” Potdan okunan değer %70i geçmediyse led sondu bilgisini gönderip programımızı bitiyoruz. Bir dersimizin daha sonuna geldik başka dersimizde görüşmek üzere…

Not: Led yandi ve söndü bilgisini gönderirken son aldığımız veride println kullanmalıyız eğer yazmazsak veriler yan yana yazar biraz kafa karıştırıcı olabilir.

2. Uygulamaya ait görüntüler:

2. Uygulamaya ait kısa video:


Benzer Yazılar:


  1. şimdilik yorum yok.
  1. şimdilik geri bağlantı yok
Yorum yazarken dikkat etmeniz gereken hususlar;
1.Türkçe imla kurallarına dikkat etmeye özen gösteriniz.
2.Yorumlar onay gerektirdiğinden birden fazla kez aynı yorumu yazmayınız.
3.Yorumlarınızın konu ile alakalı olmasına özen gösteriniz.
4.Yorumlarınızın Reklam içerikli olmamasına özen gösteriniz.
5.Yorum yapmanız, onaylanacağı anlamına gelmemektedir. Buradaki hususlara dikkat etmeniz, onaylanma şansını artıracaktır.
+ -