[LinuxFocus-icon]
<--  | Ana Sayfa  | Erişimdüzeni  | İçindekiler  | Arama

Duyumlar | Belgelikler | Bağlantılar | LF Nedir
Bu makalenin farklı dillerde bulunduğu adresler: English  Castellano  Deutsch  Francais  Turkce  

[Photo of the Authors]
Katja and Guido Socher
<katja/at/linuxfocus.org, guido/at/linuxfocus.org>

About the authors:

Katja LinuxFocus'un Alman editörüdür. Kendisi Tux, Bilgisayar Tabanlı Çizim, film ve fotoğrafçılık ve denizi sever. Ana sayfasina buradan ulaşabilirsiniz.

Guido çok uzun zamandan beri Linux severdir ve Linux'un kedisine seçim şansı ve özgürlük verdiğini düşünüyor. Linux ile gereksinimlerinize göre çözümler üretip geliştirebilirsiniz.



Türkçe'ye çeviri:
M. Muti Gözel <gozelm/at/be.itu.edu.tr>

İçerik:

 

Otomatik ışık izleyici robot yapmak

[Illustration]

Özet:

Bu yazıda bir mikro kontrol birimi ile en parlak noktaya yönelerek ilerleyen otomatik bir robotun nasıl yapılacağını anlatacağız.

_________________ _________________ _________________

 

Giriş

İki yıl önce LinuxFocus'da Linux-kontrollü yürüyen robot'u anlattık. İki ayağı üzerinde yürüyebilmesi ve alışılagelmiş motorlarının bulunmaması açısından tasarımda çok özel bir yapıya sahipti. Bu, bu robotun çok ilginç olan bir yanıydı; bununla birlikte robot çok yavaştı, çok fazla akıma gereksinim duyuyordu ve yapımı için çok fazla özel parça ve hüner gerektiriyordu.

Yeni robotumuzun tasarımı son derece farklı. Ucuz ve her yerde bulabileceğimiz türden parçalarla yapabileceksiniz. Bir AVR mikro kontrol birimi ile kontrol edilebilen bir otomatik robottur. Otomatik bir şekilde (kişi kontrolü olmadan) odadaki en aydınlık tarafa yönelerek ilerleyecek şekilde programladık.  

Mekanik Kısım


[conrad motor]
Conrad'tan küçük çarklı bir motor.
[servo motor]
Motor olarak çalışması için düzenlenmiş bir Servo. Bu belki en iyi çözümdür ama bu fikir robotumuzu bitirdikten sonra aklımıza geldi.
Robotun iki bağımsız motor tarafından yürütülen iki tekerleği var. Üçüncü tekerlek ise bir pinpon topudur. Bu, robotun parlak noktada dönmesini sağlayacaktır. Tekerlek için oyuncaktan söktüğümüz lastik tekerlekler kullandık ama siz buna mecbur değilsiniz. Etrafına bir lastik bant sarılmış bir reçel kavanozunun kapağı da iyi bir tekerlek olabilir.

Otomatik bir robotun pillerle çalışması oldukça önemlidir. Mikro kontrol birimi 4.5V ile çalıştığından motorlar da 3-4.5V ile çalışmalıdır. Daha fazla akıma gerek olmamalıdır, aksi durumda piller ve kontrol devresi aşırı büyük ve ağır olacaktır. Bu tasarım için 1293d olarak adlandırılan bir entegre motor sürüş çipi kullandık. 1293d motor sürüş çipi 0.5A'e kadar olan yükleri taşıyabilir. Bu nedenle motorlar, en kötü koşullarda, 0.5A'in altında çalışmalıdır.

Conrad'dan (www.conrad.de, part number: 242802) elde ettiğimiz şanzıman kutulu 2 küçük motor kullandık ama siz başka bir tür şanzıman kutulu motor da kullanabilirsiniz. Aslında simdi, küçük botların, arabaların ve uçakların uzaktan kumandasında kullanılan Servo Motorların kullanmamızın en iyi çözüm olacağını düşünüyoruz. Normalde bu Servo Motorlar sadece bir yönde dönerler ama siz şanzıman kutusunu açabilir, durdurucuyu alabilir, potansiyometreyi ve elektronik birimi çıkarabilirisiniz. Kolay bulunabilir ufak ve güçlü motorlardır.

[motor on wooden board 1]

