Android Bluetooth Kodu ve Arduino Bağlantısı

0
Android Bluetooth Kodu ve Arduino Bağlantısı

Herkese merhabalar bu yazıda android bluetooth kodlarını paylaşacağım ve android ile arduino arasında bir bağlantı gerçekleştirip arduino’ya sinyaller yollayacağım android cihazımdan. Çoğu sitede android kısmının hazır olarak google play den indirildiğini gördüm biraz da bu sebepten herkes kendi android programını  yazabilsin diye bu yazıyı yazmaya karar verdim. Benim yazdığım android programında 3 adet sinyal gidiyor arduino’ya bunlardan ilki fotoğraf çekme sinyali bu sinyal ile röle’ye bağladığım fotoğraf makinesine sinyal gidecek ve makine fotoğraf çekmiş olacak. Diğer iki sinyal ise servo kontrolü için olan sinyaller, bu sinyaller ile servomuz sağa ve sola dönecek. Aşağıda ne yapmak istediğimi video da gösterdim(görüntü kalitesi harika değil biliyorum)

Yukarıda ki görselde görüldüğü gibi bağlantıları gerçekleştiriyoruz standart bilinen bağlantılar olduğu için sadece bu resmi göstermek yeterli gibi geliyor bana.

Şimdi hemen android kodlarına geçelim;

