Arduino Seri Haberleşme

Arduino Seri Haberleşme | Ders 5: Karaşimşek Hız Ayarı

Robotik atölyesinin bu dersinde sizlere Arduino seri haberleşme konusunda bilgiler vereceğiz. Bir önceki dersimizdeki devrenin aslında bakarsanız aynısını kuracak, fakat bu kez farklı bir kod ile arduino içerisine bilgi göndermeyi deneyeceğiz. Hazırsanız başlayalım.

Bu derste sizlerle önceki dersimizde yaptığımız karaşimşek devresini kuracağız. Sonrasında bu sırasıyla yanıp sönen bu 8 led ışığın 5 farklı hızda yanıp sönmesi için gerekli kod satırlarını oluşturacağız. Yani kullanıcı klavyeden 1 ile 5 arasında bir değer girerek oluşturduğumuz karaşimşek devresindeki ledlerin ne kadar hızlı yanıp söneceğine karar verecek. Ancak öncelikle seri haberleşme nedir ne işe yarar ve nasıl kullanılır gibi sorulara cevap arayalım.

Arduino Seri Haberleşme ile Ledlerin Hızını Ayarla

Öncelikle bu uygulamada ihtiyacımız olan devre elemanlarını aşağıda listeyelim.

Gördüğünüz gibi aslında devre şeması ve devre elemanları “Arduino Karaşimşek Uygulaması | Ders 4: Yürüyen Işık” isimli yazımızdaki ile birebir aynısı. Buradaki yazımızda 74HC595′ in ve diğer devre elemanlarının çalışma mantıklarını vb. zaten anlatmaya çalıştık. Bu nedenle eğer devre çalışma mantığını merak ediyorsanız bu yazımızı mutlaka okuyup sonra bu uygulamaya geçmenizi öneriyoruz.

Devre şemamız da aşağıdaki fritzing görselinde gösterilmiştir. Devreyi kurduktan sonra aşağıdaki kod satırlarını arduino IDE programımıza yazıyor veya kopyalıyoruz.

Arduino Karaşimşek Uygulaması Devre Şeması
Resim 1 – Arduino Seri Haberleşme Uygulaması Devre Şeması

Arduino’ da Serial Nesnesi

Program kodlarımız aşağıdaki gibidir. Kod kısmında aslında önceki uygulamadan farklı bir bölüm var dikkat etmemiz gereken. Serial nesnesinin birçok fonksiyonunu bu örneğimizde kullanacağız. Peki nedir bu Serial nesnesi. Bahsettiğimiz seri haberleşmeye olanak sağlayan kütüphane gibi düşünebilirsiniz. Serial nesnesinin bu örneğimizde kullandığımız bazı türlerini inceleyelim.

  • Serial.begin() –> Seri port ile haberleşmeyi bağlatan komuttur.
  • Serial.print() ya da Serial.println() –> Seri port ekranına bir metin veya mesaj yazdırmak için kullanılır.
  • Serial.available() –> Seri porta bilgi girişi yapılıp yapılmadığını kontrol eder.
  • Serial.read() –> Seri port ekranının en üstündeki bilgi giriş bölümünden gönderilen veriyi alıp ve istenilen değişkene aktarabilirsiniz.

Aslında buna benzer çok daha fazla fonksiyonu bulunur serial nesnesinin. Ancak en çok kullanılanları bunlardır. Kod içerisini incelediğinizde aslında Serial.read() ile kullanıcının girdiği veriyi alıyor, sonrasında shift register entegresi için yazılan  updateShiftRegister(); isimli fonksiyonu kullanarak tüm ledleri sırasıyla yakıp söndürüyoruz. Kullanıcı 1-5 arasında bir rakam girerek aslında program içerisindeki delay() yani ledlerin yanma süresini dışarıdan değiştirebilir. Biz bunu sağlamak için if koşul yapısı kullandık, ve yeni bir veri girişi yapılana kadar while döngüsü sayesinde bu işlemi döngüye soktuk.

int latchPin = 5;
int clockPin = 6;
int dataPin = 4;
 
byte leds = 0;
 
void setup() 
{
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);  
  pinMode(clockPin, OUTPUT);
  updateShiftRegister();
   Serial.begin(9600);
  while (! Serial);                   // Bağlantı kurulmamışsa tekrar bağlantı kurmayı dener...
  Serial.println("Ledlerin Hızını Ayarlamak için 1-5 arasında bir rakam girin...");
  Serial.println("d tuşuna basarak ledleri söndürün...");
}
 
