Arşiv

Posts Tagged ‘SoftwareSerial’

HC-06 Bluetooth Modülü Konfigürasyonunun Yapılması

05/04/2022 2 yorum

Bu çalışmada robotik çalışmalarda sıkça kullanılan bluetooth modülü temel konfigürasyonunun nasıl yapıldığı ele alınmaktadır. Modüllerde isim ve şifre gibi temel değişiklikler ile etraftaki diğer modüllerle/cihazlarla karışıklık önlenebilmektedir.

Bluetooth modülü konfigürasyonu için “Arduino Nano Tabanlı Eğitim Robotu: myNanoBot” çalışmasında tercih edilen HC-06 modülü ve bu modül üzerinde yapılan değişikliklere örnek olarak yer verilmiştir.

Burada anlatılanlar HC-06 için geçerli olup modül ayarlarında 3 değişiklik yapılmıştır:

  • Veri iletim hızı (baudrate) 115200 yapılmıştır
  • Modül ismi değiştirilmiştir: myNanoBot
  • Modül şifresi değiştirilmiştir: 5555

Bluetooth modülü ayarları “AT” komut modunda yapılmakta olup HC-05 modülü ile HC-06’nın “AT” modu geçişi ve “AT” komutları arasında farklılıklar vardır.

HC-06, “AT” modu ve iletişim modu olarak 2 moda sahiptir. HC-06 iletişim modunda değilken modül otomatik olarak “AT” modundadır. Yani modüle ilk güç verildiğinde üstündeki led sürekli yanıp sönüyor iken herhangi bir işleme gerek kalmadan “AT” komutları uygulanabilir.

“AT” komutları Arduino seri monitörden girilebilir ve sonuçları izlenebilir. HC-06 bluetooth modülü varsayılan baudrate değeri 9600‘dür. Modül Arduino’ya bağlandıktan sonra (detaylara şu çalışmadan bakılabilir) Arduino’ya yüklenecek kod şöyle olabilir:

//Arduino Uno, Nano vb için -Yazılımsal-
//Bluetooth RX => Arduino TX (Pin 11)
//Bluetooth TX => Arduino RX (Pin 10)

#include <SoftwareSerial.h>
SoftwareSerial myBluetooth(10, 11); // RX, TX

void setup()
{
  Serial.begin(9600);
  myBluetooth.begin(9600);
  Serial.println("AT Komutu Giriniz:");
}

void loop()
{
  if (Serial.available())
  {
    myBluetooth.write(Serial.read()); //AT komutunu bluetooth'a gönder
  }

  if (myBluetooth.available())
  {
    Serial.write(myBluetooth.read()); //Bluetooth'dan gelen yanıt
  }
}

Arduino Mega için diğer fiziksel seri portlardan biri de kullanılabilir:

//Arduino Mega için
//Bluetooth RX => Arduino TX2 (Pin 16)
//Bluetooth TX => Arduino RX2 (Pin 17)

void setup()
{
  Serial.begin(9600);
  Serial2.begin(9600); //Bluetooth'un bağlı olduğu fiziksel port
  Serial.println("AT Komutu Giriniz:");
}

void loop()
{
  if (Serial.available())
  {
    Serial2.write(Serial.read()); //AT komutunu bluetooth'a gönder
  }

  if (Serial2.available())
  {
    Serial.write(Serial2.read()); //Bluetooth'dan gelen yanıt
  }
}

“AT” komutları büyük harfle, çift tırnaksız, boşluksuz ve satır sonu karakterleri olmadan (\r\n) girilmelidir. Komutlar sınırlıdır, varsayılan modul ismi/veri iletim hızı görülmez. “AT” komutuna “OK” yanıtı; “AT” modunda çalışıldığını belirtir:

AT Modu

Aşağıdaki komutlar uygulanarak modül ayarları tamamlanmıştır:

Komut Beklenen Sonuç Açıklama
AT+NAMEmyNanoBot OKsetname Modül ismi myNanoBot olarak değiştirildi
AT+PIN5555 OKsetPIN Modül eşleşme pini 5555 oldu
AT+BAUD8 OK115200 Veri iletim hızı 115200 oldu

Tablodan görüldüğü gibi veri iletim hızını değiştirmek için sayılar kullanılmaktadır. 4 => 9600 (varsayılan) iken 8 => 115200’e karşılık gelmektedir. Diğer veri iletim hızı değerleri ve diğer bazı “AT” komutları için bu adresten yararlanılabilir.

Not: Modül ayarlarında tekrar değişiklik yapabilmek için bluetooth modülü seri iletişiminin artık 115200 bps üzerinden yapılması gerekir. ( myBluetooth.begin(115200); ) Aksi takdirde “AT” komutlarına yanıt alınmayacaktır.

