Arduino kızıl ötesi infrared sensör ile cisim takibi Arduino object tracking with infrared sensor

Arduino devreleri ve uygulamaları

Arduino kızıl ötesi infrared sensör ile cisim takibi

Bu uygulamada kullandığımız infrared sensör şu prensibe göre çalışır.

Üzerinde aynı yöne bakan birer adet alıcı ve verici eleman bulunur bunlardan biri şeffaf olan infrared led dir ve bu led bizim görebildiğimiz renk dalga boyunun dışında bir ışık tayfında ışınım yapar bu sebeple bu ledin yaydığı ışığı çıplak gözle göremeyiz ki bu ledler Tv v.b aygıt kumandalarında da kullanılır ve bu işığı da çıplak gözle göremeyiz lakin bir telefon kamerası ile bakarsanız kameranın renk algılama aralığı gözümüzden daha geniş olduğu için bu ışığı kamera telefon ekranından rahatlıkla görebilirsiniz.

Diğeri ise yani siyah renkli led kılıfında olan alıcı sensördür. Bu sensör sadece infraruj  ışık dalga boyunu algılar ve infraruj ledin karşıya gönderdiği infraruj ışığın karşıdaki cisimden geri yansımasını algılayarak sensörün karşısında bir cisim olduğu bilgisini verir.

Sensör kartı üzerinde bulunan mavi renkli trimpot ile sensörün hassasiyet ayarı yapılır,sensör cisim algılamazken çıkışı “1” +5V tur ve cisim algılandığında çıkışı “0” GND olur.

Ayrıca sensör kartı üzerinde iki adet yeşil smd led bulunur bu ledler den biri power gösterge ledi,diğeri ise cisim algılandığında ışık vererek kullanıcıyı görsel olarak bilgilendirir.

Videoda ki devrede infraruj sensör dondurma çubuğuyla step motorun rotoruna monte edilmiştir ve algılama mesafesinde ki cisimi yatay istikamette takip eder,cisim yokken sensör saat yönünün tersi istikamette algılama mesafesine bir cisim girene kadar tıpkı bir radar gibi sürekli döner,algılama mesafesine bir cisim girdiğinde ise cisim istikametinde durarak cisimin hareketlerini takip eder

Akla ilk gelen soru tek bir cisim algılama sensörü ile karmaşık ve fonksyonel gibi görünen bir işlem nasıl yapılabilir ?

Devrenin çalışma prensibi:

Kod da if/else komutlarından yararlanılmıştır, bilindiği gibi kodlamada “if” bir durum belli bir şarta bağlanacaksa kullanılır ve if den sonra yazılan komutlar yerine getirilir.Şartın sağlanmaması durumda ise “else” den sonra yazılan komutlar gerçekleştirilir.Bu uygulamada motorun sağa dönmesi sensörün cisim algılamasına,sola dönmesi ise cisim algılamamasına bağlanmıştır.

Çalışma mantığını sırasıyla açıklayalım; Sensör cisim algılamadığı sürece sürekli sola doğru döner ve cisim algıladığı anda sağa dönmeye başlar ve sağa dönerken sensör cisim sınırından çıkar ve cisimi yok gördüğü için tekrar sola döner,sola döndüğünde ise sensör tekrar cisimin alanına girdiği için cisimi algılar ve sağa döner,bu çok hızlı olduğu için  motor mili sürekli ileri geri titrer ve cisim durduğu sürece bu döngü böyle devam eder.

Cisim hareket ettirildiğinde ise mesela sola doğru hareket ettirilirse cisim sensör alanından çıkacağı için sensör cisim algılamadığından motor da sola döner ve cisimi yakaladığı yerde tekrar sağa döner ve ileri geri döngü ile motor mili titremeye başlar. 

Cisim sağa doğru hareket ettirildiğinde ise sensör cisimi göreceği için motor milide sağa doğru döner ve sensör cisim sınırından çıkınca tekrar sola döner ve ileri geri döngü ile motor mili titremeye başlar. 

Step motorlu cisim takip uygulaması

Step motorlu cisim takip uygulaması devre şeması

Devre kurulup kod yüklendikten sonra, motor yönü ters olursa !

Kod içinde ki “if” den sonra yazılan sıralı komutlar, “else” den sonra yazılan sıralı komutlar ile