void loop() 
{
  
  if (Serial.available())
  {
    char hiz = Serial.read();
    Serial.println("Ledler yanmaya başladı...");
    if (hiz=='1')
    {
     
     while(!Serial.available()>0)   //Seri porta yeni bilgi girilene kadar ledler yanmaya devam etsin...
     {     
     leds = 0;
  updateShiftRegister();
  delay(500);
  for (int i = 0; i < 8; i++)
  {
    bitSet(leds, i);
    updateShiftRegister();
    delay(500);     
  }  
     }
    }

    else if (hiz=='2')
    {
      while(!Serial.available()>0){
     leds = 0;
  updateShiftRegister();
  delay(300);
  for (int i = 0; i < 8; i++)
  {
    bitSet(leds, i);
    updateShiftRegister();
    delay(300);
  }
      }
    }

   else if (hiz=='3')
    {
      while(!Serial.available()>0){
     leds = 0;
  updateShiftRegister();
  delay(200);
  for (int i = 0; i < 8; i++)
  {
    bitSet(leds, i);
    updateShiftRegister();
    delay(200);
  }
      }
    }

   else if (hiz=='4')
    {
      while(!Serial.available()>0){
     leds = 0;
  updateShiftRegister();
  delay(100);
  for (int i = 0; i < 8; i++)
  {
    bitSet(leds, i);
    updateShiftRegister();
    delay(100);
  }
      }
    }

  else if (hiz=='5')
    {
      while(!Serial.available()>0){
     leds = 0;
  updateShiftRegister();
  delay(50);
  for (int i = 0; i < 8; i++)
  {
    bitSet(leds, i);
    updateShiftRegister();
    delay(50);
  }
      }
    }
   else if (hiz == 'd')
    {
      leds = 0;
      updateShiftRegister();
      Serial.println("LED' le Söndürüldü.");
    }

    else {
      Serial.println("Geçerli bir değer girin...!");
      }

}
}
 
void updateShiftRegister()   //Shift Register Entegresini tetikliyoruz.
{ 
   digitalWrite(latchPin, LOW);
   shiftOut(dataPin, clockPin, LSBFIRST, leds);
   digitalWrite(latchPin, HIGH);
}

Seri Haberleşme Nedir? Arduino’ da Nasıl Kullanılır?

Bir öğretmen düşünün. Öğrencilere dönem ödevi konularını verecek. Öğrencileri sırasıyla çağırıyor ve her öğrenci sırası geldiğinde  ayağa kalkıp masanın üzerindeki ödev konusunu alıp tekrar yerine oturuyor. İşte dijital ortamdaki seri haberleşme de buna benzer. Veriler birbirinden bağımsız bir şekilde ve sırayla gönderilir. Arduino Uno bildiğiniz gibi bilgisayara bir USB kablo aracılığı ile bağlanır. İşte arduino kartımıza da bilgileri bu kablo aracılığı ile seri haberleşme yöntemi ile gönderirsiniz.

Seri port üzerinden bilgi alışı yapabildiğiniz gibi, arduino kartımıza bilgi gönderimi de sağlayabilirsiniz. Biz bu uygulamamızda arduinodan hem bilgi alışı yapacağız, hem de IDE program aracılığı ile bilgi gönderimi sağlayacağız. Bunu gerçekleştirmek için Resim 2′ deki gibi 1.Adımda gösterildiği gibi Sağ Üst köşedeki büyüteç işaretine tıklamanız yeterli. Karşımıza 2.Adımda gösterilen COM3 bağlantısı ile bağlanan arduino’ muzun seri haberleşme ekranı gelecektir. Ancak bu işlem için mutlaka arduino kartınızın bilgisayara bağlı olması gerekir. Aksi takdirde bu ekranı görüntüleyemezsiniz. Gördüğünüz gibi öncelikle bize Seri porttan mesajlar görüntülendi. Ardından bizler “Gönder” butonunun hemen yanındaki o büyük textbox’ a 1 değerini girip enter’ a yada gönder butonuna bastık. Ledlerimiz yanmaya başladı. Bu kez 5 değerini girdik ve ledlerimiz az öncekinden çok daha fazla hızla yanıp söndü. İsterseniz “d” tuşuna basarak tüm ledleri söndürme şansınız da var.

Arduino Seri Port Ekranını Görüntüleme
Resim 2 – Arduino Seri Port Ekranını Görüntüleme

Gördüğünüz gibi Arduino IDE programı içerisinde bulunan Seri port ekranı ve bu ekranın kullanımı yukarıdaki gibidir. Bununla ilgili sorularınız vb. varsa bize yorum bölümünden ulaşabilirsiniz. Projemizle ilgili video da aşağıda gösterilmiştir.

Yukarıdaki örneklerle birlikte sizlere Arduino Seri Haberleşme ‘yi kartımızı kullanarak 8 adet ledi  yakmak için hız ayarını seri port üzerinden yaptık. Sonraki yazılarımızda tekrar görüşmek üzere.

Not: Arduino Seri Haberleşme | Ders 5: Karaşimşek Hız Ayarı isimli makale içerisindeki anlatımlar özgün içeriktir. Alıntı yapmadan kullanılamaz.@kodlamaegitimi.org

No comments yet! You be the first to comment.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Yazılarımızı Takip Etmek için
Facebook Sayfamızı Beğenin
Bizlere destek olun