Yazılar Eğitimler Arduino Eğitimi

Işık sensörü kullanarak araç far yapımı

Merhaba,

Şimdiki projemizde önceki projelerimizden ortaya çıkan aracımıza bir ekleme daha yapalım. Aracımızın hareketlerine ve ortamdaki ışığa göre ledlerimizi kullanalım.

Işık sensörü ortamdaki ışığa göre bir geri dönüş direnci oluşturan sensör tipidir. Işık sensörü kullanarak bulunduğu ortamda üzerine gelen ışık seviyesini sayısal olarak öğrenebiliriz. Ve uygulamamızda bu verileri ledlerimizden bir kısmını yakmak için kullanacağız.

Ne Yapacağız:

Arduino Uno ile BreadBoard üzerine L298Shield’dan oluşan bir devre kurmuştuk ona da ekleme olarak HC-SR04 adlı ultrasonik sensörü eklemiştik. Peki şimdi aracımızın motorlarının çalışmasına göre yanan ledler ve ışık sensörünün aldığı değere göre yanan ledler ekleyelim.

Kullanacağmız farklı blokları tanıyacağız.

Araç hareketlerini gözlemleyeceğiz.
Gerekli Malzemeler:

1 Adet Arduino Uno.

1 Adet Breadboard.

1 Adet L298shield motor kontrolcüsü.

2 Adet kırmızı led.

2 Adet Yeşil led.

1 Adet LDR ışık sensörü

23 Adet iki ucu erkek jumper kablo.

8 Adet bir ucu erkek bir ucu dişi jumper kablo.

1 Adet 10k ohm direnç.

4 adet 220 ohm direnç.

2 Adet 9V pil ve pil yatağı.

Gerekli Araçlar:

Mblock
3DRoboLab Türkçe bloklar.
MBlock uygulamasına 3DRoboLab Türkçe bloklar uzantısı ekleme.

Programı çalıştırıp üst kısımdaki araç çubuğundan uzantılar ikonuna tıklıyoruz.

Daha sonra açılan pencereden Uzantıları Yönet ikonuna tıklıyoruz.

Açılan Pencerenin Arama bölümüne 3DRoboLab yazıyoruz.

Daha sonra 3DRoboLab adlı uzantıyı indirip, Uzantı ekle ikonuna tıklıyoruz ve 3DRoboLab Türkçe Bloklar MBlock kütüphanenize eklenmiş oluyor.

basit uygulamalar için hazırlamış olduğumuz kodların çalışmasında herhangi ek bir işlem yapmanıza gerek yoktur.

MBlock Programı üzerinden Arduino kartına bağlanma.

Programı çalıştırıp üst kısımdaki araç çubuğundan Kartlar ikonuna tıklıyoruz.

Daha sonra açılan pencereden kullandığımız kartı seçiyoruz.

Kartı seçtikten sonra gene araç çubuğu üzerinde bulunan Bağlan ikonuna tıklıyoruz.

Karşımıza çıkan pencerede seri port’un üzerine geliyoruz ve yan tarafta bağlı COM’lar çıkıyor. Arduino kartı hangi COM’da bağlıysa o COM’u seçiyoruz ve program üzerinden karta bağlanmış oluyoruz.

Devremizin Kurulumuna Geçebiliriz.

Arduino Uno ve BreadBoard devresinin kurulması;

Bir önceki çalışmada hazırladığımız Engel tanıyan araç çalışmasının üzerine led devremizi ekleyeceğiz. Öncelikle LDR ışık sensörümüzün bir ucuna 5v gerilimimizi veriyoruz. Sonra çıkış ucundan 10k omhluk direnç bağlantımızı yapıp hem GND ye hem de A5 analog pin girişimize bağlantısını yapıyoruz. Geriye sadece led bağlantıları kalıyor. Kırmızı ledlerimizi ayrı ayrı kontrol ediceğimiz için A2 pininden gelen jumperımızı 220 ohmluk direncimize bağlıyoruz dirençten gelen ucumuzuda ledimizin + ucuna (Uzun olan uca) bağlıyoruz. İkinci ledimiz için A3 pininden gelen jumperımızı 220 ohmluk direncimize bağlıyoruz dirençten gelen ucumuzuda ledimizin + ucuna (uzun olan uca) bağlıyoruz. Geriye kalan 2 ledimizin bağlantıları birarada olacak bunun için A4 pininden gelen jumperımızın ucuna 220 ohmluk direnci bağlıyoruz ve elde ettiğimiz çıkışı kalan 2 ledimize birden bağlıyoruz ve ledlerimizin hepsinin – (Kısa olan uç) uçlarını GND pinlerimize bağlıyoruz.

