Arduino ile Bluetooth Kontrol (Akıllı Ev Uygulaması)

Merhaba Arkadaşlar,

 

Sizlerle Arduino ile Bluetooth bağlantısı ile kontrol etmeyi anlatacağım. Elimde bir Arduino Nano V3.0 ve bir de HC-06 Model Bluetooth Module var.  Arduino ile Bluetooth haberleşmesini sağlamak Arduino tarafındaki kodlamada ve işlemede zor birşey olmadığını gördüm. Uğraş verici kısım ise başka bir Android gibi bir cihazdan haberleşmesini sağlamak.

HC-06 Bluetooth modülümüzde bilmemiz gereken 4 bacak bağlantısı var. Bunlar; VCC, GND,RX ve TX dir. VCC ve GND artı-eksi enerji girişleri zaten. 3.3 V'luk bir besleme yapıyoruz. Gelelim diğer iki bacağa. TX bacağı Arduino tarafından Transmit edecek değeri göndermek için kullanılır. Arduinodan başka bir cihaza komut veya mesaj bu yoldan iletilir. İletilen değer text bir değerdir. Karşı tarafta bunu text olarak okur ve işlem yapar. RX bacağı ise başka bir bluetooth lu cihazdan gelen mesaj ya da komutu okumak için kullanılır. Arduino buradan okuduğu mesaja göre işlemlerini gerçekleştirir.

Şimdi bu bağlantıları sağlamak için gerekli olan kütüphanemize bakalım. Burada bir seri haberleşme olduğundan dolayı <SoftwareSerial.h>  kütüphanesini projemizde kullanacağız. Bu bize seri haberleşmeyi sağlayacaktır.

Okuma ve yazma pinlerini belirlemek için "  SoftwareSerial myBluetooth(10, 11); "  komutunu kullanılır. Burada Arduino nun 10 ve 11 bacağını kullanacağımızı belirledik. 10. bacaktan veri okuma ve 11. bacaktan veri gönderme işlemleri yapılacaktır.

Sürekli okuma işlemini takip etmesi için setup komut bloğunda  myBluetooth.begin(9600); yazarak 10 ve 11. bacaklardan seri haberleşmeyi başlatıyoruz.  

Arduino tarafından bluetooth bağlantısının olduğunu kontrol etmek için bir şart yazıyoruz.    myBluetooth.available() komutu ile bir bluetooth bağlantısının olup olmadığı kontrol edilir. Burada bağlantı varsa bu komut true değeri alır.

Ve geldik son 2 komuta. Bluetooth bağlantısı oluştuktan sonra karşıdan gelen değeri okumak için myBluetooth.read();  komutu kullanılır. Bu komut RX değerini okur. Ben projede bunu deger diye bir değişkene attım ve şart cümlecikleriyle kontrol ettim. okunan deger = 0 ise kapıyı kapat komutu, deger  = 1 kapıyı kapat komutu ve deger = 2 ise arduino nun ölçtüğü sıcaklık değerini gönder komutunu verdim. Bunları dahada arttırark işlemlerinizi çoğalta bilirsiniz. Android uygulamada yer alan text alanıyla değer gönder diyerek kendi uygulamanızı zenginleştirebilirsiniz.

Buradaki son komutumuzda sıcaklık değeri gönderirken kulladığımız komut olan myBluetooth.print(sicaklik); komutudur. Print ile TX den bluetooh üzerinden text değerin gönderirmesi sağlanır. Bunu da yazdığımız diğer taraftaki uygulama text olarak okur.

Arduino tarafındaki komut tamamı bu kadar. Ben uygulamada mini bir akıllı ev uygulaması yapmayı plandağım. Bir android uygulama ile bağlantı sağladım ve oradan 0, 1 ve 2 değerlerini Arduino ya göndererek işlemler yaptım. Arduino devresinde birde kapı zili uygulamasını entegre ettim. Kapı ziline basıldığında Arduino dan Android uygulamaya "Kapi Zili Caldi" şeklinde bir mesaj geliyor ve Kapıyı aç komutu ile Android den Arduino ya kapıyı aç (1) komutunu gönderiyorum. Ayrıca devreye bir tane LM 35 Sıcaklık Sensörü entegre ettim ve Android uygulamadan sıcaklığı goster isteği yaptığımda Arduino o anki sıcaklık değerini uygulamanıza gönderiyor.

Aşağıda devre şemasını, Arduino kodlarını ve Android'in Apk sını paylaşıyorum. Size Kolay Gelsin 🙂

 

