Alışverişlerinizi Robotistan’dan Yapın

Faydalı içerikler oluşturarak size yardımcı olmak istiyoruz. Aynı zamanda hızlı teslimat ve müşteri memnuniyetini ön planda tutarak malzeme satışı yapıyoruz. Alışverişlerini robotistan.com‘dan yaparak sen de bize yardımcı olabilirsin 🙂

Arduino ve C# Haberleşmesi: Bluetooth ile Servo Motor Kontrolü – 6. Ders

Arkadaşlar merhaba, bu derste hazırladığımız arayüz üzerinden seri haberleşmeyi kullanarak servo motor kontrolünü göreceğiz. Ancak diğer yazılardan farklı olarak bu işlemi Bluetooth UART modülü kullanarak kablosuz gerçekleştireceğiz.

Kablosuz Servo Motor Kontrolü

Bu çalışmada önceki derslerde yaptıklarımızdan çok da farklı bir şey yapmayacağız. Bu dersi diğer derslerden ayıracak olan şey seri iletişimi Bluetooth yolu ile sağlayacak olmamız. Bu sayede kurduğumuz devreyi bilgisayar üzerinden kablosuz bir şekilde kontrol edebileceğiz. Bunun için bilgisayarınızın Bluetooth desteğini sağlaması gerektiğini de hatırlatmadan geçmeyelim.

Kuracağımız devrede Bluetooth modülü olarak HC-05‘i kullanacağız. Modül hakkında teknik detaylara önceki yazılarımızda değinmiştik. Modülün ayarlarında değişiklik için modülü AT konfigürasyon modunda çalıştırmayı ve modülün AT komut yönergelerini öğrenmek için konu ile ilgili detaylı yazımıza aşağıdaki linke tıklayarak ulaşabilirsiniz. Buradan HC-05 ile ilgili teknik bilgiye de erişebilirsiniz.
>HC05 ve HC06 Bluetooth Seri Modülleri Kullanımı

Gerekli Malzemeler:

Bağlantı Şeması:

Bağlantı Şeması

Arduino Kodu

İletişimi sağlamak için yazılımsal haberleşmeden faydalanacağız, yani SoftwareSerial kütüphanesini kullanacağız. Donanımsal haberleşme için Arduino üzerindeki RX ve TX yani 0. ve 1. pinler de kullanılabilir. Ancak bu pinler aynı zamanda Arduino’nun bilgisayar ile USB üzerinden haberleşmesini sağlayan pinlerdir. Bu sebeple bilgisayar ile haberleşme sırasında bu pinler kullanılamaz.

Kod içinde kullandığımız SoftwareSerial ve Servo kütüphaneleri Arduino IDE kurulumuyla beraber yüklenen kütüphanelerdir. Bu yüzden dışarıdan kütüphane dahil etmemize gerek yok.

/* **** maker.robotistan.com **** */

 #include <Servo.h>
 #include <SoftwareSerial.h>

 SoftwareSerial bt(8, 7); //RX, TX
 Servo servo;

 int data = 0;
 int value;

 void setup()
 {
   bt.begin(9600); //Seri iletişimi başlat
   servo.attach(9);  //Servo pin ayarlaması
 }
 void loop()
 {
   if (bt.available() > 0) //Veri gelip gelmediğini kontrol et
   {
     data = bt.parseInt(); //Gelen veriyi data değişkenine eşitle
     if (data > 0)
     {
       value = data;       //value değişkenini data değişkenine eşitle
     }
     servo.write(value);   //Servo kontrolü
   }
   delay(20);
 }

C# Arayüz Tasarımı

Projenin arayüz tarafında önceki 5 dersten farklı bir araç kullanmayacağız. Neredeyse her çalışmada kullandığımız araçlardan faydalanacağız.

C# Arayüz Tasarımı

Arayüz genel itibariyle açı değerini ayarlayabileceğimiz bir trackBar ve belli açı değerlerini gönderebileceğimiz 4 butondan oluşuyor. Bunun dışında açı değerini ve bağlantı durumunu takip edebileceğimiz iki label bulunuyor.

