Arduino İle HC06 Bluetooth Kullanımı
Projelerinizde arduino ile telefonunuzu veya bilgisayarınızı haberleştirmek istiyor olabilirsiniz. Bunun için birkaç yöntem bulunmaktadır. Bu yöntemlerden bir tanesi de bluetooth ile haberleştirmektir. Bu yazımızda arduino ile bluetooth kullanımı nasıl olur bunu öğreneceğiz. Biz bu yazımızda, hc06 bluetooth modülünü baz alarak anlatacağız. Sizin elinizde hc05 bluetooth modülü varsa da fark etmez çünkü kullanımları aynıdır. Sadece hc06, hc05 modeline göre daha avantajlıdır.
Eğer hc06 bluetooth modülünün ne olduğunu bilmiyor ve daha fazla teknik detay istiyorsanız aşağıdaki linkten hc06 ile ilgili yazımızı okuyabilirsiniz.
Bluetooth modülümüzü iki yöntemle kullancağız:
- Kütüphanesiz olarak.
- Kütüphaneli olarak.
İkisinin farkını yazımızın ileriki kısmında açıklıyor olacağım. Bu yazımızda kullanacağımız android programı aşağıdan ulaşabilirsiniz.
Not: Arduino ile bluetoothu bağlarken RX ve TX’ler ters bağlanmaktadır.
Arduino | Bluetooth |
TX | RX |
RX | TX |
Kütüphanesiz Bluetooth Modülü Kullanımı
Kodlarımıza başlamadan önce ilk olarak aşağıdaki devre şemasına göre bağlantılarımızı yapalım.
Bağlantılarımızı yaptıysak kodumuzu aşağıdan kopyalayarak arduinomuza yükleyelim.
Not: Kodu yüklerken tx ve rx pinini sökün. Kodu attıktan sonra geri takın. Çünkü kod yüklerken hata alacaksınız.
int led=13;
void setup() {
Serial.begin(9600);
pinMode(led,OUTPUT);
}
void loop() {
if(Serial.available()){
String veri=Serial.readString();
if(veri=="ac"){
digitalWrite(led,OUTPUT);
delay(100);
digitalWrite(led,LOW);
delay(100);
digitalWrite(led,OUTPUT);
delay(100);
digitalWrite(led,LOW);
}
}
}
Kodumuzu açıklayalım. Arduino uno klonumuzun 13. bacağına bağlı olan dahili led kullanacağız. Bunun için ilk başta led pinimizi tanımlıyoruz.
void setup() {
Serial.begin(9600);
pinMode(led,OUTPUT);
}
void setup() kısmında Seri haberleşmeyi 9600 baud rate de başlatıyoruz ve ledimiz pinini çıkış olarak ayarlıyoruz.
void loop() {
if(Serial.available()){
String veri=Serial.readString();
if(veri=="ac"){
digitalWrite(led,OUTPUT);
delay(100);
digitalWrite(led,LOW);
delay(100);
digitalWrite(led,OUTPUT);
delay(100);
digitalWrite(led,LOW);
Serial.println("Led acilip kapatildi");
}
}
}
Burada Serial.available() komutu ile bluetootumuza herhangi bir veri gelmiş mi kontrol ediyoruz. Geldiyse bunu veri diye bir değikende string olarak okuyoruz. Eğer verimiz “ac” ise ledimizi 200 mikro saniye ile 2 kere aç kapat diyoruz ve “Led acilip kapatildi” diye yazımızı gönderdik. Eğer verimiz string değilde bir sayı ise veri okumamızı şu şekilde yapmalıydık.
int veri=Serial.read();
Burada verinin nasıl alınıp nasıl gönderildiğini öğrenmiş olduk. Android uygulamamızdaki görüntü şu şekildedir.
Herşey gayet güzel değil mi? O zaman bide seri portu açıp bir kaç yazı gönderelim mi? Neden? Hep telefondan mı veri gödericeğiz? Bazen projelerimizde bilgisayardan da veri göndermemiz gerekebilir. Seri port haberleşmesi de tx ve rx pinleri ile yani uart haberleşme protokolünü kullanmaktadır. Seri portumuzu açıp “ac” veya herhangi bir şey gönderelim.
Denediniz mi? Herhangi bir veri arduinonuza geldi mi? Gelmedi değil mi? İşte bu problemi çözmek için bluetootumuzu SoftwareSerial kütüphanemizle farklı pinlerden kontrol edelim.
SoftwareSerial Kütüphanesi İle Bluetooth Kullanımı
Kodumuza geçmeden önce ilk olarak aşağıdaki devre şemamıza göre devremizin bağlantılarını tekrar yapalım.
Bağlantılarımızı yaptıysak kodumuzu aşağıdan kopyalayarak arduinomuza yükleyelim.
#include <SoftwareSerial.h> // Yazılımsal Seri Port kütüphanesi
int RX = 2; // Yazılımsal Seri Port'un RX pini
int TX = 3; // Yazılımsal Seri Port'un TX pini
SoftwareSerial bluetooth(RX,TX); // Kütüphanemizi ayarlıyoruz
int led=13;
void setup() {
Serial.begin(9600); // Seri Port Ekranı bağlantısı başlatılıyor
bluetooth.begin(9600); // HC-06 Seri Port bağlantısı başlatılıyor
pinMode(led,OUTPUT);
}
void loop() {
if (bluetooth.available()){
String veri=bluetooth.readString();;
Serial.println(veri);
Serial.println("Bluetoothdan veri alinip pc'ye yazildi");
if(veri=="ac"){
digitalWrite(led,OUTPUT);
delay(100);
digitalWrite(led,LOW);
delay(100);
digitalWrite(led,OUTPUT);
delay(100);
digitalWrite(led,LOW);
Serial.println("Led acilip kapatildi");
}
}
if (Serial.available()){
String veri=Serial.readString();
bluetooth.print(veri);
bluetooth.println("PC den veri alinip bluetootha gonderildi");
Serial.println(veri);
if(veri=="ac\n"){
digitalWrite(led,OUTPUT);
delay(100);
digitalWrite(led,LOW);
delay(100);
digitalWrite(led,OUTPUT);
delay(100);
digitalWrite(led,LOW);
Serial.println("Led acilip kapatildi");
}
}
}
Kodumuzu açıklayalım.
#include <SoftwareSerial.h> // Yazılımsal Seri Port kütüphanesi
int RX = 2; // Yazılımsal Seri Port'un RX pini
int TX = 3; // Yazılımsal Seri Port'un TX pini
SoftwareSerial bluetooth(RX,TX); // Kütüphanemizi ayarlıyoruz
int led=13;
Burada ilk olarak kütüphanemiz projemize eklenmiş. Daha sonra bluetoothumuzn rx ve tx pinleri tanımlanmış. Bu pinlerimiz kütüphanemize tanıtılmış ve son olarak led pinimiz tanımlanmıştır.
void setup() {
Serial.begin(9600); // Seri Port Ekranı bağlantısı başlatılıyor
bluetooth.begin(9600); // HC-06 Seri Port bağlantısı başlatılıyor
pinMode(led,OUTPUT);
}
void setup() kısmında ilk olarak seri port haberleşmemiz 9600 bağlantı hızı ile başlatılmış. SofwareSerial kütüphanemiz ile 9600 bağlantı hızında haberleşmemiz başlatılmıştır ve son olarak ledimiz çıkış olarak tanımlanmıştır.
void loop() {
if (bluetooth.available()){
String veri=bluetooth.readString();;
Serial.println(veri);
Serial.println("Bluetoothdan veri alinip pc'ye yazildi");
if(veri=="ac"){
digitalWrite(led,OUTPUT);
delay(100);
digitalWrite(led,LOW);
delay(100);
digitalWrite(led,OUTPUT);
delay(100);
digitalWrite(led,LOW);
Serial.println("Led acilip kapatildi");
}
}
if (Serial.available()){
String veri=Serial.readString();
bluetooth.print(veri);
bluetooth.println("PC den veri alinip bluetootha gonderildi");
Serial.println(veri);
if(veri=="ac\n"){
digitalWrite(led,OUTPUT);
delay(100);
digitalWrite(led,LOW);
delay(100);
digitalWrite(led,OUTPUT);
delay(100);
digitalWrite(led,LOW);
Serial.println("Led acilip kapatildi");
}
}
}
void loop() kısmında ilk olarak bluetoothdan veri gelmiş mi kontrol edilmektedir. Eğer kontrol edilmiş ise bu veri değişkeninde okunmuştur. Daha sonra verimiz bilgisayarımıza gönderilmiştir. Ayrıca verimizin bluetoothdan alınıp bilgisayarımıza gönderildiği “Bluetoothdan veri alinip pc’ye yazildi” yazdırılmıştır. Eğer bluetoothdan gelen veri “ac” ise ledimiz 100 mikro saniye ile 2 kere yakıp söndürülmüştür.
İkinci if yapımızda bilgisayardan veri gelip gelmediği kontrol edilmiştir. eğer bir veri gelmiş ise verii okunup bluetootha gönderilmiştir. Ayrıca verinin bilgisayardan alınıp bluetootha gönderildiği “PC den veri alinip bluetootha gonderildi” yazdırılmıştır. Burada verimiz şu şekilde veri==”ac\n” kontrol edilmiştir. Burada “\n” koymamızın sebebi bilgisayardan veri alınırken enter tuşununda verinin sonuna eklemesidir. “\n” enter tuşudur. Şimdi bilgisayar ve telefondan çıktılarımıza bakalım.
Sonuç: İki şekilde de bluetooth modülümüzü kullanmayı öğrendik.Ama bluetoothumuzu kütüphane ile kullandığımızda bize ne gibi faydaları olduğunu ve eğer verilerimizi 3 cihaz(bilgisayar, arduino ve telefon) arasında haberleştirmek istediğimizde SoftwareSerial kütüphanemizi kullanmamız gerektiğini öğrenmiş olduk.
Umarım yararlı ve açıklayıcı bir yazı olmuştur.