ANDROİD UYGULAMA

Bluetooth_Control_Apk

Uygulamayı telefonunuza indirip kurduktan sonra bluetooth bağlantıyı sağlamak icin Devrenin enerjili olması ve Telefonun Bluetooth nun açık olması gerekiyor. Telefondan bağlantıyı açtıktan sonra açık olan cihazlar arasında HC-06 şeklinde bir cihaz görünecektir. Bu cihaz ile bağlantı kurunuz. Bağlantı işleminde sizden şifre isteyecektir. Bu şifre HC-06 için default olarak 1234 yada 0000 dır. Bende 1234 şifresini kabul etmişti. Daha sonra uygulamayı açıp "Bağlantıyı Aç" diyoruz. Bağlantının gerçekleştiğini Bluetooth Module üzerinde yanıp sönen ledin sürekli yanmaya başlamasından anlayabilirsiniz. Bağlantı oluştuktan sonra ister butonlar vasıtasıyla isterseni elle text girerer ve "Veriyi Gönder" diyerek işlem yapabilirsiniz.

 

Bluetooth_control_Apk

 

 ÇALIŞMA VİDEOSU

Video linki

 

 DETAYLI DOKUMAN

Makale

 

 DEVRE ŞEMASI

Bluetooth_Kontrollu_Akilli_ev

 ARDUINO KODLARI

#include <SoftwareSerial.h> // gerekli olan kütüphane.
#include <Servo.h> // servomotor için gerekli olan kütüphane

 Servo myservomotor; // sınıfın bir örneğini aldık
 SoftwareSerial myBluetooth(10, 11); // Bluetooth modülün RX, TX ayakları 10 ve 11 e bağlanacak.
 int ledPinOpen=5; // 5. pin led çıkış olacak.
 int ledPinClose=6; // 6. pin led çıkış olacak.
 int ledPinBell=4; // 6. pin led çıkış olacak.
 int buzzerPin=7; // 7. pin buzzer çıkış olacak.
 int buttonPin=2; // 2. pin button giriş olacak.
 char deger; // Android uygulamadan gelecek olan değer
 int buttonState = 0;  
 float sicaklik;
 float gerilim;
 int sicaklikPin = 0; // analog giriş

void setup() {
Serial.begin(9600);
myservomotor.attach(8);             // arduinonun 8. pinini servo çıkış olacak.
myservomotor.write(0);               // motoru çev
myBluetooth.begin(9600);          // 10 ve 11 den okuma başlasın.
pinMode(buzzerPin,OUTPUT);   // çıkış olacak
pinMode(buttonPin,INPUT);      // giriş olacak
digitalWrite(ledPinClose,HIGH);
}

void loop() {
gerilim = analogRead(sicaklikPin); // analog degeri oku
gerilim = (gerilim/1023)*5000;        // analog deger mv ye çevirir.
sicaklik = gerilim/10.0;                         // celciusa çevirip sicakliğa atadık.

buttonState = digitalRead(buttonPin);  // butondan gelen degeri oku
   if (myBluetooth.available())                         // bluetooth bağlantısı varsa
   {
deger=myBluetooth.read();    // bluetooth'tan gelen degeri oku

if(deger == '1'){ // gelen değer 1 ise
myBluetooth.println("Kapi Acildi");         // bluetooth üzerinden değer döndür.  bu dönen değeri android uygulamasında görülür
for(int derece = 0; derece < 90; derece++){
myservomotor.write(derece);                // motoru çevir
        }
   }
if (deger == '0'){
digitalWrite(ledPinOpen,0); // ledi sondur
digitalWrite(ledPinClose,1); // ledi yak
myBluetooth.println("Kapi Kapandi");
for(int derece = 90; derece > 1; derece–){ // 90 derecelik açı yap
myservomotor.write(derece); // motoru çevir
      }
   }
 if(deger == '2')
  { 
myBluetooth.print("Ortam sicakligi ");
myBluetooth.print(sicaklik);
myBluetooth.print(" derecedir.");
   }
}
if (buttonState == HIGH) {
myBluetooth.println("Kapi Zili Caldi");
digitalWrite(buzzerPin, HIGH);
delay(1000);
}
else {
digitalWrite(buzzerPin, LOW);
digitalWrite(ledPinBell, LOW);
}
delay(100);   // bir sonraki veriyi hazırlamak için

}

Bir yorum bırakın

This site uses Akismet to reduce spam. Learn how your comment data is processed.