Ayrıca modül ayarlarını tekrar değiştirmek için veri iletim hızının unutulmaması ve bilgisayarların desteklememesi nedeniyle 115200’den yüksek bir değere çekilmemesi birçok kaynakta belirtilmektedir.

Kaynakça
http://www.martyncurrey.com/hc-06-zg-b23090w-bluetooth-2-0-edr-modules/
https://www.instructables.com/id/AT-command-mode-of-HC-05-Bluetooth-module/
https://dergipark.org.tr/tr/download/article-file/1809070
https://erkanduran.wordpress.com/2018/01/04/arduino-seri-haberlesme-ve-bluetooth-uzerinden-led-yakma/
https://github.com/eduran10/myNanoBot
https://erkanduran.wordpress.com/2022/03/28/arduino-nano-tabanli-egitim-robotu-mynanobot/
https://erkanduran.wordpress.com/2022/03/28/arduino-nano-tabanli-bir-egitim-robotu-gelistirilmesi-mynanobot/

Arduino Seri Haberleşme ve Bluetooth Üzerinden Led Yakma

Arduino ile seri port üzerinden bilgisayar ve diğer cihazlar ile haberleşmek mümkündür. Böylece sensörlerden gelen veriler takip edilebilir; bilgisayar, cep telefonu gibi cihazlardan Arduino’ya komut göndererek devre elemanları kontrol edilebilir.

Bütün Arduino kartları en az bir adet seri porta sahiptir. Dijital 0 (RX) ve Dijital 1 (TX) numaralı pinler seri haberleşmede kullanılmaktadır. Bu pinler ayrıca Arduino USB hattına da bağlıdır. Arduino USB’den bilgisayara bağlı iken herhangi bir işleme gerek kalmadan Arduino ile seri port üzerinden direk haberleşme yapılabilmektedir. Arduino’nun çeşitli kartlarında ilave seri portlar vardır. Örneğin Mega’da ek olarak 3 adet seri port (Serial1: 19 (RX) ve 18 (TX), Serial2: 17 (RX) ve 16 (TX), Serial3: 15 (RX) ve 14 (TX) numaralı pinler) yer almaktadır.

Arduino arayüzünde sağ üst köşede “Serial Monitor ” düğmesi bulunmaktadır. Seri monitör ile seri port üzerinden gelen ve giden veriler kolayca görülebilir. Ayrıca buradan seri porta veri de gönderilebilir:

Arduino Seri Monitör - Serial Monitör Resmi

 

Örnek uygulamamız bluetooth üzerinden led yakma/söndürme üzerinedir. Ama öncelikle bilgisayar üzerinden led yakıp söndürelim. Kaynak kodda zaten değişiklik olmayacak devreye bluetooth ve diğer gereken elemanlar yerleştirilecektir:


int ledPin = 7;
char gelenKarakter;

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600); //Seri iletişimi başlat
}

void loop() {
  
  if (Serial.available()>0) //Seri porttan veri geliyorsa
  {
    gelenKarakter = Serial.read(); //Seri porttan bir karakter oku
    if (gelenKarakter == 'y')
    {
      digitalWrite(ledPin, HIGH);
      Serial.println("yandim"); //Seri porta veri gönder
    } else if (gelenKarakter == 's')
    {
      digitalWrite(ledPin, LOW);
      Serial.println("sondum"); //Seri porta veri gönder
    }
  }
}

Kaynak kod son derece sadedir. Devrede bir tane led vardır ve dijital 7.pine bağlıdır. Seri porttan “y” değeri gelirse yanacak; “s” değeri gelirse sönecektir. Ayrıca yandığında seri porta “yandim”, söndüğünde ise “sondum” bilgisini gönderecektir.

Kodda dikkat edilirse seri iletişim için Arduino ile halihazırda tanımlı gelen Serial nesnesi kullanılmıştır. Serial nesnesi ile Arduino’nun fiziksel seri portundan veri okuma ve gönderme yapılmaktadır. Bununla birlikte Arduino’da SoftwareSerial sınıfı da bulunmaktadır. Bu sınıf ile dijital pinler yazılımsal olarak seri port olarak kullanılabilmektedir. Donanımsal seri portun yetmediği uygulamalarda bu sınıf uygulamaya dahil edilerek kullanılabilir. Yukarıdaki uygulamanın SoftwareSerial sınıfı kullanılarak yazılmış hali şöyle olabilir:

#include <SoftwareSerial.h>

SoftwareSerial myBluetooth(10,11); //RX, TX -- 10. ve 11.pinler

int ledPin = 7;
char komut;

void setup() {
  pinMode(ledPin, OUTPUT);
  myBluetooth.begin(9600);
}

