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.
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ı
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:
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:
Ö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 🙂