Robotu yapmak için motorları bir tahtanın (12cm x 9cm) alt tarafına, yükün büyük kısmı iki dingil üzerinde taşınacak şekilde, ortaya yakın yerleştiriniz. Üçüncü tekerlek olan pinpon topu, yuvasında rahat bir şekilde dönebilmesinin sağlanması için, yükün küçük bir kısmını taşımalıdır.

[motor on wooden board 1]

Pinpon topunun yuvası doğru büyüklüğe sahip küçük bir plastik şise kapağı olabilir.
[pill box]


Robotun hareketi için 3 tane AAA pil kullandık. Pil tutucularını aşağıda gösterildiği gibi yerleştiriniz. Piller oldukça ağırdır bu yüzden yerleştirilmelerinde yükün çoğunun tekerlekler üzerine ve yalnızca azının pinpon topuna gelmesine dikkat edilmelidir. Bir aç-kapa düğmesini kenarda istediğiniz yere yerleştirebilirsiniz.

[position of the batteries]

 

Algılayıcılar

Robotumuza iki tip algılayıcı verdik: Dokunma algılayıcıları çelik tellerden yapılmış basit açkılardır. Çelik telleri aşağıda gösterildiği gibi eğdik:
[steel wire]


Tahta plakanın her kenarında bir vida ile tutturulmuş böyle 4 algılayıcı vardır.

Robot bir cisme dokunduğunda çelik tel (2, sekle bakınız) tahta plaka (3) üzerindeki ikinci tele dokunur ve bu çelik tel ile tahta üzerinde bulunan tel arasındaki elektrik bağlantısını kapatır.

Pinpon topu yuvasından çıktığında çelik telin eğilmemesi için tahta plaka altına bir tahta parçası (1) ekledik. Bu parça pinpon topu yuvasında iken yerden 5mm yüksekte olmalıdır.
çelik telin ucu yerden 5-7mm yüksekte olmalı.
[touch sensors]

Işık algılayıcıları 3 foto dirençten oluşuyor. Kağıt parçalarını foto dirençlerin arasına aşağıda şekilde görüldüğü gibi yerleştirdik. Bu kağıt parçaları ışık yandan vurduğunda gölge oluşturacaktır. Sadece ışık tamamen tepeden vurduğunda, 3 algılayıcının hepsi üzerinde eşit miktarda ışık sağlayacaktır. Robot 3 algılayıcı üzerindeki değerleri karşılaştırarak hangi doğrultuda gideceğine karar verebilecektir.

Bu 3 foto direnci küçük bir deney tahtası (üzerinde çok sayıda delik bulunan plakalar) üzerine yapıştırıp sonra hepsini bir tek vida ile robota ekleyebilirsiniz.
[photo sensors] [position of the photo sensors]

Algılayıcıların ve motorların baskılı devre plakası üzerine mikro kontrol birimi ile nasıl bileştirileceği aşağıda daha ayrıntılı olarak anlatılacaktır. Mekanik parçaları oluşturduğumuza göre, simdi robotun beynini inceleyelim.  

Devre

Robotumuzda beyin olarak bir AT90S4433 mikro kontrol birimi kullandık fakat beyin motorları döndürecek kadar enerjiyi doğrudan aktaramaz. İşte bu noktada L293D motor sürüş birimi devre girer. Bu çip 4 yükselticili dijital çıkış kapısına ve motorun sarımlarından kaynaklanabilecek yüksek akıma karşı korumak için ekstra korumalı diyotlara sahiptir. Bu çıkış kapılarının ikisi bir motoru sürmek için kullanılabilir. Böylelikle motorun sağa ve sola dönmesi sağlanabilir.
l293d

Bir motoru 1. ve 2. diğerini de 3. ve 4. çıkış kapılarının arasına bağladık. Bu, çipin sağlayıcı ayaklarına değişik süreli etkiler gönderdiğimizde, çipin ayaklarının motorların hızını kontrol etmek için kullanılmasını sağlar.

Devrenin geri kalan tarafı çok basittir: Atmel AT90S4422 mikro kontrol birimini tekrar kullanırız. Daha önceki LinuxFocus makalelerinden bu mikro kontrol birimini biliyorsunuz. Analog girişleri foto dirençler üzerindeki ışığı ölçmek için kullanılabilir ve dokunma algılayıcıları, aşağıdaki şekilde gösterildiği gibi, doğrudan dijital girişlere bağlanabilir.

Mikro kontrol birimi hakkında daha fazla bilgiyi Guido'nun Mart 2002 yazı: GCC ile AVR Mikro Kontrol Biriminin Programlanması makalesinde bulabilirsiniz.

