Arduino ile İki HC05 Bluetooth Modül Kullanımı
İki Arduino bluetooth haberleşmesi, uzaktan kontrol etmek istediğiniz projeler için kullanışlı çözümlerden biridir. Daha önce iki arduino arası haberleşmeyi sağlamak için farklı yöntemler kullanmıştık bunlardan bazıları:
Önceki içeriklerde, HC-05 Bluetooth Modülünü Arduino’ya nasıl bağlayacağımızı ve bir Android akıllı telefon ile Arduino arasında nasıl iletişim kuracağımızı zaten öğrendik. Bu eğitimlerde HC-05 Bluetooth modülünü varsayılan konfigürasyonu ile bir bağımlı cihaz olarak kullandık.
Kullandığımız HC-05 Bluetooth modülü 5V logic değerine sahip, eğer 3.3V bir logic değerine sahip modül kullanıyorsanız logic level shifter kullanmanız gerekir.
AT Komutları ve Modül Yapılandırma
Bu proje için her iki modülü de yapılandırmamız gerekiyor. Bunu yapmak için AT Komut Moduna geçmemiz gerekiyor. İlk önce Bluetooth modülünü devre şemasındaki gibi Arduino’ya bağlamamız gerekiyor. Ek olarak yapmamız gereken Bluetooth modülünün “EN” pinini 5 volta bağlamak ve ayrıca Arduino Board üzerindeki TX ve RX pinlerini de anahtarlamak.
Bluetooth modülünüzde bir düğme varsa, tek yapmanız gereken EN pinini 5V’den çıkarmaktır. Şimdi güç kablosunu takmadan önce düğmeyi basılı tutun ve ardından kartınıza güç verin.
Bağlantı Şeması
İki modülüde yapılandırırken aynı bağlantı şemasında bağlayabilirsiniz.
Arduino’nun RX pininin voltaj bölücü aracılığıyla Bluetooth modülünün RX pinine ve Arduino’nun TX pininin Bluetooth modülünün TX pinine bağlanması gerekir. Şimdi “EN” pininin üzerindeki küçük butona basılı tutarken modüle güç vermemiz gerekiyor ve bu şekilde komut moduna gireceğiz. Bluetooth modül ledi 2 saniyede bir yanıp sönüyorsa AT komut moduna başarıyla girmişiz demektir.
Bundan sonra Arduino’ya boş bir program yüklememiz gerekiyor ancak yükleme sırasında RX ve TX hatlarını ayırmayı unutmayın. Ardından Seri Monitörü çalıştırmamız gerekiyor ve orada Bluetooth modülünün varsayılan baud hızı olan “38400 baud” hızının yanı sıra “Hem NL hem de CR” seçeneğini seçiyoruz. Artık komutları göndermeye hazırız ve biçimleri aşağıdaki gibidir.
Tüm komutlar “AT” ile başlamalı, ardından “+” işareti, ardından bir parametre gelmeli ve “?” ile bitmelidir. Parametrenin mevcut değerini döndüren işareti veya o parametre için yeni bir değer girmek istediğimizde “=” işareti kullanabilirsiniz
Örnek kullanım:
- AT+ROLE?
- AT+ROLE=1
Slave/Bağımlı Modülün Yapılandırılması
Sadece bir test komutu olan “AT” yazarsak “OK” mesajını geri almalıyız. O zaman “AT+UART?” yazarsak 38400 olan varsayılan baud hızını gösteren masajı geri almalıyız. Ardından “AT+ROLE?” yazarsak. Bluetooth cihazının bağımlı modda olduğu anlamına gelen “+ROLE=0” masajını geri alacağız. “AT+ADDR?” yazarsak Bluetooth modülünün adresini geri alacağız ve şuna benzer görünmelidir: 98d3:34:905d3f.
Şimdi ana cihazı yapılandırırken ihtiyacımız olacağı için bu adresi yazmamız gerekiyor. Adı, baud hızı, eşleştirme şifresi gibi birçok farklı parametreyi değiştirebilmemize rağmen, ana cihaz ile bağlantısını kurması için sadece adresi alıyoruz. Diğer parametreleri başka bir yazıda anlatarak değiştireceğiz.
Master/Ana Modülün Yapılandırılması
İlk önce, bağımlı cihazla aynı 38400 olduğundan emin olmak için baud hızını kontrol edeceğiz. Ardından “AT+ROLE=1” yazarak Bluetooth modülünü ana cihaz olarak ayarlayacağız. Bundan sonra “AT+CMODE=0” kullanarak bağlantı modunu “sabit adres”e ayarlayacağız ve “AT+BIND=” komutunu kullanarak daha önce yazdığımız slave cihazın adresini ayarlayacağız.
Burada adresi yazarken iki nokta üst üste yerine virgül kullanmamız gerektiğini unutmayın. Ayrıca, “AT+CMODE” komutunda “0” yerine “1” girseydik, önceki adımı atlayabileceğimizi unutmayın, bu da master’ın iletim aralığındaki herhangi bir cihaza bağlanmasını sağlar, ancak bu daha az güvenli bir yapılandırmadır. Burada komutların ve parametrelerin tam listesini bulabilirsiniz: HC-05 AT Komutları Listesi
Bununla birlikte, Bluetooth modüllerinin ana ve bağımlı aygıtlar olarak çalışması için temel bir yapılandırmaya ihtiyacımız olan tek şey bu ve şimdi bunları normal, veri modunda yeniden bağlarsak ve modüllere yeniden güç verirsek, birkaç saniye içinde bağlantı kurulur. Her iki modül de her 2 saniyede bir bağlantının başarılı olduğunu gösteren yanıp sönmeye başlayacaktır.
İki Arduino Arası Bluetooth Haberleşme Örneği
Örnek olması adına, Master/Ana bluetooth modülünün bağlı olduğu Arduinoya bir potansiyometre bağlıyoruz. Slave/bağımlı bluetooth modülünün bağlı olduğu Arduinoya ise bir servo motor bağlıyoruz. Bu sayede uzaktaki bir servo motoru, potansiyometre ile kontrol etmiş olacağız. Ayrıca master/ana cihazdaki LED’i kontrol etmek için, bağımlı cihaza buton bağlıyoruz.
Devre Şeması
Program Kodu
Bu yüzden önce program için gerekli olan pinleri ve bazı değişkenleri tanımlamamız gerekiyor. Setup kısmında master’da led pini çıkış olarak ayarlayıp hemen low ayarını yapıp 38400 baud hızında seri haberleşmeyi başlatıyoruz. Aynı şekilde slave’de de buton pinini giriş olarak ayarlıyoruz, pinin bağlı olduğu servoyu tanımlıyoruz ve aynı baud hızı ile seri iletişimi başlatıyoruz.
Döngü bölümünde, her iki kodda da Serial.available() fonksiyonu ile seri portta okunacak veri olup olmadığını kontrol edeceğiz ve Serial.read() fonksiyonunu kullanarak datayı okuyup depolayacağız. “durum değişkeni. Yani buton durumu yüksek olduğunda veya butona basıldığında master, slave’den gönderilen ‘1’ karakterini alırsa, LED yanar. Aksi takdirde karakter ‘0’ ise LED sönecektir.
Servo motor kontrolüne gelince, önce master’da potansiyometre değerini okuruz ve 0 ile 255 arasında servo için uygun bir aralığa eşleştiririz. Bu değer, servo motoru uygun şekilde döndürmek için onu kullanan slave’e gönderilir. İhtiyacımız olan tek şey bu ve işte örneğin gösterimi.
Ana Cihaz İçin
#define ledPin 9 int durum = 0; int potDegeri = 0; void setup() { pinMode(ledPin, OUTPUT); digitalWrite(ledPin, LOW); Serial.begin(38400); // bluetooth varsayılan hızı } void loop() { if(Serial.available() > 0){ durum = Serial.read(); } if (durum == '1') { digitalWrite(ledPin, HIGH); durum = 0; } else if (durum == '0') { digitalWrite(ledPin, LOW); durum = 0; } potDegeri = analogRead(A0); int potDegeriMapped = map(potDegeri, 0, 1023, 0, 255); Serial.write(potDegeriMapped); delay(10); }
Bağımlı Cihaz İçin
#include <Servo.h> #define buton 8 Servo myServo; int durum = 20; int butondurum = 0; void setup() { pinMode(buton, INPUT); myServo.attach(9); Serial.begin(38400); } void loop() { if (Serial.available() > 0) { durum = Serial.read(); } myServo.write(durum); delay(10); // Reading the buton butondurum = digitalRead(buton); if (butondurum == HIGH) { Serial.write('1'); } else { Serial.write('0'); } }
HC-05 Modülünün veri sayfasına ulaşmak için bu bağlantıya tıklayabilirsiniz.
Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.