C# Proje Kodu

Kod kısmında da diğer projelerde sıklıkla yaptığımız işlemleri yapacağız. Göndereceğimiz açı değerini tutacağımız bir değişken oluşturarak işe başlıyoruz.

int position;

Motor pozisyonu bilgisini port üzerinden gönderme ve güncel açı değerini label üstünde güncelleme işlemlerini kod içinde sıkça yapacağımız için her seferinde yazmak yerine bu işlemleri yerine getirebilecek bir fonksiyon oluşturduk.

private void write_angle(int value)
     {
         try
         {
             if (SerialPort.IsOpen) 
             {
                 SerialPort.WriteLine(value.ToString());         //Değeri port üzerinden gönder
                 label2.Text = "Açı: " + value.ToString() + "°"; //Güncel değeri label2'ye yaz
             }
         }
     catch (Exception ex2)     
         {        
                 MessageBox.Show(ex2.Message, "Hata");      //Hata mesajı    
         } 
    }

Bu fonksiyonu trackBar ile oynadığımızda ve butonları kullandığımızda çağıracağız. Bağlantıyı sağlama ve kesme işlemlerini tek bir buton üzerinden yapacağız. Bu kısım önceki derslerde sıklıkla yaptığımız işlemlerden oluştuğu için ayrıntıya girmiyorum.

Bağlantı Butonu “click” olayı

Projede kullandığımız kodu aşağıda bulabilirsiniz.

using System;
using System.Windows.Forms;
using System.IO.Ports;   

namespace arduino_servo_motor_kontrol
 {
    public partial class Form1 : Form
    {
         int position;
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        string[] ports = SerialPort.GetPortNames();  //Seri portları diziye ekleme
        foreach (string port in ports)
            comboBox1.Items.Add(port);

        //TrackBar ayarları
        trackBar1.Minimum = 1;    
        trackBar1.Maximum = 180;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            if (!SerialPort.IsOpen)
            {
                /* Seri Port Ayarları */
                SerialPort.PortName = comboBox1.Text; 
                SerialPort.BaudRate = 9600;           
                SerialPort.Parity = Parity.None;            
                SerialPort.DataBits = 8;
                SerialPort.StopBits = StopBits.One;
                SerialPort.Open();                    //Seri portu aç
                label3.Text = "Bağlantı Sağlandı.";   
                label3.ForeColor = System.Drawing.Color.Green;
                button1.Text = "KES";                 //Buton1 yazısını değiştir
            }
            else
            {
                label3.Text = "Bağlantı Kesildi.";
                label3.ForeColor = System.Drawing.Color.Red;
                button1.Text = "BAĞLAN";              //Buton1 yazısını değiştir
                SerialPort.Close();                   //Seri portu kapa

            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Hata");      //Hata mesajı
        }
    }

    private void trackBar1_Scroll(object sender, EventArgs e)
    {
            position = trackBar1.Value;
            write_angle(position);          
    }

    private void degree1_Click(object sender, EventArgs e) //30 derece
    {
        position = 30;
        write_angle(position);
    }

    private void degree2_Click(object sender, EventArgs e) //90 derece
    {
        position = 90;
        write_angle(position);
    }

    private void degree3_Click(object sender, EventArgs e) //120 derece
    {
        position = 120;    
        write_angle(position);
    }

    private void degree4_Click(object sender, EventArgs e) //180 derece
    {
        position = 180;      
        write_angle(position);
    }

    private void write_angle(int value)
    {
        try
        {
            if (SerialPort.IsOpen) 
            {
                SerialPort.WriteLine(value.ToString());         //Değeri port üzerinden gönder
                label2.Text = "Açı: " + value.ToString() + "°"; //Güncel değeri label2'ye yaz
            }
        }

        catch (Exception ex2)
        {
            MessageBox.Show(ex2.Message, "Hata");      //Hata mesajı
        }

    }

    private void Form1_FormClosed(object sender, FormClosedEventArgs e)
    {
        if (SerialPort.IsOpen) SerialPort.Close();    //Seri port açıksa kapat
    }
}
}

