Mert Sarac

Developer, Entrepreneur, Geek

Arduino ile C Sharp Haberleşmesi

Merhaba,

Yapacağımız bazı Arduino uygulamalarını bilgisayarımızla haberleştirmemiz gerekebiliyor. Bir WinForm uygulaması ile bunun nasıl yapılacağını anlatmak istedim.

Bunun için basit bir Arduino projesi oluşturup 12 ve 13.pinleri Output olarak belirledim ve seri portu dinlemeye başladım.

void setup() {
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  
  Serial.begin(9600);
}

Yaptığım projede Arduino üzerinde 13.pine yeşil, 12.pine kırmızı LED bağladım. Amacımsa seri porttaki değişiklikleri dinleyerek bunu yakıp söndürerek basit bir blink uygulaması oluşturmak. Bunun için seri portu dinleyerek bir dizi basit koşul oluşturdum.

void loop() {
  
  if(Serial.available())
  {
      int a = Serial.read();
    
      switch(a){
         case '0':
           digitalWrite(13, HIGH);
           digitalWrite(12, LOW);
           break;
         case '1':
           digitalWrite(13, LOW);
           digitalWrite(12, HIGH);
           break;
         default:
           digitalWrite(12, LOW);
           digitalWrite(13, LOW);
           break;
      }
  }
}

Uygulamanın C# tarafına gelecek olursak Visual Studio’da oluşturduğum WinForm projesine 1 Label, 2 Button, 1 ComboBox ve 1 SerialPort (System.IO.Ports.SerialPort) kontrolü ekliyorum. Ardından aşağıdaki metodu çağırarak oluşturduğum ComboBox’a aktif seri portları tanımlıyorum.

private void GetPortNames()
        {
            string[] ports = SerialPort.GetPortNames();

            foreach (string port in ports)
            {
                PortList.Items.Add(port);
            }
        }

Uygulama kapanırken seri portun açık kalmaması için formun FormClosing eventine aşağıdaki tanımlamayı yapıyorum.

if (serialPort.IsOpen)
            {
                serialPort.Write("2");
                serialPort.Close();
            }

Oluşturduğum ilk buton ComboBox’ta seçilen değere göre seri port bağlantısını açıyor. Bunun için aşağıdaki kodu kullanıyorum.

try
            {
                serialPort.PortName = PortList.SelectedItem.ToString();
                serialPort.BaudRate = 9600;
                serialPort.Open();
                LedStateText.Text = "Yanmıyor";
                ConnectButton.Enabled = false;
                ChangeButton.Enabled = true;
            }
            catch
            {
                LedStateText.Text = "Bağlantı hatası!";
            }

Uygulamada LEDState adında integer cinsi bir değişken oluşturuyorum ve buton kontrolümün Click eventinde aşağıdaki kodu kullanarak yanan LED’in değişmesini sağlıyorum.

if (!LEDState)
            {
                serialPort.Write("1");
                LedStateText.Text = "Meşgul";
                LEDState = true;
            }
            else
            {
                serialPort.Write("0");
                LedStateText.Text = "Müsait";
                LEDState = false;
            }

Bunun ardından uygulamamızı çalıştırabiliriz.

Uygulamanın örnek WinForm projesini buradan indirebilirsiniz.
Uygulamanın örnek Arduino kodlarını buradan indirebilirsiniz.


Arduino ile 9V DC Motor Kontrolü

Bir önceki yazımda Arduino platformuna giriş yapmış ve temel kavramları test etmek için bir sinyalizasyon simülasyonu geliştirmiştim. Bugünkü yazımda da bunu bir adım ileriye taşımak için Arduino ile DC motor kontrolüne geçiyorum.

Bildiğiniz gibi Arduino bize terminalleri üzerinden 5 volt geriliminde bir output verebiliyor. Ancak bazı devrelerde yönetmek istediğimiz devre elemanları için 5 volt bize yetersiz gelebilir. Arduino ile bu devre elemanlarını yönetebilmek için hazırladığım devreyi kurduğumuz taktirde transistörleri kaç volt gerilimle beslersek o gerilimde output alabileceğiz.

