Robotik Kodlama-Eğitsel Robot Motor Uygulamaları

Bileşenlerinin montajı yapılmış eğitsel robotun kablo bağlantıları:

Eğitsel Robot Bileşenlerinin Kablo Bağlantı Şeması:

Robot bileşenlerini robot gövdesine vidalarla sabitledikten sonra yukarıdaki görseldeki gibi bağlantı şemasından yararlanılarak kablo bağlantılarının yapılması gerekir. Bu bağlantılar kısaca şu şekilde açıklanabilir. Pil yatağından gelen kırmızı kablo (pilin + ucu ) önce açma kapama anahtarına sonra anahtardan çıkan diğer uç, hem mikrodenetleyici kartın Vin girişine hem de motor sürücünün +12 girişine bağlanır. Pil yatağından çıkan siyah kablo (pilin – ucu ) doğrudan hem mikrodenetleyici kartın GND girişine hem de motor sürücünün GND girişine bağlanır. Motor kabloları motor sürücü üzerindeki sağ ve sol klemenslere bağlanır. Yine motor sürücüdeki 4 adet kontrol girişleri mikrodenetleyici kartın D5, D6 (Sağ motor için) ve D9, D10 (Sol motor için) portlarına bağlanır.

Motorların Hareket Durumları:

1- Motorları İleri Yönde Hareket Ettirmek İçin Arduino Kodları:
void setup() {
pinMode(5, OUTPUT);// sağ motor ileri pini
pinMode(6, OUTPUT);// sağ motor geri pini
pinMode(9, OUTPUT);// sol motor ileri pini
pinMode(10, OUTPUT);//sol motor geri pini
}
void loop() {
digitalWrite(5,0); // sağ ileri = 0
digitalWrite(6,1); // sağ geri = 1
digitalWrite(9,0); // sol ileri = 0
digitalWrite(10,1); //sol geri = 1
}

Motorları geri yönde hareket ettirmek için bu sefer D6 ve D10 numaralı portların “1”, D5 ve D9 numaralı portların “0” yapılması gerekir.

Motorların Hareketine Göre Robotun Hareket Durumları:

Eğitsel robotun hareketleri iki motorun hareketine bağlıdır. Mikrodenetleyicinin D5, D6, D9 ve D10 numaralı portlarına gönderilen 0 veya 1 bilgisine göre motorlar hareket etmektedir. Motorların hareketleri de eğitsel robotun hangi doğrultuda hareket etmesi gerektiğini belirlemektedir. Eğitsel robottaki uygulamalarda aşağıdaki tabloda robotun hareket durumlarında kırmızı ile gösterilenler kullanılacaktır. Mavi ile gösterilenler ise çizgi izleyen robot uygulamalarında kullanılacaktır.
Motorların hareketine göre robotun hareketleri şu şekilde sağlanır.

3- Eğitsel robotu sola doğru hareket ettirebilmek için Arduino Kodları:

Eğitsel robotu sola doğru hareket ettirebilmek için yukarıdaki tabloda gösterildiği gibi mikrodenetleyici kartın D5 ve D10 numaralı portlarına 1 verisini, D6 ve D9 numaralı portlarına 0 verisini göndermek gerekir.


void setup() {
pinMode(5, OUTPUT);// sağ motor ileri pini
pinMode(6, OUTPUT);// sağ motor geri pini
pinMode(9, OUTPUT);// sol motor ileri pini
pinMode(10, OUTPUT);//sol motor geri pini
}
void loop() {
digitalWrite(5,1); // sağ ileri = 1
digitalWrite(6,0); // sağ geri = 0
digitalWrite(9,0); // sol ileri = 0
digitalWrite(10,1); //sol geri = 1
}

4- Eğitsel robotu sağa doğru hareket ettirebilmek için Arduino Kodları:

Robotunuzu sağa doğru hareket ettirebilmek için yukarıdaki  tabloda gösterildiği gibi mikrodenetleyici kartın D6 ve D9 numaralı portlarına 1 verisini, D5 ve D10 numaralı portlarına 0 verisini göndermek gerekir.


