Android Telefonunuzun İvme Sensörleri ile Kontrol Edilebilen RC-Araba Yapımı. 1


Android Telefonunuzun İvme Sensörleri ile Kontrol Edilebilen RC-Araba Yapımı.

Evet arkadaşlar uzun bir aradan sonra arduino ve android’i kullanarak yapmış olduğum çalışmalarıma devam etme mutluluğu içinde sizlerle yeni bir makale daha paylaşmak istiyorum.Bir önceki Rc araba çalışmamızda telefonumuzdan kontrolü uygulama arayüzümüze koyduğumuz sağ-sol,ileri,geri ve hız kontrolü şeklindeki butonlar ve seekbar ile sağlıyoruduk.Tabi kide bunun zevki ayrı ama benim gibi bununla yetinmek istemeyen arkadaşlarım için şu anki kontrol arayüzü daha heyacan verici:) Sağ, sol, hız butonları yerine yön ayarlarını telefonumuzun ivme sensörlerinden alarak yön kontrol edebileceğimiz daha zevkli bir arayüze, hız ayarını ise aynı telefonunuzda oynadığınız araba oyunlarındaki gibi elinizi gaz pedalında tuttuğunuz  sürece ileri ve ya geri giden bir hız kontrol butonuna kavuşturduk.

Son hali olarak yeni bir video çekmedim ama yapım aşamasında ilk sürüşlerim olarak çektiğim videolardan biri:Tabi okadar çok kullanmadığım için yönlerini karıştırdığım çok oldu:)

Uygulama Ekran Görüntüleri:

Screenshot_2015-03-19-02-18-23 Screenshot_2015-03-19-02-20-17 Screenshot_2015-03-19-02-20-31

Şimdi isterseniz lafı çok uzatmadan Kodlama Kısmına Geçelim:

 

Android:

Arkadaşlar Konu Üzerinde fazla durmayacağım.Çünkü bir önceki rc-arabamızın android uygulamasını modifiye ettiğim için çoğu şey aynı ben sadece burada elimizin butona basılı kaldığı süre boyunca veri gönderme kısmını ve İvme sensörünü okuduktan sonraki işlemlerimizi açıklayacağım.

Bir önceki programımızın bluetoothdemo class’ını değiştirmeniz bile yeter.

butonlara bastığımız sürece veri gönderme mantığı

http://stackoverflow.com/questions/3553163/android-long-touch-event

burada güzel bir örnekle açıklanmış.Bu uygulamayı yaparken bence en faydalı olanıydı benim için.

İleri geri butonlarına bastığım sürece arduino ‘ya ileri için 803, geri için 804 string ifade olarak göndermekteyim 803 ve 804 olarak göndermem deki amaç aradaki parazitlerden kurtulmam.Elimizi butonlardan çektiğimizde ise 805 değerini gönderiyorum yani bir nevi arabayı boşa alıyorum.pwmleri sıfırlıyorum  ve pinleri low yapıyorum.

Your ads will be inserted here by

Easy Plugin for AdSense.

Please go to the plugin admin page to
Paste your ad code OR
Suppress this ad slot.

ivme sensöründen aldığım bilgileri önce Math.round(y) diyerek en yakın tam sayıya yuvarladım küsüratlarla uğraşmamak için.Şimdi ivme sensölerinden gelen bilgi

 

telefon sağa doğru yattığında pozitif sola doğru yattığında negatif olmakta buna göre bir switch case yapısı oluşturdum ve bu case yapılarında da göndereceğim verileri tanımladım.Burada şuna dikkat ettim dikkat ederseniz gönderilen string değerler hep birbiri ile uyumlu örn: sola yattığın da 901,902… sağa yattığında da 702,703 gibi veriler gönderiyorum arduino da da sola ve ya  sağa yattığını işte bu değerler ile anlamaktayım.Arduino kodları kısmında kodları daha detaylı açıklayacağım biraz daha oturmuş olur.

Gerisi ıvır zıvır arkadaşlar layout ekranını doldurmak için yaptım.Ekrana bluetooth ‘ a bağlandığı anda kullanıcının uygulamada geçirdiği süreyi ve araçla kaç dk oynaya bildiğini  görmesi için bir zaman göstergesi ve sağa sola dönüşlerde ki sertliği görmesi  için ivme bilgileri var.

 

 drawable/button.xml:

 layout/main.xml:

 

Arduino Kaynak Kodları:

Burada arkadaşlar bir önceki rc araba çalışmamızın kaynak kodlarıda mevcut enlatta ****** ile ayardım ve yorum satırı içine aldım.

arduino kodlarını ufak ufak açıklayacak olursam; veriyi string olarak alıyorum ve string olarak işliyorum.

Bu ifade ile dedimki; .3. ile 6. karakter arasındaki ifade 803 veya 804 ise ve ilk üç karekter ile son üç karakter aynı değil ise dedim.3-6 karakterler arasını kontrol etmemdeki amaç ivme verileri ile ileri geri komutları aynı anda gelmekte ivme verileri genel de ilk üç rakam olmakta 3. ile 6. karakterkerde ileri-geri komutları olmakta bu yüzden 3-6 arasını kontrol ettim.tam terside olmakta bunu da kodlayacaktım ama zamanım olmadığından ekle yemedim güzelleştirmek eksikleri tamamlamak size kalmış artık.

 

Alt satırlarda sırayla

diyerek ileri ve geri butonlarına basıldığıında gerçekleşecek aktivitleri yazdım.

arkadaşlar burada önemli olan android kısmında da açıkladığım dönüş hızları ben pek fazla senkranizasyon yapamadım ama yaptığım kadarıyla matığı şöyle açıklayım sağa sola dönmesi için özel veri gönderiyorduk sağ için 702 vs sol için 902 vs gibi bunlarıda arasında ikiye böldüm sağa sola döndüğünü anlamak için.bunu anladıkdan sonra dönüş hızlarını ise telefonun ivme serliğine göre gelen değerlerin örn: 705 gelmiş ise 3. karekterini (5)alıp  bunu integer veri tipine dönüştürüp 20 ile çarpıyorum ve max pwm olan 255 dğerinden çıkartıyorum.Böylelikle biraz daha stabil bir dönüş alıyorum.Ama bu işlem gelen ivme değelerinin son karakteri 8 den küçük ise olarak ayarladım zaten 8 den büyük ise adam telefonu aşa yukarı 90 derece tutmuş oluyor onlarıda özel olarak yazdm.8 ise dedim pwm 100’e düşür 9 ise dedim pwm 0 yap.böylelikle belli bir noktadan sonrasını keskin dönüşler aldım.

Ha birde unutmadan söyleyim belki en önemli özelliklerden 🙂 bu blog yazısını yazdığımda telefondan gelen değer sadece 803 ve 804 ise yani ivmesis bir değer geliyor ise bunu arduino kodlarına eklemedim:) böyle olunca sadece ileri ve geri gitmez mutlaka en basiti birde olsa bir ivme ile sürünüz:) ama yok kardeşim ben yazarım derseniz odaha güzel olur.

Githup Kaynak Kodları:https://github.com/zafersn/Android-ArduinoRcCar


Bir yorum ekleyin

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

twenty + 20 =

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

Hakkında yorum “Android Telefonunuzun İvme Sensörleri ile Kontrol Edilebilen RC-Araba Yapımı.

  • Sema

    İyi akşamlar.apk yi yukledim ve calistirmaya basladigimda bagli degil yazisi cikiyor hc05 modulunu gormuyor.Normalde butonla kontrol edebiliyorum ama burda herhangi bir bluetooth listesi cikmiyor o yuzden baglanamiyorum.