Robotik ve Kodlama

Arduino

DERS PROGRAMI
Arduino 103 Ders Programı

Genel Arduino Uygulamaları

Lisans: Creative Commons 26.11.2020 tarihinde güncellendi
Bakabileceğiniz Etiketler: Eğitmen: Geleceği Yazanlar Ekibi

Arduino ile en çok kullanılan fonksiyon ve özellikleri önceki yazılarımızda öğrendik. Artık öğrendiklerimizle uygulamalar yapmaya başlayabiliriz. Bu bölümde yapacağımız uygulamalar kolaydan zora doğru gitmektedir. Bölümde gösterilen uygulamaların, ilk etapta incelenmesi ve denenmesi, daha sonra da üzerinde değişiklikler yapılarak yeni projelerin üretilmesi, Arduino kullanımını pekiştirecektir.

Trafik lambaları

Arduino pinlerinin kontrolünü pekiştirmek için her gün gördüğümüz trafik lambalarını Arduino ile yapacağız. Arduino pinlerine bağlanan kırmızı, sarı ve yeşil LED'ler trafik lambalarının sırasına göre kontrol edilecektir. Buna göre program ilk başta kırmızı ışığı yakacaktır. Kırmızı ışık 5 saniye yandıktan sonra sönecek ve 1 saniye boyunca sarı ışık yanacaktır. Sarı ışık söndükten sonra da 3 saniye boyunca yeşil ışık yanacaktır.

Proje devresini kurmak için bağlantılarınızı aşağıdaki gibi yapınız.

resim001

Yukarıdaki devreyi kurduktan sonra Arduino'ya aşağıdaki kodu yükleyiniz.

/* LEDlerin bağlı olduğu pinler tanımlandı */
const int kirmizi = 2,sari = 3,yesil = 4;

void setup()
{
  /* LED pinleri çıkış olarak ayarlandı */
  pinMode(kirmizi,OUTPUT);
  pinMode(sari,OUTPUT);
  pinMode(yesil,OUTPUT);
}

/* Sadece kırmızı ışığı yakan fonksiyon */
void kirmiziIsik(){
  digitalWrite(kirmizi,HIGH);
  digitalWrite(sari,LOW);
  digitalWrite(yesil,LOW);
}

/* Sadece sarı ışığı yakan fonksiyon */
void sariIsik(){
  digitalWrite(kirmizi,LOW);
  digitalWrite(sari,HIGH);
  digitalWrite(yesil,LOW);
}

/* Sadece yeşil ışığı yakan fonksiyon */
void yesilIsik(){
  digitalWrite(kirmizi,LOW);
  digitalWrite(sari,LOW);
  digitalWrite(yesil,HIGH);
}

void loop()
{
  kirmiziIsik();
  delay(5000);
 
  sariIsik();
  delay(1000);
 
  yesilIsik();
  delay(3000);
}


Bu uygulamada tek bir trafik lambası için kodlama ve devre tasarımı yapılmıştır. Kendinizi geliştirmek için, yukarıda paylaşılan koda eklemeler yaparak birden fazla trafik lambasını tek bir Arduino üzerinden kontrol edebilirsiniz.

Çarpmayan robot yapımı

Bu uygulamada hemen hemen tüm robot yarışmalarındaki robotlarda kullanılan, engellerden kaçma algoritması üzerine çalışacağız. Bunu yapabilmek için önceki konularda öğrendiğimiz DC motor kontrolü ve ultrasonik uzaklık sensörü ile uzaklık ölçümünü kullanacağız. Bu uygulamada öğrenilen bilgiler, robot yarışmalarında bulunan çöp toplama, labirent çözme, yangın söndürme gibi kategorilerde kullanılabilir.
Bu projede yapılacak olan 4 tekerli robot hareket için 4x4 şeklinde, her bir tekere bağlanan DC motorlardan oluşacaktır. Bu motorların kontrolü için DC motor sürücüsü kullanılacaktır. Uzaklık ölçümü için HC-SR04 ultrasonik uzaklık sensörü kullanılacaktır.


Arduino sürekli olarak uzaklık sensöründen gelen uzaklık verisini kontrol edecektir. Eğer ölçülen uzaklık verisi 10 cm'den kısa ise robot durdurulacaktır. Robot engelden kaçmak için yaklaşık 90 derece sola dönecektir. Eğer sola döndükten sonra önünde herhangi bir engel yoksa ilerlemeye devam edecektir. Önüne yeni bir engel geldiğinde robot, tekrar bu işlemleri yapacaktır. Böylece robotumuz engellere çarpmadan ilerleyebilecektir.
Bu uygulamayı yapmak için ihtiyacınız olan malzemeler:

  • 1 x Arduino
  • 4 x Tekerlek
  • 1 x Robot şasesi
  • 4 x DC motor
  • 1 x DC motor sürücüsü
  • 1 x HC-SR04 uzaklık sensörü

