IoT Çalışmaları için Türkçe Sesli Asistan CEYD-A

CEYD-A Türkçe Sesli Asistan ile elektronik devreleri doğrudan kontrol edebilmek mümkün.

CEYD-A(*), IoT — dijital asistan haberleşmesine sıra dışı ve ihtiyaç olan bir yaklaşımla bluetooth’u(**) devreye sokuyor. Geleneksel dijital asistan yapıları, IoT etkileşimlerini WIFI bağlantısı ile uzak bir sunucu üzerinden gerçekleştirmekte veya ek bir uygulama ile bağlantı sağlayabilmektedir. CEYD-A ise MQTT, WIFI(***) gibi protokolleri desteklediği gibi doğrudan cihaz üzerinde çalıştığı için internete çıkış gerektirmeden yakındaki IoT devreleri ile de konuşabilmektedir. İlave bir kodlama veya uygulama gerektirmeden “Bluetooth’dan bilgi al diyerek” devreden gelen bilgileri değerlendirebilir. Hatta söyleyeceğiniz cümleyi “bluetooth’dan bilgi al ve yaz” gibi kolay ifadelerle tanımlayabilmeniz de mümkün. Kısaca siz devreyi tasarlayın, onunla konuşmayı CEYD-A halletsin. İşte bazı sonuçlar:

Geliştiriciler için

CEYD-A kurgu tanımları, alt seviye kodlamadan, üst seviye kodlama ve konuşma dili kurgularına doğru kolaylaşarak, modüler olarak yapılabilmektedir. Geliştiricinin komut isimlerini bilmesi gerekmemektedir. Örneğin HC-05 Bluetooth modülü bağlı olan bir Arduino devresinden gelen bilgileri şu kolay ifadeler ile alabilmek mümkündür. İlk kez bağlanırken sizden bilgileri alır ve bu ayarları sonraki kullanımlar için saklar.

  1. Bluetooth’a bağlan
  2. Bluetooth’tan sürekli bilgi al

veya

  1. Bluetooth’a bağlantı yap
  2. Bluetooth’a 2 gönder
  3. Bluetooth üzerinden bilgi al
  4. Bluetooth bağlantısını kapat

Yukardaki ifadeleri sözlü olarak adım adım söyleyebilir veya bu ifadeler ile “Önünde engel var mı?”, “Oda sıcaklığı ne kadar?” veya “Oda nemli mi?” gibi kurgular oluşturabilirsiniz.

Oda sıcaklığı ve nem oranını tespit eden devre şeması: DHT22 Nem ve Sıcaklık sensörü başarılı değerler sağlıyor.

HC-SR04 Ultrasonik Mesafe Sensörü 2cm’den 400cm’ye kadar 3mm hassasiyetle ölçüm yapabilen bu ultrasonik sensör çeşididir.

CEYD-A ile yapılan denemelerde kullanılan devrenin son hali.

#include <SoftwareSerial.h>
#include <dht.h>


SoftwareSerial BTSerial(10, 11); // RX, TX


int lm35 = A5;
int okunanVoltaj;
float sicaklik;
char data;
dht DHT;


#define DHT22_PIN 2


void setup()
{
analogReference(INTERNAL);
Serial.begin(9600);
BTSerial.begin(9600);//38400
}


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 (data == '2')
{
okunanVoltaj = analogRead(lm35);
sicaklik = okunanVoltaj / 9.31 ;//* (3.5 / 2.5);
delay(1000);
okunanVoltaj = analogRead(lm35);
sicaklik = okunanVoltaj / 9.31 ;//* (3.5 / 2.5);

Serial.print("Sensörlerime göre oda sıcaklığı ");
Serial.print(sicaklik);
Serial.println(" derecedir.");
}
if (data == '3')
{
int chk = DHT.read22(DHT22_PIN);
Serial.print("Sensörlerime göre oda sıcaklığı ");
Serial.print(DHT.temperature, 1);
Serial.println(" derecedir.");
}
if (data == '4')
{
int chk = DHT.read22(DHT22_PIN);
Serial.print("Sensörlerime göre odanın nem oranı % ");
Serial.print(DHT.humidity, 1);
Serial.println(" değerindedir.");
}
}
if (Serial.available())
{
BTSerial.write(Serial.read());
}
}

Arduino IDE üzerinde hazırladığımız kodu Arduino’ya yükleyebilirsiniz. Bu kod nem ve sıcaklık bilgilerini devredeki Bluetooth modülüne gönderecektir. CEYD-A ise, bağlandığı bu modülden bilgileri çekecektir.

Daha detaylı kurgular…

Yazının bu aşamasına kadar geliştiriciler için bilgilerin yeterli olacağına inanıyorum. Şimdi, eğer sadece CEYD-A’ dan gelen verileri söylemesini değil, onları değerlendirip o anda farklı işlemler yapmasını da istersek nasıl bir yol izleyebiliriz ona değinelim:

Sohbet aşamasında, CEYD-A’ nın devrede oluşan bir olay sonucuna göre tetiklenmesini ve işlemler yapmasını da isteyebiliriz: CEYD-A sizinle konuşurken devrede oluşan yeni bir bilgi geldiğinde (örneğin nem oranının belli bir seviyeye yükselmesi), CEYD-A’ nın bu bilgiyi size farklı şekillerde yorumlayıp söylemesini ve işlemler yapmasını da sağlayabiliriz. Yeni eklenen onbluetoothreceived (PAR1),(PAR2) olayı ile aynı isimdeki kendi kurgunuzu oluşturabilir ve içeriğine tetiklenme aşamasında CEYD-A’ nın nasıl bir davranışta bulunacağını yazabiliriz. (PAR1) Bluetooth cihazının MAC adresi, (PAR2) ise devreden gönderilen ham bilgidir.

Bu olayın tetiklenebilmesi için CEYD-A’ da sürekli bilgi al gibi bir ifade kullanmamız gerekmektedir. Aşağıdaki gibi bir kurgu oluşturup içinde alt seviyede bir kod ile cmdreceivebluetoothcontinous (PAR1),(PAR2) komutunu çalıştırabiliriz. 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.

SORU:   sürekli bilgi al
CEVAP:
{!SET staShowCustomCommandUpdateButtons=0!}
{!RET cmdreceivebluetoothcontinous 0,1!}
SORU: onbluetoothreceived
SABLON: onbluetoothreceived ({PAR1}),({PAR2})
CEVAP:
{!SET saat={!RET saat!}!}
{!SET mesafe={!RET cmdfetchregex (.+?)cm.*,1,{PAR2}!}!}
{!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>

Geliştirmeler için daha detaylı bilgiye https://web.ceyd-a.com/2020/12/bluetooth-baglantisi-kuralim/ sayfasından ulaşabilirsiniz.

Kaynaklar:

* https://blog.ceyd-a.com

** https://thingson.io/iot-haberlesme-protokolleri/

*** https://web.ceyd-a.com/2017/08/dunyanin-ilk-mqtt-destekli-akilli-asistani-ceyd-a/

Originally published at https://www.linkedin.com.

--

--

Cenker Sisman
Türkçe Dijital Asistan Geliştirme Platformu

Senior Software Architect in OTI Holding, Owner of CEYD-A Turkish Mobile Assistant, Istanbul Technical University Computer Engineering M.Sc.