3 Boyutlu Akıllı Arduino Robot Kol Yapımı

Merhaba arkadaşlar. Bu yazımızda Android işletim sistemli akıllı cihazlar tarafından kontrol edilebilen Robot Kol uygulaması yapacağız. Projeyi internette bulup, tasarımını çok beğendik ve yapmaya karar verdik.

Projemiz Mobil Uygulama, Arduino ve 3 boyutlu yazıcıdan basılmış mekanik olmak üzere 3 kısımdan oluşmaktadır.

Gelin önce malzemelere bi’ göz atalım.

Projeye ait malzeme listesi

– 4 x Tower Pro SG90 RC Mini Servo Motor
– Arduino Sensor Shield
– Arduino Uno (Tercihe bağlı klon veya orijinal kullanabilirsiniz.)
– 12V Adaptör
– HC-06 Bluetooth Modülü
– Jumper Kablo

Projenin montajına buradan erişebilirsiniz.

Projenin 3D baskı dosyalarına buradan erişebilir veya bizden satın alabilirsiniz.

App Inventor Nedir?

MIT tarafından geliştirilen ve bloklar ile “sürükle-bırak” mantığında programlanabilen Android uygulama geliştirme programıdır. Kullanmanız için Android programlamaya dair hiçbir bilginiz olmasına gerek yoktur ?

Projeden kısaca bahsetmek gerekirse önce MIT App Inventor 2 isimli bir uygulama geliştirme programında arayüz oluşturuyoruz. Oluşturduğumuz uygulama yoluyla Android cihazımızı Arduino’ya bağladığımız Bluetooth modülü ile eşleştiriyoruz. Bu eşleşme sayesinde Robot Kolunu Android cihaz üzerinden kontrol edebiliyoruz.

Öyleyse başlayalım !

Önce MIT App Inventor 2 programından bir uygulama oluşturalım.

Tasarım kısmında Arduino’ya göndereceğimiz Bluetooth sinyallerini “slider”lar ile kontrol edebiliyoruz. Arduino programımızdaki sinyal değerlerinin ne anlama geldiğini aşağıdaki şekilde inceleyebilirsiniz.

Uygulamanın tasarımı tamamen size kalmış. Bizim tasarımımız örnekteki gibidir :

Robot Kol Android Uygulaması

Devre Şeması

Bağlantıları buradan da takip edebilirsiniz : 

Arduino Programı

Öncelikle programın çalışma mantığından bahsetmek istiyorum. Programın hemen başında Servo motorlarımızı, Bluetooth modülümüzü ve pinlerini tanımlıyoruz. Void setup() bölümünde ayrıca seri iletişimi etkinleştirmek için serial.begin(9600); , bluetooth iletişim için bluetooth.begin(9600); fonksiyonlarını yazıyoruz. Void loop() kısmı programımızın ana fonksiyonudur. Eğer 2 bit veya üzeri bluetooth sinyali gelirse ana fonksiyonun çalışmasını istiyoruz. Eğer bu şart gerçekleşiyor ise fonksiyonumuz servo motorumuzun pozisyon bilgisini bluetooth sinyalleri ile okumaya başlıyor. ( unsigned int servopos = bluetooth.read(); unsigned int servopos1 = bluetooth.read(); unsigned int realservo = (servopos1 *256) + servopos; )

Android cihazımızdan gönderdiğimiz Bluetooth sinyalleri 1000-1135 arasında ise birinci servomuzu 0-135 derece arasında kontrol edebiliyoruz. (Tut/Bırak)

Bluetooth sinyalleri 2000-2090 arasında ise ikinci servomuzu 0-90 derece arasında kontrol edebiliyoruz. (Sağ/Sol)

B sinyalleri 3000-3180 arasında ise üçüncü servomuzu 0-180 derece arasında kontrol edebiliyoruz. (Yukarı/Aşağı)

Bluetooth sinyalleri 4000-4120 arasında ise dördüncü servomuzu 0-150 derece arasında kontrol edebiliyoruz. (İleri/Geri)

Not: Derece değerleri robotun mekaniğine göre değişebilir. Robotumuz 3d baskı olduğu için montajda ve robotun hareketinde çeşitli problemler meydana gelebilir. Robotun yazılımı, bu problemlere göre güncellenebilir.

#include <SoftwareSerial.h>
#include <Servo.h>   // servo ve seri haberleşme için kütüphaneleri tanımlıyoruz.

Servo myservo1, myservo2, myservo3, myservo4; // servolarımızı tanımlıyoruz.

int bluetoothTx = 10;
int bluetoothRx = 11;  // Bluetooth alıcı vericilerini tanımlıyoruz.

SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);

void setup()
{
myservo1.attach(5);   // Servolarımızı Arduino'nun pwm(~) çıkışlarına bağlayalım.
myservo2.attach(6);
myservo3.attach(9);
myservo4.attach(3);
Serial.begin(9600);  
bluetooth.begin(9600);  // 9600 baud'luk bir haberleşme tanımlayalım.
}

void loop()
{
if (bluetooth.available() >= 2 ) // 2 hız seviyesindeki Bluetooth sinyal alıyor mu? 
{
unsigned int servopos = bluetooth.read(); 
unsigned int servopos1 = bluetooth.read(); 
unsigned int realservo = (servopos1 * 256) + servopos;  

// Alınan sinyaller kaydediliyor.
// AppInventor'da her servo için ayrı sinyal göndermiştik.
//Şimdi de her servo için tanımlanan sinyalin alınıp alınmadığını kontrol ediyoruz.
//realservo , Uygulamamızdan gelen sinyal değerleri.
// Bu değerler her servo için ayrı ayrı tekrar tanımlanıyor.
// "map" komutu ile bu sinyalleri, motora vereceğimiz açı değerlerine çeviriyoruz.
// örnek: map(servo,alınan min.sinyal,alınan max.sinyal,min.Açı,max.Açı);

if (realservo >= 1000 && realservo <= 1135) // tut bırak
{
int servo1 = realservo;
servo1 = map(servo1, 1000, 1135, 0, 135);
myservo1.write(servo1);
delay(10);
}

if (realservo >= 2000 && realservo <= 2090) { // sağ sol

int servo2 = realservo;
servo2 = map(servo2, 2000, 2090, 0, 90);
myservo2.write(servo2);
delay(10);
}

if (realservo >= 3000 && realservo <= 3180) { // yukarı aşağı
int servo3 = realservo;
servo3 = map(servo3, 3000, 3180, 0, 180);
myservo3.write(servo3);
delay(10);

}

if (realservo >= 4000 && realservo <= 4120) { // ileri geri

int servo4 = realservo;
servo4 = map(servo4, 4000, 4120, 0, 120);
myservo4.write(servo4);
delay(10);

}
}
}

Ve bu da projemizin son hali ?

 

 

Bir cevap yazın

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