Arduino
OKUDUĞUNUZ KONU
Visual Basic İle Arduino Rc Araba Kontrol Arayüz Yapımı
5

Visual Basic İle Arduino Rc Araba Kontrol Arayüz Yapımı

Yazar : Sezgin Gül2 Temmuz 2015

Bu projemizde visual basic de arayüz programı yaparak oyuncak arabamızı yöneteceğiz.Öncelikle rc arabamızın yapım aşamalarından bahsedelim.

Malzemeler:

  1. Oyuncak rc araba
  2. Arduino
  3. L293b motor sürücü
  4. 433mhz rf modul
  5. Pil

Rc araba alırken ister sıfır ürün alın ister defolu ürün alın farketmez.Bize şase ve motorları lazım olacak.Defolu ürün almanız daha iyi genelde çok ucuz satılıyorlar.

Arayüz tasarımı için gerekli araçlar:

  1. 13 Adet buton
  2. 2 Adet combobox
  3. 1 Adet texbox
  4. 1 Adet groupbox
  5. 3 Adet label
  6. 1 Adet picturebox
  7. 1 Adet serial port

Araçları aşağıdaki şekildeki gibi yerleştiriyoruz.

Arayüz Yazılımı:

Formumuzun boş kısmına çift tıklıyoruz ve ekrandaki bütün kodları siliyoruz.Ve aşağıdaki adımları takip ediyoruz.

  • 1.Adım: Aşağıdaki kütüphaneleri ekliyoruz
Imports System.IO
Imports System
Imports System.ComponentModel
Imports System.Threading
Imports System.IO.Ports
  • 2.Adım: Formuzu ekliyoruz.
Public Class Form1

End Class
  • Bundan sonraki yazacağımız kodları public class form1 ‘in içine yazıyoruz.
  • 3.Adım: Serail portumuz için myport adında tanımlama yapıyoruz.
Dim myPort As Array
Delegate Sub SetTextCallback(ByVal  As String)
Shared _continue As Boolean
Shared _serialPort As SerialPort
  • 4.Adım: Butonlarımızı klavyeden kontrol etmek için formumuzun özellikler bölümündeki keydown true yapın.

Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
If (e.KeyCode = Keys.A) Then
Button1.PerformClick()
Button1.BackColor = Color.Red
TextBox1.Text = "SOLA GİDİYOR"

Else
Button1.BackColor = Color.Yellow
End If
If (e.KeyCode = Keys.D) Then
Button3.PerformClick()
Button3.BackColor = Color.Red
TextBox1.Text = "SAĞA GİDİYOR"
Else
Button3.BackColor = Color.Yellow
End If
If (e.KeyCode = Keys.W) Then
Button2.PerformClick()
Button2.BackColor = Color.Red
TextBox1.Text = "İLERİ GİDİYOR"
Else
Button2.BackColor = Color.Yellow
End If
If (e.KeyCode = Keys.S) Then
Button4.PerformClick()
Button4.BackColor = Color.Red
TextBox1.Text = "GERİ GİDİYOR"
Else
Button4.BackColor = Color.Yellow
End If
If (e.KeyCode = Keys.F) Then
Button5.PerformClick()
Button5.BackColor = Color.Green
Button6.BackColor = Color.White
End If
If (e.KeyCode = Keys.G) Then
Button6.PerformClick()
Button6.BackColor = Color.Red
Button5.BackColor = Color.White
End If
If (e.KeyCode = Keys.Q) Then
Button7.PerformClick()
Button7.BackColor = Color.Red
TextBox1.Text = "SOLA İLERİ GİDİYOR"
Else
Button7.BackColor = Color.Teal
End If
If (e.KeyCode = Keys.E) Then
Button8.PerformClick()
Button8.BackColor = Color.Red
TextBox1.Text = "SAĞA İLERİ GİDİYOR"
Else
Button8.BackColor = Color.Teal
End If
If (e.KeyCode = Keys.X) Then
Button9.PerformClick()
Button9.BackColor = Color.Red
TextBox1.Text = "SOLA GERİ GİDİYOR"
Else
Button9.BackColor = Color.Teal
End If
If (e.KeyCode = Keys.Z) Then
Button10.PerformClick()
Button10.BackColor = Color.Red
TextBox1.Text = "SOLA GERİ GİDİYOR"
Else
Button10.BackColor = Color.Teal
End If
If (e.KeyCode = Keys.Space) Then
Button11.PerformClick()
Button11.BackColor = Color.Red
TextBox1.Text = "DURUYOR"
Else
Button11.BackColor = Color.Red
End If

