Türkçe Arduino sesli asistan oluşturmak, sesle arduino kontrolü CEYD-A ile mümkün. IoT çalışmaları yapan geliştiriciler için faydalı olacak bu yazıda, HC 05 Bluetooth modülü ile CEYD-A’nın haberleşmeni sağlayacağız. Çalışmada gereksinimler şunlar:
Arduino Uno | |
HC 05 Bluetooth Modülü | |
1K Ohm ve 2.2K Ohm Dirençler | |
Breadboard | |
Jumper Kablolar (Erkek-erkek ve dişi-erkek) | |
CEYD-A uygulaması |
Yapının şeması aşağıdadır. Son aşamada CEYD-A, HC-05 Bluetooth modülüne 1 veya 0 değer gönderecektir. Sesli arduino asistan gerçekleştirmek CEYD-A ile mümkün olacaktır.
Arduino IDE ile oluşturulacak ve cihaza gönderilecek kod aşağıdadır. Serial ve BTSerial transfer hızlarını aynı yaptığınızdan emin olunuz. Örnekte 9600 baud kullanılmıştır. Direnç kullanılmasının sebebi HC-05 e gidecek olan gücü modülün zarar görmemesi için 3.3V a düşürmek ve akımı sınırlamak içindir.
#include <SoftwareSerial.h> SoftwareSerial BTSerial(10, 11); // RX, TX char data; void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); BTSerial.begin(9600); pinMode(13, OUTPUT); Serial.println("Enter AT command"); } void loop() { if (BTSerial.available()) { data = BTSerial.read(); Serial.write(BTSerial.read()); if (data == '1') { digitalWrite(13, HIGH); Serial.println("Led yandi"); } if (data == '0') { digitalWrite(13, LOW); Serial.println("Led sondu"); } } if (Serial.available()) { BTSerial.write(Serial.read()); } }
Eğer CEYD-A tarafından tek karakter (char) değil de kelime (String) tipinde gönderim yapıyorsanız, data değişkenini aşağıdaki gibi String tanımlayabilirsiniz. Kodun gerekli olan kontrollerini de değiştirebilirsiniz.
#include <SoftwareSerial.h> SoftwareSerial BTSerial(10, 11); // RX, TX void setup() { Serial.begin(9600); BTSerial.begin(9600); } void loop() { if (BTSerial.available()) { String data = BTSerial.readString(); Serial.print(data); } if (Serial.available()) { char str[255]; Serial.readString().toCharArray(str,255); BTSerial.write(str); } }
Devrenin Son Hali
CEYD Komutları
Devrenin çalışır halde olmasını sağladıktan sonra, şimdi de CEYD-A’nın desteklediği komutlara bir göz atalım:
cmdlistbluetooth
Mobil cihaza bağlı eşleştirilmiş tüm bluetooth modüllerini ekrana getirir. Gelen listeden HC-05 i seçerseniz bağlanmaya çalışır.
Seçilen modülün MAC adresi staBluetoothMacAddress değişkeninde sonradan kullanılmak üzere saklanır.
cmddiscoverbluetooth
Mobil cihazın bulduğu henüz eşleştirilmemiş tüm bluetooth modüllerini ekrana getirir.
cmdconnectsocketbluetooth (MAC ADRESİ)
Bluetooth modülün MAC adresini parametre olarak gösterip ilgili modüle socket bağlantısı sağlar.
cmdsendbluetooth (DEĞER)
Bluetooth modülüne parametredeki değeri gönderir.
cmdreceivebluetooth
Bluetooth modülünde kuyrukta bekleyen değerleri alır ve gösterir.
cmdreceivebluetoothcontinous (PAR1),(PAR2)
Bluetooth modülünde kuyrukta bekleyen değerleri alır ve devamlı gösterir.
PAR1, 0 ise mikrofona tekrar bastığımızda bu işlemi sonlandırmasını, 1 ise biz onunla sohbet etmeye devam etsek bile devreyi dinlemesini belirtir.
PAR2, 0 ise bilgiyi doğrudan ekrana yazmasını, 1 ise bilgiyi farklı işlemler yapabilmesi için onbluetoothreceived olayına yönlendirmesini belirtir.
Örnek kullanım:
SORU: sürekli bilgi al CEVAP: {!SET staShowCustomCommandUpdateButtons=0!} {!RET cmdreceivebluetoothcontinous 0,1!}
cmdclosesocketbluetooth
Socket bağlantısını kapatır ve Bluetooth modülünü boşa çıkarır.
onbluetoothreceived (PAR1),(PAR2)
Devreden bilgi geldiğinde bu olay tetiklenir ve otomatik olarak çağrılır. Kendi olayınızı aynı formatta oluşturabilirsiniz. İçeriğine tetiklenme aşamasında CEYD-A’ nın nasıl bir davranışta bulunacağını yazabilirsiniz.
(PAR1) Bluetooth cihazının MAC adresi,
(PAR2) ise devreden gönderilen ham bilgiyi temsil eder.
Örnek kullanım:
SORU: onbluetoothreceived,25.0| SABLON: onbluetoothreceived ({PAR1}),({PAR2}) CEVAP: {!SET saat={!RET saat!}!} {!SET mesafe={!RET cmdfetchregex (.+?)cm.*,1,$2!}!} {!IF $mesafe<4??Çarptık:: {!IF $mesafe>=55??Ufukta bir cisim görünmüyor.:: {!GET mesafe!}cm !}!} <br><small><mute>{!GET mesafe!}cm uzaklıkta bir cisim var.</mute></small>
CEYD-A ile Devreyi Konuşturalım
Eğer devreyi ilk kez kurduysanız bluetooth cihazının cep telefonu ile eşleştirilmesi gerekmektedir. Cep telefonunda bluetooth cihazlarını listeleyin ve HC-05 eşleşmemiş ise eşleştirin. Ekrana şifre ekranı gelirse 1234 deneyebilirsiniz.
CEYD-A yı açalım ve alt ekranında cmdlistbluetooth yazarak ok tuşuna basalım. Ekrana gelecek listede HC-05 seçelim. #connected uyarısı almalısınız. Sonra aşağıdaki gibi cmdsendbluetooth 1 yazalım. Bu işlem 1 değerini bluetooth cihazına gönderecektir. 1 değerini alan devre LED i yakacak, 0 değeri gönderdiğinizde ise LED i söndürecektir.
Arduino IDE nin Serial Monitor ekranında Led yandı ve Led söndü bilgilerini görebilmeniz gerekiyor.
Konuşma Dili Komutları Hazırlayalım
Denemelerimizin başarıyla sonuçlanmasından sonra artık konuşma diliyle bu işlemleri yaptıralım.
Bluetooth a bağlan dediğimize modüle bağlantı kuracak kurgu aşağıdadır. Bu kurgu tüm kullanıcılar için oluşturulmuştur. Tekrar oluşturmanıza gerek yoktur.
SORU: bağlan% SABLON: {BAŞ}bluetooth{HER}$ CEVAP: {!IF $staBluetoothMacAddress==??{!RET cmdlistbluetooth!}:: {!SET sonuc={!RET cmdconnectsocketbluetooth {!GET staBluetoothMacAddress!}!}!} {!IF $sonuc has connected??Bağlantı sağlandı.::Bir sorun oluştu.!} !}
Işığı aç dediğimizde bağlantı kurulan bluetooth cihazına 1 değerini gönderecek kurgu aşağıdadır.
SORU: ışığı aç CEVAP: {!SET ignored={!RET cmdsendbluetooth 1!}!}
Işığı kapat dediğimizde bağlantı kurulan bluetooth cihazına 0 değerini gönderecek kurgu aşağıdadır.
SORU: ışığı kapat CEVAP: {!SET ignored={!RET cmdsendbluetooth 0!}!}
Artık arduino sesli asistan denemelerimizi CEYD-A ile yapabiliriz. IoT çalışmalarımızda aşağıdaki gibi kullanımlar mümkün olacaktır.