void loop() {

  if (myBluetooth.available()>0)
  {
    komut = myBluetooth.read();
    if (komut == 'y')
    {
      digitalWrite(ledPin, HIGH);
      myBluetooth.println("Yandım");
    } else if (komut == 's')
    {
      digitalWrite(ledPin, LOW);
      myBluetooth.println("Söndüm");
    }
  }
}

Önce SoftwareSerial kütüphanesi uygulamaya dahil edilerek bu sınıftan myBluetooth nesnesi tanımlanmıştır. İlk parametre RX, ikinci paremetre ise TX pin numarasıdır. Bunun haricinde kullanımı aynı Serial nesnesi gibidir. Uygulamada Serial ya da SoftwareSerial kullanılabilir.

Şimdi uygulamayı bluetooth üzerinden ledi kontrol edecek şekilde değiştirelim. Devre tasarımımız şöyledir:

Arduino HC-05 bluetooth bağlantısı devre tasarımı resmi

HC-05, master ve slave modda çalışabilen ve uygulamalarda sıklıkla kullanılan bir bluetooth modülüdür. Modüldeki +5V ve GND pinleri modülü beslemek için; RX ve TX pinleri ise haberleşme için kullanılmaktadır.

RX (receive) pinleri ile seri porttan veri okunmakta, TX (transmit) pinleri ile de seri porta veri gönderilmektedir. Modül ve Arduino’nun doğru şekilde haberleşebilmesi için çapraz bağlantı yapılmadır. Yani modülün RX pini Arduino’nun TX pinine, modülün TX pini ise Arduino’nun RX pinine bağlanmalıdır. Böylece birinden gönderilen veri diğerinden okunabilecektir.

Bununla birlikte HC-05, 3.3V seviyesinde çalıştığı için RX ve TX pinlerinin direk Arduino’ya bağlanması modüle zarar verebilir. Bunun için bu pinler birbirine 1K ve 2,2K’lık dirençler ile voltaj bölme yöntemi kullanılarak birbirine bağlanmıştır.

Ayrıca kaynak kod Arduino’ya yüklenirken Arduino’nun RX (dijital 0) ve TX (dijital 1) pin bağlantısı kesilmelidir. Çünkü bu pinler Arduino’nun USB hattına bağlıdır. Pin bağlantısı varken kod yüklemesi yapılmaya çalışıldığında hata ile karşılaşılabilmektedir.

Devre tamamlandığında ledi yakmak için artık bluetooth üzerinden “y”, söndürmek içinse “s” verisi gönderilmesi yeterlidir. Bunun için hazır bluetooth programları kullanılabileceği gibi Appinventor kullanarak basit bir program da yazılabilir. appinventor.mit.edu adresinden giriş yaparak aşağıdaki gibi kendi programımızı oluşturmaya başlayalım. Arayüz ve eklenen nesneler aşağıdaki gibidir:

Bluetooth led yakma Appinventor arayüz resmiBluetooth led yakma Appinventor bileşenler resmi

Arayüze ledi yakmak ve söndürmek için birer button, bağlantı durumunu göstermek için bir label, bluetooth bağlantısını sağlamak için bluetoothclient nesnesi ile çevredeki bluetooth cihazları listelemek için bir tane listPicker nesnesi eklenmiştir. Kod bloklarımız ise şöyledir:

Bluetooh led yakma Appinventor kod blokları resmi

Program başladığında öncelikle telefonumuzun bluetooth’u ile HC-05’i eşleştirmemiz gerekir. Koddan da görüldüğü gibi listPicker nesnesi açılmadan önce öğeleri çevredeki aktif bluetooth cihazlarının adları ve adresleri ile doldurulmaktadır. Eşleştirmek istediğimiz bluetooth cihazını seçtikten sonra ise bluetoothclient1 nesnesi ilgili cihaza bağlanma isteği göndermekte ve durum label nesnesine yazılmaktadır. HC-05’in varsayılan şifresi 1234’tür. Label nesnesinde “bağlandı” metnini gördükten sonra led yak ve söndür düğmeleri ile artık ledi kontrol edebiliriz.

Arduino bluetooth led yak foto

 

Kaynakça
https://www.arduino.cc/reference/en/language/functions/communication/serial/
https://www.arduino.cc/reference/en/language/functions/communication/serial/available/
https://cdn.makezine.com/uploads/2014/03/hc_hc-05-user-instructions-bluetooth.pdf
https://www.gme.cz/data/attachments/dsh.772-148.1.pdf
https://gelecegiyazanlar.turkcell.com.tr/konu/arduino/egitim/arduino-201/bluetooth-ile-iletisim
http://ai2.appinventor.mit.edu/reference/components/connectivity.html#BluetoothClient
http://maker.robotistan.com/appinventor-ile-arduino-kontrolu/