End Sub
  • 5.Adım: Yön butonumuzun birine çift tıklıyoruz ve açılan bölüme aşağıdaki kodu yazıyoruz.Burada butona basıldığında serial porttan veri gönderecek.Aynı şekilde diğer yön butonlarına da uyguluyoruz.Fakat göndereceğiniz veriyi değiştirmeniz gerekecek.
SerialPort1.Write("2")
  • 6.Adım: Formumuzdan load bölümüne tıklıyoruz ve aşağıdaki kodu yazıyoruz.Burada porta bağlanma ve baundrate tanımlamaları yapıyoruz.
</pre>
myPort = IO.Ports.SerialPort.GetPortNames()
ComboBox2.Items.Add(9600)
ComboBox2.Items.Add(19200)
ComboBox2.Items.Add(38400)
ComboBox2.Items.Add(57600)
ComboBox2.Items.Add(115200)
For i = 0 To UBound(myPort)
ComboBox1.Items.Add(myPort(i))
Next
ComboBox1.Text = ComboBox1.Items.Item(0)
ComboBox2.Text = ComboBox2.Items.Item(0)
Button12.Enabled = False
<pre>
  • 7.Adım: Porta Bağlan butonuna çift tıklayarak aşağıdaki kodu yazalım.Bu butonun görevi seçtiğimiz port ve baundrate değerinde robotumuza bağlanmamız sağlanacaktır.
 SerialPort1.PortName = ComboBox1.Text
SerialPort1.BaudRate = ComboBox2.Text
SerialPort1.Parity = IO.Ports.Parity.None
SerialPort1.StopBits = IO.Ports.StopBits.One
SerialPort1.DataBits = 8
SerialPort1.Open()
Button13.Enabled = False
Button12.Enabled = True
  • 8.Adım: Bağlantıyı kes butonuna çift tıklayarak aşağıdaki kodu yazalım.Bu butonun görevi serial portu kapatarak bağlantıyı kesecektir.
 SerialPort1.Close()
Button13.Enabled = True
Button12.Enabled = False
  • 9.Adım:  Combobox1 ‘e çift tıklayarak aşağıdaki kodu yazalım.Burada serial portmuzu seçmemizi sağlayacaktır.
If SerialPort1.IsOpen = False Then
SerialPort1.PortName = ComboBox1.Text
Else
MsgBox("BAĞLANTIYI, KAPALIYKEN DEĞİŞTİRİNİZ", vbCritical)
End If
  • 10.Adım: Combobox2’ye çift tıklayarak aşağidaki kodu yazalım.Aynı şekilde bu kodda baundrate değerini seçmemizi sağlayacaktır.
If SerialPort1.IsOpen = False Then
SerialPort1.BaudRate = ComboBox2.Text
Else
MsgBox("BAĞLANTIYI, KAPALIYKEN DEĞİŞTİRİNİZ", vbCritical)
End If

Visual basic arayüzümüzü tamamladık .

Elektronik malzeme listesi:

  1. 2  Adet arduino modeli farketmez
  2. 433mhz rf alıcı verici modul
  3. L293b motor sürücü
  4. 6v Pil robot için

Öncelikle arabamızın içindeki devre kartını çıkartıyoruz.Sadece motorlar lazım olacak.

Arduino Yazılımı:

Verici modül kodu:

Bizim kullandığımız rf modülün arduino  VirtualWire kütüphanesini indirelim.Arduino library klasörünün içine atıyoruz.

  • 1.Adım: Arduino include library bölümünden VirtualWire kütüphanesini ekliyoruz.
#include <VirtualWire.h>
  • 2.Adım: Void Setup kısmına aşağıdaki kodu yazıyoruz.Burada verici modülümüzün baudrate değerini, serial iletişim değerini ve modülumuzun sinyal pinini ekliyoruz.
 Serial.begin(9600);
vw_setup(2400);
vw_set_tx_pin(7);
  • 3.Adım: Bundan sonraki kodları void loop içine yazıyoruz.Burada arayüz programındaki yön butonlarına bastığımızda serial porta veriyi yazdırılarak rf üzerinden arabadaki alıcıya gönderilir.
#include <VirtualWire.h>

void setup()
{
 Serial.begin(9600);
 vw_setup(2400);
 vw_set_tx_pin(7);
}
void loop()
{
 if(Serial.available())
{
 char c= Serial.read();

 if(c == '2') //ileri
 {
 vw_send((uint8_t *)c, 1);
 }
 else if(c=='3') //sol
 {
 vw_send((uint8_t *)c, 1);
 }
 else if (c=='4') //sağ
 {
 vw_send((uint8_t *)c, 1);
 }
 else if(c=='1') //geri
 {
 vw_send((uint8_t *)c, 1);
 }
 else if(c=='5') // sol ileri
 {
 vw_send((uint8_t *)c, 1);
 }

 else if(c=='6') // sağ ileri
 {
 vw_send((uint8_t *)c, 1);
 }
 else if(c=='0') // sol geri
 {
 vw_send((uint8_t *)c, 1);
 }
 else if(c=='7') // sağ geri
 {
 vw_send((uint8_t *)c, 1);
 }
 else if(c=='9') // dur
 {
 vw_send((uint8_t *)c, 1);
 }
}
}

Alıcı modül kodu:

Alıcımız arabamıza entegre edilerek gelen verileri alarak arabanın hareket etmesini sağlayacak.

  • 1.Adım: Arduino include library bölümünden VirtualWire kütüphanesini ekliyoruz.
#include <VirtualWire.h>
  • 2.Adım: Motorlarımızn pin tanımlamalarını yapalım.
const int on_motor_sol = 6;
const int on_motor_sag = 7;
const int arka_motor_ileri = 8;
const int arka_motor_geri = 9;
  • 3.Adım: Void Setup kısmına aşağıdaki kodu yazalım.Burada motor pinlerini çıkış olarak tanımlıyoruz.Alıcı modülümüzün baudrate değerini, serial iletişim değerini, modülumuzun sinyal pinini ve alıcıyı başlatma fonksiyonu ekliyoruz.
pinMode(on_motor_sol, OUTPUT);
pinMode(on_motor_sag, OUTPUT);
pinMode(arka_motor_ileri, OUTPUT);
pinMode(arka_motor_geri, OUTPUT);

Serial.begin(9600); // serial iletişim
vw_setup(2400); // baud rate 2400
vw_set_rx_pin(7); // alıcı sinyal pini
vw_rx_start(); // alıcıyı başlat
  • 4.Adım: Void loop kısmına aşağıdaki kodu yazalım.Burada ilk ve ikinci satır gelen mesajların boyutunu tanımlama ve mesajları tutmayı sağlıyor.Gelen karakter arabanın yön karakterleriyle karşılaştırılarak arabanın hareket etmesi sağlanıyor.

uint8_t buflen = VW_MAX_MESSAGE_LEN;
uint8_t buf[buflen];