<pre>package com.qzcelik.air.arduinobluetooth;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.bluetooth.BluetoothAdapter;//adapter kütüphanesi
import android.bluetooth.BluetoothDevice;//cihaz kütüphanesi
import android.bluetooth.BluetoothSocket;//soket kütüphanesi

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.io.IOException;
import java.io.OutputStream;
import java.util.Set;
import java.util.UUID;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {


    Button fotoCek,servoSol,servoSag;
    final String cihazName="HC-05";//bluetooth modülümüzün adı adresi ile ulaşmakta mümkün
    final UUID bluetootAdres=UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");//standart bluetooth adresi
    BluetoothSocket soket;//bluetooth için soket
    BluetoothDevice cihaz;//bluetooth cihazı
    OutputStream disari;//dışarı göndereceğimiz veriler

    boolean cihazVarMi = false;//bağlantı kuruldu mu kontrolü için


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        fotoCek = (Button) findViewById(R.id.button);//tanımladığım butonlar
        servoSol = (Button)findViewById(R.id.button2);
        servoSag = (Button)findViewById(R.id.button3);
        fotoCek.setOnClickListener(this);
        servoSol.setOnClickListener(this);
        servoSag.setOnClickListener(this);
        kontrol();//program açıldığı an kontroller sağlansın cihaz var mı yok mu
        cihazVarMi = bluetoothBaglanti();//program açıldığı an bağlan

    }

    @Override
    public void onClick(View view) {//buton kullanımları için override edilen fonksiyon


        if (cihazVarMi == true) {
            switch (view.getId()) {
                case R.id.button: {//fotoğraf çekme butonu
                    try {
                        disari.write(2);//veriyi gönderdiğimiz outputStream
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                break;
                case R.id.button2: {//servoyu sola döndermek için
                    try {
                        disari.write(3);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                break;
                case R.id.button3: {//servoyu sağa döndermek için
                    try {
                        disari.write(4);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                break;
            }
        }

    }

    void kontrol()//burada gerekli istekler sağlanıyor bluetooth var mı yok mu gibi
    {
        boolean bulundu=false;
        BluetoothAdapter blu=BluetoothAdapter.getDefaultAdapter();//adapter çağrılıyor
        if(blu==null)//eğer bulunmazsa mesaj ver
        {
            Toast.makeText(this,"hata oluştu",Toast.LENGTH_SHORT).show();
        }

        if(!blu.isEnabled())//bluetooth kapalı ise açma isteği yolluyor
        {
            Intent goster=new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);//bluetooth için istek
            startActivityForResult(goster,0);//0 default değeri göndermek için boş olduğundan
        }

        Set<BluetoothDevice> bondedDevices=blu.getBondedDevices();//bağlı eşleştirilmiş cihazları bulup aktarıyor

        if(bondedDevices.isEmpty())//eğer hiç cihaz yoksa uyarı veriyor
        {
            Toast.makeText(this,"boş",Toast.LENGTH_SHORT).show();
        }
        else
        {
            for(BluetoothDevice iterator : bondedDevices)//cihazlar varsa aradığımız cihazı buluyor
            {
                iterator.getName().equals(cihazName);//önceden belirlediğimiz cihazımız buluyoruz(HC-05)
                cihaz=iterator;//cihazı bağlıyoruz
                bulundu=true;
                break;

            }
        }
    }

    private boolean bluetoothBaglanti()//gerekli şartlar sağlandıktan sonra bağlantı gerçekleştiriliyor
    {
        boolean kont=true;

        try {
            soket=cihaz.createInsecureRfcommSocketToServiceRecord(bluetootAdres);//soket ile cihazı bağlıyoruz
            soket.connect();//bağlantı...

        }  catch (IOException e) {
            e.printStackTrace();
            kont = false;
        }
        if(kont)//eğer bir sorun ile karşılaşmadıysak dışarıdan gelen verileri ve gidecek verileri global değişkenlere aktarıyoruz
        {       //istediğimiz yerden ulaşabilelim diye
            try
            {
                disari=soket.getOutputStream();//dışarı ile bağlantı sağlandı
            } catch (IOException e) {//disari değişkeni ile artık istediğimiz veriyi gönderebiliriz.
                e.printStackTrace();
            }
        }
        return kont;
    }

}

Yukarıda ki kodda olabildiğince açık bir şekilde açıklama satırları ile açıklamaya çalıştım. Burada dikkat edilmesi gereken noktalar kütüphaneler kesinlikle import edilmeli en yukarıda global olarak tanımladığım değişkenler yine aynı şekilde kesinlikle tanımlanmalı ve bluetoothAdres değişkeni standart onu aynen yazmalıyız kullandığımız bluetooth cihazının adını da aynı şekilde belirtmeliyiz. Diğer önemli bir nokta benim bluetooh için yazdığım iki adet fonksiyon var bunlar kontrol ve bluetoothBaglanti fonksiyonları bu fonksiyonlar ile sadece bir kez istek yapılmalı sürekli bir istek olursa bağlantı kurulamayacaktır. Ben bundan dolayı bu iki fonksiyonu programın ilk açıldığı anda çalışan onCreate fonksiyonun içinde çağırdım ki sadece bir kez çalışsın diye siz ayrı olarak bir buton koyup orada da çağırabilirsiniz bağlanma butonu tarzında.Verileri gönderirken ben sayısal veriler gönderdim daha kolay olması açısından ama direk string değer yollanıp arduino kısmında string değerleri okumakta mümkün sayısal değer direk basit bir şekilde okunabildiği için ben sayılsa değerleri tercih ettim.

Şimdi arduino kodlarına bakalım

#include <Servo.h>//servo kütüphanesi
Servo servo;
void setup() {
Serial.begin(9600);//seri port bağlantısı
servo.attach(5);//servo için 5. pin
servo.write(90);//ilk başta servo ortada başlasın
pinMode(8,OUTPUT);//fotoğraf çekme pini
}
 
void loop() {
 
 int deger=Serial.read();//serial den verileri oku
 if(deger==2) //bluetooth dan alınan degere göre burda fotoğraf çekimi için sinyal alınıyor
 {
 digitalWrite(8,HIGH);
 }
 if(deger == 3)//bluetooth dan alınan degere göre burda servo sola dönüyor
 {
 servo.write(170);
 }
 if(deger == 4)//bluetooth dan alınan degere göre burda servo sağa dönüyor
 {
 servo.write(10);
 }
 delay(300);//gecikme zamanı
 digitalWrite(8,LOW);//röleyi tekrar sıfırlıyoruz
 
}

Arduino kodlarıda bu şekilde temel olarak serialden veriyi oku işlemi yap tarzında bir kod parçası serialRead ile veri okunuyor alınan değere göre elemanlara işlemler yaptırılıyor bu kısımı çok anlatmaya gerek yok zaten bu kısım herkese göre değişecektir önemli olan android cihazdan veriyi alabilmek.

Bu yazıda android cihazdan alınan veriler yardımıyla arduino mikrodenetleyicisine bir takım işlemler yaptırdık artık kendi akıllı evinizi, uzaktan kumandalı arabanızı, akıllı ışık vb. gibi bir çok projenizi gerçekleştirebilirisiniz. Şimdilik bu, kadar herkese iyi çalışmalar.

LEAVE A REPLY