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

Creality 3D Yazıcı Modellerini İnceliyoruz – Hangi 3D Yazıcıyı Almalısın?

Merhabalar herkese, bu yazımızda son zamanların öne çıkan 3 boyutlu yazıcı markası olan Creality 3D yazıcıların öne çıkan özelliklerini, bu…

2 hafta Önce

Arduino, PIR Sensör ve RC522 RFID Modülü ile Güvenlik Sistemi

Herkese merhabalar, bu yazımızda Arduino, PIR sensör ve RC522 RFID Modülü kullanarak kendi kapı alarmımızı yapacağız. Yaptığımız alarm, bir butona…

2 ay Önce

Arduino ile L298N Motor Sürücü Kartı Kullanımı

Merhabalar. Arduino kullanarak yaptığımız robot projelerimizin vazgeçilmez parçalarından birisi motor sürücüler. Bu yazımda sizlere belki bu tip projelerde en popüler…

2 ay Önce

Arduino Radar Yapımı – Ultrasonik Sensör ile Radar Projesi Yapalım

Radar yapma fikri seni de heyecanlandırıyor mu? Biz yaptık. Sana da tavsiye ederiz ;) Arduino Radar Projesi Nasıl Yapılır? Radar…

4 ay Önce

Otto Robot Yapımı – Arduino Nano İle Şirin Robot Yapalım

Eğlenceli bir robot yapmaya ne dersin? Biz güzel olacağını düşündük ve OTTO robotu senin için yaptık. Otto Robot Parçaları Arduino…

4 ay Önce

ESP8266 Kart Ve DHT11 İle Oda Sıcaklık-Nem Ölçümü

Merhaba arkadaşlar , bu gün sizlerle DHT11 sıcaklık-nem sensör kullanarak odamızın sıcaklık ve nem oranının okumasını yapacağız. Projemizden sizlere kısaca…

5 ay Önce