circuit

Devre 4.5V ile çalışır. Üç AAA pili bu nedenle robotu çalıştırmak için yeterlidir.

Otomatik robotumuzun devresi artık hazır olacaktır. Bununla birlikte yazılımda bir şeyler doğru gitmez ve robot beklendiği gibi çalışmaz ise ne yapacaksınız? Hiç bir şey göremezsiniz. Foto dirençlerin değerini bilmezsiniz, robot yazılımının hangi secimi yaptığı hakkında bir fikir sahibi olmazsınız. Bize gereken şey robotun ne yaptığını gösterecek herhangi bir ekrandır. RS232 seri bağlantısı bu is için uygunudur. Değişkenlerin değerini okuyabilir ve hatta robotla iletişim kurabiliriz. Bağlantıyı sürekli yapmak istemiyoruz ama robotun hatalarını ayıklamak için gerek duyuyoruz. Bu nedenle max232'yi ve RS232 bağlantısı için gerekli olan diğer parçaları başka bir plaka üstüne eklemek ve gerektiğinde bağlayıp çıkarmak daha akıllıca olacaktır:
rs232adapter

Tam Eagle devresi diyagramları, plakadaki yerleşim ve robot için gerekli yazılım bu makalenin sonundaki bölümden indirilebilir. Burada plakadaki yerleşimi anlatmayacağız. Devre plakası piller arasına yerleşecek kadar küçüktür.

aşağıda robotun hangi tarafındaki dokunma algılayıcısının devre diyagramının hangi ayağına bağlanacağını görebileceğiniz bir şekil var. Şekil aynı zamanda motorların nasıl bağlanacağı da göstermektedir. Motorlar, +3V hattı "+" ayağına bağlanıp toprak hattı "-" ayağına bağlanırsa robot ileriye doğru (ok yönünde) hareket edecek şekilde kutuplanmalıdır. 1293d'nin ayakları 1y den 4y'ye kadar adlandırılmıştır.

[]

 

Yazılım

Burada fazla detaya girmek istemiyoruz. Ana program linuxrobot.c dosyasında görülebilir (makalenin sonundan indirin). Program, bir C programcısı tarafından rahatlıkla anlaşılabilecek açıklamaları içeriyor. Ana döngü ilk önce Mikro kontrol biriminin analog-dijital çeviricisini bir anda çevirme modunda 3 kez çalıştırarak foto dirençlerin analog bilgilerini elde eder. Bundan sonra dokunma algılayıcılarına bakar. Eğer dokunma algılayıcılardan herhangi biri basılmışsa ışık algılayıcılarından daha önemli hale gelecekler çünkü bu durumda robotun hareketini engelleyen bir şey yoluna çıkmış olabilir. Robot, motoru, basılmış durumdaki dokunma algılayıcısının tersi yönde birkaç milisaniye döndürecektir. Eğer dokunma algılayıcılarına basılmamışsa ışık algılayıcıları arasında bir karşılaştırma yapılacak. Bu karşılaştırma compare_with_tol() fonksiyonun ile yapılıyor. Bu fonksiyon bir değeri diğer iki tanesinin ortalama değeriyle karsılaştırmaktadır. Gürültüyü ortadan kaldırmak için, değerler arasındaki fark yüzde 5 in altında ise iki değeri eşit alıyoruz.

Hangi motorun döneceğini foto algılayıcıların karsılaştırması sonucunda saptıyoruz. 2 tekerleğimiz olduğuna göre robotu döndürmek için tekerleklerin birini diğerinden daha hızlı yada ters yönlerde hareket ettirebiliriz. Mikro kontrol birimi ölçümleri çok hızlı, saniyede çok kez, tekrarladığından robotun hareketi, motoru biraz sağa yada sola döndürmek için motorun birini saniyenin bir kesri kadar durdursak bile, sürekli görünür.  

Bir araya getirmek

Elektroniği bir araya getirirken testleri aşamalı yapmak her zaman iyi bir fikirdir. Bu yolla olası hataları en aza indirebilirsiniz.

Linuxrobot yazılım paketinde 3 farklı test programı vardır. Ledtest programı 2 LED'in yanıp sönmesi sağlar. Bunu "make ledtestload" komutu ile yükleyebilirsiniz. Bu programın derlenmesini ve Mikro kontrol birimine yüklenmesinin sağlar. 2 LED, program yüklenir yüklenmez yanıp sönmeye başlamalı. Bu test başarılı olduğunda mikro kontrol biriminin, osilatörün ve yazılımı yüklemek için PC ile kurulan bağlantının çalıştığından emin olabilirsiniz.

