E-Bülten’e kayıt olun

E-Posta:



Sen de Bir Şeyler Yap! (2)

Sen de Bir Şeyler Yap! (2)

Uzaktan kumandalı araba projemizi yapmaya devam ediyoruz. Bu yazıda elimizi Arduino ve Android ile kirleteceğiz.

Geçen yazımda, Arduino ve Bluetooth kullanarak motorları nasıl hareket ettireceğimizi anlatmıştım. Şimdi bu yaptığımız işi telefonla kontrol edebileceğimiz uzaktan kumandalı araba şekline döndürelim.

Araba yaparken bir Android uygulaması yapacak, Arduino programlayacak ve bir mekanik tasarım yapacağız. Bu bölümlere başlamadan önce belirtmeliyim ki zaman zaman mekanik ve yazılımsal birçok problem ortaya çıkacak. Ne hatanın sebebini ne de nasıl çözeceğiniz konusunda çoğu zaman fikriniz olmayacak, deneme yanılma yöntemiyle ilerleyebileceksiniz.

Projeye başlamak için ihtiyaç listemiz aşağıdaki gibi:

  • Herhangi bir model Arduino mikrodenetleyici
  • 4+ üstü sürüme sahip bir Android cihaz
  • Oyuncak bir araba ya da araba maketi
  • L293D motor sürücü
  • Güç kaynağı
  • Arduino için HC-5 Bluetooth
  • Bol miktarda kablo (erkek-erkek, dişi-erkek gibi)
  • Biraz sabır 🙂

Öncelikle sistemin nasıl çalışacağını basit bir akış diyagramı ile anlatayım.

Uzaktan kumandalı araba akış şeması

Görüldüğü gibi Android cihazda kullanıcı komutları vererek bunları Bluetooth aracılığıyla arabaya yönlendirmekte. Aracın üzerindeki Bluetooth modülü bu gelen davranış talepleri Arduino ile motorlara iletip, aracın kontrolü sağlanıyor. Şimdi projenin ayaklarını teker teker ele alalım.

 

Android tarafında yapılması gerekenler

Uygulama biraz karmaşık olduğu için daha çok pseudo kodlar ve akış diyagramlarıyla çalışma mantığını anlatacağım. Geliştirme kısmında aklınıza takılanlar olursa, GitHub üzerinden yazarsanız elimden geldiğince cevaplamaya çalışırım. Uygulama tilt control ve tuş kontrol ile çalışacak.

Tilt Control için akış diyagramı 

tilt_control_flowchart_-_new_page_0

Pseudo kod:

open accelometer;
sensorvules= take_values(accelometer);

control bluetooth;
phone_position_x= take (phone_position);
phone_position_y= take (phone_position);

x_axes_value=(phone_position_x * max_pwn_value/tilt_pivot; //sag sol
y_axes_value=(phone_position_y * max_pwn_value/tilt_pivot; //ileri geri

if(x_axes_value > max_pwn_value)
x_axes_value = max_pwn_value //tilt left
else
if(x_axes_value < -max_pwn_value)
x_axes_value = -max_pwn_value // tilt right

if(y_axes_value > max_pwn_value)
y_axes_value = max_pwn_value; //tilt forward
else
if(y_axes_value < -max_pwn_value)
y_axes_value = -max_pwn_value; //tilt backward
else
if(y_axes_value >= 0 && y_axes_value < yThreshold)
y_axes_value=0;

else //y axes value between zero and threshold
if (y_axes_value < 0 && y_axes_value > -yThreshold)
y_axes_value = 0;
if(x_axes_value > 0) { // car go left,slowdownleft motor
rightMotor = y_axes_value; //right motor go fullspeed
if(phone_position_x > x_pivot_point){
leftMotor = (phone_position_x – x_pivot_point)* max_pwn_value/
(x_axes_limit – x_pivot_point);
leftMotor = -motorLeft * y_axes_value/max_pwn_value);
}
else
leftMotor = y_axes_value – y_axes_value * x_axes_value/max_pwn_value;
}

else if(x_axes_value < 0) { // saga tilt sag motor yavaşlar
motorLeft = y_axes_value;
if(phone_position_x > x_pivot_point){
rightMotor = (phone_position_x – x_pivot_point)* max_pwn_value/(x_axes_limit – x_pivot_point);
rightMotor = -motorLeft * y_axes_value/max_pwn_value);
else
rightMotor = y_axes_value – y_axes_value*x_axes_value/max_pwn_value;
}
else if(xAxis == 0) { //go directly
motorLeft = y_axes_value;
motorRight = y_axes_value;
}

if(motorLeft > 0) { // tilt to backward
directionLeft = “-“;
}
if(motorRight > 0) { // tilt to backward
directionRight = “-“;
}

if(motorLeft > max_pwn_value)
motorLeft = max_pwn_value; //değerleri maxta tut
if(motorRight > max_pwn_value)
motorRight = max_pwn_value; //değerleri maxta tut

sent_left_commmand = directionL+leftMotor;
sent_right_command = directionR+rightMotor;

if (Bluetooth connect)
send(sent_left_commmand, sent_right_commmand)
}

Tilt control ivme ölçer sensorünü kullanarak kullanıcının hareketlerine göre yapmak istediği davranışı belirtmektedir. Cihazınızı direksiyon gibi kullanacaksınız.

Projeye https://github.com/sercesh/Arduino_Car_Android-Uygulamas- adresinden erişebilirsiniz.

(Projeye destek verirseniz çok memnun olurum)

 

Uzaktan kumandalı araba için Arduino tarafında yapılması gerekenler

Arduino üzerinde yapmanız gereken bağlantı tablosunu ve kodu bu bölümde vereceğim. Arduino tarafındaki kod çok karmaşık değil. İşleyiş şemasını aşağıda kısaca özetliyorum:

carduzeltme_-_new_page_0

Alınan sinyaller mantıklı hale getirilip kontrol fonksiyonuyla motor sürücüye gönderilerek motorların dönmesi sağlanıyor. Sağa sola dönüşlerde difransiyelli bir sistem kullanmadığımız için dönüşlerin nasıl olduğu biraz kafa karışıklığına sebep olabiliyor. Biz motorların dönüş yönlerini kullanılarak dönüşleri gerçekleştiriyoruz. Örneklemek gerekirse, sağa dönüş için sağ taraftaki motorlar pozitif yönde dönerken; sol taraftaki motor negatif yönde dönüyor. Bu da aracın kolay bir şekilde dönüş yapabilmesini sağlıyor.

Kodu https://github.com/sercesh/arduino_car_arduino_code adresinden indirebilirsiniz.

Elektronik tasarım ise aşağıdaki şemadan görülebilir:

f0r8xd3hcb8tbj8.medium_0

Özetle Bluetooth’un RX’ini Arduino’nun TX’ine, Bluetooth’un TX’ini Arduino’nun RX’ine bağladıktan sonra 2, 3, 4, 5 numaralı pinleri motor sürücüye göre bağlıyorsunuz.

Şimdiden keyifli sürüşler 🙂

Uzaktan kumandalı araba artık uçmaya hazır!

Halil Keskin

Halil Keskin'i tanımak için etrafınıza bakınmanız yeterli. Macbook Pro'su kucağında, Ikea'nın Poang koltuğuna gömülmüş, yattığı yerden para kazanan, arada aromalı kahvesini yudumlayarak etrafa laf yetiştiren birisini görürseniz, Halil ile karşı karşıyasınız demektir!

Yorum Yok

Yorum Yaz

Yorum
İsim
E-Posta
Website