Arduino ve C# Bluetooth ile DC Motor Kontrolü
Arduino ve C# kullanarak Bluetooth ile DC Motor Kontrolü yaptığımız bu içeriğimiz ile, windows form oluşturmayı. L293 entegresi ile DC motor kontrolünü ve bluetooth bağlantını seri haberleşme portu gibi kullanmayı öğreneceksiniz.
Bu projede Arduinoyu HC-06 bluetooth modülü aracılığıyla bilgisayara bağlayarak DC motorun C# ile hazırlanmış windows form uygulaması ile döndürülmesini sağlayacağız. Eğer daha önce windows form ile bir proje yapmadıysanız öncelik buradaki yazımıza bakmanızı öneriyoruz.
HC-06 Bluetooth Modülü
HC-06 bluetooth modülü, kablosuz seri haberleşme için tasarlanmış modülüdür. 2.4 GHz frekans bandında haberleşme yapılmasına imkan sağlar. Açık alanda 10 metre menzile kadar etkinlik sağlamaktadır. Modül bluetooth 2.0’ı desteklemektedir. HC-05’ten farklı olarak bu modül sadece slave modunda çalışmaktadır. HC-05 modülü ise master/slave modunda çalışmaktadır.
HC-06 Bluetooth Modülü Özellikleri:
- Bluetooth Protokolü: Bluetooth 2.0+EDR(Gelişmiş Veri Hızı)
- 2.4GHz haberleşme frekansı
- Hassasiyet: ≤-80 dBm
- Çıkış Gücü: ≤+4 dBm
- Asenkron Hız: 2.1 MBps/160 KBps
- Senkron Hız: 1 MBps/1 MBps
- Güvenlik: Kimlik Doğrulama ve Şifreleme
- Çalışma Gerilimi: 1.8-3.6V(Önerilen 3.3V)
- Akım: 50 mA
Bağlantı Şeması
Devrede DC motoru kontrol etmek için L293 entegresini kullanıyoruz, eğer isterseniz L298N motor sürücü modülü kullanabilirsiniz. Bluetooth modülü olarak HC-06 kullanıyoruz. Kullandığınız HC-06 bluetooth modülü hangi voltaj ile çalıştığına dikkat etmelisiniz, çoğunlukla bu modül 3.3V seçeneği ile geliyor.
Yukarıdaki bağlantı şemasını yaptıktan sonra, bluetooth modülü çalışmaya başlayacaktır. Bluetooth modülün windows form’u ile kullanabilmek için öncelikle modülü bilgisayara bağlamalıyız. Bağlantı işlemi için, bilgisayarınız bluetooth ayarlarından, bluetooth aygıtı ekle kısmına gitmeniz gerekir.
Gelen sayfada HC-06 isimli cihaza tıklayıp eşleştirin, eğer eşleşme için parola sorarsa varsayılan olarak gelen “1234″ parolasını girebilirsiniz. Eşleştirme başarıyla yapıldıktan sonra, bluetooth modülünün bağlantı noktasını öğrenmemiz gerekir(COM Port). Bu işlem için Aygıt Yöneticisini(devmgmt.msc) kullanabilir ya da doğrudan bluetooth simgesine tıklayarak Ayarlar>COM Bağlantı Noktaları kısmına gidebilirsiniz. Burada bağlantının olduğu portu bir yere not edebilirsiniz, çünkü windows form ekranında bu port’a bağlantı kuracağız. Eğer COM Bağlantı Noktaları sekmesinde modülün portu gözükmüyor ise, ekle butonu ile, manuel olarak eklemeniz gerekir.
Projenin Kaynak Kodu:
Arduino Kodu
#include <SoftwareSerial.h>
SoftwareSerial bluetooth(1, 0);
int enable_pin=5;
int input1_pin=6;
int input2_pin=7;
int gelenVeri;
void setup() {
pinMode(enable_pin, OUTPUT);
pinMode(input1_pin, OUTPUT);
pinMode(input2_pin, OUTPUT);
bluetooth.begin(9600);
}
void loop() {
if(bluetooth.available()) {
gelenVeri=bluetooth.read();
if(gelenVeri>0){
if(gelenVeri==20) {
analogWrite(enable_pin, 0);
digitalWrite(input1_pin, LOW);
digitalWrite(input2_pin, LOW);
}
else if(gelenVeri>0 && gelenVeri<=10) {
gelenVeri=map(gelenVeri, 1, 10, 0, 255);
analogWrite(enable_pin, gelenVeri);
digitalWrite(input1_pin, HIGH);
digitalWrite(input2_pin, LOW);
}
else if(gelenVeri>20 && gelenVeri<=30) {
gelenVeri=map(gelenVeri, 21, 30, 0, 255);
analogWrite(enable_pin, gelenVeri);
digitalWrite(input1_pin, LOW);
digitalWrite(input2_pin, HIGH);
}
}
}
}
C# Form Uygulaması
Oluşturduğumuz bu program aslında seri port üzerinden Arduinoya kablo ile bağlanmaktan pek bir farkı yoktur.
Forma ekleyeceğimiz nesneler yukarıdaki görselde görülmektedir.
- comboBox x 1
- serialPort x 1
- groupBox x 2
- label x 1
- trackBar x 1
- button x 1
- radioButton x 2
ya da doğrudan windows form proje dosyasını indirebilirsiniz.
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;
using System.IO.Ports;
namespace bluetoothHaberlesmeIleDCMotorHizKontrolu
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
foreach (string portlar in SerialPort.GetPortNames())
{
comboBox1.Items.Add(portlar);
}
groupBox1.Enabled = false;
groupBox2.Enabled = false;
label2.Text = Convert.ToSingle(trackBar1.Value) + "%";
}
private void button1_Click(object sender, EventArgs e)
{
try
{
serialPort1.PortName = comboBox1.Text;
serialPort1.BaudRate = 9600;
serialPort1.Open();
}
catch (Exception)
{
}
if (serialPort1.IsOpen)
{
groupBox1.Enabled = true;
groupBox2.Enabled = true;
}
}
private void trackBar1_Scroll(object sender, EventArgs e)
{
int trackBarDeger = trackBar1.Value;
byte[] gidenVeri;
if (radioButton1.Checked == true)
{
gidenVeri = BitConverter.GetBytes(trackBarDeger);
serialPort1.Write(gidenVeri, 0, 4);
}
else if (radioButton2.Checked == true)
{
gidenVeri = BitConverter.GetBytes(trackBarDeger + 20);
serialPort1.Write(gidenVeri, 0, 4);
}
label2.Text = Convert.ToString(trackBar1.Value * 10) + "%";
}
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
int trackBarDeger = trackBar1.Value;
byte[] gidenVeri = BitConverter.GetBytes(trackBarDeger);
serialPort1.Write(gidenVeri, 0, 4);
}
private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
int trackBarDeger = trackBar1.Value;
byte[] gidenVeri = BitConverter.GetBytes(trackBarDeger + 20);
serialPort1.Write(gidenVeri, 0, 4);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (serialPort1.IsOpen)
{
byte[] gidenVeri = BitConverter.GetBytes(20);
serialPort1.Write(gidenVeri, 0, 4);
serialPort1.Close();
}
}
}
}
Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.