Sonraki adım, motor test programıdır. Bu test programı "elektronik lastik top" içerir. Bunu "make motortestload" komutu ile yükleyebilirsiniz. Motor test programı dokunma algılayıcılarını sürekli yoklar ve biri dokunulduğunda robot dokunulan algılayıcıdan uzaklaşmak için hareket eder. Eğer robota parmağınızla bir taraftan dokunursanız robot ters yönde sekecektir. Diğer elinizi robotun arkasına koyarsanız robot iki elinizin arasında lastik bir top gibi sürekli sekecektir. Robot bu testi geçerse ışık algılayıcıları ile RS232 bağlantısı dışında her şey test edilmiştir.

Son test programı adctes olarak adlandırılır ("make adctestload" ile derleyip yükleyin). Program, robotun hatalarını ayıklamak için konmuş bulunan RS232 bağlantısını ve 3 foto algılayıcı için analog-dijital çeviriciyi (ADC - analog to dgital converter) test eder. Programı mikro kontrol birimine yükleyin ve PC'nize RS232'yi bağlayınız. Bundan sonra aşağıdaki 3 komutu kabukta çalıştırın:
make ttydevinit
./ttydevinit /dev/ttyS0
cat /dev/ttyS0
Robot periyodik olarak foto algılayıcılar tarafından ölçülen ışık şiddetinin miktarını ekrana yazacaktır.

Tüm testler başarı ile tamamlandığında son programı robota "make load" ile yükleyebilirsiniz. İlk test için en uygun yer ortasında tek lamba olan bir odadır. Robot direkt lambaya doğru gitmeli ve orda durmalı.

Arka tarafı ışık kaynağına gelecek şekilde yerleştirdiğinizde nasıl döndüğünü veya gölgeleri nasıl yok ettiğini görmek oldukça eğlencelidir.  

Problemler ve İyileştirmeler:

Bu robotu küçük bir deney olarak başlattık. Kendi kendine karar veren ve PC ile data bağlantısına gerek duymadan ilerleyen bir robot yapmak eğlenceliydi. Makalenin ilerleyen kısımlarından indirebileceğiniz linuxrobot paketindeki program oldukça küçük ve basit olmasına rağmen istediğimizi yapıyor: Robot en aydınlık yere doğru ilerler.

İlerideki geliştirmeler için başlangıç noktaları kullanılabilecek bazı noktalardan bahsetmek istiyoruz: Su anda Linuxrobot programı oldukça küçük ve basittir, bu yüzden kolaylıkla anlayabilir ve geliştirebilirsiniz. Bir 4433 Mikro kontrol biriminin hafızasının yalnızca %50'sine ihtiyaç duyar böylece daha pek çok şey ekleyebilirsiniz.

Bu robot ile ilgili iyi şey donanımın su yada bu şekilde geliştirilebilir olmasıdır: Temel olarak 2 motor ve mikro kontrol birimine bağlı birkaç algılayıcıdan ibarettir. Tüm mantık yazılımın içindedir. Bu, yazılımı değiştirmekle hemen hemen istediğiniz her şeyi değiştirebilmeniz anlamına gelir.

Test durumundaki robotun bir resmi vardır. Etrafa kaçmasın diye altına birkaç post-it bloğu yerleştirdik. RS232 bağlantısı hata ayıklamak amacı ile yapılmıştır:


... son olarak ışığı arayan robot ...:

 

Referanslar

 

Bu yazı için görüş bildiriminde bulunabilirsiniz

Her yazı kendi görüş bildirim sayfasına sahiptir. Bu sayfaya yorumlarınızı yazabilir ve diğer okuyucuların yorumlarına bakabilirsiniz.
 talkback page 

<--, Bu sayının ana sayfasına gider

Görselyöre sayfalarının bakımı, LinuxFocus Editörleri tarafından yapılmaktadır
© Katja and Guido Socher, FDL
LinuxFocus.org
Çeviri bilgisi:
en --> -- : Katja and Guido Socher <katja/at/linuxfocus.org, guido/at/linuxfocus.org>
en --> tr: M. Muti Gözel <gozelm/at/be.itu.edu.tr>

2003-11-07, generated by lfparser version 2.43