C # ile Arduino Servo Motor Kontrolü

Merhaba arkadaşlar. Bu yazımızda C# da hazırlanacak bir arayüz ile Arduino'ya bağlanmış bir servo motorun kontrolünü yapacağız. Öncelikle Servo motorlar PWM voltajlarına göre çalışırlar. Yapmanız gereken servo motorunu uygun şekilde arduinoya bağlamak. Servo motorun 3 adet kablosu vardır bunlardan biri +5V diğeri GND ve son olarak data kablosu ki bu kabloyu arduino pwm pinlerine bağlamalıyız.

Servo motorun bağlantılarını yaptıktan sonra arduinoda basit bir şekilde bağlanan pine pwm voltajı uygulamak gerekir bununla ilgili bilgiyi Arduino PWM Kontrolü  yazımızdan edinebilirsiniz.

Yapacak olduğumuz bazı projelerde kullanacak olduğumuz bu servo motorların konumunu bilgisayar üzerinden bir arayüz yardımıyla yapmak çok kullanışlı olabilir. Bunun için C# da basit/temel bir arayüz oluşturup arduino haberleşmesini sağlayarak servo motorun kontrolünü sağlayabiliriz.

Aşağıdaki gibi bir arayüz oluşturalım. Arduinoya bağlanmak için bir buton, pwm değerlerini göndereceğimiz bir truckbar yada textbox içine açı değerini yazıp göndere de bilirsiniz.




Arduino bağlan butonu ile Arayüz arduino arasındaki haberleşme başlatılır. Truckbarın hareketli cursoru oynatılarak trackbar ın değeri serial üzerinden arduinoya pwm değeri olarak gönderilir. Truckbar ın minimum değeri 0 ve maksimum değeri 180 olmalıdır. Bunlar dereceye karşılık gelen değerlerdir. Burada dikkat edilmesi gereken durum truckbarın değerinin int olarak gönderilmesidir. Bunun için C# Integer Değer Gönderme  yazımızı inceleyebilirsiniz.

Arayüzün kodları şu şekilde olacaktır.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ArduinoPWM
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void connection_Click(object sender, EventArgs e)
        {
            serialPort1.PortName = "COM2"; // Arduinonun bağlı olduğu port
            serialPort1.Open();
            label3.Text = "Bağlandı"; // Butona basılınca serial bağlantı gerçekleşir.
        }  
        private void trackBar1_Scroll(object sender, EventArgs e)
        {
               // serial bağlantı gerçekleşmişse truckbarın değeri serialden integer olarak gönderilir
            if (serialPort1.IsOpen == true)
            {
                int PWM_deger = trackBar1.Value;
                label2.Text = trackBar1.Value.ToString();
                    // int değeri byte a dönüştürme işlemi.
                byte[] b = BitConverter.GetBytes(PWM_deger); 
                serialPort1.Write(b, 0, 4);
            }
            else // gerçekleşmemişse hata mesajı verir.
            {
                label3.Text= "Önce Cihaza Bağlan !!";
            }
        }
        private void Form1_Load(object sender, EventArgs e)
        {
        }
    }
}


Arduino tarafındaki kodlar ise şu şekildedir.

#include  < Servo.h >
Servo myservo;
int pos = 0; 
int k;
void setup() {
Serial.begin(9600);
myservo.attach(9);
}
void loop() 
{
  if(Serial.available() >0) 
    {
      pos = Serial.read();
      if(pos>0)
      {
        k=pos;
      }
    }
    
  myservo.write(k); 
}


Serialden gelen veri 9 nolu pine PWM değeri olarak yazılır. İyi Çalışmalar. Görüşme üzere....

2 yorum

Click here for yorum
Unknown
admin
Mart 05, 2015 ×

size nasıl ulaşabilirim

Reply
avatar
Unknown
admin
Mart 31, 2018 ×

Hocam merhaba bu programı yaptım ancak PWM değeri en fazla 10 oluyor nedeni nedir acaba şimdiden teşekkür ederim.

Reply
avatar