Seri İletişimi Bluetooth ile Sağlamak

Devremizi Bluetooth üzerinden çalıştırmak için öncelikle bilgisayar ile modülü ilişkilendirmemiz gerekiyor. Bağlantıyı sağlamak için şifre gerekecektir. HC-05 modülünün şifresi varsayılan ayarlarda “1234”tür. Dolayısıyla modül ayarlarında bir değişiklik yapmadıysanız bu şifreyi girerek modüle erişebilirsiniz.

Bluetooth Ekleme

Bağlantıyı sağladıktan sonra kodunuzu çalıştırdığınızda arayüz üzerinde portların listelendiği comboBox’ta eski projelerden farklı olarak birden fazla port ile karşılaşacaksınız.

Seri Portlar

Bunun sebebi bağlantı noktaları arasına Bluetooth modülünün de dahil olmasıdır. Bu kısımda modülün hangi porta bağlı olduğunu bilgisayarınızdaki “Aygıt Yönetici“sinden görüntüleyebilirsiniz.

Aygıt Yöneticisi

Doğru port seçimini yaptıktan ve bağlantıyı sağladıktan sonra devreyi uzaktan kontrol edebiliriz. Bu derste önceki çalışmalardan farklı olarak devremizi uzaktan kontrol etmiş olduk. Kendi çalışmalarınızı da arayüz ile Bluetooth modülü kullanarak uzaktan haberleştirebilirsiniz.

Servo Motor Kontrol Arayüzü

Dersin sonuna gelmiş olduk. Fikirlerinizi ve sorularınızı yorumlarda belirtmekten çekinmeyin. Başka bir derste görüşünceye dek, hoşça kalın. 🙂

Yorumları Görüntüle

  • hocam merhaba, monster motor shield surucusunu bluetooth ile kontrol etmek istiyorum ama bir türlü içinden çıkamadım bu konuda yardım edebilirseniz çok memnun olurum.

En Son İçerik

Kodris Studio Nedir? Kodlama İçin Neden Tercih Etmelisin?

Herkese merhabalar! Henüz nasıl kodlama öğreneceğinize karar vermediniz mi? Eğer ilköğretim ve lise düzeyinde öğrenciyseniz ve kodlam öğrenmeye giriş yapmak…

2 gün Önce

Arduino’nun Korkulu Rüyası: ESP8266

Herkese merhabalar! Daha önce hiç kablosuz internet bağlantısı ile proje yaptınız mı? IoT projelerine ilginiz var mı? Sizi bu yazımızda…

1 hafta Önce

Arduino ve C# ile LCD Ekrana Yazı Gönderme – 7. Ders

Sonraki Ders > < Önceki Ders Arkadaşlar merhaba, bu dersimizde C# ile hazırlayacağımız form uygulaması üzerinden Arduino'ya bağlı LCD ekranımızı…

4 hafta Önce

3D Printer Yapımı – 553TL’ye Kendi 3D Yazıcını Yap

Herkese merhabalar! Bu yazımızda üç boyutlu yapımı için hangi adımları uygulamak gerekiyor, 3D yazıcı yapımı için gerekli olan malzemelerden ve…

1 ay Önce

Arduino ile Nabız Ölçer

Herkese merhabalar, bu yazımızda medikal sensörlerden biri olan Pulse nabız sensörünü kullanarak nabız verisini okumayı ve elde ettiğimiz sonucu Nokia…

3 ay Önce

Lipo Pil Nedir? Çeşitleri ile Kapsamlı Lipo Batarya Rehberi

Birçok RC araçta ve robot projelerinde kullanılan Li-Po batarya çeşitlerini, güvenli kullanım ve şarj yöntemlerini bu videomuzu izleyerek öğrenebilirsiniz.

3 ay Önce