if(vw_get_message(buf, &buflen))
{

for (int i = 0; i < buflen; i++)
{
if (buf[i] == '2') // ileri
{
digitalWrite(on_motor_sol, LOW);
digitalWrite(on_motor_sag, LOW);
digitalWrite(arka_motor_ileri, HIGH);
digitalWrite(arka_motor_geri, LOW);
}

else if (buf[i] == '3') // sol
{
digitalWrite(on_motor_sol, HIGH);
digitalWrite(on_motor_sag, LOW);
digitalWrite(arka_motor_ileri, LOW);
digitalWrite(arka_motor_geri, LOW);
}

else if (buf[i] == '4') // sağ
{
digitalWrite(on_motor_sol, LOW);
digitalWrite(on_motor_sag, HIGH);
digitalWrite(arka_motor_ileri, LOW);
digitalWrite(arka_motor_geri, LOW);
}

else if (buf[i] == '1') // geri
{
digitalWrite(on_motor_sol, LOW);
digitalWrite(on_motor_sag, LOW);
digitalWrite(arka_motor_ileri, LOW);
digitalWrite(arka_motor_geri, HIGH);
}

else if (buf[i] == '5') // sol ileri
{
digitalWrite(on_motor_sol, HIGH);
digitalWrite(on_motor_sag, LOW);
digitalWrite(arka_motor_ileri, HIGH);
digitalWrite(arka_motor_geri, LOW);
}

else if (buf[i] == '6') // sağ ileri
{
digitalWrite(on_motor_sol, LOW);
digitalWrite(on_motor_sag, HIGH);
digitalWrite(arka_motor_ileri, HIGH);
digitalWrite(arka_motor_geri, LOW);
}
else if (buf[i] == '0') // sol geri
{
digitalWrite(on_motor_sol, HIGH);
digitalWrite(on_motor_sag, LOW);
digitalWrite(arka_motor_ileri, LOW);
digitalWrite(arka_motor_geri, HIGH);
}
else if (buf[i] == '7') // sağ geri
{
digitalWrite(on_motor_sol, LOW);
digitalWrite(on_motor_sag, HIGH);
digitalWrite(arka_motor_ileri, LOW);
digitalWrite(arka_motor_geri, HIGH);
}
else if (buf[i] == '9') // dur
{
digitalWrite(on_motor_sol, LOW);
digitalWrite(on_motor_sag, LOW);
digitalWrite(arka_motor_ileri, LOW);
digitalWrite(arka_motor_geri, LOW);
}

}
}


Arduino Verici Kısım Bağlantıları:


Verici modül sinyal pini => Arduino 7.dijital pin

Verici modül artı pini =>    Arduino 5v pin

Verici modül eksi pini =>    Arduino gnd pin

Arduino Alıcı Kısım Bağlantıları:

Alıcı modül sinyal pini 2 tanesinden herhangi birini kullanabilirsiniz => Arduino 7.dijital pin

Alıcı modül  artı pini =>    Arduino 5v pin

Alıcı modül  eksi pini =>    Arduino gnd pin

L293d motor sürücü bağlantıları:

2 ve 7 numaralı bacaklar => Arduino 6. ve 7. dijital pinler

10 ve 15 numaralı bacaklar => Arduino 8. ve 9. dijital pinler

Eğer yönler ters oluyorsa pinleri ters takınız.

1, 8, 9 ve 16 numaralı pinleri birbirlerine bağlayın ve 6 volt enerji verin.


 

SİZCE NASIL OLMUŞ?
Beğendim
64%
İlginç
14%
Eh İşte
0%
Anlamadım
9%
Kötü
0%
Berbat
14%
YAZAR HAKKINDA
Sezgin Gül
Atatürk Üniversitesi Makine Mühendisliği bölümünde lisans eğitimi almaktayım.Bölümüme paralel olarak robotik sistemler üzerine projeler geliştirmekteyim. Disiplinli ve düzenli çalışmayı severim.Sürekli yeni şeyler öğrenmeye hevesli, kendi alanımdaki konularda uzman, kendi kendime öğrenebilen, aktif çalışmayı seven, dinamik bir kişiliğim vardır.Ayrıca takım çalışmasına yatkın, değişime açık, yaratıcı, yenilikçi, çalışkan ve kararlı biriyimdir.
5 YORUMLAR

YORUM YAP