resim002

Devre şemasında görüldüğü gibi aynı tarafta bulunan iki DC motor birbirine paralel olarak bağlanmıştır. Böyle bağlanmasının nedeni bu motorun her zaman için aynı şekilde dönecek olmasıdır. Eğer ayrı ayrı bağlanması istenseydi, o zaman iki adet DC motor sürücüye ihtiyaç duyulurdu. Uzaklık sensörü robotun en önüne takılmıştır. Uzaklığın doğru olarak bulunması için robotun hiçbir parçası sensörün görüş açısında bulunmamalıdır. Resimdeki devreyi robot şasesine bağlayarak Arduino programlamaya başlayabiliriz.

Resimde gösterilen devre şemasının kablo bağlantıları aşağıdaki tablolarda gösterilmiştir.

Arduino
Motor Sürücü
8
INPUT 1
9
INPUT 2
13
INPUT 3
12
INPUT 4
11
ENABLE A
10
ENABLE B

Motor
Motor Sürücü
Motor1 +
OUTPUT 1
Motor1 -
OUTPUT 2
Motor2 +
OUTPUT 3
Motor2 -
OUTPUT 4
(Motorun + veya – ucunun hangisi olduğu farketmez)
Besleme
Motor Sürücü
+12 Volt
VCC
Toprak (- uç)
GND
+5 Volt
VS

Arduino
HC-SR04 Uzaklık Sensörü
+5 Volt
VCC
6
Trig
7
Echo
Toprak (- uç)
GND

Devre kurulumunu gerçekleştirdikten sonra aşağıdaki kodu Arduino'ya yükleyelim
Arduino Kodu:
const int trigPin = 6; /* Sensorun trig pini Arduinonun 6 numarali ayagina baglandi */
const int echoPin = 7;  /* Sensorun echo pini Arduinonun 7 numarali ayagina baglandi */

int DonmeHizi = 175;
/* bu değişken ile motorların dönme hızı kontrol edilebilir */
int DonmeZamani = 250;
/* DonmeZamani değişkeni robotun 90 derece dönmesini sağlayan değişkendir
 * Robotun yaklaış 90 derece dönmesi için robotunuza göre bu süreyi ayarlayın
 */

/* motor sürücüsüne bağlanacak INPUT ve ENABLE pinleri belirleniyor */
const int sagileri = 9;
const int saggeri = 8;
const int solileri = 12;
const int solgeri = 13;
const int solenable = 11;
const int sagenable = 10;

/* Uzaklık ölçümünün yapılacağı fonksiyon */
long mesafeOlcumu(){
  long sure;
  long uzaklik;
  digitalWrite(trigPin, LOW); /* sensor pasif hale getirildi */
  delayMicroseconds(5);
  digitalWrite(trigPin, HIGH); /* Sensore ses dalgasinin uretmesi icin emir verildi */
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);  /* Yeni dalgalarin uretilmemesi icin trig pini LOW konumuna getirildi */

  sure = pulseIn(echoPin, HIGH, 2895); /* ses dalgasinin geri donmesi icin gecen sure olculuyor */
  uzaklik= sure /29.1/2; /* olculen sure uzaklige cevriliyor */


  return uzaklik;
}

void ileri(int hiz){
  /* ilk değişkenimiz sag motorun ikincisi sol motorun hızını göstermektedir.
   * motorlarımızın hızı 0-255 arasında olmalıdır.
   * Fakat bazı motorların torkunun yetersizliğiniden 60-255 arasında çalışmaktadır.
   * Eğer motorunuzdan tiz bir ses çıkıyorsa hızını arttırmanız gerekmektedir.
   */
  analogWrite(sagenable, hiz); /* sağ motorun hız verisi */
  digitalWrite(sagileri,HIGH); /* ileri dönme sağlanıyor */
  digitalWrite(saggeri,LOW); /* ileri dönme sağlanıyor */

  analogWrite(solenable, hiz); /* sol motorun hız verisi */
  digitalWrite(solileri, HIGH); /* ileri dönme sağlanıyor */
  digitalWrite(solgeri,LOW); /* ileri dönme sağlanıyor */
}