Arduino ile 9V DC Motor Kontrolü devresini buradan inceleyebilirsiniz.

PS: Devredeki 1 nolu transistörün PNP, 2 nolu transistörün NPN olduğunu gözden kaçırmamakta fayda var.

Faydalı olması dileğiyle.

Arduino’ya Giriş

Beni tanıyanlar biliyor ki elektroniğe her zaman ilgim oldu. Ama bugüne kadar işin hep yazılım tarafında oldum. Artık yazdığım kodların gerçek çıktılarını görmek istediğime karar verip Arduino’ya başlamaya hevesleneli neredeyse 1 yıl oldu. Artık daha fazla beklemek yerine başlamaya karar verdim ve bu yolda beraber ilerleyebilmek için edindiğim bilgi, deneyim ve tecrübeleri de blogumdan paylaşmak istedim.

Arduino nedir?

Arduino, etkileşimli fiziksel objeler geliştirebilmeniz amacıyla oluşturulmuş bir girdi – çıktı kartıdır. Ben ise onu küçük mucize olarak adlandırmayı daha çok seviyorum :)

Arduino, İtalya’daki bir tasarım enstitüsünde hocalık yapan bir grup tarafından tasarlanmış bir açık kaynak proje olarak doğdu. “Arduino” ismi İtalyanca olup “sıkı dost” gibi bir anlama gelmektedir. Proje açık kaynak olduğundan ve “Creative Commons” lisansı ile dağıtıldığından herkes projeyi özgürce kullanma ve değişiklik yapma hakkına sahiptir.

Arduino’nun şu anda farklı amaçlara hizmet eden onlarca board’u bulunuyor. Bunlardan bir kısmı İtalya’da Arduino ekibi tarafından üretilen board’lar, bir kısmı sertifikalı üreticiler tarafından üretilen, bir kısmı da Çin’de üretilip üzerine “Made in Italy” yazılan sahte ürünler :)

Ben çalışmalarımda Arduino Uno ve Intel Galileo kullanıyor olacağım.

Kaynaklar

Arduino ile geliştirme yapmaya başlamadan önce elektronik bilgimin zayıflığı beni oldukça korkutuyordu. Sonuçta yapacağım bir hata elimdeki kartın yanmasına sebep olabilirdi. Bu aşamada 123D Circuits ile karşılaştım. Arduino ile yapacaklarımızı simüle etme imkanı veren 123D Circuits ile yapacağımız şeyleri önce bu sanal ortamda denememiz elimizdeki kartın sağlığı açısından faydalı olacaktır :)

Temel yazılım bilgisine sahipseniz yazılım anlamında pek bir kaynağa ihtiyaç duyacağınızı zannetmiyorum. Arduino programlamada C / C++ / Java temelli bir dil kullanıyor. Barındırdığı kütüphaneler sayesinde de donanım seviyesine inmenize gerek kalmıyor.

Eğer benim gibi Meslek Lisesi çıkışlı birisiyseniz lisede aldığınız Temel Elektronik dersi burada çok işinize yarayacak. Ama meslek lisesine gitmediyseniz de üzülmeyin :) Meslek Lisesi öğrencilerinin ders kitapları olarak kullanılan MEGEP modülleri PDF formatında, herkese açık şekilde yayınlanıyor. 4 temel konudaki modülleri aşağıdaki bağlantılardan indirebilirsiniz.

Analog Devre Elemanları

Doğru Akım ve Alternatif Akım Devreleri

Temel Devre Uygulamaları

Temel Mantık Devreleri

Bu kaynakları kullanarak Devre kurma, Breadboard kullanımı, Temel komponentler, Temel analog ve Dijital elektronik konusunda bilgi sahibi olduktan sonra geliştirmelere başlayabiliriz.

Ben Arduino’ya “Hello World” dedirtmek için Kavşak Trafik Sinyalizasyonu Simülasyonu hazırladım. 123D Circuits üzerinden devreyi ve arkasında kullandığım kodları inceleyebilirsiniz.

 

İlk yazımda benden bu kadar :) Umarım hep birlikte faydalı şeyler öğrenebiliriz.