void setup() {
pinMode(5, OUTPUT);// sağ motor ileri pini
pinMode(6, OUTPUT);// sağ motor geri pini
pinMode(9, OUTPUT);// sol motor ileri pini
pinMode(10, OUTPUT);//sol motor geri pini
}
void loop() {
digitalWrite(5,0); // sağ ileri = 0
digitalWrite(6,1); // sağ geri = 1
digitalWrite(9,1); // sol ileri = 1
digitalWrite(10,0); //sol geri = 0
}

5- Eğitsel robotun ileri, geri, sağa, sola hareket komutlarını içeren fonksiyonları kullanan örnek bir program Arduino Kodları:

Eğitsel robotun ileri, geri, sağa, sola hareket komutlarını içeren fonksiyonları kullanan örnek bir program yazmak gerekirse aşağıdaki işlemler gerçekleştirilmelidir.
Eğitsel robot 2 saniye ileri, 1 saniye geri, 2 saniye sağa, 1 saniye sola gitsin ve 2 saniye dursun sonra da program başa dönsün. Programın belirli saniye aralıklarıyla ileri, geri, sağa, sola hareketini içeren fonksiyonlar “void loop()” fonksiyonu içinde çağrılır. Eğitsel robotun ileri, geri, sağa, sola hareket komutlarını içeren fonksiyon tanımlamaları da “void loop()” fonksiyonu dışında yapılır.


void setup() {
pinMode(5, OUTPUT);// sağ motor ileri pini
pinMode(6, OUTPUT);// sağ motor geri pini
pinMode(9, OUTPUT);// sol motor ileri pini
pinMode(10, OUTPUT);//sol motor geri pini
}
void loop() {
ileri(); //ileri fonksiyonunun kullanımı
delay(2000);
geri(); //geri fonksiyonunun kullanımı
delay(1000);
sag(); //sağa dönme fonksiyonunun kullanımı
delay(2000);
sol(); //sola dönme fonksiyonunun kullanımı
delay(1000);
dur(); //durma fonksiyonunun kullanımı
delay(2000);
}
void ileri(){
digitalWrite(5,1);
digitalWrite(6,0);
digitalWrite(9,1);
digitalWrite(10,0);
}
void geri(){
digitalWrite(5,0);
digitalWrite(6,1);
digitalWrite(9,0);
digitalWrite(10,1);
}
void sol(){
digitalWrite(5,1);
digitalWrite(6,0);
digitalWrite(9,0);
digitalWrite(10,1);
}
void sag(){
digitalWrite(5,0);
digitalWrite(6,1);
digitalWrite(9,1);
digitalWrite(10,0);
}
void dur(){
digitalWrite(5,0);
digitalWrite(6,0);
digitalWrite(9,0);
digitalWrite(10,0);
}

6- PWM ile motorların hızını kontrol eden uygulama için:

Motor sürücüden mikrodenetleyici karta gerekli bağlantılar yapılırken özellikle mikrodenetleyici kartın D5, D6 ve D9, D10 portları kullanılacak diye bir şart yoktur. Mikrodenetleyici kartın diğer portları da kullanılabilir. Ancak mikrodenetleyici kartın D5, D6 ve D9, D10 portları motorlarda hız kontrolü yapmaya olanak tanıyan
PWM çıkışlarıdır. PWM sinyalleri motorlara belirli aralıklarla kesik kesik enerji vererek motorun hızlı veya yavaş dönmesini sağlar. Bu sayede eğitsel robotun hızının kontrol edilmesine olanak tanır. Eğitsel robotun hız kontrolü yapılırken digitalWrite(5,1); komutu yerine analogWrite(5,h); komutu kullanılır. Komutta kullanılan “h” değişkeni burada “0” ile “255” arasında değer alabilen bir sayıyı ifade etmektedir. Bu sayı “255” olduğunda motor en hızlı devirde döner, “128” olduğunda yarı hızda döner, “0” olduğunda ise motorlar durur. Daha önce en yüksek hızda çalıştırılan “robot 2 saniye ileri, 1 saniye geri, 2 saniye sağa, 1 saniye sola gitsin ve 2 saniye dursun sonra da program başa dönsün” şeklindeki programı motorları yarı hızda çalıştırabilmek için yeniden düzenlemek gerekir.


