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.
Arayüzün kodları şu şekilde olacaktır.
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 yorumsize nasıl ulaşabilirim
ReplyHocam merhaba bu programı yaptım ancak PWM değeri en fazla 10 oluyor nedeni nedir acaba şimdiden teşekkür ederim.
ReplyConversionConversion EmoticonEmoticon