void sagaDon(int hiz){
  analogWrite(sagenable, hiz); /* sağ motorun hız verisi */
  digitalWrite(sagileri,LOW); /* geri dönme sağlanıyor */
  digitalWrite(saggeri,HIGH); /* geri dönme sağlanıyor */

  analogWrite(solenable, hiz); /* sol motorun hız verisi */
  digitalWrite(solileri, HIGH); /* ileri dönme sağlanıyor */
  digitalWrite(solgeri,LOW); /* ileri dönme sağlanıyor */
}

void solaDon(int hiz){
  analogWrite(sagenable, hiz); /* sağ motorun hız verisi */
  digitalWrite(sagileri,HIGH); /* ileri dönme sağlanıyor */
  digitalWrite(saggeri,LOW); /* ileri dönme sağlanıyor */

  analogWrite(solenable, hiz); /* sol motorun hız verisi */
  digitalWrite(solileri, LOW); /* geri dönme sağlanıyor */
  digitalWrite(solgeri,HIGH); /* geri dönme sağlanıyor */
}

void geri(int hiz){
  analogWrite(sagenable, hiz); /* sağ motorun hız verisi */
  digitalWrite(sagileri,LOW); /* geri yönde dönme sağlanıyor */
  digitalWrite(saggeri, HIGH); /* geri yönde dönme sağlanıyor */

  analogWrite(solenable, hiz); /* sol motorun hız verisi */
  digitalWrite(solileri, LOW); /* geri yönde dönme sağlanıyor */
  digitalWrite(solgeri, HIGH); /* geri yönde dönme sağlanıyor */
}

void dur()
{
  /* Tüm motorlar kitlenerek durma sağlanıyor */
  digitalWrite(sagileri, HIGH);
  digitalWrite(saggeri, HIGH);
  digitalWrite(solileri, HIGH);
  digitalWrite(solgeri, HIGH);
}

void setup(){
  /* Uzaklık sensörünün pinleri ayarlanıyor */
  pinMode(trigPin, OUTPUT); /* trig pini cikis olarak ayarlandi */
  pinMode(echoPin,INPUT); /* echo pini giris olarak ayarlandi */

  /* motorları kontrol eden pinler çıkış olarak ayarlanıyor */
  pinMode(sagileri,OUTPUT);
  pinMode(saggeri,OUTPUT);
  pinMode(solileri,OUTPUT);
  pinMode(solgeri,OUTPUT);
  pinMode(sagenable,OUTPUT);
  pinMode(solenable,OUTPUT);
}

void loop(){
 
  while( mesafeOlcumu() > 10 ){ // önüne engel gelene kadar düz git
    ileri(DonmeHizi);
  }
  dur();
  delay(500);
  solaDon(DonmeHizi);
  delay(DonmeZamani);
  dur();
  delay(500);
 
}
Bluetooth Kontrollü Araç Yapımı
Daha önceki uygulamalarımızda Bluetooth üzerinden devremizi telefon veya Bluetooth özelliği bulunan cihazlar ile nasıl kontrol edeceğimizi öğrenmiştik. DC motor kontrol etmeyi de öğrendiğimize göre Bluetooth üzerinden kontrol edilen bir araç yapabiliriz. Aracımız daha önce yaptığımız gibi 4 tekerlek ve DC motordan oluşmaktadır. Bir önceki uygulamamızdan farklı olarak uzaklık sensörü yerine Bluetooth modülü kullanacağız.
Robotun harekete geçmesi için Bluetooth modülünden veri gelmesi gerekecektir. Bu veri akıllı telefonlardan veya Bluetooth özelliği bulunan tablet ve bilgisayarlardan gelecektir. Öncelikle Bluetooth modülüyle cihazlarımızı eşleştirmemiz gerekmektedir. Bu konu hatırlamıyorsanız tekrardan "Bluetooth ile Haberleşme" konusuna göz atmanızı öneririz.
Hatırlatma
Windows kullanıcıları Bluetooth ile haberleşmek için, ücretsiz olarak 'Tera Term' programını indirebilirler.  (http://ttssh2.sourceforge.jp/index.html.en)
Android kullanıcıları ise haberleşme için 'Bluetooth Terminal' isimli ücretsiz uygulamayı kullanabilirler. (https://play.google.com/store/apps/details?id=ptah.apps.bluetoothterminal)

Bu uygulamayı yapmak için ihtiyacınız olan malzemeler;
1 x Arduino
4 x Tekerlek
1 x Robot şasesi
4 x DC motor
1 x DC motor sürücüsü
1 x HC-05 veya HC-06 Bluetooth modülü
resim003
Resimde gösterilen devre şemasının kablo bağlantıları aşağıdaki tablolarda gösterilmiştir.
Arduino
Motor Sürücü
8
INPUT 1
9
INPUT 2
13
INPUT 3
12
INPUT 4
11
E