int h=120; // motor hızını belirleyen değişken
void setup() {
pinMode(5, OUTPUT);// sağ motor ileri pini
pinMode(6, OUTPUT);// sağ motor geri pini
pinMode(9, OUTPUT);// sol motor ileri pini
pinMode(10, OUTPUT);// sol motor geri pini
}
void loop() {
ileri(); delay(2000);
geri(); delay(1000);
sag(); delay(2000);
sol(); delay(1000);
dur(); delay(2000);
}
void ileri(){
analogWrite(5,h);
analogWrite(6,0);
analogWrite(9,h);
analogWrite(10,0);
}
void geri(){
analogWrite(5,0);
analogWrite(6,h);
analogWrite(9,0);
analogWrite(10,h);
}
void sol(){
analogWrite(5,h);
analogWrite(6,0);
analogWrite(9,0);
analogWrite(10,h);
}
void sag(){
analogWrite(5,0);
analogWrite(6,h);
analogWrite(9,h);
analogWrite(10,0);
}
void dur(){
analogWrite(5,0);
analogWrite(6,0);
analogWrite(9,0);
analogWrite(10,0);
}

7- Motor Sürücü Kartının Enable Uçları Kullanılarak, For Döngüsü ile Tekerlekleri Hızlandırıp, Yavaşlatma:


int in1=5;
int in2=6;
int in3=9;
int in4=10;

int enA=3;
int enB=11;
void setup() {
// put your setup code here, to run once:
pinMode (in1,OUTPUT);
pinMode (in2,OUTPUT);
pinMode (in3,OUTPUT);
pinMode (in4,OUTPUT);

digitalWrite(in1,1); //sağ ileri
digitalWrite(in2,0);

digitalWrite(in3,1); //sol ileri
digitalWrite(in4,0);
}

void loop() {
// put your main code here, to run repeatedly:
for (int i=0;i<=255;i++)
{
analogWrite(enA,i);
delay(10);
}
for (int i=254;i>=0;i–)
{
analogWrite(enA,i);
delay(10);
}
for (int i=0;i<=255;i++)
{
analogWrite(enB,i);
delay(10);
}
for (int i=254;i>=0;i–)
{
analogWrite(enB,i);
delay(10);
}
}

8- EĞİTSEL ROBOTUN UZAKTAN KUMANDA İLE KONTROLÜ

Eğitsel robot şu ana kadar kullanıcı yönlendirmesi olmadan belirli bir program dâhilînde çalıştırıldı. Bundan sonraki aşamada uzaktan kumanda ile eğitsel robot yönlendirilebilir. Uzaktan kumandalar Görsel 3.22.c’de görüldüğü gibi üzerinde bulunan tuş kombinasyonuna bağlı olarak belirli kodları kızılötesi LED yardımıyla karşı tarafa gönderir. Uzaktan kumandalar, günlük yaşantıda TV, uydu alıcısı, müzik sistemi gibi birçok elektronik aygıtı kontrol etmek için kullanılır. Bu bölümde herhangi bir uzaktan kumanda ile eğitsel robot kontrol edilecektir.

IRRemote kütüphanesini indirmek için tıklayınız.

#include <IRemote.h>

int RECV_PIN = 11;
int h=100; // Robot motorlarının dönme hızı
long bileri = 0xFF18E7;// Robotun ileri gitmesi için kullanılan U.K. kodu
long bgeri = 0xFF4AB5;// Robotun geri gitmesi için kullanılan U.K. kodu
long bdur = 0xFF38C7;// Robotun durması için kullanılan U.K. kodu
long bsol = 0xFF10EF;// Robotun sola dönmesi için kullanılan U.K. kodu
long bsag = 0xFF5AA5;// Robotun sağa dönmesi için kullanılan U.K. kodu
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
// put your setup code here, to run once:
pinMode(5, OUTPUT);// sağ motor ileri pini
pinMode(6, OUTPUT);// sağ motor geri pini
pinMode(9, OUTPUT);// sol motor ileri pini
pinMode(10, OUTPUT);// sol motor geri pini
Serial.begin(9600);
irrecv.enableIRIn(); // Alıcıyı başlat.
}