Şimdi kullanacağımız blokları tanıyalım.

Sürekli tekrarla cihazımız elektrik aldığı sürece çalışmaya devam edeceğini belirtir. Güç bağlantısı kesilene kadar veya farklı bir program yükleninceye kadar işlemine devam eder.

yön değişkeni oluşturma. Aracımızın bir engelle karşılaştığında kaçınacağı  yönü rastgele (sağ veya sol)olarak belirlemek için oluşturduğumuz bir sayı. Aracımızın belirlenen sayıya göre gideceği yönü belirlemesine yardımcı olur.

Ultrasoniksensör oku sensörümüzün okuduğu mesafe bilgisini bize cm türünden döndüren kod bloğumuz.

Karşılaştırma blokları içine girilen sayıların büyük veya küçük olma durumuna göre bizi bu duruma denk gelen sonuca götüren kod bloğu.

Bekleme bloğu aracımızdaki pinlere sinyal gittiği süreden sonra belirli bir süre boyunca aynı işlemi devam ettirmesini istediğimiz için tekrar yön belirlenene kadar,
aynı işi devam ettirmemiz için cihazı bekleten yardımcı blok.

Sayısal pin çıkışı belirleme bloğu elektrik vericeğimiz pinlerin aktiflik durumunu belirlememizi sağlayan sayısal bloklardır. Yüksek durumunda iken elektrik sağlar. Motorun pinlerinden birisi yüksek diğeri düşük ise motor hareket sağlar.
Bu özellikten yararlanarak aracımızın ileri geri sağa yada sola gitmesini sağlıyoruz.

Işıkoku bloğu belirtilen analog pine bağlı olan ışık sensörünün elde ettiği verileri bize sayısal olarak döndüren ve üzerinde hesaplama yapabilmemizi sağlayan blocktur.

 

Hazırladığımız kod bloklarının Arduinonun anlayacağı dile (C/C++) çevriliyor. Kodları yüklemek için Arduino’ya yükle butonuna tıklamanız yeterlidir.

#include <Arduino.h>
#include <Wire.h>
#include <SoftwareSerial.h>

 /* 3D Robotic Laboratory: www.3drobolab.com */
double angle_rad = PI/180.0;
double angle_deg = 180.0/PI;
double __var__121_246_110;
float getDistance(int trig,int echo){
    pinMode(trig,OUTPUT);
    digitalWrite(trig,LOW);
    delayMicroseconds(2);
    digitalWrite(trig,HIGH);
    delayMicroseconds(10);
    digitalWrite(trig,LOW);
    pinMode(echo, INPUT);
    return pulseIn(echo,HIGH,30000)/58.0;
}

void setup(){
    pinMode(11,OUTPUT);
    pinMode(10,OUTPUT);
    pinMode(9,OUTPUT);
    pinMode(6,OUTPUT);
    pinMode(16,OUTPUT);
    pinMode(17,OUTPUT);
    pinMode(A0+5,INPUT);
    pinMode(18,OUTPUT);
}

void loop(){
    if(((1) < (getDistance(13,12))) && ((10) > (getDistance(13,12)))){
        __var__121_246_110 = random(1,(5)+1);
        if(((__var__121_246_110)==(1))){
            digitalWrite(11,1);
            digitalWrite(10,0);
            digitalWrite(9,0);
            digitalWrite(6,0);
            digitalWrite(16,0);
            digitalWrite(17,1);
            _delay(1);
        }
        if(((__var__121_246_110)==(2))){
            digitalWrite(11,0);
            digitalWrite(10,0);
            digitalWrite(9,1);
            digitalWrite(6,0);
            digitalWrite(16,1);
            digitalWrite(17,0);
            _delay(1);
        }
    }else{
        digitalWrite(11,1);
        digitalWrite(10,0);
        digitalWrite(9,1);
        digitalWrite(6,0);
        digitalWrite(16,1);
        digitalWrite(17,1);
    }
    if(((100.0-100.0*analogRead(A0+5)/1024.0)) < ( 75 )){
        digitalWrite(18,1);
        digitalWrite(18,1);
    }else{
        digitalWrite(18,0);
        digitalWrite(18,0);
    }
    _loop();
}

void _delay(float seconds){
    long endTime = millis() + seconds * 1000;
    while(millis() < endTime)_loop();
}

void _loop(){
}

 

Kodlar derlendikten sonra Arduino’ya 30-50 sn. arasında yüklenmiş olacaktır.

İyi Eğlenceler…

 

Mete Han Çetin
administrator