pinMode komutu mikrodenetleyici kartın dijital portlarının giriş veya çıkış olarak kullanılmasına karar verir. Mikrodenetleyici ile motorları kontrol etmek için 4 adet port kullanılır. Bunlardan ikisi sağ motor, diğer ikisi sol motor için kullanılır.

Programı eğitsel robota uygun hâle getirirken kullanılacak 2. komut void loop() fonksiyonu içindeki digitalWrite(LED_BUILTIN, HIGH); komutudur. Bu komut aynı zamanda motorlara enerji vermeyi sağlar. Bu komut içindeki LED_BUILTIN yerine uygun mikrodenetleyici kartı port numarası yazılır. Ayrıca HIGH yerine 1, LOW yerine 0 yazılabilir. Motorları ileri veya geri hareket ettirirken yukarıdaki tabloda yer alan durumlardan yararlanılabilir. Motorları ileri yönde hareket ettirmek için mikrodenetleyici kart üzerindeki D5 ve D9 numaralı portların “1”, D6 ve D10 numaralı portların “0” yapılması gerekir.
Aşağıda verilen program yazılıp mikrodenetleyici karta yüklendiğinde motorlar ileri yönde dönecektir. Eğer motorlardan herhangi biri veya her ikisi birden geri yönde dönüyorsa bu durum iki şekilde düzeltilebilir. Birinci yöntem ters dönen motorun ilgili mikrodenetleyici kartının kontrol kablosunun yerlerini eğiştirmektir.
İkinci yöntem ise ters dönen motorun motor sürücüsü üzerine takılı motor kablolarının yerini değiştirmektir. Örneğin sağ motor ters dönüyorsa sağ motor için mikrodenetleyici karttan motor sürücüye giden kontrol kablosu D5 ve D6’nın yerlerini değiştirmek yeterli olur.
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,1); // sol ileri = 1
digitalWrite(10,0); //sol geri = 0
}
Eğitsel robotun hareketleri iki motorun hareketine bağlıdır. Tabloda görüldüğü gibi 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 Tablo 3.4’teki 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.

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.
Robotu ileri, geri, sağa ve sola belirli sürelerde hareket ettiren program kodları şunlardı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);
}
|