Yada step motor sürücü giriş pinleri arduino giriş uçları ile ters sırada bağlanması gerekebilir.

Motorun dönüş hızı kod içinde bulunan” int delayTime = 200; ” komutunda ki “200” rakamı değiştirilerek ayarlanabilir.

Bu uygulama sensörün kablodan bağımsız beslenmesi sağlanarak yapılırsa,yani sensör kendi üzerinde ki bir batarya ile yada kablosuz şarj gibi havadan indükleme yöntemi ile beslenirse,kule tıpkı bir radar gibi sürekli kendi etrafında 360 derece sola doğru dönecek ve cisim algılandığında cisimi takip edecek şekilde yapılandırılmış olur.

Kod:

int motorPin1 = 3;
int motorPin2 = 4;
int motorPin3 = 5;
int motorPin4 = 6;
int delayTime = 200;
int sensor = 2;
int sensor_durum = 0;

void setup()
{
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
pinMode(sensor, INPUT);
}

void loop()
{
sensor_durum = digitalRead(sensor);
if (sensor_durum == HIGH)
{

digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(delayTime);
}
else
{
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
}}

Servo motorlu cisim takip uygulaması

Servo motorlu cisim takip uygulaması devre şeması

Servo uygulaması http://arduinotr.com/360servo/ sayfamızda 360 derece hack servo resimli anlatımı ile birleştirilmiştir.

DC motorlu cisim takip uygulaması

Arduino ile DC redüktör motorlu cisim takip uygulaması devre şeması
Arduino ile DC redüktör motorlu cisim takip uygulaması

Motorun ters yönde dönmesi durumunda ! Motor uçlarının ters çevrilmesi, yada kod içinde ki ” digitalWrite ” yazan satırlarda HIGH ve LOW komutlarını birbirinin yerine ters yazmak gerekebilir.

Kod:

int sensor = 2;
int motorPin1 = 3;
int motorPin2 = 4;
int sensor_durum = 0;

void setup()
{

pinMode(sensor, INPUT);
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
}

void loop()
{
sensor_durum = digitalRead(sensor);
if (sensor_durum == HIGH)
{

digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);

}
else
{
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);

}}

DC motorlu basit cisim takip uygulaması

DC motorlu basit cisim takip uygulaması devre şeması

Yukarıda ki şema da koda gerek yoktur devre kurulduğu gibi çalışır,motorun ters yönde dönmesi durumunda motor uçlarının ters çevrilmesi gerekebilir.

1 metre mesafeli 360 derece kendi etrafında dönen cisim takip uygulaması

Hazırlanıyor

Şekil ve şemaların çiziminde www.easyeda.com online editör programından yararlanılmıştır.

13 cevap

  1. Gregory Victor Southern dedi ki:

    I liked a lot

  2. Erdem dedi ki:

    Harika. Emeğinize sağlık.
    Kodu paylaşabilir misiniz.

  3. Furkan dedi ki:

    Bravo

  4. Cuneyt dedi ki:

    Hocam ir sensör sağ sol olayını nasıl algılıyor

    • admin dedi ki:

      Yukarıda adım adım açıklama mevcut, daha iyi anlaşılması açısından en altta ki şemayı işlemci olmadan yapmanızı tavsiye ederim.

  5. Barış dedi ki:

    Merhaba hacklenmiş servo motor için de kodları paylaşabilir misiniz
    Servo motor olduğu için sürücü gerekli olmayacaktır arduino + sensör + hacklenmiş servo devresi yani servoyu normal redüktörlü DC motor gibi kullanmak istiyorum

    • admin dedi ki:

      Bu mümkün fakat fazladan işlem ve zaman gerektirdiği için bu kod kısmı şimdilik boş bırakıldı,daha sonra servo konulu bir başlık ile birleştirilip bu şema altında yayınlanacak.

  6. sadettin dedi ki:

    elinize sağlık. servo uygulamasını dört gözle bekliyorum.

  7. Raj Kumar dedi ki:

    Dear Admin,
    Can I’ve a English translate of this project. I can not understand the project perfectly.
    I’m interesting to make a project of it.

  8. admin dedi ki:

    English version of the site is currently being prepared

Bir cevap yazın

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