Bu yazıda bluetooth üzerinden Android işetim sistemli bir telefonla basit bir robot arabayı nasıl kontrol edeceğimizi anlatıyoruz. İleri – geri ve sola – sağa ivme eğim açısını derece bazında ölçer, ardunioya gönderilen motor hızını ve motor yönünü hesaplamak için telefonu kullanır .
Adım 1: Malzemelerin Toplamanması
Kartlar
- Arduino Uno
- L298N Çift H Köprü Motor Denetleyici (Burada kullanılan farklı kırmızı bir versiyondur)
- HC-06 Bluetooth Modülü
Elektronik
-2x 300 RPM dişli 12v motorlar
-12v 1.3Ah Kurşun Asit Piller (motorlar yaklaşık 0.4 Ah çizer ve motor sürücü küçük bir miktarını kullanır)
-Arduino teller
-Arduinodan sıradan 9v pile konnektör
-Pili motor sürücüsüne bağlamak için elektrik telleri ve örs
-Ardunio ile bilgisayarı bağlamak için A tip erkek /B tip erkek USB kablosu
Donanım
4 x 50mm döner kauçuk tekerlek
2x Lynxmotion HUB-02 Universal Hub 6mm
10mm ve 6mm kalınlığında akrilik plastik (Daire testere veya lazer kesici ile kesilmiş)
Yazılım
Android studio ve Arduino ide yazılımları indirin.
Telefon
Öncelikle güncel Android 5 veya benzeri bir telefon gereklidir. (Samsung S5360 Galaxy Y Android’in eski sürümünü kullandığı için usb üzerinden bağlantı sorunları yaşar ve uygulamayı çalıştırmaz. Motorola moto e, Android 5 ile çok iyi çalışır.) Android Studio’da build.grade, eski sürümlerinde de çalışabilir durumda oldugu halde muhtemelen sorun çıkarır. Güncel ivmeölçer ve bluetooth kütüphaneleri kullanılmalıdır.
Adım 2: Kutunun Montajı
Kutuyu satın alabilirsiniz ya da herhangi bir malzemeden yapabilirsiniz. Biz 22 cm uzunluğunda ve 17 cm genişliğinde bir tane kullandık (Bkz Resim).
Motorlar
İki motorun tahrik miliyle birleştirilip kutunun dışına yapıştırılması gerekir, tırtıl vida kullanarak merkezleri birleştirmelisiniz.
Ön Tekerlekler
Lastik tekerleklere iki tane delik delip onları merkezlerinden vidalayın.
Arka Tekerlekler
Tekerlekleri sadece kendi döner plakasından sökelebilirsiniz ve kutusuna deliğinden tekrar bağlayabilirsiniz.
Adım 3: Kablolama
Arduino’ya programları yüklerken bluetooth modülü takıldığında sorun çıkabilir, 0 ve 1 pimleri RX ve TX’tir. Bunun nedeniyse, RX ve TX ana iletişim portlarıdır ayrıca USB üzerinden bilgisayarla konuşmayı sağlarlar. Bu durum, farklı pimler gerekeceği anlamına gelir. 10 ve 11 pimlerinin haberleşme portu olacağını, serileştirilebilir yazılım kütüphanesine bildirmesi için ardunio kodu eklememiz gerekir.
Motor sürücüsü için ayrı bir güç kaynağı gerekmez, 12 V 1.3 Ah pil hem ona hem motorlara yetecek güçtedir.
Motor sürücüsünün yalnızca bir tane toprak soketi vardır bu yüzden pil ile arduino toprak bağlantısını paylaşmak zorundadır.
Motor sürücüsündeki ENA / 5V ve ENB / 5V pimleri bazen jumperlar tarafından karşılanmaktadır. Ardunio ENA ve ENB pimlerine eklenmeden önce bu jumperların kaldırılması gerekir. Hiçbirinin iki adet 5V’luk pime birden bağlanması gerekmez.
Adım 4: Ardunio Kod
Kod :
// USB üzerinden bilgisayara takılı iken arduniodan gönderilen ("") Serial.println mesajlarını görüp ayıklamak için Arduino Seri Monitorünü kullanmalısınız. #include SoftwareSerial mySerial(10, 11); // RX, TX int led = 13; char myChar = 'a'; String string; char LorR; int enA = 3; int in1 = 4; int in2 = 5; int enB = 6; int in3 = 7; int in4 = 8; void setup() { //Seri iletişimi açın ve portun açılması için bekleyin Serial.begin(57600); pinMode(led, OUTPUT); Serial.println("Goodnight moon!"); // SoftwareSerial portu için veri hızını ayarlamak mySerial.begin(9600); mySerial.println("Hello, world?"); pinMode(enA, OUTPUT); pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(enB, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); } void loop() // run over and over { string = ""; //Add to string while(true){ myChar=mySerial.read(); if(32<=myChar && myChar<=127){ string += myChar; } if (myChar==':'){ break; } delay(10); }// While End //Analyse string if (string !="off:" && string !="on:"){ if (string != "L0:" && string != "R0:") { //code for setting motor left or right if (string[0]=='L'){ LorR= 'L'; }else { LorR= 'R'; } string.remove(0, 1); //code for putting it in reverse if (string[0]=='-'){ string.remove(0, 1); string.remove((string.length()-1), 1); Serial.println(string); if (LorR== 'L'){ digitalWrite(in1, HIGH); digitalWrite(in2, LOW); analogWrite(enA, string.toInt()); } else{ digitalWrite(in3, LOW); digitalWrite(in4, HIGH); analogWrite(enB, string.toInt()); } } else { string.remove((string.length()-1), 1); Serial.println(string); if (LorR== 'L'){ digitalWrite(in1, LOW); digitalWrite(in2, HIGH); analogWrite(enA, string.toInt()); } else{ digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(enB, string.toInt()); } } } else { digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); } }//End of long if statment if(string == "on:"){ digitalWrite(led, HIGH); } if(string =="off:"){ digitalWrite(led, LOW); } }//Loop End
Adım 5: Android Kod
Klasörü gözden geçirin ya da winzip ile açın daha sonra Android Studio içine taşıyın. Daha sonra çalıştırabilir ve uygulama olarak telefona yükleyebilirsiniz. Zip dosyasını da buradan indirebilirsiniz:
http://benalper.co.uk/ardunio.php
Anahtar dosyalar şunlardır:
Eşleşmiş Cihazların Aktivasyonu :
deviceList.java
activity_device_list.xml
LED ve Hareket Kontrol Aktivitesi :
ledControl.java
activity_led_control.xml
Manifest:
AndroidManifest.xml
Cihaz Listesini etkinleştirmek için kullanılabilir bluetooth cihazlarını gösterir. Bir kez bağlandığında LED ve Hareket Kontrolünün etkinleşmesini sağlar.
Led düğmelerin Arduino’ya ‘aç:’ – ‘kapa’ mesajı göndermesi pimlerdeki 13 adet LED’in açık-kapalı anahtarlarıyla sağlanmıştır.
Hareket kontrolü; telefonun ivmeölçerinin x ve y algılayıcısından gelen verileri alır. Her zaman bir ölçü değişimi vardır ve sol- sağ motorlar için 0 ile 255 arasında hızı ve yönü hesaplayabilmek için bunu kullanır. Bu değişim ‘L-255:’ veya ‘R100’ vb. formatta arduinoya gönderilir. Arduino kodu bu mesajı sol motor için ENA, sağ motor için ENB’ye hız göndermek için kullanır ve IN1 ve IN2 polaritesinin değişikliğiyle sol motor için IN3 veya sağ motor için IN4’ün yönü değişir.
Kodları indirebilirsiniz:
Çalışma Videosu :
Kaynak: http://www.instructables.com/id/Arduino-Android-Bluetooth-Car/