void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
if (results.value == bileri ) ileri();
if (results.value == bgeri ) geri();
if (results.value == bsag ) sag();
if (results.value == bsol ) sol();
if (results.value == bdur ) dur();
irrecv.resume(); // Yeni verileri al.
}
}
void ileri(){
analogWrite(5,h);
analogWrite(6,0);
analogWrite(9,h);
analogWrite(10,0);
}
void geri(){
analogWrite(5,0);
analogWrite(6,h);
analogWrite(9,0);
analogWrite(10,h);
}
void sol(){
analogWrite(5,h);
analogWrite(6,0);
analogWrite(9,0);
analogWrite(10,h);
}
void sag(){
analogWrite(5,0);
analogWrite(6,h);
analogWrite(9,h);
analogWrite(10,0);
}
void dur(){
analogWrite(5,0);
analogWrite(6,0);
analogWrite(9,0);
analogWrite(10,0);
}

9- EĞITSEL ROBOT ILE ENGELDEN KAÇMA

Engelden kaçan robotlarda mesafe algılama sensörleri kullanılır. Mesafe algılama sensörlerinin birçok çeşidi vardır. Eğitsel robotta HC-SR04 olarak da bilinen ultrasonik mesafe sensörü kullanılacaktır. Montaj aparatı kullanılarak eğitsel robotun ön tarafına Görsel 3.32’de görüldüğü gibi vidalarla ultrasonik mesafe sensörünün montajı yapılır ve program yazılacak hâle gelir. Ultrasonik mesafe sensörü ve montaj aparatı Görsel 3.31’de görülmektedir


int trig = 7; // Mesafe sensörü trig pini için D7 portunu belirle
int echo = 8; // Mesafe sensörü trig pini için D7 portunu belirle
int hiz=100; // Motor dönüş hızını belirle
void setup(){
pinMode(5, OUTPUT);// sağ motor ileri pini
pinMode(6, OUTPUT);// sağ motor geri pini
pinMode(9, OUTPUT);// sol motor ileri pini
pinMode(10, OUTPUT);// sol motor geri pini
pinMode(trig, OUTPUT); // Mesafe sensörü trig pini çıkış için
pinMode(echo, INPUT); // Mesafe sensörü echo pini giriş için
}
void loop(){
digitalWrite(trig, 1);
delay (1);
digitalWrite(trig, 0);
int sure = pulseIn(echo, 1);
int mesafe = (sure/2) / 28.97;
if (mesafe < 30) // mesafe 30cm’den küçük ise robotu geri al ve döndür.
//not: < kodlarının yerine küçük işareti konulacaktır.
{
analogWrite(5, 0);
analogWrite(6, hiz);
analogWrite(9, 0);
analogWrite(10, hiz);
delay(150);
analogWrite(5, 0);
analogWrite(6, hiz);
analogWrite(9, hiz);
analogWrite(10, 0);
delay(250);
}
else // mesafe 30cm’den büyük ise düz git.
{
analogWrite(5, hiz);
analogWrite(6, 0);
analogWrite(9, hiz);
analogWrite(10, 0);
}
}

Normalde hareket etmeyen engeli görünce geri giden robot (yakalanmayan robot) kodları şunlardır:


int trig = 7; // Mesafe sensörü trig pini için D7 portunu belirle
int echo = 8; // Mesafe sensörü echo pini için D8 portunu belirle
int hiz=150; // Motor dönüş hızını belirle
void setup(){
pinMode(5, OUTPUT);// sağ motor ileri pini
pinMode(6, OUTPUT);// sağ motor geri pini
pinMode(9, OUTPUT);// sol motor ileri pini
pinMode(10, OUTPUT);// sol motor geri pini
pinMode(trig, OUTPUT); // Mesafe sensörü trig pini çıkış için
pinMode(echo, INPUT); // Mesafe sensörü echo pini giriş için
}
void loop(){
digitalWrite(trig, 1);
delay (1);
digitalWrite(trig, 0);
int sure = pulseIn(echo, 1);
int mesafe = (sure/2) / 28.97;
if (mesafe < 30 ) // mesafe 30cm’den küçük ise robotu geri gel.
//not: < kodlarının yerine küçük işareti konulacaktır.
{
analogWrite(5, 0);
analogWrite(6, hiz);
analogWrite(9, 0);
analogWrite(10, hiz);
}
else // mesafe 30cm’den büyük ise dur.
{
analogWrite(5, 0);
analogWrite(6, 0);
analogWrite(9, 0);
analogWrite(10,0);
}
}

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir