Arduino ve android kontrollü kendi oyuncak arabamizi yapalim
Yaklaşık 1 saat içinde kendi kumandalı arabanı yapmak istermisin.
Gerekli malzemeler:
– 1 Adet arduino uno
– 1 adet android telefon veya tablet
– 1 adet hc-05 veya hc-06 bluetooth modulu
– 1 adet 12v servo motor metal dişli kullandım
– 1 adet arduino l298 motor surucu devresi
– 1 adet 12 v lipo pil yuksek amper daha iyi
– 1 adet mini on/off anahtar
– baglantı kabloları
– Robot şasesi
– 2 adet 2500 rpm 12v dc motor
– 2 adet uygun tekerlek
– on direksiyon sistemi oyuncak arabadan söküldü.
Robot bağlantı resimleri:
Robotun app inventor programlaması:
Tasarım:
Önce yeni bir proje açalım.bluetooth bağlantilarini listemek icin bir adet buton ve liste kutusu ekliyoruz. Şimdi sira y ekseninindeki değişikliği göstermek için 2 adet label ekleyelim.y eksenini direksiyon sistemi için kullanacağız.ileri,geri yönleri için ve fren yapmak için buton koyalım.Arabamıza gaz vermek için slider koyalım ve ismine hiz adi verelim.bluetooth ile haberleşme belirli periyotlarda yapabilmek için timer ekleyeceğiz.tabiki eksen kontrolü için Accelerometter sensorunden yararlanacağız.bizim için y eksenindeki değişikliğe bakmamız yeterli olacaktır.
Kod:
Butonların click olaylarına bluetooth ile geri,ileri ve fren yazılarını göndereceğiz.bu text değerleri arduino kodlarıyla kontrol etmek için kullanacağız.
Timer döngüsü içerisinde bluetooth kontrol etmemiz gerekiyor.
Eski değerleri kontrol etmek için global değişkenler tanımladım.
Kodun tamamlanmış hali aşağıda ;
Şimdi build ederek apk dosyamızı hazırlıyoruz ve android cihazımıza yüklüyoruz.
Robotun arduino kodları:
String readString;
#include <Servo.h> //servo kütüphanesi çağırıyoruz
// Motor pin bağlantıları eski l298 motor sürücüye göre
int pwm_a = 3;
int pwm_b = 11;
int dir_a = 12;
int dir_b = 13;
int yon=88;a
// rgb led yakmak için
const int kirmizi = 18;//analog a4
const int yesil = 17;//analog a3
const int mavi = 16;//analog a2
Servo _direksiyon; // servo motoru kontrol etmek için servo tanımladık
int eskidegersofor=0;
int deger=1;
int solhiz=70;
int saghiz=70;
void setup()
{
Serial.begin(9600);
//pinMode(led,OUTPUT);
pinMode(pwm_a, OUTPUT);
pinMode(pwm_b, OUTPUT);
pinMode(dir_a, OUTPUT);
pinMode(dir_b, OUTPUT);
pinMode(kirmizi, OUTPUT);
pinMode(yesil, OUTPUT);
pinMode(mavi, OUTPUT);
analogWrite(pwm_a, 0);
analogWrite(pwm_b, 0);
_direksiyon.attach(10);
motor(0,0);
sofor(90);
}
void loop()
{
while(Serial.available())
{
delay(3);
char c=Serial.read();
readString+=c;
}
if(readString.length()>0)
{
Serial.println(readString);
String gelen=readString;
int deger=gelen.toInt();
Serial.println(deger);
//robot ileri yönde hareket etsin ************************************
if(readString==”ileri”)
{rgb_led(0,0,255);
sofor(90);
if ((saghiz<0) || (solhiz<0))
{
solhiz=solhiz*-1;
saghiz=saghiz*-1;
}
motor(solhiz, saghiz);
Serial.println(“ileri”);
}
//robot geri yönde hareket etsin ************************************
if(readString==”geri”)
{rgb_led(255,255,0);
sofor(88);
if ((saghiz>0) || (solhiz>0))
{
solhiz=solhiz*-1;
saghiz=saghiz*-1;
}
motor(solhiz, saghiz);
Serial.println(“geri”);
}
//robot fren yapsın ************************************
if(readString==”fren”)
{rgb_led(255,0,0);
solhiz=0;
saghiz=0;
motor(solhiz, saghiz);
Serial.println(“fren”);
}
//robot direksiyon sistemi ************************************
if((readString!=”ileri”)&&(readString!=”geri”)&&(readString!=”fren”)&&(deger<100))
{
rgb_led(255,0,255);
if ((deger>-11)&&(deger<0)) yon=80;//sola
//yon=yon+deger;
else if ((deger>0)&&(deger<11)) yon=96;/sağa
else yon=88;//düz
sofor(yon);
motor(solhiz, saghiz);
Serial.println(“yonnn”);
}
//robot gaz verme işlemi
if((readString!=”ileri”)&&(readString!=”geri”)&&(readString!=”fren”)&&(deger>99)&&(deger<301))
{
rgb_led(250,155,155);
solhiz=deger-100;
saghiz=deger-100;
sofor(yon);
motor(solhiz, saghiz);
Serial.println(“hiz”);
}
readString=””;
}
}
//direksiyondan kullanılan servo ayarları
void sofor(int deger)
{
if (deger>eskidegersofor)
{
for (int i=eskidegersofor;i<=deger;i++)
{
_direksiyon.write(i);
delay(15);
}
}
else
{
for (int i=eskidegersofor;i>=deger;i–)
{
_direksiyon.write(i);
delay(15);
}
}
eskidegersofor=deger;
}
////////////////////motor ayarı yapılıyor –> 0 – ileri –> 1 – geri /////////////////////
void motor(int solmotor, int sagmotor)
{
digitalWrite(dir_b, LOW);
digitalWrite(dir_a, LOW);
if (sagmotor<0)
{
digitalWrite(dir_b, HIGH);
sagmotor*=-1;
}
if (solmotor < 0)
{
digitalWrite(dir_a, HIGH);
solmotor*=-1;
}
analogWrite(pwm_a, solmotor);
analogWrite(pwm_b, sagmotor);
}
void rgb_led(int r,int g,int b)
{
analogWrite(kirmizi, r);
analogWrite(yesil, g);
analogWrite(mavi, b);
}
Arduino kodumuzu robotumuza atarken bluetooth cihazımızı ( 5v kablosunu çıkaralım) devre dışı bırakmayı unutmayın.
Herkese iyi çalışmalar…
Klavyede “print screen” diye bi tuş var.
Bil istedim.
Yorumun için teşekkürler.bu yazıyı telefonu yeni aldığım için oradan yazdım.pcde güncellediğim zaman dikkate alırım.?
Kardeşim bu kullandığın mıt app tam olarak ne oluyor ne işe yarıyor bununla ilgili bilgilendirme yapar mısın?
google tarafında desteklenen bir proje.program blokları sayesinde java bilgisine ihtiyaç duyulmadan basit ve orta seviyeli çok azda ileridüzey android uygulama yazma imkanı tanıyan ve bu uygulamayı mağazaya gönderme imkanı tanıyan, internet tabanlı programdır.kesinlikle google chrome da açman gerekiyor.çalışmalarında başarılar dilerim.
Hocam androidden kontrol ederken ileri ve geri için buton yerine direkt pwm kontrol edecek şekilde silder koymak mümkün mü?
Siteyi yenilediğim için ancak şimdi vakit bulup cevap verebildim. Slider koyarak pwm yapabilirsiniz.