Mobil Dünya
Sen de Birşeyler Yap! (2)
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...
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:
[code] 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) }[/code]
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)
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 :)
10.03.2015
Yorumlar
parçaları nasıl ve nereden temin edebiliriz yardımcı olursanız sevinirim
Hocam selam,
robotistan, robot kutusu gibi internet sitelerinde parçaların çoğu var, istersen karaköydeki elektronikçiler çarşısında da bulabilirsin.
Yapmaya başladım ama fiyatlardan dolayı çin den malzeme bekleyeceğim ve diğer bir sorun bluetooth la bağlantı sağladığımızdan veri geç ulaşır kumanda gibi olmaz dedi doğru mu?
İvme Sensörleri ile kontrol
Yön Butonları ile kontrol:
http://stackcuriosity.com/android-ve-arduino-rc-araba-yapalim/
Çok güzel bir makale olmuş gerçekten böyle çılgın bir proje yapılabilir.
Ben projehocamdaki robotu yaptım çokta iyi çalıştı hem malzeme satışlarıda var : http://www.projehocam.com/android-kontrollu-rc-araba-yapimi/