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.

HC06 Bluetooth Modülü
HC06 Bluetooth Modülü

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.

ArduinoBluetooth
TXRX
RXTX
Arduino Bluetooth Pin Bağlantıları

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.

Kütüphanesiz Bluetooth Modülü Bağlantı Şeması
Kütüphanesiz Bluetooth Modülü Bağlantı Şeması

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.

Android Uygulamadaki Kod Çıktısı

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.

SoftwareSerial Kütüphanesi İle Bluetooth Kullanımı Devre Şeması
SoftwareSerial Kütüphanesi İle Bluetooth Kullanımı Devre Şeması

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.

SoftwareSerial Kütüphanesi İle Seri Port Ekranı
SoftwareSerial Kütüphanesi İle Seri Port Ekranı
SoftwareSerial Kütüphanesi İle Telefon Çıktısı
SoftwareSerial Kütüphanesi İle Telefon Çıktısı

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.