Proje
Devresi:
Devrede DC
motoru kontrol etmek için L293 entegresini kullandık. Bluetooth modülü olarak
HC-06 kullandık. Kullandığımız buluetooth modülü 3.3V ile çalıştığı için,
modülün beslemesini 3.3V pininden aldık.
Devre bağlantılarını yaptığımızda, öncelikle bluetooth modülünü bilgisayarla ilişkilendirmeliyiz. Bunun için bluetooth ayarlarından bluetooth aygıtı ekle sayfasını açmalıyız. Gelen sayfada HC-06 ‘ya tıklayıp eşleştir demeliyiz. Bunu yaptığımızda bizden parola isteyecektir. Modülümüzün parolası 1234’tür. Eşleştirmeyi yaptıktan sonra bluetooth modülünün hangi porta bağlandığımı bilmemiz gerek. Bunun için bluetooth simgesine tıklayıp ayarları aç demeliyiz. Gelen ekranda com bağlantı noktaları sekmesini açmalıyız. Burada giden bağlantının olduğu portu bu proje için yazdığımız programı çalıştırdığımızda seçmeliyiz. Eğer com bağlantı noktaları sekmesinde modülün portlar görünmüyor ise, ekle butonuna tıklayarak modülümüzü elle eklemeliyiz.
Özellikleri:
C# Uygulaması:
Devre bağlantılarını yaptığımızda, öncelikle bluetooth modülünü bilgisayarla ilişkilendirmeliyiz. Bunun için bluetooth ayarlarından bluetooth aygıtı ekle sayfasını açmalıyız. Gelen sayfada HC-06 ‘ya tıklayıp eşleştir demeliyiz. Bunu yaptığımızda bizden parola isteyecektir. Modülümüzün parolası 1234’tür. Eşleştirmeyi yaptıktan sonra bluetooth modülünün hangi porta bağlandığımı bilmemiz gerek. Bunun için bluetooth simgesine tıklayıp ayarları aç demeliyiz. Gelen ekranda com bağlantı noktaları sekmesini açmalıyız. Burada giden bağlantının olduğu portu bu proje için yazdığımız programı çalıştırdığımızda seçmeliyiz. Eğer com bağlantı noktaları sekmesinde modülün portlar görünmüyor ise, ekle butonuna tıklayarak modülümüzü elle eklemeliyiz.
Bluetooth Hakkında Kısa Bilgi
Bluetooth cihazlar arası kablosuz haberleşme sağlayan bir teknolojidir. 2.4 GHz frekans bandı civarında çalışmaktadır. Veri aktarma hızı 720 kbps’ye kadar ulaşabilmektedir. Etkinlik mesafesi kullanılan cihaza göre değişmekte olup, 10 ila 100 metre arasındadır.
Bluetooth cihazlar arası kablosuz haberleşme sağlayan bir teknolojidir. 2.4 GHz frekans bandı civarında çalışmaktadır. Veri aktarma hızı 720 kbps’ye kadar ulaşabilmektedir. Etkinlik mesafesi kullanılan cihaza göre değişmekte olup, 10 ila 100 metre arasındadır.
HC-06 Bluetooth Modülü
Kablosuz seri haberleşme için tasarlanmış bir bluetooth modülüdür. 2.4 GHz frekans bandında haberleşme yapılmasına imkan sağlamaktadır. Açık alanda 10 m’ye kadar etkinlik sağlamaktadır. Modül bluetooth 2.0’ı desteklemektedir. Bu modül yalnızca slave modunda çalışmaktadır. HC-05 modülü ise master/slave modunda çalışmaktadır.
Kablosuz seri haberleşme için tasarlanmış bir bluetooth modülüdür. 2.4 GHz frekans bandında haberleşme yapılmasına imkan sağlamaktadır. Açık alanda 10 m’ye kadar etkinlik sağlamaktadır. Modül bluetooth 2.0’ı desteklemektedir. Bu modül yalnızca slave modunda çalışmaktadır. HC-05 modülü ise master/slave modunda çalışmaktadır.
Ö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
Projenin Kaynak 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);
}
}
}
}
Yazdığımız bu program,
daha önce seri haberleşme için yazdığımız programların benzeridir.
- Programın tasarımı:
Forma
ekleyeceğimiz nesneler yukarıda resimde görülmektedir.
- Programın Kodu:
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();
}
}
}
}
Merhaba projeler için çok teşekkürler güzel projeler var.Sormak istediğim (gidenVeri,0,4); ne anlama gelmektedir? arduinoya gönderilen veriler char yada string türüne nasıl çevrilebilir? ben başka bir proje yapıyorum orda serial üzerinden string veriler alıyorum bluetooth ile.ama hız kontrolü yapmak istediğimde int türünde alınıyor veriler bu sorunu nasıl çözebilirim?
YanıtlaSilseri porttan verileri ya string ya da byte tipinde göndermekteyiz. bu örnekte veriler byte olarak gönderilmiştir. çünkü arduinoda verileri byte olarak karşılaştırmak daha kolaydır. aksi halde veri dönüşümü yapmamız gerekecekti.
YanıtlaSilsiz de verileri byte olarak göndermeyi deneyiniz.
Merhaba Mehmet abi ben bu işlerde yeniyim de arduino ve bluettoth şeyini anladım diğer alet ne? greklimi ?
YanıtlaSilAbi bi sorum daha var 2 adet motor olucak DC ve buton 1 e tıkladığımda trackbar daki hızda iki motor da ileri gidecek buton 2 de iki motorda geri gelecek buton üçte motor 1 duracak motor 2 ileri çalışacak 4 te 2 duracak 1 ileri çalışacak
YanıtlaSilbluetooth haberleşmesi için arduinoya bağlayabileceğin herhangi bir bluetooth modülü gereklidir.
YanıtlaSilikinci olarak arduino-bluetooth kontrollü araba uygulamaları internette mevcuttur. incelemeni tavsiye ederim.
YanıtlaSilbu devre modeli için gerekli olan elemanlar nelerdir
YanıtlaSilProjede Fritzing çiziminde yer alan elemanlar kullanılmıştır. Arduino Uno, Hc-05 veya HC-06, L293, DC Motor.
SilBu bilgileri bizimle paylaştığın için çok teşekkür ederim.
YanıtlaSilSerialPort1.write() ile veri gönderiyoruz fakat veriyi nasıl alacağız bilgin var mı ?
SerialPort1.read(); komutu içine ne yazmalıyım ?
Alperin de sorduğu gibi serialport1.write(veri, 0 ,4) teki 0 ve 4 ne anlama geliyor ?
Uygulamada veriyi Byte tipinde göndermekteyiz. Bu durumda serialPort1.write() fonksiyonu parametrelerini buna göre ayarlamaktayız.
Sildetaylı bilgi için şu adrese bakınız:
https://msdn.microsoft.com/tr-tr/library/ms143551(v=vs.110).aspx
Abi merhaba devreyi kurdum kodlar herşey tamam ama pc bluetoothu görmedi bu sıkıntıyı nasıl halledebilirim ?
YanıtlaSilprogramı çalıştırmadan önce bluetooth modülünü bilgisayara eklemeniz gerekmekteydi. bunu yaptınız mı? eğer yapmamışsanız görev çubuğunun sağ tarafında bulunan simgelerden bluetooth simgesine tıklayın ve açılan menüden bluetooth aygıtı ekleye tıklayın. gelen ekranda bluetooth modülü görünecektir. eğer görünmüyorsa modülde bir sıkıntı olabilir.
SilBiraz cahilce olacak ama ; 2 adet bluetooth gerekiyor de mi ? :)
YanıtlaSilbu uygulamada arduino ile bilgisayarı bluetooth üzerinden haberleştiriyoruz. arduinoya bluetooth modülü takıyoruz. bilgisayar zaten bluetooth'a sahip.
SilAbi com1 falan demişsin ama biz kablo ile bağladığımızda usb kablo ile bağlancak kablo ile kontrol etme şansımız var mı yani port adı falan ne olacak ?
YanıtlaSildeğişen bişey olmaz, usb kablonun bağlandığı portu seçersin.
SilAbi bilgisayarın HC 06 aygitini görebilmesi için HC 06'ya enerji vermemiz gerekli mi ? Gerekliyse bunu nasıl yapabilirim ?
YanıtlaSilhc06 nın vcc girişinden 3.3 volt uygulayarak modülü çalıştırabilirsiniz.
SilBu yorum yazar tarafından silindi.
YanıtlaSilC# ile web server yazıp gelen giden datayı okuma-yazdırma ve komutları ardiuno ya yaptırma şansımız varmı acaba ?
YanıtlaSilhc-06 modulü 5v ile calısıyor
YanıtlaSilprogramı derlerken expected nested-name--specifier before 'system' şeklinde bir hata veriyor yükleyemiyorum nedeni nedir acaba?
YanıtlaSilDerleyeciden kaynakli bir hata olabilir. Lutfen deroeyici versiyonunuzun guncel ldugundan emin olunuz.
YanıtlaSilprogramın ikinci kısmındaki using system şeklinde olanlarla ilgili hata veriyor bunun için bi kütüphane veya program kurmam gerekiyor mu ve bu projeyi 12 V dc motor motor control shield ile yaparken bi sorun olur mu ?
YanıtlaSilMuhtemelen using system.io.ports kismina hata veriyordur. Motor shielden kaynaklanan bi sorun degil. İnternette using system.io.ports için arama yapabilir misiniz. Belki biseyler cikabilir. Ben de sorunla ilgili bi çözüm bulursam dönüş yaparım.
Silabi bluetooth yerine serial yaparsak ne degişir
YanıtlaSilBişey değişmez. Yine sistem çalışır.
SilBiz C# ile bluetooth arasında bağlantı kuramadik yardım edermisiniz.Bluetooth olarak hc -06 kullandık.
YanıtlaSilBluetooth modulunu bilgisayara yeni cihaz olarak eklemeniz gerekiyor. Com port açılıyor mu onu kontrol etmelisiniz.
SilMotorun dönüş hızı degişmiyor neden olabilir
YanıtlaSilPWM'den kısmında sorun yaşıyor olabilirsiniz. Ya da C# kısmında motorun hızını artırıp azalttığınız datalar arduinoya ulaşmıyordur.
Silbluetooth bağlantısı yanlış
YanıtlaSil#include
YanıtlaSilSoftwareSerial 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);
Serial.begin(9600);
}
void loop() {
if(Serial.available()) {
gelenVeri=Serial.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);
}
}
}
}
using System;
YanıtlaSilusing 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 bluetooth
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
byte[] gidenVeri;
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 radioButton1_CheckedChanged(object sender, EventArgs e)
{
gidenVeri = BitConverter.GetBytes(trackBar1.Value);
serialPort1.Write(gidenVeri, 0, 4);
}
private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
gidenVeri = BitConverter.GetBytes(trackBar1.Value+ 20);
serialPort1.Write(gidenVeri, 0, 4);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (serialPort1.IsOpen)
{
gidenVeri = BitConverter.GetBytes(20);
serialPort1.Write(gidenVeri, 0, 4);
serialPort1.Close();
}
}
private void trackBar1_ValueChanged(object sender, EventArgs e)
{
if (radioButton1.Checked == true)
{
gidenVeri = BitConverter.GetBytes(trackBar1.Value);
serialPort1.Write(gidenVeri, 0, 4);
}
else if (radioButton2.Checked == true)
{
gidenVeri = BitConverter.GetBytes(trackBar1.Value + 20);
serialPort1.Write(gidenVeri, 0, 4);
}
label2.Text = Convert.ToString(trackBar1.Value * 10) + "% MOTOR HIZI";
}
}
}
Merhaba Mehmet Bey,oncelikle emeginize sagkik.Bir sorum olacakti.
YanıtlaSilif(gelenVeri==20) buradaki 20 verisi veya else if(gelenVeri>0 && gelenVeri<=10 verilerielse if(gelenVeri>20 && gelenVeri<=30 nereden nasil bularak yazdik? Seriport uzerinden bu verileri nasil gonderiyoruz? Yani 20 yerine mesela 100 olabilir miydi? 20 yi nereden bulduk?
Saygilar selamlar.
Ok..cozdum ...:)
SilMerhaba Mehmet Bey;
YanıtlaSilprivate 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) + "%";
Yukaridaki kodlama ile ,
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);
}
Bu kodlamar ayni
Nasil yon ve hiz icin ayri ayri kullanabiliyoruz? Acikliyabilirseniz cok memnun olutum.Saygilar.