Merhaba arkadaşlar, ben stajyer Bilgisayar Mühendisi Sevginur. Bu yazımda sizlere HC-06 ve HC-05 Bluetooth modüllerinin nasıl haberleştiğinden bahsedeceğim. Umarım yazım sizler için faydalı olur. Hadi başlayalım.
HC-06 Nedir? Ne İçin Kullanılır?
HC-06, kablosuz haberleşmeyi sağlayan ve Bluetooth protokolünü kullanan bir kablosuz haberleşme modülüdür. Bu modül sayesinde belirli mesafeler içinde kablosuz haberleşme yoluyla seri haberleşme sağlanır. HC-06, Bluetooth 2.0’ı destekleyen bu kart, 2.4GHz frekansında haberleşme yapılmasına imkan sağlayıp açık alanda yaklaşık 10 metrelik bir haberleşme mesafesine sahiptir. Sadece Slave modda çalışır.
HC-05 Nedir? Ne İçin Kullanılır?
HC-05, seri haberleşme protokolü olan Bluetooth’u kullanan bir kablosuz haberleşme modülüdür. Bu modül sayesinde belirli mesafeler içinde kablosuz haberleşme yoluyla seri haberleşme sağlanır. HC-05, UART tarzı iletişim modu sayesinde Arduino meraklıları için favori bir seçimdir. Bu kart, düşük maliyetli, çok yönlü ve kullanımı kolaydır. HC-05 modülü hem Master hem de Slave olarak çalışabilir. HC-05, UART tarzı iletişim modu sayesinde HC-06 ya göre daha çok tercih edilmektedir.
Malzemeler
- Arduino UNO R3 – SMD Klon (CH340 Çipli) – USB Kablo Hediyeli
- HC-06 Bluetooth Modülü
- HC-05 Bluetooth Modülü
- 1K Direnç Paketi – 1/4 W – 10 Adet
- Elektronik Breadboard – Büyük Boy – 830 Pin
- Jumper Kablo
Peki Nedir Bu Slave /Master Mod?
Bluetooth modüllerinde Slave ve Master modlar, iki cihaz arasındaki iletişim için kullanılır. Slave modunda, Bluetooth modülüne dışarıdan bir bağlantı yapılabilirken, modül ile başka bir Bluetooth cihazına ilk bağlantı yapılamaz. Master mod ise elinizdeki modül ile dışardaki bir Bluetooth cihazına doğrudan ilk bağlantıyı yapmanıza olanak sağlar.
İki bluetooth modülü birbiri ile haberleşirken biri Slave diğeri Master modda olmalıdır.HC-06 sadece Slave modda çalışabildiği için HC-05’i Master olarak atamalıyız.
HC-05’i Master Olarak Atama
HC-05’i Master olarak atama işlemi AT komutları ile yapılacaktır. Bunun için aşağıda gördüğünüz şemada ki gibi bağlantıları yapıyoruz. Burada dikkat edilmesi gereken bağlantıları yapmadan kodun atılmış olması ve modüle güç verilmeden modül üzerinde bulunan butona basılı tutup daha sonra güç verilmesidir. Eğer buton bulunmuyorsa 34. pine bir jumper kablo lehimleyebilirsiniz.
Bağlantımızı yaptıktan sonra kodumuzu yükleyelim.
#include <SoftwareSerial.h>
SoftwareSerial bluetooth(7, 6); // RX, TX
void setup() {
Serial.begin(9600);
Serial.println("Enter AT commands:");
bluetooth.begin(38400);// HC-05 38400 baud ile çalışmaktadır.
}
void loop()
{
if (bluetooth.available())//bluetooth'dan gelen veriler porta yazılır.
Serial.write(bluetooth.read());
if (Serial.available())//porttan gönderilen veriler bluetooth'a yazılır.
bluetooth.write(Serial.read());
}
- Serial ekrana ‘AT‘ yazıp gönderdiğimizde cevap olarak ‘OK‘ ifadesi geldiğinde AT komutlarına hazırdır. Şimdi AT komutlarıyla bluetooth modülü master moda alabiliriz.
- ‘AT+ROLE=1‘ yazarak modülü Master moda alıyoruz.
- ‘AT+ROLE‘ komutunu kullanarak modumuzu teyit ediyoruz. (1=Master – 0=Slave)
Böylece HC-05’i Master olarak atamış bulunuyoruz.
Peki HC-05 ile HC-06 Nasıl Birbiriyle Haberleşir?
HC-05 ve HC-06’nın birbiriyle haberleşmesini anlatmak için bir potansiyometre ve buton kullanacağım. Butona bastığımda haberleşme başlayacak ve tekrar bastığımda ise haberleşme kesilecek. Veriler Master –> Slave yönlü iletildiğinden dolayı potansiyometre ve butonu HC-05’e bağlayacağız.
Slave için Kod
#include <SoftwareSerial.h>
SoftwareSerial mySerial(7, 6); // RX, TX
String cmd = "";
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
}
void loop() {
while (mySerial.available() > 0) {
cmd += mySerial.read();
}Serial.println(cmd);
cmd = ' ';
delay(50);
}
Master için Kod
Potansiyometreden okunan değer 0 ile 1023 arasındadır yani 10 bite kadar değer yazdırabiliriz ama modüllerimiz arasındaki iletişim 8 bit ile sınırlıdır.
Bu yüzden “potValue= map(potValue,0,1023,0,255);” satırında olduğu gibi haritalama komutu kullandım. Bu sayede potansiyometreden gelen değer artık 0 ile 255 değerleri arasında olmuş oldu.
#include <SoftwareSerial.h>
int Button = 8;
const byte potPin = A0;
SoftwareSerial mySerial(7, 6); // RX, TX
int potValue;
bool countingStatus = false; // Saymayı başlatmak ve durdurmak için bayrak değişkeni
void setup() {
Serial.begin(9600);
pinMode(Button, INPUT);
mySerial.begin(9600);
}
void loop()
{
potValue = analogRead(potPin);
if (digitalRead(Button) == 1) {
delay(50); // Butonun mekanik tepkisini düzeltmek için küçük bir gecikme ekledik
if (!countingStatus) { // saymaDurumu false ise, yani sayma başlamamışsa
countingStatus = true; // Saymayı başlat
Serial.println("Counting Started!");
}
else { // Eğer saymaDurumu true ise, yani sayma başlamışsa
countingStatus = false; // Saymayı durdur
Serial.println("Counting stopped!");
}
}
if (countingStatus) { // Eğer saymaDurumu true ise, yani sayma başlamışsa
potValue= map(potValue,0,1023,0,255);//(Değişken adı,dönüştürülecek veri aralığı,dönüştürülmüş veri aralığı)
mySerial.write(potValue);//potValue'da depolanan değeri tek bir bayt olarak seri porta gönderir
Serial.print("Pot Value: ");//Seri monitöre yazdırır
Serial.println(potValue);//potValue'da depolanan değeri seri monitöre yazdırır
}
delay(500);
}
Projemiz bitmiştir. Yazımı okuduğunuz için teşekkürler. Umarım yararlı olmuştur 🙂
Arduino ile yapılan diğer projelerimize göz atmak için: