4 Mayıs 2016 Çarşamba

PROJE SUNUM

SAKARYA ÜNİVERSİTESİ
TEKNOLOJİ FAKÜLTESİ
MEKATRONİK SİSTEM ELEMANLARI TASARIM PROJESİ



ARDUİNO İLE ENGELDEN KAÇAN ROBOT TASARIMI

PROJEYİ HAZIRLAYANLAR
SERCAN CEYLAN
ŞABAN SAĞLAM

MEKATRONİK MÜHENDİSLİĞİ BÖLÜMÜ

ÖĞRETİM ÜYESİ
Doç. Dr. DURMUŞ KARAYEL


İÇİNDEKİLER
                                                                                                                                                     Sayfa No
İÇİNDEKİLER ………….………………………………….....................…….................... 2

ÖZET ………………………………………………………….............................................. 3
1.GİRİŞ…….......…………………………………………….....…...…................……….... 4
1.1. Arduino ………………………………………….….......................................... 4
1.1.1. Arduino Bileşenleri …………………….....................................……5
1.1.2.Arduino İle Neler Yapılabilir? ………………….....................………6
1.1.3. Arduino Nasıl Kullanılır ? …………………..........................………6
1.1.3.1.Programlama dili…………………….........................……8
1.1.3.2.Dijital Giriş Çıkış Fonksiyonları…………………………9
1.1.3.3.Gecikme fonksiyonları…………………….…..............…10
1.1.3.4.Seri haberleşme……………………..........................……11
1.2. Servo Motor…………...………………………........….................................... 12
1.2.1. Servo Motor Temel Fonksiyonları………….............................……14
1.2.2. DC Servo motor ve AC Servo motorun karşılaştırılması..................14

1.3. DC MOTOR……………….....………………..................................................16

1.3.1.DC Motor Kontrol Devresi…………….............................................17

1.3.1.1. L293D ve L293B Motor Sürücü Entegreleri……........…18

1.4 HC-SR4 Ultrasonik Sensor.……………………....………............................... 19

2. YAPILAN ÇALIŞMALAR…………………………..............................................….....23
2.1 DONANIM……………………………..............................................................23
2.1.1.Projede Kullanılan Malzemeler …………………………....….........23

2.1.2. Robot Malzemeleri Montaj…………………..............………….....24
2.2. YAZILIM…..…..……………………………………….............................… 27
2.2.1.Program Kaynak Kodları………………………………….......……28
SONUÇLAR…………………………...................................................................................32
KAYNAKLAR……………………………….………………….…...........................…… 33

ÖZET
Robotik sistemler gün geçtikçe daha yaygın bir şekilde günlük yaşamda ve endüstriyel otomasyon uygulamalarında yer almaya başlamıştır. Bu sistemler doğruluk, tekrarlanabilirlik ve hız açısından önemli avantajlar getirdiği gibi ekonomik olarak da büyük fayda sağlamaktadır. Bu sistemlerin çoğu sabit bir tabana monte edilmiştir, kendi kendine yer değiştiremezler ve işin sisteme getirilmesi gerekir. Yapılacak işin alanda dağınık olduğu ya da taşıma amaçlı robotik sistemlerde ise gezginlik kabiliyeti önem kazanır. Bizlerin bugün bile basit olarak tanımlayabileceğimiz engelden kaçan robotları önemli kılan şey, şu an yaptıkları ve insanoğlunun yaratıcılığını kullanarak ilerde yapabilecekleri işlerdir.
Engelden kaçan robot sitemi günümüzde birçok alanda kullanılmaktadır. Bunu motorlu taşıtlarda örneğin seyir halinde engel algılama, günlük yaşantımızda örneğin mobilyalara çarpmadan gezinen elektrik süpürgesi veya askeri alanda arazi şartlarında gezinen robotun engel(mayın, taş blok vb.) algılamasında kullanılmaktadır.
Bu proje kapsamında ise engelden kaçarak yolunu bulan türde bir Engelden kaçan robot tasarlamak amaçlanmıştır. Engelden kaçan robot; DC motor sürücü entegresi, arduino yazılımı, servo motor kontrolü, ultrasonik algılama devresi gibi alt sistemlerden oluşmaktadır. Ardunio ile engelden kaçan robot tasarım projesi iki aşamadan oluşmuştur. Donanım kısmı; servo motorlar, sensör ve dc motor, yazılım kısmı ise; robotun karşılaştığı engellerle belirlenen algoritmalarla karşılık vermesi için arduinonun yazılımının yazılması olarak ayrılmıştır.
Tasarlanan robotun ana işlevi şöyle açıklanabilir: Engelden kaçan robot sahip olduğu ultrasonik algılayıcı ile çevresindeki cisimleri algılayıp hareketini bu cisimlerin konumuna göre düzenleyecektir.




1.GİRİŞ
Bu bölümde
  • Arduino
  • Servo Motor
  • Dc Motor
  • Ultrasonik Sensör
hakkında bilgi verilecektir.
1.1.Arduino
Arduino bir G/Ç kartı ve Processing/Wiring dilinin bir uygulamasını içeren geliştirme ortamından oluşan bir fiziksel programlama platformudur.
Arduino kartlarının donanımında bir adet Atmel AVR mikrodenetleyici (ATmega328, ATmega2560, ATmega32u4 gibi) ve programlama ve diğer devrelere bağlantı için gerekli yan elemanlar bulunur. Her Arduino kartında en azından bir 5 voltluk regüle entegresi ve bir 16MHz kristal osilator (bazılarında seramik rezonatör) vardır. Arduino kartlarında programlama için harici bir programlayıcıya ihtiyaç duyulmaz, çünkü karttaki mikrodenetleyiciye önceden bir bootloader programı yazılıdır.
Arduino’nun günümüzde çok fazla kullanılmasının nedenini ve örnek ardunio uygulamaları hakkında bilgi vermek gerekirse:
  • Arduino açık kaynak kodlu bir mikrodenetleyici kartıdır.
  • Mikroişlemci bilgisi gerektirmez.
  • Açık kaynaklı demek kullanıcı ile kaynak kodlarının paylaşıldığı ve değişiklik
hakkının kullanıcıya verildiği anlamına gelir.
  • Arduino’nun bu kadar popüler olmasının nedenlerinden biri de programlamasının
kolay olmasıdır.
  • Arduino geliştirme ortamı kendi sitesinden ücretsiz şekilde indirilebilir.
  • Birçok çeşidi ve donanım eklentileri mevcuttur.(Shield)
  • Arduino geliştirme ortamında tools menüsünden bilgisayara taktığınız arduino
modelini kontrol etmekte fayda var.
  • En önemli özelliklerinden birisi de zengin kütüphane desteğidir.


                                                     ŞEKİL 1.11. Arduino kütüphanesi

1.1.1. Arduino Bileşenleri
Arduino 'nun temel bileşenleri :Arduino geliştirme ortamı (IDE), Arduino bootloader (Optiboot), Arduino kütüphaneleri, AVR Dude (Arduino üzerindeki mikrodenetleyici programlayan yazılım) ve derleyiciden (AVR-GCC) oluşur.
Arduino yazılımı bir geliştirme ortamı (IDE) ve kütüphanelerden oluşur. IDE, Java dilinde yazılmıştır ve Processing adlı dilin ortamına dayanmaktadır. Kütüphaneler ise C ve C++ dillerinde yazılmıştır ve AVR-GCC ve AVR Libc. ile derlenmiştir. Arduino kaynak kodlarına buradan ulaşabilirsiniz.
Optiboot bileşeni Arduino'nun bootloader bileşenidir. Bu bileşen, Arduino kartlarının üzerindeki mikrodenetleyicinin programlanmasını sağlayan bileşendir.
Arduino'nun bu kadar çok tercih edilmesini sağlayan en önemli bileşen ise mikrodenetleyici konusunda detaylı bilgi sahibi olmayı gerektirmeden herkesin programlama yapabilmesini sağlayan Arduino kütüphaneleridir. Arduino kütüphanelerinin bir listesine buradan ulaşabilirsiniz. Arduino kütüphaneleri, geliştirme ortamı ile birlikte gelmekte ve "libraries" klasörünün altında bulunmaktadır. Kodları inceleyerek mikrodenetleyicilerin nasıl programlandığını ve kütüphanelerin yapısını görmeniz mümkündür.
Son olarak AVRDude bileşeni ise derlenen kodları programlamak için kullanılır.
1.1.2.Arduino İle Neler Yapılabilir? 
Arduino kütüphaneleri ile kolaylıkla programlama yapabilirsiniz. Analog ve digital sinyalleri alarak işleyebilirsiniz. Sensörlerden gelen sinyalleri kullanarak, çevresiyele etkileşim içerisinde olan robotlar ve sistemler tasarlayabilirsiniz. Tasarladığınız projeye özgü olarak dış dünyaya hareket, ses, ışık gibi tepkiler oluşturabilirsiniz.

Arduino'nun farklı ihtiyaçlara çözüm üretebilmek için tasarlanmış çeşitli kartları ve modülleri mevcuttur. Bu kart ve modülleri kullanarak projelerinizi geliştirebilirsiniz.

1.1.3. Arduino Nasıl Kullanılır ? 
Arduino tüm bu avantajlı özelliklerine rağmen, tüm projelerinizi sıfır elektronik ve yazılım bilgisi ile çabucak yapabileceğiniz bir araç değildir. Hazır kütüphaneleri ve örnekleri kullanarak belli bir yerden sonra tıkanmamak için Arduino ile birlikte elektronik ve yazılım da öğrenmeniz gerekir.
Arduino kartlarının getirdiği kolaylıkların bir götürüsü olarak Arduino kartlarda Atmega mikrodenetleyicilerin performansını %100 kullanamazsınız.
Arduino ile çalışmaya başlamadan önce Arduino hakkında temel bilgileri edinmeniz faydalı olacaktır. Sonrasında sizin için uygun olan Arduino kartını (Arduino Uno, Arduino Mega 250, Arduino Leonardo... vs) seçip bir adet edinmelisiniz. Tüm Arduino kartları aynı şekilde programlanabilir, ancak farklı kartların farklı özellik ve fonksiyonları olur. Örneğin sıklıkla tercih edilen iki Arduino kartı; Arduino Uno ve Arduino Mega' dır.


Arduino Uno:
 Arduino'nun temel kartıdır. ATMega328 mikrodenetleyicisi bulunur. 14 Dijital G/Ç Pini, 6 PWM Çıkışı, 6 ADC Girişi vardır. 32 KB Flash hafızaya sahiptir
.
Arduino Mega:




 Arduino Mega 2560 'da ATMega2560 mikrodenetleyici bulunur. Giriş / Çıkış Sayısı Arduino Uno 'dan daha fazladır. (54 Dijital G/Ç Pini, 14 PWM Çıkışı, 16 ADC Girişi) Hafızası da Arduino Uno 'ya göre daha yüksektir. (256 KB Flash hafıza)












Size uygun Arduino kartını seçip aldıktan sonra ihtiyacınız olan bilgisayar, USB kablosu, çeşitli dirençler, ledler, butonlar, breadboard, bağlantı ve atlama kabloları, çeşitli sensörlerLCD ler gibi bazı malzemelerdir.



                                          
ŞEKİL 1.1.3.1 Arduino ve Birlikte kullanılan çeşitli sensörler
1.1.3.1.Programlama dili
Arduino programlama dilinde 2 temel fonksiyon bulunur.


  • 1-) setup () : Bu fonksiyon Arduino çalışmaya başladıktan sonra ya da reset butonuna basıldıktan sonra 1 kere çalıştırılır. Bu fonksiyonda tek seferlik fonksiyonlar çalıştırılır. Örneğin pin ayarlaması,seri haberleşme başlatılması gibi.


  • 2-) loop() : Bu fonksiyon sonsuz döngü fonksiyonlarıdır. setup() fonksiyonunun
hemen ardından çalıştırılır ve arduino çalıştığı sürece devam eder.


  • Birçok programlama dilinde olduğu gibi arduino programlama dili de case-sensitive (büyük küçük harf duyarlı) bir dildir.


  • Arduino da yazdığımız programları Verify butonu ile derleriz. Yanında ki buton ise upload butonudur. Bu buton ile yazdığımız programı Arduino’ya yükleriz.
ŞEKİL 1.1.3.1.1
1.1.3.2.Dijital Giriş Çıkış Fonksiyonları
  • Dijital giriş/çıkış , 1 veya 0 bilgisini okumak yada göndermek için kullanılıyor.
  • pinMode(pin no, giriş yada çıkış modu); Bu fonksiyon pinlerin nasıl kullanılacağını
ayarlar.eğer çıkış olarak kullanılacaksa OUTPUT giriş olarak kullanılacaksa INPUT
yazılır. Örnek,
pinMode(13,INPUT);
pinMode(13,OUTPUT);

  • digitalWrite(pin no, HIGH or LOW); Dijital olarak çıkış ayarlanmış pinlere 1 ya da
0 verilmesini sağlayan fonksiyondur. HIGH ise 5v LOW ise 0 volt çıkış verir.
  • digitalRead(pin no); Dijital olarak giriş olarak ayarlanmış pinlerdeki değerin 1 ya da
0 olduğu değerini gösterir.
NOT: Çıkış olarak ayarladığımız pinler 5V verse de maksimum verebileceği akım değeri 40mA dir. Yüksek akım isteyen elemanlarla çalışırken yükselteç kullanılmalıdır. (opamp,transistor)

1.1.3.3.Gecikme fonksiyonları

  • delay(); Bu fonksiyonun içine yazdığımız kadar fonksiyonumuz o noktada o kadar milisaniye cinsinden durur.
  • delayMicroseconds(); Bu fonksiyon ise Microsaniye cinsinden fonksiyonu durdurur.
1.1.3.4.Analog Giriş Çıkış İşlemleri



ŞEKİL 1.1.3.4.1 Analog ve digital gösterim


  • Arduino üzerinde bulunan mikrodenetleyicide 10 bitlik ADC bulunuyor. Bunun
anlamı şudur ki 0-5v arası gerilimler 0 ile 1023 arasındaki sayılar olarak okunur.(1024 farklı değer)
  • Eğer okuduğumuz analog değerin kaç volt olduğunu öğrenmek istersek değer*5/1023 işlemini yapmamız gerekir.
  • Arduino’nun çeşidine göre üzerindeki analog giriş sayıları farklılık gösterir.
  • analogRead(pin no); Analog giriş den değer okumak için kullanacağımız fonksiyon fonksiyondur. Pin numarası olarak A0 , A1, ... yazılır.
  • Analog çıkış olarak PWM tekniği kullanılır. Bu teknikle dijital yöntemle analog çıkış değerleri üretebiliyoruz
  • analogWrite(pin no,duty cycle); Bu fonksiyonla analog çıkış verebiliyoruz. 0 ile 255 arasında bir değer verilebilir. 255 değeri 5 volta denk gelir.
  • Burada dikkat edilmesi gereken nokta bütün dijital çıkış pinlerinden analog çıkış veremiyoruz sadece yanında (~) işareti olanlardan analog çıkış verebiliyoruz.
1.1.3.4.Seri haberleşme

  • Elektronik birimler bazı projelerde birbirleriyle iletişim kurmaları gerekebilir.Dijital haberleşmede 2 yöntem var seri ve paralel.

             
ŞEKİL 1.1.3.4.1. Arduino bilgisayar bağlantısı

  • Seri haberleşmede veriler tek bir hat üzerinden sıra ile gönderilir.
  • Seri haberleşmede daha az veri hattı gerekmektedir. Bu yüzden sıkça kullanılır.Günümüzde en çok kullanılan USB buna en iyi örnektir. Derlediğimiz programları arduino kartına yükleme işlemi de aslında seri haberleşme ile olur (USB ile ).
  • Seri haberleşme 2 ayrı hat üzerinden (RX ve TX) gerçekleşir.
  • Arduino üzerinde bulunan seri haberleşme ünitesine UART (Universal asynchronous receiver/transmitter: Evrensel asenkron alıcı/verici) adı verilir.Arduino modeline göre 1 ya da daha fazla haberleşme ünitesi bulunabilir.
TX ve RX in bağlı olduğu pinler seri haberleşme esnasında dijital olarak giriş ya da çıkış olarak kullanılamaz.
  • available(): Kaç tane okunmayı bekleyen veri (bayt) var?
  • begin(): Seri İletişimi başlatma
  • end() : Seri iletişimi sonlandırma
  • print(): Seri iletişim üzerinden veri gönderme (text)
  • println(): Veri gönderme (satır sonu karakteri eklenir)
  • read(): Gelen veriden okuma
  • readBytes(): Gelen verileri topluca okuma
  • write() : Veri gönderme (binary)

1.2.Servo Motorlar
Servo motorlar, verilen girişe göre istenen açışla konuma gelen motorlardır. Servo motorların çok çeşitli uygulamalarda kullanılmasının, güvenilir olmasının yanında diğer nedenleri ise;
• Yüksek tork
• Doğru konumlama
• Kolay kurulum
• Kontrol kolaylığı
• Ekonomik oluşu

özelliklerine sahip olmasıdır.

Bir servo motor, yapı olarak dört kısımdan oluşmaktadır. Bunlar dc elektrik motoru, planetar dişli sistemi, geri besleme potansiyometresi ve dc motor pozisyon kumanda elektroniğidir.
Sekil 1.2.1. Servo Motor

Dc motor herhangi bir dc oyuncak motorundan farklı olmayan çift mıknatıslı bir statora ve fırçalı bobin rotora sahiptir. Motor mili1:200 ile 1:300 arası dönme oranına sahip bir dişli sistemine bağlanır, bu sayede oldukça yüksek bir tork değerine ulaşılır.

Dişli sisteminin çıkısında 5k'lık bir potansiyometre, mil konumunu elektronik kumanda devresine iletir. Elektronik devrenin görevi mil konumunu gelen veri konumuna gelinceye kadar motoru iletimde tutup tam yerinde durdurmaktadır.

Elektronik devre bu konumu algılamak için PWM (pulse with modulation) tekniğinden yararlanılmaktadır. Kumanda devresi kumanda çubuğunun konumuyla doğru orantılı olarak 1 ile 2 milisaniye arasında dalga genişliği değişen bir sinyali her 20 milisaniyede bir servoya gönderir. 1 milisaniye tam sol, 2 milisaniyede tam sag pozisyonu ifade eder. Servo içindeki elektronik devre ilk önce gelen darbelerin darbe genişliğini ölçer, daha sonra potansiyometre konumuna bakar ve kendi darbe osilatörünün darbe genişliği gelen darbelerle eşitlenene kadar motoru hareket ettirir. Motorun durduğu konum kontrol çubuğunun tutulduğu konumla birebir aynıdır. Servolarda üç adet kablo dışarı çıkar. Bunlardan kırmızı olan +4.8V/5.0V arası besleme, siyah olan şase yani Ground, diğer kablo ise (turuncu yeşil veya beyaz olabilir) data
girişidir.



1.2.1. Servo Motor Temel Fonksiyonları
Servo motorun çalışma prensibi, gelen darbe koduna göre konum değiştirmektir. Aşağıda verilen blok diyagramı, servo motorun gerçekleştirdiği temel fonksiyonu çok iyi açıklamaktadır. İstenen konum ile servonun şaftının pozisyonu karşılaştırılır. Kompensatör ise gelen bu bilgiyi düzenler ve servo motora giriş işareti olarak ayarlar. Motorun şanzımana bağlı olmasından dolayı çıkışta düşük hızda bile yüksek tork gücü elde edilir. Safta bağlı olan potansiyometrenin görevi ise geri besleme sinyalini sağlamaktır.

1.2.2. DC Servo motor ve AC Servo motorun karşılaştırılması

Fırçasız servo motorlar D.C. servo motorların bakım gereksinimlerini ortadan kaldırmak amacıyla getirilmiştir. Modern servo sistemlerde kullanılan fırçasız servo motorların en önemli üstünlüğü fırça ve komütatör elemanlarının bulunmasıdır. Bu nedenle fırçaların bakımı diye bir olaydan bahsedilemez ve fırçalardan birçok problem önlenmiş olur.

Kolektörlü D.C. servo motorlarda oluşan problemler bazen çok açık bir şekilde belli olmaz. Bazen fırçalarda olan kirlenme bile problem oluşturabilir. Fırçaların performansı ve ömrü atmosferlik şartlarla bile değiştiğinden dolayı değişik ortam koşullarında değişik yapılı fırçalar kullanılabilmektedir. Fırçasız servo motorlarda verim, eş ölçüdeki bir D.C. servo motora oranla daha yüksektir ve fırçaların sürtünme etkisi olmadığından dolayı sürtünme kuvveti verime katkıda bulunur. Kolektör ve fırça aksamının yokluğu motor boyunu düşürür. Bu sadece motor hacmini düşürmekle kalmaz rotor destek rulmanları arasındaki mesafe ve rotor boyunun kısalması dolayısıyla rotorun yanal rijitliği de arttırılmış olmaktadır. Bu özellik hız/eylemsizlik oranına gereksinim duyulan uygulamalarda önemlidir.

Fırçasız konfigürasyon da sarımların sabit stator içine sarılması sebebi ile ısı yalıtımı için daha fazla en kesit alanı sağlanabilmekte ve sargılarda oluşabilmek ısı artışı algılama elemanları vasıtasıyla kolayca algılanabilmektedir. Modern servo sistemlerde pozisyon sinyalinin belirlenmesi amacı ile bir kodlayıcı (encoder) veya çözümleyici (resolver) kullanılır. Kodlayıcı ve motorun tek bir ana iskelet üzerinde toplanması ile sistem daha kompakt bir yapıda olmaktadır. Bu motor yapısında manyetik akıyı üretmek için gerekli olan mıknatıs rotora monte edildiğinden dolayı döner-alan tipli motor yapısındadır. Senkron motor tipli fırçasız servo motorların yapıları doğru akım servo motorlarından farklı olması nedeniyle bu tipteki servo motorlar fırçasız D.C. servo motor olarak adlandırılır.

D.C. servo motorlardaki kolektörün aksine Fırçasız D.C. servo motorlar akımı yarı iletken güç elektroniği elemanları ile doğrulturlar. Diğer yönden rotor manyetik alanının kodlayıcı vasıtası ile algılanıp, algılanan bu pozisyona uygun düşecek şekilde stator sarımlarına üç fazlı alternatif akım verilmesi dolayısı ile kalıcı mıknatıslı senkron motor tipindeki fırçasız servo motorlar aynı zamanda A.C. servo motorlar olarak da adlandırılır. Fırçasız servo motorlarda rotor manyetik alanı ile statora verilen akımlar dikey şekilde kontrol edildiği takdirde D.C. servo motorlarla aynı olan hız-moment karakteristikleri elde edilir. Servo motorlar kullanımları gereği çok sık şekilde ivmelenme ve yavaşlama işlemlerine maruz kaldıklarından dolayı, maksimum moment değeri anma momentlerinin katlarca fazlası olmalıdır. D.C. servo motorlarda anma momentlerinin aşılması durumunda komütatör aksamında kıvılcımlaşma olayı meydana gelir. Aynı şekilde hız arttıkça moment değeri de çok hızlı bir şekilde düşer.


Projede Kullanılan Servo Motor Teknik Detaylar:

Büyüklük:23.1 x 12.2 x 29 mm
Ağırlık:9 g
Hız @4.8V:0.1 sn/60°
Zorlanma Torku @6V:1.3 kg·cm
Kablo Uzunluğu:15 cm













1.3.Doğru Akım (DC) Motorlar

Robot davranışının üçüncü aşaması çevreyi değiştiren bir eylem içerir. Eyleyiciler algılayıcı sistemlerinin görevlerini tamamlamasından sonra genellikle bir hareket başlatan enerji aktarımı ve değişimi içeren önceden belirlenmiş bir amaca yönelik çevreyi değiştirebilen cihazlardır.

DC motor doğru gerilim kaynağı ile çalışmaya tasarlanmış dönen bir elektrik makinesidir. Daha çok endüstride kullanılmaktadır. Motorun dairesel hızı uygulanan gerilimle, çıkış momenti ise bobin akımı ile orantılıdır. Hareket hassas biçimde kontrol edilmek istenildiğinde de geri besleme kullanılmaktadır. Büyük motorlarda bobinli statorlar bulunurken, küçük olanlarda sabit mıknatıs statorlar (hareketsiz kısım) bulunur. Sabit mıknatıs motorlarda çoklu bobinli rotor (dönen kısım) bulunur ve bu bobinler komütatör sayesinde güç kaynağına baglanır. Komütatör etrafında bakır teller olan bir silindirdir. Karbon fırçalar, bir zamanda bir zamanda bir bobine elektrik vermesi için güç kaynagını komütatöre bağlar. Rotorun ürettiği manyetik alan statorun ürettigi manyetik alanla çakısır ve bunun sonucunda olusan moment motoru döndürür. Rotor dönerken komütatörde döner ve karbon fırçaların baska bir bobini beslemesine neden olur. Bu sayede sürekli dönme hareketi saglanmıs olur. DC motorlar yapılarına göre ve baglantı türlerine göre sınıflandırılabilirler.

• Sabit mıktanıslı
o Klasik
o Döner bobinli
_ Sepet sargılı
_ Baskı devreli
• Alan sargılı
o Seri
o Sönt
o Kompaund

Farklı DC motorların hız-tork eğrileri de birbirinden farklıdır. Bu yüzden yapılan uygulamaya uygun motor seçilmelidir..
                                                  

ŞEKİL 1.3.1. DC motor iç yapısı
Sabit mıknatıslı motorlar ucuz ve küçük boyutları nedeni ile en yaygın motor çeşididir. Bu motorun dönem yönü uygulanan dc gerilimin kutupları değiştirilerek değiştirilebilir. Standart sabit mıknatıslı bir motorun tork çıkısı armatür sargılarının yanmadan çekebileceği maksimum akımla sınırlıdır.

Alan sargılı motorlarda benzer bir fırça ve komütatöre sahiptir. Farklı olarak stator sabit mıknatıs yerine sarımlardan oluşur. Seri bağlı motorda stator sarımları rotor sarımları ile seri bağlıdır. Şönt motorda ise bu sarımlar paralel bağlıdır. Seri bağlı olanlar daha yaygındır ve Üniversal adı da verilir. Bu isim AC ya da DC gerilim kaynaklarından beslendiklerinde aynı çalışmayı göstermesinden ileri gelir. Bu motorlar verilen gerilim polaritesinden bağımsız olarak hep aynı yöne dönerler. Rotorun ve statorun kutuplarını değiştirmek motoru durdurur. Proje ise robotun ileri geri gitmesini sağlamak amacıyla DC motor kullanılmıştır.


1.3.1.DC Motor Kontrol Devresi

Mikrodenetleyicilerin çıkışları DC motorları veya step motorları direkt olarak kontrol etmek için yetersiz olduğundan motor sürücü devreler kullanılır. Motor sürücü devreler ile mikrodenetleyicilerin çıkışlarından alınan sinyaller yükseltilerek motorların kontrolü sağlanır. Motor sürücü devreler transistorlar kullanılarak H köprüsü ve benzeri şekillerde hazırlanabilir. Ancak genellikle kolaylık açısından motor sürücü entegre devreler tercih edilmektedir.

Robotikte en sık kullanılan motor sürücü entegre devreler; DC motor kontrolleri için L293D, L293B, L298 motor sürücü entegrelerdir. Motor sürücü entegre seçiminde temel özellik entegrenin kullanım voltajı ve akım sınırı gibi özellikleridir.
1.3.1.1. L293D ve L293B Motor Sürücü Entegreleri

L293D Motor Sürücü EntegreL293D ve L293B motor sürücü entegreleri içlerinde iki adet H köprüsü barındıran 16 bacaklı motor sürücü entegrelerdir. Genellikle DC motor kontrolünde tercih edilen motor sürücü entegreler olan L293D ve L293B ile iki motor birbirinden bağımsız olarak çift yönlü kontrol edilebilmektedir. Ayrıca L293 motor sürücü entegrelerin enable bacaklarının kullanılmasıyla PWM kontrolü de yapılabilmektedir.

L293D motor sürücü entegresi 4,5 V ile 36 V aralığında maksimum 600 mA akım sınırına kadar kullanılabilir. L293B motor sürücü entegrenin ise aynı voltaj aralığında, maksimum 1 A akım sınırına kadar kullanılması mümkündür.

ŞEKİL 1.3.1.1.1. L293D Motor sürücü entegre bacak yapısı

Yukarıda L293 motor sürücü entegrenin bacak yapısı ve bağlantıları verilmiştir. Bu özellikler L293D ve L293B için aynıdır. Şemada iki motorun birbirinden bağımsız olarak çift yönlü sürüşü için gerekli bağlantılar gösterilmiştir. Burada lojik voltaj değeri 5 V, motor voltajı ise kullanılan motoru sürmek için gerekli voltaj değeri olup bu değer 36 V değerini geçmemelidir.

1.4. HC-SR04 Ultrasonik Sensör

HC-SR04.Ses dalgaları sınıflandırılmasında 20Khz-1Ghz aralığındaki ses sinyalleri ultrasonik ses olarak tanımlanmıştır.Bizim sensörümüz ve bir çok ultrasonik sensör 40Khz frekansında ultrasonik ses üretmektedir.Burada önemli olan sesin yüksekliğinde belirleyici olan etken frekanstır.Ses yüksekse frekansta yüksektir.Ultrasonik ses sinyallerini insan kulağı algılayamaz.
Sensörün nasıl çalıştığına bakalım.
Transdüser ultrasonik darbeyi iletir.Darbe sehimden yansır ve transdüser  tarafından alınır.Darbenin gidiş geliş zamanı sensörle sehimin mesafesine göre orantılıdır.
Ultrasonik darbe t=0 zamanında transdüser tarafından iletiliyor. X pozisyonundaki hedef tarafından yansıtıldıktan sonra t= tx. zamanında darbe alınıyor. tx ;  X  mesafesi ile orantılıdır.
T=0 zamanında darbe iletilir(ultrasonik ses sinyali), cisimden yansır, transdüser tarafından algılanır ve tekrar gönderilir.Sonraki darbe ilk darbenin ultrasonik enerjisinin hepsi absorbe edildiğinde iletilmelidir.Bu yüzden sensöre bir pals gönderilir sensör okunur ve sensörün datasheetinde yazan süre kadar sensöre tekrar pals gönderilmez.Eğer bekleme yapmaksak sensör saçma değerler döndürür.Çünkü ilk yolladığımız sinyal bir yerden yansıyarak sensöre geri dönmeye devam eder.
Tüm katı ve sıvı cisimler ultrasonik dalgayı cok iyi oranda yansıtırlar.Hem katı hem de sıvı cisimlerden ultrasonik enerjinin %99u yansıtılır.Çok ufak oranlardaki enerji miktarı cisim tarafından emilir. Bundan dolayı sensörü çok çeşitli uygulamalarda sorunsuz kullanabilmemiz mümkündür.Ayrıca robotlarda da sıkça kullanılmaktadır.Aşağıdaki resim bu tarz uygulamalara güzel bir örnek.
ŞEKİL 1.4.1. Sensörün çeşitli kullanım alanları

ŞEKİL 1.4.2.HC-SR04 Ultrasonik Sensör
Sensör üzerinde 4 adet pin mevcut.Bunlar;vcc,gnd,trig,echo pinleri.Sensörü kullanmak için trig pininden yaklaşık 10us’lik bir pals gönderiyoruz.Sensör kendi içerisinde 40khz frekansında bir sinyal üretip  8 pals verici transdüsere gönderiyor.Bu ses dalgası  havada, deniz seviyesinde ve 15 °C sıcaklıkta 340 m/s bir hızla yol alır.Bir cisme çarpar ve geri sensöre yansır.Cismin sensörden uzaklıgı ile doğru orantılı olarak echo pini bir süre lojik 1 seviyesinde kalır ve tekrar lojik 0 olur.Bizim bu mesafeyi ölçmek için tek yapmamız gereken echo pininin ne kadar lojik1 olduğunun süresini bulmaktır.Bu yapı aşağıdaki resimden daha iyi görülebilir.
Şimdi echo pindeki sinyal ile nasıl mesafeyi bulacagımıza gelelim.Echo pinin lojik1 de kalma süresini mikrodenetleyici timerı ile ölçelim. Mikrodenetleyiciyi 4mhz kristal ile  kullanırsak, timer 1us çözünürlügünde pinin durumunu tutmuş olur.Klasik yol=hız*zaman dan ve sesim 340m/sn lk hızınıda 34000cm/1000000us (340000/1000000=1/29) olarak düzenlersek  formül x=t/29 olarak bulunur.Fakat burada önemli bir nokta sensörün bize döndürdügü süre ses sinyalinin gönderilmesi ile alınması ile oluşan süre.Yani yol=zaman/29 ile aradaki mesafeyi iki ile çarpmış oluyoruz.Çünkü ses hem gitti hem geldi.Bu yüzden x=t/58 formulüyle aradaki mesafeyi ölçmüş olacagız.(29*2=58).Şimdi kodlarımıza geçelim.Ben elimde pic geliştirme kartı oldugu için pic16f877a mikrodenetleyicisi ile yaptım.En kısa zamanda msp4302231 mikrodenetleyicisi ile de uygulamayı gerçekleştirip kodlarını koyacagım.Zaten giriş çıkış ve timer satırlanını değiştirmek yeterli.












2. YAPILAN ÇALIŞMALAR
Yapılan projede engelden kaçan robot tasarımı gerçekleştirilmeye çalışılmıştır. Tasarımı iki kısım olarak görebiliriz. 1.kısım donanım ve tasarım aşaması. 2.kısım ise yazılım aşamasıdır. Donanım ve yazılım aşaması sırasında her bir parça ve kodun nasıl kullanıldığı paylaşılmıştır.
2.1. Donanım
2.1.1.Projede Kullanılan Malzemeler
  • Arduino Uno R3..............................................................40TL
  • 2x Tekerlekli Dc motor...................................................25TL
  • HC-SR04 Ultrasonik mesafe sensörü..............................10TL
  • Servo motor.................................... ................................20TL
  • l293b motor sürücü entegre.............................................9 TL
  • Sarhoş tekerlek................................................................7 TL
  • Pleksiglass ve jumper .....................................................7 TL
  • Vida ve somunlar.............................................................1 TL
  • 1 adet 9 volt ve 4 adet 1.5 volt pil....................................5 TL
  • 6 voltluk pil yatağı ...........................................................3 TL

TOPLAM MALİYET....................................................127 TL











                   2.1.2. Robot Malzemeleri Montaj

                         

                     ŞEKİL2.1.2.1. Robot şasesi ve tekerlekler

              

                  ŞEKİL2.1.2.2. Pil yatağı ve piller

                               

                       ŞEKİL2.1.2.3. Board ve l293b motor sürücü entegresi

                                

                                  ŞEKİL2.1.2.4. Sarhoş tekerlek


                            
                                   ŞEKİL2.1.2.5. Ultrasonik sensör ve Servo motor

                                  
                                       ŞEKİL2.1.2.6. Arduino Uno R3

                              
                                   ŞEKİL2.1.2.7. Montaj Olmuş Son Hali







2.2.Yazılım

Arduino programında yazılan programın algoritması şöyledir:

  • Robot kararlı bir hala gelmesi için belli bir süre beklenilir.
  • Gezgin robot bulunduğu noktadan ileriye doğru gitmektedir.
  • Bu yer değiştirme anı başladıktan sonra ultrasonik sensörler aktif konuma geçmekte ve önündeki cisimleri taramaktadır..
  • Eğer gezgin robot önünde bir cisim algılarsa dc motorlar durmakta ve araba da olduğu yerde kalmaktadır.
  • Ultrasonik sensör altındaki servo motor aktif konuma geçmektedir.
  • Servo motor 90 derece açı ile sağa ve sola dönmektedir.
  • . Bu kısımda alınan bilgi geçici bir değişkende saklanmıştır.
  • Sensör servo motor yardımıyla orta konuma gelmektedir.
  • En son olarak en önemli işlem olan karar verme mekanizması gerçekleşmektedir. Eğer sağa dönüşteki mesafe soldaki mesafeden uzunsa sağa dönecektir.
  • Sola dönüşteki mesafe sağdaki mesafeden uzunsa sola dönecektir..
  • Robot, önündeki servo motorun ve arkadaki dc motorların beraber çalışması sonucunda belirli bir yöne dönmektedir.













2.2.1.Program Kaynak Kodları

#include<Servo.h>

const int trig=10;
const int echo=9;
const int servopin=8;
const int sol_ileri=7;
const int sol_geri=6;
const int sag_ileri=5;
const int sag_geri=4;

int mesafe=0;
int sure=0;
int sol=0;
int sag=0;
int uzaklik=30;

Servo servo;

void setup() {
pinMode(trig,OUTPUT);
pinMode(echo,INPUT);
pinMode(sol_ileri,OUTPUT);
pinMode(sol_geri,OUTPUT);
pinMode(sag_ileri,OUTPUT);
pinMode(sag_geri,OUTPUT);
servo.attach(servopin);
servo.write(90);
delay(700);
Serial.begin(9600);
}

void loop() {
mes();

if(mesafe<uzaklik){
tara();
}
else
devamEt();
}

int mes(){
digitalWrite(trig,HIGH);
delayMicroseconds(1000);
digitalWrite(trig,LOW);
sure=pulseIn(echo,HIGH);
mesafe=(sure/2)/29.1;
return mesafe;
}
void devamEt(){
digitalWrite(sol_ileri,HIGH);
digitalWrite(sol_geri,LOW);
digitalWrite(sag_ileri,HIGH);
digitalWrite(sag_geri,LOW);
return;
}
void tara(){
dur();
sagabak();
solabak();

if(sol<sag){
sagadon();
}
else
soladon();
}
void dur(){
digitalWrite(sol_ileri,LOW);
digitalWrite(sol_geri,LOW);
digitalWrite(sag_ileri,LOW);
digitalWrite(sag_geri,LOW);
delay(500);
return;
}
void sagabak(){
servo.write(0);
delay(700);
sag=mes();
servo.write(90);
delay(700);
return;
}
void solabak(){
servo.write(180);
delay(700);
sol=mes();
servo.write(90);
delay(700);
return;
}
void sagadon(){
digitalWrite(sol_ileri,HIGH);
digitalWrite(sol_geri,LOW);
digitalWrite(sag_ileri,LOW);
digitalWrite(sag_geri,HIGH);
delay(500);
dur();
return;
}
void soladon(){
digitalWrite(sol_ileri,LOW);
digitalWrite(sol_geri,HIGH);
digitalWrite(sag_ileri,HIGH);
digitalWrite(sag_geri,LOW);
delay(500);
dur();
return;
}




















SONUÇLAR


Projede, arduino ile engelden kaçan robot gerçekleştirilmiş oldu. Projenin amacı herhangi bir engelle karşılaştığında yön değiştirerek engelden kaçan bir robot tasarlanmasıdır.
Engelden kaçan robot ön kısmında bulunda Hc Sr04 Ultrasonik sensör, hareket doğrultusundaki cismi algılayacak ve duracaktır. Bu andan itibaren robotun karar verme mekanizması devreye girecektir. Sensörün oturduğu servo motor dönecek ve ultrasonik sensörler robotun etrafındaki cisimlerin konumları tarayacak ve alınan veriler mikrodenetleyici içerisinde islendikten sonra gezgin robotun hareket yönüne karar verecektir.. Robotun sağa sola ve ileriye gitmesini sağlayan arka kısımda bulunan DC motordur.

Robot ultrasonik sensörden gelen verilere göre güzergâhını belirleyecektir. Sağa ve sola dönme mantığı tankların olduğu yerde dönme mantığıyla birebirdir. Sola döneceği zaman sağ teker ileri giderken sol tekerlek geri gidecektir. Aynı şekilde sağa döneceği zaman da sol motor ileri sağ motor geri hareket edecektir ve böylece dönme işlemini tamamlamış olur.












KAYNAKÇA


  1. http://www.robotiksistem.com/arduino_nedir_arduino_ozellikleri.html
  2. https://learn.sparkfun.com/tutorials/installing-an-arduino-library
  3. Projeler ile ARDUINO Erdal DELEBE KODLAB YAYINLARI
  4. Mühendisler için Arduino Volkan KANAT Dikey Eksen YAYINLARI7
  5. https://www.youtube.com/channel/UCnD05oNu5qPq_FwF_jfWIlg
  6. http://communityofrobots.com/tutorial/kawal/how-make-your-first-robot-using-arduino