bİlgİsayar kontrollÜ kamerali robot...
TRANSCRIPT
T.C.
KARADENİZ TEKNİK ÜNİVERSİTESİ
Mühendislik Fakültesi
Elektrik-Elektronik Mühendisliği Bölümü
BİLGİSAYAR KONTROLLÜ KAMERALI
ROBOT KOLU
MUSA ARSLAN
196152
WALEED ABDULGHAFAR MAWLAVE
206455
Danışman
ÖĞR. GÖR. CAHİT ALTAN
Mayıs 2012
TRABZON
T.C.
KARADENİZ TEKNİK ÜNİVERSİTESİ
Mühendislik Fakültesi
Elektrik-Elektronik Mühendisliği Bölümü
BİLGİSAYAR KONTROLLÜ KAMERALI
ROBOT KOLU
MUSA ARSLAN
196152
WALEED ABDULGHAFAR MAWLAVE
206455
Danışman
ÖĞR. GÖR. CAHİT ALTAN
Mayıs 2012
TRABZON
iii
LİSANS BİTİRME PROJESİ ONAY FORMU
Musa ARSLAN ve Waleed Abdulghafar MAWLAVE tarafından Öğr. Gör.
Cahit ALTAN yönetiminde hazırlanan “Bilgisayar Kontrollü Kameralı Robot Kolu” başlıklı lisans bitirme projesi tarafımızdan incelenmiş, kapsamı ve niteliği açısından bir Lisans Bitirme Projesi olarak kabul edilmiştir.
Danışman : Öğr. Gör. Cahit ALTAN
Jüri Üyesi 1 : Yrd.Doç.Dr. Ayten ATASOY
Jüri Üyesi 2 : Yrd.Doç.Dr. Yusuf SEVİM
Bölüm Başkanı : Prof. Dr. İ. H. ALTAŞ
iv
ÖNSÖZ
Öncelikle hazırlamış olduğumuz bu çalışmayı bize katkısı olan herkese, bu çalışmaya
değerli zamanını ayıran, her türlü bilgi ve birikimini sunmaktan kaçınmayan, her konuda
beni doğru bir şekilde yönlendiren Öğr. Gör. Cahit ALTAN’a sonsuz teşekkürlerimizi
sunarız. Ayrıca bu çalışmayı destekleyen Karadeniz Teknik Üniversitesi Rektörlüğü’ne
Mühendislik Fakültesi Dekanlığına ve Elektrik-Elektronik Mühendisliği Bölüm
Başkanlığına içten teşekkürlerimi sunarız.
Ayrıca yine aynı şekilde bu konuda her türlü yardımı sağlayan ve bilgilerini hiç
çekinmeden paylaşan Öğr. Gör. Oğuzhan ÇAKIR ve Yrd. Doç. Dr. Yusuf SEVİM’ede
teşekkürlerimizi bir borç biliriz.
SOMEL Bilgisayar Kursu hocalarından Sayın Hasan ÖZTÜRK’ede teşekkürlerimizi
sunarız.
İyi birer mühendis olabilmemiz için emek veren, bilgilerini bizden esirgemeyen bütün
bölüm hocalarıma da teşekkürlerimi sunarız.
Her şeyden öte, bu çalışmayı eğitimim süresince bize her konuda destek olan ve her
türlü fedakârlığı gösteren ailelerimize armağan ediyoruz.
Musa ARSLAN
Waleed MAWLAVE
TRABZON
Mayıs, 2012
v
İÇİNDEKİLER
Sayfa No
Lisans Bitirme Projesi Onay Formu ..................................................................................... iii
Önsöz ................................................................................................................................... iv
İçindekiler ............................................................................................................................. v
Özet ....................................................................................................................................... ix
Semboller ve Kısaltmalar ...................................................................................................... x
Şekiller Dizini ...................................................................................................................... xii
Tablolar Dizini .................................................................................................................... xiv
Proje Zaman Çizelgesi ......................................................................................................... xv
1. Giriş
2. Teorik Çalışmalar .............................................................................................................. 2
2.1. PIC Mikrodenetleyiciler .......................................................................................... 2
2.1.1. PIC Hakkında Genel Bilgiler ........................................................................... 2
2.1.2. Mikrodenetleyici ve Mikroişlemcilerin Kıyaslanması .................................... 2
2.1.3. PIC18F4550 Genel Tanıtımı ............................................................................ 4
2.1.3.1.USB Desteği ....................................................................................... 7
2.1.3.2. Güç Tüketimi .................................................................................... 7
2.1.3.3. Osilatör Özellikleri ............................................................................ 7
2.1.3.4. PIC18F4550’nin Kendine Has Özellikleri ........................................ 8
2.1.4. Kullanılabilecek Kristal Seçenekleri ............................................................... 9
2.1.5. PIC18F4550 Giriş/Çıkış Portları ..................................................................... 9
2.1.5.1. PortD ............................................................................................... 10
2.1.6. Timer Donanım Birimi .................................................................................. 10
2.1.7. Darbe Genişlik Modülasyonu Modu ............................................................. 11
vi
2.2. Bilsayar Arayüzü Programının Yazılması ........................................................... 13
2.2.1. Microsoft Visual Studio Programı ................................................................. 13
2.2.2. C#’da Mevcut Proje Açmak veya Kapatmak ................................................. 13
2.2.3. Properties Pencereleri .................................................................................... 15
2.2.4.Solution Explorer Penceresi ........................................................................... 16
2.2.5. Form Designer ve Code Editor Pencereleri ................................................... 16
2.2.6. Toolbox Penceresi ......................................................................................... 17
2.2.7. Kontroller Hakkında Temel Bilgiler ............................................................. 18
2.2.7.1. Label Kontrolü ............................................................................... 19
2.2.7.2. Button Kontrolü .............................................................................. 19
2.2.7.3. TrackBar Kontrolü .......................................................................... 20
2.2.8. Değişken Tanımlamak ve Kullanmak .......................................................... 21
2.2.8.1. Sabit Tanımlamak ........................................................................... 22
2.2.8.2. Char Tipi Değişkenler ..................................................................... 22
2.2.8.3. String Değişkenler .......................................................................... 22
2.2.8.4. Byte, İnteger, Short ve Long Karakterleri ...................................... 23
2.2.9. ToStirng( ) Metodu ile Dönüştürme Yapmak ................................................ 23
2.2.10. Convert Sınıfı ile Dönüştürme Yapmak ...................................................... 24
2.2.11. Dizi Değişkenler .......................................................................................... 25
2.2.12. Blok Kontrol Deyimleri ............................................................................... 25
2.2.12.1. If Deyimi ....................................................................................... 25
2.2.12.2 For Deyimi .................................................................................... 26
2.3. USB .......................................................................................................................... 28
2.3.1. USB Haberleşmesi ........................................................................................ 28
2.3.2. Kullanıcıya Sağladığı Avantajlar .................................................................. 28
2.3.2.1. Kullanım Kolaylığı ........................................................................ 28
2.3.2.2. USB Hızı ........................................................................................ 29
vii
2.3.2.3. Güvenilir Veri Transferi ................................................................ 29
2.3.2.4. Maliyet Açısından Avantajları ........................................................ 29
2.3.2.4.1. Güç Sarfiyatı ................................................................... 29
2.3.2.4.2. Esneklik ........................................................................... 30
2.3.2.5. Tasarımcıya Sağladığı Avantajlar .................................................. 30
2.3.2.6. İşletim Sistemi Desteği ................................................................... 30
2.3.2.7.USB Kablolar ve Konnektörler ........................................................ 31
2.3.2.8. USB Haberleşmesi Projemize Uygun Mu? ..................................... 31
2.3.2.9. USB Haberleşmesi İçin Olması Gereken Koşullar ......................... 32
2.3.2.9.1. Denetleyici ...................................................................... 32
2.3.2.10. USB Haberleşme Elemanları ....................................................... 32
2.3.2.11. USB Cihaz Tespiti ........................................................................ 33
2.4. MicroC Programı .................................................................................................... 34
2.4.1. MicroC Yazım Kuralları Nelerdir? ................................................................ 34
2.4.2. MicroC Operatörleri ...................................................................................... 34
2.4.3. Kontrol Fonksiyonları .................................................................................... 35
2.4.3.1. IF-ELSE Fonksiyonu ...................................................................... 35
2.4.4. Döngü Yapıları .............................................................................................. 36
2.4.5. MicroC Derleyicisinin Kullanımı .................................................................. 36
2.4.6. Proje Başlangıç Adımları ............................................................................... 37
2.4.7. MicroC’de Derleme ....................................................................................... 38
2.5. Servo Motorlar ....................................................................................................... 40
2.5.1. Genel Anlamda Servo Motor ......................................................................... 40
2.5.2. Servo Motorların Diğer Motorlarla Kıyaslanması ......................................... 40
2.5.3. Servo Motorların Tipik Yapısı ....................................................................... 41
2.5.4. Servo Motorların Çalışma Prensibi ............................................................... 42
viii
2.5.5. RC Servo Motorlar ........................................................................................ 42
3. Bilgisayar Kontrollü Kameralı Robot Kolu Uygulaması ................................................ 44
3.1. Mekanik Sistemin Gerçeklenmesi .......................................................................... 44
3.1.1. Malzeme Seçimi ............................................................................................ 44
3.1.2. Bakır Ayakları Parlatma İşlemi ..................................................................... 46
3.1.3. Plaket Ölçülerinin Belirlenmesi ..................................................................... 47
3.1.4. Taşıyıcı Kutuların Yapılması ......................................................................... 49
3.1.5. Döner Eklemin Yapılması ............................................................................. 50
3.1.6. İki RC Servo Motorlu Birinci Eklem ............................................................. 51
3.1.7. Bir RC Servo Motorlu İkinci Eklem .............................................................. 52
3.1.8. Mekanik Sistemin Son Hali ........................................................................... 53
4. SONUÇLAR ................................................................................................................... 55
KAYNAKLAR ............................................................................................................... 56
ÖZGEÇMİŞ ..................................................................................................................... 57
EKLER(Tablo) ................................................................................................................ 58
EK1 ................................................................................................................................. 59
ix
ÖZET
Günümüz teknolojisinde hemen hemen tüm donanım birimleri bilgisayar vasıtasıyla
kontrol edilmektedir. Bilgisayar Kontrollü Kameralı Robot Kolu projemizde bilgisayar
aracılığıyla kontrol edilmiştir. Bilgisayar kullanımı hayatımızda çok geniş bir yer kapladığı
için gerçekleştirdiğimiz bu proje pek çok yerde kolaylıkla kullanılabilecektir.
Bilgisayar Kontrollü Kameralı Robot Kolu projemizin bilgisayar arayüz programı
Visual C# programında yazılmıştır. Visual C# programının seçilmesindeki amaç bu
programın nesneye yönelik olmasıdır. Visual C# programı görsel arayüz eklentisini
oluştururken birçok alternatif sunmaktadır. İstenilen nesne çek bırak tekniğiyle kolaylıkla
oluşturulmaktadır. Bu özelliği ile proje arayüz programını yazarken vakitten tasarruf
sağlamaktadır.
Mikrodenetleyici programı MikroC derleyicisi kullanılarak yazılmıştır. MicroC
programının kullanılmasının pek çok avantajı mevcuttur. Mikrodenetleyici programı
yazılırken sadece program kısmı yazılmıştır. Diğer kısımlar derleyici tarafından
oluşturulmuştur. Yazılan bu program hareket mekanizmaları için gerekli darbe genişlikli
modülasyon işaretlerini göndermektedir. Bu işaretler kol kısmında bulunan rc servo
motorlar tarafından hareket fonksiyonlarına çevrilmektedir. Böylece kurulan sistem verimli
bir şekilde çalıştırılabilmektedir.
Bu projeyi yapmamızdaki asıl amacımız ülkemizde her yıl terör olaylarında birçok
şehidimiz olmaktadır. Sınır boylarında nöbet tutan askerlerimiz çok daha uzaktan
kendilerine karşı gelebilecek tehditlere karşı bilgilendirilmelilerki can kaybı yaşanmasın.
Kurduğumuz bu sistem yapı itibariyle üzerine ek donanımlar ve gelişmiş algılayıcılar
eklenerek uzak mesafelerden kontrol edilebilir. Böylece kontrol edilen bu alanın denetimi
de sağlanmış olmaktadır. Ayrıca bu projenin gelişmiş bir versiyonu NASA uzay araçları ve
insansız hava araçlarında kullanılmaktadır. Uzay araçlarında kullanılan kameralı robot kol
gelişmiş sensörlerden oluşmaktadır ve binlerce kilometrelik uzaklıktan zayıf radyo
sinyalleri kuvvetlendirilerek kontrol edilmektedir. Sonuç olarak; gelişmiş bir kameralı
robot kolu hayatı riske atmamayı sağlamakta, günümüzde keşfedilmesi gereken yerler
hakkında bilgi toplamakta ve savunma sanayi başta olmak üzere pek çok alanda
kullanılabilmektedir.
x
SEMBOLLER VE KISALTMALAR
I/O : Input/Output (Giriş/Çıkış)
MHz : Mega Hertz
s : Saniye
cm : Santimetre
RC : Radio-Controlled ( Radyo Frekans Kontrollü)
° : Derece (Açı)
USB : Universal Serial Bus (Evrensel Seri Yolu)
PIC : Peripheral Interface Controller
ASCII : American Standard Code for Information Interchange
[ ] : Dizi
CPU : Central Processing Unit
RAM : Random Access Memory
ADC : Analog/Digital Converter
WDT : Watchdog Timer
DC : Direct Current (Doğru Akım)
AC : Alternative Current (Alternatif Akım)
V : Volt
MCLR : Master Clear
μA : Mikro Amper
PLL : Phase Locked Loop
HS : Yüksek/Hız Kristal/Rezanatör
EEPROM : Electronically Erasable Programmable Read Only Memory
C : Kapasite
xi
pF : Piko Farad
XT : Kristal/Rezanatör
PWM : Pulse Width Modulation
f : Frekans
ROM : Read Only Memory
Tosc : Salınım Süresi
TTL : Transistor-Transistor Logic
CCP : Capture/Compare/PWM
SPP : Streaming Parallel Port ( Duraksız Paralel Port)
g : Gram
xii
ŞEKİLLER DİZİNİ
Sayfa No
Şekil 2.1 PIC18F4550’nin Genel Gösterimi……………………………..…………………5
Şekil 2.2 PIC18F4550’nin Pin Görünüş Şeması…………………………..……………......6
Şekil 2.3 PWM Çıkış Şekli……………………………………………….………………..12
Şekil 2.4 Visual Studio’da Yeni Proje Açılması………………………….……………….14
Şekil 2.5 Yeni Proje Sayfası………………………………………………..……………...15
Şekil 2.6 Properties Penceresi……………………………………………….…………….15
Şekil 2.7 Solution Explorer Penceresi……………………………………….…………….16
Şekil 2.8 Form Designer ve Code Penceresi………………………………….…………...17
Şekil 2.9 Toolbox Penceresi…………………………………………………….…………18
Şekil 2.10 Label Kontrolü…………………………………………………..…….……….19
Şekil 2.11 Button Kontrolü………………………………………….……….…….……...19
Şekil 2.12 TrackBar Kontrolü………………………………………….…….…….……...20
Şekil 2.13 USB Kablo ve Konnektör………………………………………..…….………31
Şekil 2.14 MicroC’de yeni bir proje penceresi açma………………………….…..………37
Şekil 2.15 MicroC’de proje açmada bazı temel ayarlar…………………….……..………38
Şekil 2.16 Derleme Penceresi……………………………………………….……..………39
Şekil 2.17 Servo Motorun Çalışma Şeması……………………………………..….……...42
Şekil 3.1 Fiber Plaket Numunesi…………………………………………………….…….44
Şekil 3.2 Bakır Şerit Numunesi……………………………………………………….…...45
Şekil 3.3 Plaket Numunesi………………………………………………………………...45
Şekil 3.4 Bakır Parlatma İşlemi………………………………………………...…….…...46
Şekil 3.5 İlk eklem montajı…………………………………………………………….….47
Şekil 3.6 İkinci eklem montajı………………………………………………………….…48
xiii
Şekil 3.7 İkinci eklemin tasarlanması…………………………………………………......49
Şekil 3.8 Gövde Kutusu……………………………………………………………….......50
Şekil 3.9 Döner Eklem…………………………………………………………………….51
Şekil 3.10 İki RC servo motorlu birinci eklem……………………………………………52
Şekil 3.11 Bir RC servo motorlu ikinci eklem…………………………………………....52
Şekil 3.12 Bilgisayar Kontrollü Kameralı Robot Kolu’n son hali………..……………....53
xiv
TABLOLAR DİZİNİ
Sayfa No
Tablo 1. PIC18F4550 Osilatör Seçenekleri………………………………………………8
Tablo 2. Kullanılabilecek Kristal Seçenekleri……………………………………………9
Tablo 3. PortD ile ilgili kaydediciler……………………………………………………10
Tablo 4. Visual Studio’da Değişkenler……………………………………………….…21
Tablo 5. MicroC Operatörler Tablosu…………………………………………………..58
xv
PROJE ZAMAN ÇİZELGESİ
Bir projenin ön görülen zamanda bitirilebilmesi için mutlaka bir zaman çizelgesinin
yapılması gerekmektedir. Yapılan proje aşağıdaki zaman çizelgesine göre
gerçekleştirilmiştir. Zaman çizelgesinin düzenlenmesiyle uygulama projesi bütün bir
döneme yayılmıştır ve her hafta tez danışmanının denetiminde çalışmaların sürdürülmesi
amaçlanmıştır.
22.02.2012 Projenin nasıl yapılacağı hakkında tez danışmanının fikri alındı ve
kullanılacak malzemeler hakkında bilgi alış-verişinde bulunuldu.
29.02.2012 Devrede kullanılacak mikrodenetleyici belirlendi ve mikrodenetleyicinin
bilgisayar üzerinden kontrol edilmesine karar verildi.
07.03.2012 Bilgisayar arayüzü programının hangi program kullanılarak yazılacağına
karar verildi. Yazılacak programın özellikleri tartışıldı.
14.03.2012 Bilgisayar arayüz programı yazılmaya başlandı.
21.03.2012 Mikrodenetleyici programı yazılmaya başlandı.
28.03.2012 Yazılan programların doğru çalışıp çalışmadığını denemek için temel
malzemeler sipariş verildi.
04.04.2012 Program yazma aşamaları sonlandırılmaya gelindi. Program sipariş edilen
malzemelerin gelmesiyle test edildi; fakat ilk denemede başarısız olundu.
11.04.2012 Bilgisayar arayüz programı ve mikrodenetleyici programı ile ilgili
eksiklikler giderildi.
18.04.2012 Elimizde bulunan temel malzemelerle tekrar deneme yapıldı ve bu kez
bağlantı ve kontrol başarıyla gerçekleşti.
25.04.2012 Robot kolun malzemeleri alındı, gerekli malzemeler hazırlandı ve montaja
başlandı.
02.05.2012 Robot kol denendi ve sonuç olarak çalışma başarıyla tamamlanmış oldu.
Bitirme kitapçığı içeriğinde neler olacağı tartışıldı.
09.05.2012 Robot kolun eksik kısımları tamamlandı. Bitirme kitapçığı yazılmaya
başlandı.
16.05.2012 Son taslak kısmı tez danışmanına gösterildi ve eksiklikler belirlendi.
23.05.2012 Bitirme kitapçığı yazılarak teslime hazır hale getirildi.
1. GİRİŞ
Projemiz bir Bilgisayar Kontrollü Kameralı Robot Kol tasarım projesidir. Günümüzde
robot kol alanında yapılan çalışmalar değişiklik göstermektedir. Robot kollar kimi zaman
bir tutucu, kimi zaman ağır malzemeleri kaldırma, kimi zamanda insanların
araştırmalarında kullanılan teknolojik cihazlar olarak kullanılmıştır. Günümüzde hemen
hemen bütün araştırmalarda robot kol ünitesi olan makinalardan faydalanılmaktadır. Bizde
çalışmamızı bu konu üzerinde gerçekleştirdik. Çalışmamızı yaparken elimizden geldiğince
hareketlerde insan kolu eklemlerinin hareketlerini kontrol etmeye çalıştık. Projemizi
bitirdiğimizde de başarılı olduğumuzu gördük.
Bilgisayar Kontrollü Kameralı Robot Kolu projemizin bilgisayar arayüz programı
Visual C# programında yazılmıştır. Visual C# programının seçilmesindeki amaç bu
programın nesneye yönelik olmasıdır. Visual C# programı görsel arayüz eklentisini
oluştururken birçok alternatif sunmaktadır. İstenilen nesne çek bırak tekniğiyle kolaylıkla
oluşturulmaktadır. Bu özelliği ile proje arayüz programını yazarken vakitten tasarruf
sağlamaktadır.[10]
Mikrodenetleyici programı MikroC derleyicisi kullanılarak yazılmıştır. MicroC
programının kullanılmasının pek çok avantajı mevcuttur. Özellikle bilgisayar kontrollü
cihazlarda program USB bağlantı dosyalarını otomatik olarak oluşturmaktadır.
Mikrodenetleyici programı yazılırken sadece program kısmı yazılmıştır. Diğer kısımlar
derleyici tarafından oluşturulmuştur. Yazılan bu program hareket mekanizmaları için
gerekli darbe genişlikli modülasyon işaretlerini göndermektedir. Bu işaretler kol kısmında
bulunan rc servo motorlar tarafından hareket fonksiyonlarına çevrilmektedir. Böylece
kurulan sistem verimli bir şekilde çalıştırılabilmektedir.
2
2. Teorik Çalışmalar
2.1. PIC Mikrodenetleyiciler
2.1.1. PIC Hakkında Genel Bilgiler
1990’lı yılların başlarında teknolojideki çok hızlı gelişim elektronikle ilgili pek çok
alanda etkili oldu. Bunlardan en önemli gelişme mikrodenetleyiciler üzerinde oldu. Kelime
kökünde de anlaşılacağı gibi küçük mikrodenetleyiciler yavaş yavaş ortaya çıkmaya
başlamıştır. Tabiki bu kadar küçük mikrodenetleyicilerin yapılması kendi alanında
birbirine bağlantılı birçok teknolojinin gelişmesiyle mümkün olmuştur. Başlangıçta fiyat
pahalılığından dolayı mikrodenetleyiciler çok fazla tercih edilmemiştir. Bunların yerine
birkez programlanabilen bellekler kullanılmıştır. Fakat; bu birkez programlanan bellekler
mikrodenetleyiciler kadar ilgi görmemişlerdir. Çünkü herhangi bir arıza veya bozulma
karşısında elinizdeki çipi değiştirmek zorunda kalıyordunuz. Başlarda aralarındaki fiyat
farkından dolayı hemen hemen tüm cihazlarda bir defa programlanabilen yongalar
kullanılmıştır. Başlangıçta 4 bitlik mikrodenetleyiciler üretildi. İlerleyen yıllarda 8, 16 ve
günümüzde 32 bitlik mikrodenetleyiciler üretilmeye başlanmıştır ve bu üretilen
mikrodenetleyiciler belli mikrodenetleyici aile gruplarına bölünmüşlerdir. Çünkü farklı
özellikte farklı alanlarda kullanılan çok sayıda mikro denetleyici vardır. Mikrodenetleyici
adı bu kategorideki genel bir addır. Motorola ve Mikrochip Firmaları bu alanda üretim
yapan, neredeyse bütün mikrodenetleyicileri üreten iki firmadırlar. Motorola kendi
mikrodenetleyicilerini sayısal olarak adlandırırken (Örneğin; 8051); Mikrochip PIC adı
altında adlandırmaktadır (Örneğin; PIC16F877). Bizde devremizde Mikrochip Firmasının
ürünü olan PIC18F4550’yi kullandığımız için mikrodenetleyici yerine, pic kullanımını
tercih edeceğiz.[1],[2]-[11]
2.1.2. Mikrodenetleyici ve Mikroişlemcilerin Kıyaslanması
Mikrodenetleyicilerde olduğu gibi mikro işlemcilerde metal bacaklardan oluşan kapalı
birer kutu şeklinde paketlenmişlerdir. Bu kadar küçük bir paketin içerisinde binlerce
elektronik devre elemanı bütünleşerek bu muazzam paket yapısını oluşturmuştur.
Mikroişlemciler bilgisayarlarda kullanılan ve neredeyse tüm işlemleri yapan merkezi işlem
3
ünitelerinin (CPU: Central Processing Unit) ana kısmıdır. Bununda sebebi üzerlerinde daha
fazla özelliği bir arada taşımalarıdır.
Bir mikrodenetleyiciye bilgisayarın kalbi diyebiliriz. Peki ya bir pic nedir? PIC’ler de
kuracağımız sistemin kalbidir. Çünkü bütün çevre donanımları tümleşik akıllı bir devreyle
yönetilir. Buradaki akıllı kelimesi programlayıp çalışır hale getirdiğiniz mikroişlemci yada
mikrodenetleyicinizin sizin sınırladığınız alanların dışına çıkmamasıdır. Buda tabiki
kullanıcıya bırakılmıştır. Şunu hiç unutmamalıyızki, bir mikrodenetleyici yapısı itibariyle
bir insandan daha kısa bir sürede hatta piko saniyeler mertebesinde işlemler yapabilir ama
bu alete bu işlemleri biz kullanıcılar yaptırırız. Denetleyicilerin bizlerden üstün arafı hızlı
işlem yapabilme ve bu işlemleri çok küçük hatalarla sıraya dizme avantajlarıdır. Bunlara
ek olarak çok geniş bir rakamsal aralıkta işlem yaptıkları için doğru sonucu tutturma
olasılıkları bizlerden daha fazladır.
Sunulan özelliklere göre mikroişlemci ve mikrodenetleyicilerin işlevleri farklılıklar
gösterebilir.
Komut icra etme hızları değişir. Buda işlem süresini etkiler.
Bit değerlerine göre bir defada işlem yapabilecekleri veri boyutları değişir.(4 -8 bit)
Belli bir adres için bellek kapasiteleri değişebilir. (1 K, 2 K, 3 K)
Kaydedicilerin sayısı, işlevleri ve görevleri değişebilir.
Komut kullanımı ve komutların sayısı değişiklik gösterir.
Özellikleri değişiklik gösterdiği için destekledikleri programlar değişir, buna bağlı
olarak geliştirilebilecek uygulamalar değişir.
Program yazarken kullandığımız adresleme biçimleri değişir, direkt ve dolaylı
adresleme gibi.
Programlayıcıya sağladığı donanım kolaylıkları değişir. ADC, WDT gibi.[4]
Genel olarak farklar yukarıda değinilen maddelerdeki gibi olsa da asıl farklar yapısal
farklardır. Mikroişlemcilerde tek bir kutu içerisinde CPU, RAM ve I/O birimleri bulunur.
Bunlara ek olarak işlev yapan birimleri bazı özellikler dikkate alınarak birbirlerine
bağlayan veri iletişim hatları (Data Bus) ve adresleme hatları (Adress Bus) mevcuttur. Bu
yapılanmadan dolayı mikroişlemcinin mikrodenetleyiciden daha hızlı olduğundan söz
edebiliriz.
4
Sonuç olarak, bir mikro denetleyici bir mikroişlemci gibi bilgi saklama üniteleri,
giriş/çıkış üniteleri, sistem zamanlayıcıları olarak kullanılan osilatör devrelerinden oluşur.
Ayrıca bir mikrodenetleyicinin çalışması için saat darbelerine ihtiyaç vardır. Kısacası bu
saat darbeleri mikrodenetleyicilerde ve aynı zamanda mikroişlemcilerde kalp görevi
görmektedir diyebiliriz. Burada kullanılan saat vuruşu aslında bir sinyaldir. Bu sinyal bir
osilatörde üretilen kare dalgaya eşdeğerdir.
Geliştirilen mimariler hafıza ünitelerinin daha hızlı ve bir o kadarda güvenilir olmasını
sağladı. Geliştirilen veri yolları vasıtasıyla bilgiler bir mikrodenetleyiciden diğerine
aktarılır. Bu veri aktarma işlemine data transfer işlemi denilmektedir. Bütün bu
yukarıdakilere ek olarak mikrodenetleyiciler mantıksal, karşılaştırma, matematiksel
hesaplamalar vs. yapabilirler. Bir mikrodenetleyici içerisindeki program belleğine
programlar yazılır ve bu yazılımlar istenilen duruma göre sabit veya silinebilir programlar
olabilirler. Yazılan bu programların çalışmasını CPU sağlamaktadır.
Mikrodenetleyicilerin iş yapma kapasiteleri vardır; fakat bütün bu işleri tek başlarına
yapmaları mümkün değildir. Bunun için dışarıdan harici üniteler mikrodenetleyiciye
bağlanır. Bazen bu üniteler sistemin ana ünitesi iken mikrodenetleyici yardımcı ünitesi
olabilir. Bazen de bu durum tam tersidir.
2.1.3. PIC18F4550 Genel Tanıtımı
Bütün pic aileleri Mikrochip firması tarafından üretilmektedir. Üretilen her bir
mikrodenetleyicinin performansı, özellikleri ve desteklediği modüller değişiklik
göstermektedir. PIC18F4550’de Mikrochip firması tarafından üretilen en gelişmiş pic
sınıflarından birisidir. Bu tür mikrodenetleyiciler PIC18F ailesi içerisinde yer
almaktadırlar. Bu ailenin içerisinde ayrıca PIC18F2455, PIC18F2550 ve PIC18F2545 gibi
mikrodenetleyicilerde mevcuttur. Bizim kullandığımız PIC18F4550 bir çok farklı
özelliğiyle diğer ayrı aile içerisindeki mikrodenetleyicilerden üstündür ve pek çok
uygulama alanına sahiptir.[3] Bu alanlar;
Endüstriyel amaçlı uygulamalar,
Tıbbi uygulamalar,
DC gerilimle çalışan cihaz uygulamaları[5]
5
Burada dc gerilimle çalışan cihaz uygulamalarına rc servo motorumuzu örnek
verebiliriz. Tabiki yukarıda verilen bu özellikler, diğer mikrodenetleyici aileleri içinde
geçerlidir. Sadece PIC18F4550 diğer mikrodenetleyicilerle kıyaslandığında daha fazla
özelliğe sahiptir. Aşağıdaki şekilde PIC18F4550 mikro denetleyicimiz görülmektedir.
Şekil 2.1 PIC18F4550 Genel Gösterimi
Şekil 2.1’de PIC18F4550’nin genel gösterimi görülmektedir. Görüleceği gibi entegre
yapısı çok küçüktür. Bundan dolayı robotik uygulamalarında sıkça tercih edilmektedir. 40
adet pine sahip olması kullanıcılar için ayrı bir avantaj sunmaktadır. Çünkü sadece bir
entegre ile birden fazla donanım birimini kontrol etme olanağı sağlamaktadır. Günümüzde
tüm kullanıcılar optimum maliyetle işlerini sonlandırabilmek için tek entegreli devre
yapılarına yönelmişlerdir.
6
Şekil 2.2 PIC18F4550 Pin Görünüş Şeması[5]
Şekil 2.2’de PIC18F4550’nin entegre yapısı gösterilmiştir. Şekilden de görüleceği gibi
PIC18F4550 mikrodenetleyicisi 40 adet pine sahiptir. Bu pinlerden bazıları sadece giriş,
bazıları çıkış, bazılarıda hem giriş hemde çıkış pinleridir. PIC18F4550
mikrodenetleyicisinde 32 adet giriş/çıkış pini mevcuttur. Besleme, osilatör, reset gibi
ayrıca donanımsal pinlerde bulundurmaktadır. Biz bu pinlerden 13 ve 14. pinleri
20MHz’lik osilatör devremiz için, 31 ve 32. pinleri beslemeler için ve birinci pinide reset
(MCLR) için kullandık.
PIC18F4550 mikrodenetleyicisinde en öne çıkan özelliklerden biri 48MHz’lik bir hıza
sahip olmasıdır. Günümüzde hız çok önemli bir faktör olduğundan, bu alanda
kullanımlarda hızı yüksek olan mikrodenetleyiciler daha fazla tercih edilmeye başlanmıştır.
Bütün bunlara ek olarak bazı temel özellikleri şu şekilde listeleyebiliriz.
USB desteği
Çalışma frekansının aralığı
Haberleşme hızı
Hafıza desteği
Güç tüketimi
7
Osilatör özellikleri
A/D çevirici desteği
2.1.3.1. USB Desteği
PIC18F4550 bilgisayarla haberleştirme gerçekleştirebilmek için USB 2.0 ve üst
modellerini kullanmaktadır. Bu çalışma modellerindeki veri taşıma işlemi farklı hızlarda
gerçekleşmektedir. Entegre içerisinde USB alıcı-vericisi, 3.3V’luk bir regülatör ve harici
alıcı-vericileri içermektedir. Bizde PIC18F4550’yi USB desteği özelliği olduğu için tercih
ettik. Ayrıca USB haberleşmesi için çift erişimli 1Kbayt’lık RAM desteği vardır. Data
iletiminde duraklamayı önlemek için paralel porta sahiptir ve bunlara ek olarak daha bir
çok özelliği yazabiliriz.
2.1.3.2. Güç Tüketimi
Günümüzde teknolojinin gelişmesiyle bu cihazlarda kullanılan güç limitleri de önem
kazanmıştır. Cihaz aktif halde çalışmazken cihazı beslemenin hiçbir anlamı yoktur. Fakat
cihazı besleme olmaksızın çalıştırmakta mümkün değildir. Bu sistemlerde tam verimli
çalışma arzulanmaktadır. Tam verimli çalışma için ya kuracağımız sistem akıllı olmalı
yada sistemin beyni durumundaki cihaz optimum çalışma durumlarını kontrol etme
yeteneğine sahip olmalıdır. PIC18F ailesinin kullanımıyla optimum enerji kullanımı
başarılmıştır. Çünkü PIC18F ailesi içerisinde birden fazla çalışma modu içermektedir. Bu
çalışma modları;
Normal çalışma modu
Uykuda çalışma modu
Boşta çalışma modlarıdır.
Uyku ve boşta çalışma modlarında ’ler düzeyinde akım çekilmektedir. Tipik osilatör
çalışmasında ise 1,1 ’lik akım çekilmektedir.[1]-[6]
2.1.3.3. Osilatör Özellikleri
PIC18F4550 12 farklı osilatör modu içermektedir. Seçilecek olan bu modlar
kullanılacak yazılıma ve yapılacak olan işe bağlıdır. Hangi osiltör tipinin seçileceği
CONFIG1H kaydedicisi içerisindeki konfigürasyon bitleriyle belirlenmektedir. Ayrıca
PIC18F4550 içerisinde bir PLL devreside içermektedir. Bu PLL devresi haberleşme
8
esnasında mikrodenetleyici için bir saat kaynağı olarak kullanılabilmektedir. Bu
kullanımda iki farklı saat modu vardır. Kullanıcıların seçebileceği frekans aralığı çok
geniştir.
Entegre içerisindeki çift osilatör seçenekleri, mikrodenetleyici ve USB modülünün
farklı saat hızlarında çalışmasını sağlamaktadır. İçerisinde bulunan saat modülü sayesinde
herhangi bir arıza durumunda mikrodenetleyici güvenli bir şekilde kapanabilmektedir.
Tablo 1. PIC18F4550 Osilatör Seçenekleri[5]-[6]
Yukarıdaki tabloda PIC18F4550’de kullanılabilecek 12 adet birbirinden farklı özelliğe
sahip osilatör tipleri görülmektedir. Kullanıcı yazacağı programın özelliklerine göre daha
önceden konfigürasyon ayarlarını kullanarak osilatör tipini belirlemektedir. Biz
devremizde HS yüksek hız tipi kristal kullanmayı tercih ettik ve programlamayıda bu
kristalin özelliklerine göre yazdık.
2.1.3.4. PIC18F4550’nin Kendine Has Yapısal Özellikleri
Her pic ailesinin kendine has bazı özellikleri vardır; fakat PIC18F ailesi diğer pic
ailelerine bazı ek özellikleriyle fark atmaktadır. Bunlar aşağıda listelenmiştir;
Genişletilmiş komut setine sahip olması
Yazma/Silme özelliğine sahip olan bir Data-EEPROM bulundurması
Program bilgisini içerisinde yıllarca saklayabilmesi
Harici kontrolle kendi kendini programlayabilme yeteneğine sahip olması
9
2,0 V-5,5 V gibi geniş bir çalışma aralığına sahip olması
Kesmeler için öncelik seviyelerinin olması
Hafızaları binlerce kez silinip yazılabilir
İçerisinde Harward gibi gelişmiş bir mimari kullanılmıştır
Flash program hafızasına sahiptir
2.1.4. Kullanılabilecek Kristal Seçenekleri
Aşağıdaki tabloda harici olarak kullanılabilecek kristal osilatör tipleri verilmiştir.
Tablo 2. Kullanılabilecek Kristal Çeşitleri[5]
Yukarıdaki tabloda görüleceği gibi 4, 8 ve 20 MHz olmak üzere 4 farklı kristal seçeneği
bulunmaktadır. Yüksek hız arzulandığında 20 MHz kristal kullandık. Kristalimiz HS
sınıfından yüksek hız kristalidir.
2.1.5. PIC18F4550 Giriş/Çıkış Portları
Giriş-çıkış portları kullanılarak entegreden diğer donanımsal parçalara erişilmektedir.
PIC tipi mikrodenetleyiciler tek başlarına bir iş göremezler, harici donanım birimlerine
bağlanarak gerçekleştirilecek işlemi uygularlar. Donanım kısmına pic üzerindeki giriş/çıkış
portlarından geçilmektedir. Bir veri donanım işletilmek istenirse çıkış portu, donanımdan
gelen verileri algılamak ve gerekli çıktıyı oluşturmak için de giriş portları kullanılmaktadır.
Entegre içerisindeki her bir port 3 adet kaydediciye sahiptir. Bu kaydediciler;
TRIS kaydedicisi: Veri yönlendirme kaydedicisi
PORT kaydedicisi: Pin üzerindeki seviyeyi okuyan kaydedici
LAT kaydedicisi: Çıkış kaydedicisi
Şekil 2.2’deki pin diyagramından görüleceği gibi PIC18F4550 PortA, PortB, PortC,
PortD ve PortE olmak üzere 5 tane giriş/çıkış portuna sahiptir. Biz burada sadece
10
kullanmış olduğumuz porta değineceğiz. RC servo motoru kontrol etmek için PortD giriş
ve çıkış portlarını kullandık.
2.1.5.1. PortD
PortD hem giriş hem çıkış özelliğine sahip 8 bit’lik bir porttur. Hangi bitin giriş hangi
bitin çıkış olacağı TRISHD kaydedicisi tarafından belirlenir. TRISD kaydedicisinde “1”
olarak belirlenen bit’lerin karşılığındaki PortD bitleri çıkış olarak belirlenir. PortD
tamponlanmıştır, yani bir veri gönderilene kadar eski veri PortD ve LatD kaydedicisinde
tutulur.
Tablo 3. PortD ile ilgili kaydediciler ve bit’leri[6]
Yukarıdaki tabloda PortD’nin kaydedicileri ve kaydedicilerin yerleştiği bitler
görülmektedir. PortD’ye ait bütün bu pinler Schmitt Trigger giriş tamponları ile
gerçekleştirilmiştir. PortD pinlerinden RD5, RD6 ve RD7; geliştirilmiş CCP modülünün
çıkışları olarakta kullanılabilmektedir. PortD aynı zamanda SSP olarakta yapılandırılabilir.
Bu durumda PortD’de girişler TTL seviyesinde olur.
2.1.6. Timer Donanım Birimi
PIC18F4550’nin en önemli özelliklerinden biride, entegre içerisinde timer donanım
biriminin bulunmasıdır. Buradaki timer modülü isteğe bağlı olarak hem zamanlayıcı
hemde sayıcı olarak kullanılabilir. Timer’ı hangi amaçla kullanacağınızı belirledikten sonra
geriye sadece ona uygun programı yazmak kalır.
Timer’lar mikrodenetleyici için yazılan ana programdan bağımsız olarak çalışır ve
gerekli zaman yada sayma işlemlerini gerçekleştirirler. PIC18F4550 mikrodenetleyicisi
11
içerisinde 4 adet timer donanım modülü bulunmaktadır. Bu zamanlayıcılar ortaya çıkan
durumlara karşı kesmeler üretirler.[7] Bu zamanlayıcılar;
Timer0 Modülü
Timer1 Modülü
Timer2 Modülü
Timer3 Modülü olarak adlandırılmıştır.
Bu donanım modüllerinden Timer0 zamanlayıcısı 8-16 bit, Timer1 ve Timer2 8 bit ve
Timer3 16 bit’liktir.
Yazmış olduğumuz pic programında Timer0 ve Timer3 birimlerini kullandık.
Kullanılan bu timerlar da farklı özelliklere sahiptir. Genel hatlarıyla bu özellikler;
Okunabilir ve yazılabilir olmaları
Kesme oluşturabilmeleri
Dahili ve harici clock seçimi
Taşma oluşturduğunda kesme üretebilme
Programlanabilme gibi özelliklerdir.
2.1.7. Darbe Genişlik Modülasyonu Modu
Darbe genişlik modülasyonu rc servo motorlara hareket vermek için kullanılan bir
modülasyondur. Bilgisayardan gönderilen vuruşlar rc servo motor tarafından çözülür ve
gönderilen periyota göre bir dönüş açısı elde edilir. 0,5 milisaniye bir vuruş darbesi
süresinde servo motorun konumu 0°dir. 1,5 milisaniye bir vuruş darbesi süresinde servo
motorun konumu 90°dir. 2 milisaniye bir vuruş darbesi süresinde servo motorun konumu
180°dir. Bu darbe sürelerine ek olarak besleme gerilimleri de önemlidir. Maksimum ve
minimum besleme gerilimleri açısından 4-5° dönüş açısı kadar fark olabilmektedir.[3],[13]
Darbe genişlik modülasyonu (PWM) istenilen CCPX pininden 10-bit çözünürlükte
PWM üretir. Elde edilecek darbe genişlik sinyali; mikrodenetleyici osilatör frekansı,
kullanılacak timer modülü ile ayarlanır.[6]
12
Şekil 2.3 PWM Çıkış Şekli
Şekil 2.3’de darbe genişlik modülasyonunun çıkış şekli görülmektedir. Buradaki periyot
bir PWM çevrimi için geçen süredir. Her bir rc servo motor için bu PWM değerleri ayrı
ayrı belirlenmektedir. RC servo motor istenilen dönüş derecesini PWM’larını kullanarak
ayarlamaktadır. PWM süresi aşağıda verilen formülle hesaplanmaktadır.[7]
PWM süresi = [(PR3)+1] x 4 x Tosc x (TMR3 prescale değeri)
Frekans ise;
f = 1/PWM ile ölçülebilmektedir. Burada bulunan değerler kullanılan rc servo motor
için çok önemlidir. Her bir vuruşun yükselen kenarı rc servo motora logic 1 değerini
vuracaktır ve motor aktif hale geçecektir.
13
2.2. Bilgisayar Arayüzü Programının Yazılması
2.2.1. Microsoft Visual Studio Programını Tanıyalım
Tasarım projemizde de belirttiğimiz gibi bilgisayar arayüz programımızı Microsoft
Visual Studio programıyla yazdık. Bu programı tercih etmemizin pek çok sebebi vardır.
Bunlar aşağıda listelenmiştir.[9], [10]-[12]
Nesneye yönelik bir programlama dili olması
Çok geniş bir kütüphane sınıfının olması
Kullanım kolaylığı
Görsel açıdan yeteri kadar nesneler içermesi
ASP.NET gibi diğer programlarla uyumlu çalışabilmesi
Nesne kodlarının yazılmayıp program tarafından oluşturulması
Diğer bilgisayarlara setup dosyası oluşturarak kısa bir sürede kurulumun olması
Microsoft Visual Studio programı Microsoft Firması tarafından geliştirilen ve üzerinde
pek çok kütüphanenin hazır bulunduğu bir yazılımdır. Gerek duyulduğu halde programa
kullanıcılarda kütüphane yazabilir veya ekleyebilirler. Visual Studio’nun pek çok
versiyonu vardır. Bu yazılımlar demo limitli şekilde Microsoft’un sitesinden ücretsiz
indirilebilmektedir.
2.2.2. C#’da Mevcut Proje Açmak veya Kapatmak
C# içerisinde daha önce açılıp kapatılan visual studio projeleri Start Page sayfasında
Recent Project kutusunda gösterilmektedir. Bilgisayarınızda kayıtlı olan herhangi bir
projeyi açmak istiyorsanız Open adı altında gruplanan seçeneklerden Project seçeneğine
tıklamanız gerekmektedir.
Yeni bir visual studio penceresi hazırlamak istiyorsak Start Page başlangıç sayfasındaki
Project butonuna tıkladıktan sonra ekranda yeni bir pencere görülür. Bu pencere bizim
oluşturacağımız proje hakkında bilgiler içerir.
14
Şekil 2.4 Visual Studio’da Yeni Proje Penceresinin Açılması
Şekil 2.4’den görüleceği gibi Project Types kutusunda pek çok seçenek listelenmiştir.
Bu seçenekler kurduğumuz programın özelliklerine göre değişmektedir. Bu form
üzerindeki Name seçeneğiyle projenizin ismini seçebilirsiniz. Location seçeneğine
projenin nereye kaydedileceğini göstermektedir.
Bu ayarlamalardan sonra yeni proje penceresini kapattıktan sonra aşağıdaki gibi bir
form gelecektir.
15
Şekil 2.5 Yeni Proje Sayfası
Şekil 2.5’de gösterilen yeni proje sayfası gerçekleştireceğimiz işlemlerin bulunduğu
penceredir. Bütün formlar ve değişiklikler bu pencere üzerinde yapılacaktır. Kısacası Form
penceresi üzerinde bütün nesne özellik ve değerlerinin değiştirilebildiği penceredir.
2.2.3. Properties Penceresi
Yeni bir pencere açıldığında karşımıza ilk gelecek pencerelerden biri özellikler yani
Properties penceresidir. Properties penceresi çalışma ortamına göre herhangi bir yere
taşınabilir. Bu pencere seçili nesnelerin özelliklerini göstermektedir. Başlangıçta for
sayfası üzerinde herhangi bir değişiklik yapmadığımız için sadece Form1 sayfamızın
özellikleri gösterilmektedir.
Şekil 2.6 Properties Penceresi
16
Şekil 2.6’da ki properties penceresi form ile ilgili bilgileri içermektedir. Form üzerinde
herhangi bir değişiklik yapmış olsaydık properties penceresinde de değişiklikler oluşacaktı.
Bu pencerede çalışma alanına çift tıklayarak kod penceresine geçebiliriz. Açılan bu kod
penceresi içerisinde değişiklikler yapmak mümkündür.
2.2.4. Solution Explorer Penceresi
Üzerinde çalıştığımız projeye hangi form veya class’ların dahil edildiğini bu pencere
gösterir. Bu pencere visual studio programının sağ kısmında yer almaktadır. Aynı zamanda
bu pencere visual studio penceresine bağımlı haldedir. Bağımsız hale getirmek için başlık
çubuğuna çift tıklamamız gerekmektedir.
Şekil 2.7 Solution Explorer Penceresi
Şekil 2.7’den de görebileceği gibi solution explorer penceresi properties, references,
form1.cs ve program.cs dosyalarını bulundurmaktadır. Projeye bağlı olarak buradaki
sınıfların sayısı artırılabilir. Bu sınıflardan söz etmek gerekirse;
Properties Sınıfı: Proje üzerindeki nesnelerin özelliklerini içermektedir.
References Sınıfı: Projeye dahil ettiğimiz dosyaları içermektedir.
Form Sınıfı: Projedeki görsel nesnelerin yerleştirildiği kısımdır.
Program Sınıfı: Proje içerisindeki tüm nesnelerin kodlarının içeren kısımdır.
2.2.5. Form Designer ve Code Editor Pencereleri
Form designer penceresi projeye dahil edilen görsel nesneleri barındırmaktadır. Her
açtığımız formun sayfa kodları birbirinden farklı olacaktır. Bu kodları görmek için
sayfanın üzerine gelip sağ tıklayıp view code seçeneğini seçerseniz form designer’ın
kodlarını görebilirsiniz.
17
Şekil 2.8 Form Designer ve Code Penceresi
Şekil 2.8’de Form Designer ve ilgili sayfa kodları verilmiştir. Form oluşturmak veya
formla ilgili kodların içerikleri view code seçeneğinde verilmektedir. Kullanıcı isteğine
göre buradaki kodları değiştirebilir. Hazır nesne kodları biz kullanıcıların işlerini de
kolaylaştırmıştır.
Visual studio’nun nesne yönelimli bir programlama dili olması itibariyle yeni bir nesne
oluşturmak veya bu nesne kodlarını tekrardan yazmak gerekmemektedir. Bizde kendi
projemizdeki nesneleri visual studio kütüphanesindeki alt başlıklardaki Toolbox
sekmesinden ekledik.
2.2.6. Toolbox Penceresi
Visual studio kullanımında bize en büyük kolaylığı Toolbox penceresi sağlamaktadır.
Toolbox penceresi ana programın sol üst kısmında yer almaktadır ve programı
yerleştirirken ekrana otomatik olarak sabitlenen penceredir. Kapatıldığında ise view
penceresinden tekrar açılabilir.
18
Şekil 2.9 Toolbox Penceresi
Şekil 2.9’da görüleceği gibi toolbox penceresi çok sayıda nesne içermektedir. Tabiki
visual studio içerisindeki nesneler bu kadarla sınırlı değildir. Bu nesneler sadece Windows
Forms sınıfı altındaki nesnelerdir. Bu nesneleri sürüklenerek form sayfasına taşınabilir ve
üzerinde istenilen değişiklikler kolayca yapılabilir.[10]-[14]
Bizde projemizi gerçekleştirirken buradaki nesneleri kullandık. Button, trackbar ve
label bunlardan sadece birkaç tanesidir. Birkaç işlemle bu nesnelerin özellikleri kolayca
değişebilmektedir. Örneğin; trackbar’ı sürüklerken hangi değerleri alacağını properties
penceresinden kolaylıkla seçebiliriz.
2.2.7. Kontroller Hakkında Temel Bilgiler
Biz burada sadece toolbox penceresinde bulunan birkaç tane nesnenin kontrolünden söz
edeceğiz. Bahsedeceğimiz bu nesneler bizim programımızı yazarken kullandığımız
nesnelerdir. Visual studio çerisinde yüzlerce nesne barındırmaktadır. Ana pencerede
bulunan class ve modüllere kontrol adı verilmektedir. Bu kontrolörler görsel iyileştirme ve
kullanıcıya kulanım kolaylıkları sağlamaktadır.
19
2.2.7.1. Label Kontrolü
Toolbox’ı tıklayıp açtığınızda Label’i sürükleyip çeltiğinizde form sayfasına
yerleşecektir. Label üzerine sağ tıklayıp properties seçeneğini seçtiğimizde labelimizin
form üzerindeki özelliklerini görürüz. Properties penceresinden bu özellikler kullanılarak
Label nesnesi üzerinde değişiklikler yapılabilir.
Şekil 2.10 Label Kontrolü
Şekil 2.10 label üzerindeki değişiklikleri göstermektedir. Label1 toolbox’ın içerisindeki
değiştirilmemiş nesnedir. Diğer labeller ise bizim tarafımızdan düzenlenmiştir. Bir labele
yazı yazacağımız gibi renk değişikliği de yapabiliriz. Sürüklediğimiz nesnelerin sadece
renkleri ve yazıları değil o nesneye ait kodlarda değiştirilebilir. Örneğin; yazılımınızda çok
sayıda label kullanıyorsanız program içerisinde bulunan private void label1_Click(object
sender, EventArgs e) kodunu private void bitirme_projesi_Click(object sender, EventArgs
e) şekline dönüştürebilirsiniz.[15] Bütün bunlara ek olarak her bir label için ayrı bir
tanımlama yapmamız ve bu kodu yazarkende hangi nesne için yazmak istiyorsak o
nesnenin içerisine yazmamız gerektiğini unutmamalıyız.
2.2.7.2. Button Kontrolü
Button kontrolüde diğer kontroller gibi toolbox içerisinde yer almaktadır. Nesne üzerine
gelip sürüklediğimizde form üzerine yerleşecektir.
Şekil 2.11 Button Kontrolü
20
Şekil 2.11’de buton nesnesi kullanılırken geçirdiği aşamalar gözükmektedir. Label ile
button kontrolü hemen hemen birbirine benzemektedir. Birkaç küçük fark vardır. Button
üzerinde click özelliği bulundururken; Label etiket ve bulunan sonun çıktı şeklinde geri
yansıtma özelliği gösterir.
2.2.7.3. TrackBar Kontrolü
TrackBar nesnesi bir girdiyi adım adım göndermek için kullanılmaktadır. Bu verinin
uzunluğu properties içerisindeki seçeneklerden manuel olarak ayarlanabilir. Örneğin; biz
sistemizde 0°’den 180°’e kadar bir bölmelendirme yaptık. Kullanacağımız trackbar’ıda 0-
180 arasında ayarladık.
Şekil 2.12 TrackBar Kontrolü
Şekil 2.12’deki TrackBar 180 eşit parçaya bölünmüştür. Bu 180 eşit parça her defasında
birer birer artmaktadır. Bu durumda sistemdeki hassaslıkta yarım dairelik harekette 1°
mertebelerinde olmaktadır. Burada gireceğiniz değerler ne kadar küçük olursa hassaslığı
yakalamanız o kadar fazla olacaktır; fakat kullandığınız cihazda bir o kadar hassas
ölçümlere izin verebilir olmalıdır. Sonuçta buradaki derece değerleri sistemimizi
etkilemektedir.
Bazı programlarda kullanılan bu çubuğun özellikleri kullanılan üniteye göre değişiklik
gösetermektedir. Biz projemize uygun olan en verimli açı aralıklarını seçtik.
21
2.2.8. Değişken Tanımlamak ve Kullanmak
Visual studio içerisinde bir çok değişken bulundurmaktadır. Biz burada sadece
kullandığımız değişkenlerden söz edeceğiz.
Tablo 4. Visual Studio’da Değişkenler[10]
.NET sınıfı Visual C# Boyut(byte) Kapasite
System.Byte Byte 1 0-255
System.Sbyte Sbyte 1 -128 ile 127
System.Int16 Short 2 -32.768 ile 32.767
System.Int32 Int 4 -2.147.483.648 ile 2.147.483.647
System.Int64 Long 8 9.223.372.036.854.775.808
System.Uint16 Ushort 2 0-65535
System.Uint32 Uint 4 0-4.294.967.295
System.Uint64 Ulong 8 0-18.446.744.073.709
System.Single Float 4 1.5 ile 3.4
System.Double Double 8 5 ile 1.7
System.Object Object - Tüm türler için temel sınıf
System.Char Char 2 Unicode karakterler
System.Decimal Decimal 8 Finansal bilgiler en fazla 28 hane
System.Boolen Bool 1 True veya False
Tablo 4 farklı değişkenlerin bellekte aynı boyutta olabileceğini fakat farklı kapasite
değerlerinin kullanılacağını göstermektedir. Çünkü her bir değişkenin byte uzunlukları
farklıdır ayrıca işaretsiz sayılarda bulunmaktadır. Bu durumu bir örnekle açıklayalım. Bir
alış veriş programında her bir kullanıcı belli miktarlarda kullanım kredilerine sahip
olsunlar. Bu krediler ne zaman negatif değerlere düşerse kullanıcılar program arayıcılığıyla
uyarılsınlar. Bu durum doğrudan unsigned karakterleriyle çözülebilir. Çünkü unsigned
minimum sıfır olmaktadır ve aşağı düşen değerlere izin vermemektedir. Kullanıcı işaretsiz
bir dizin tanımlayarak bunu kolayca çözebilir.
22
2.2.8.1. Sabit Tanımlamak
Bazı değişkenlerin değerleri çalışma anında istenildiği gibi değiştirilebilir. Ancak
programlaycılar bazen tanımladıkları değişkenlerin içeriklerinin değiştirilmesini
istemezler. Bu durumda değişkenleri sabitleyebilmek için const deyimi kullanılır. Aşağıda
buna ilişkin bir örnek verilmiştir.
const string bolum = “ Elektrik-Elektronik Mühendisliği “;
const float Pi = 3.14f;
MessageBox.Show(bolum);
MessageBox.Show(Convert.ToString(Pi));
Yukarıdaki bu tanımlamalarda sabit tanımlanırken bir değer alması gerekmektedir.
Sabite bir değer verilmez ise derleme (compiler) sırasında hata oluşacaktır.
2.2.8.2. Char Tipi Değişkenler
Proje içerisinde bazı bilgilerin bellekte saklanması gerekmektedir. Char tipinden
yararlanılarak tanımlanan değişkenlerde ASCII ve Unicode karekter kümesindeki
karakterlerden birisi saklanabilir ve char değişkenler bellekte 2 byte’lık yer
kaplamaktadırlar.[10]-[18] Bir örnekle char karekterini açıklayalım;
char bitirme projesi;
bitirme projesi = ‘AA’
Yukarıdaki karakter bitirme projesi olarak atanmıştır. Çıktı ise AA’dır. Tabiki char
fonksiyonunun birden çok kullanım şekli vardır. Burada sedece temel kullanım şekli
verilmiştir.
2.2.8.3. String Değişkenler
Eğer kullanıcı birden çok karakteri bellekte saklamak istiyorsa string değişken
kullanmak zorundadır. String değişkenlere istenilen uzunlukta değerler verilebilir.
Örneğin;
String Adi;
23
String Soyadi;
String Adi_Soyadi;
Adi = “ Cahit “ ;
Soyadi = “ Altan “ ;
Adi_Soyadi = Adi + Soyadi ;
textBox1.Text = Adi_Soyadi ;
label1.Text = Adi_Soyadi ;
Yukarıdaki bu örnekte üç adet string şeklinde tanımlanmış değişken vardır. Bu
değişkenler textBox1 ve label1 ile ekrana çıktı olarak yazdırılmıştır.
2.2.8.4. Byte, Integer, Short ve Long Karakterler
Noktalı sayı içermeyen sayısal bilgileri bellekte tutmak için int, long ve byte gibi
karakterler kullanılır. Bunlara ek olarak tam sayı bilgiler için değişken tanımlanırken uint,
short, ushort ve ulong gibi sayısal tipler kullanılmaktadır. Başında u yani unsigned
karakteri olmayan değişkenler belleklerinde hem pozitif hemde negatif sayıları tutabilirler.
En soldaki bit’e bakılarak değişkenlerin içeriğine karar verilir. Bu bit 0 ise sayı pozitif, 1
ise sayı negatiftir.
Çizelge Değişkenler Tablosundan da görüleceği gibi her bir değişkenin belirli sınırlarda
değerleri vardır. Bu değerleri bulmak için Maxvalue ve Minvalue komutları kullanılır.
2.2.9. ToString( ) Metodu ile Dönüştürme Yapmak
Sayısal bilgileri ekranda göstermek için mutlaka string değerlere dönüştürmemiz
gerekmektedir. String değişkenlere dönüştürülen bu bilgiler textbox komutlarıyla ekrana
yazdırılırlar. Bunu bir örnekle açıklayalım.
Örnek;
Single sayi1 = 123.456f ;
İnt sayi2 = 123 ;
24
textBox1.Text = sayi1.ToString( ) ;
textBox2.Text = sayi2.ToString( ) ;
Görüleceği gibi değişkenler string karakterlere çevrildikten sonra text haline getirilerek
ekrana yazdırılmıştır. Böyle bir dönüşüm yapılmazsa verilerin text haline dönüşmesi
mümkün değildir.
2.2.10. Convert Sınıfı İle Dönüştürme Yapmak
Convert dönüşümü C# içerisinde geniş bir kullanıma sahiptir. Konsol uygulamalarında
int, single, float gibi değişkenlerin içerikleri convert sınıfının tostring metodu ile string
tipine dönüştürülür. Ekrana yazdırılmak içinde writeline( ) komutu kullanılır. Bunu bir
örnekle açıklayalım.Örnek1 ;
using System ;
namespace bitirme_projesi
{ class cahit_altan
{ public static void main( )
{ int sayi1 = 9876;
int sayi2 = 6789;
string cahit_altan
cahit_altan = Convert.ToString( sayi1 + sayi2);
Console.Write( “ Sonuç : “);
Console.Write(cahit_altan);
}
}
}
25
Örnek1 convert sınıfı kullanılarak tip dönüşümü yapılmıştır. Burada tip dönüşümü
yapılırken değişkenin tipine göre bir metod seçmek gerekir. Burada değişkenimiz noktasız
sayılardır ve int (tam sayı) şeklinde tanımlanmışlardır. Bunlara ek olarak ToDouble ve
ToByte gibi dönüşümlerde kullanılmaktadır.
2.2.11. Dizi Değişkenler
Yazılmak istenen bir programda birden fazla değişken varsa ve bu değişkenlerin tipleri
aynı ise; bu değişkenleri int, char vs. değişkenlerle tanımlamak oldukça zor bir iştir. Bu
tanımlamalar için dizi metodları kullanılmaktadır. Çok sayıda dizi metodu ve sınıfı olduğu
için biz burada sadece yazılımımızdaki diziyi açıklayacağız.[13]
dizi[1] = motor_numarasi;
dizi[2] = motor_pozisyonu;
dizi[3] = motor_hizi;
Programda oluşturduğumuz bu üç farklı dizi farklı değerler almaktadırlar. dizi[1] motor
değişkenlerini temsil etmektedir. Sistemimizde dört adet rc servo motor
kullanıldık(Motorlardan ikisi aynı çıkıştan beslenmektedir.). Bu her bir motorun numarası
her seçimde değişik değerler alarak dizi[1]’e kaydedilir. Benzer şekilde dizi[2]’de farklı
motor pozisyonlarını kaydeder. dizi[3] ise motor_hizi değişkenlerinin kaydedildiği dizidir.
Belirtilen bu üç dizi sırasıyla koşturulmaktadır. Motor seçilir, motor pozisyonu ayarlanır ve
gerekli hız verilerek motor hareket ettirilir.
2.2.12. Blok Kontrol Deyimleri
2.2.12.1. if Deyimi
Karşılaştırma ve istenilen sonucu seçme deyimidir. Programın akışında verilen karara
bağlı olarak değişken satırların işletilmesini veya atlatılmasını sağlar. Parametre olarak
ifade veya mantıksal operatörler içerebilir. Mantıksal operatörler true ya da false
değerleriyle sonlandırılarak if deyimi içerisindeki karşılık değeri ekrana yazdırılır. Bu olayı
bir alt fonksiyonda örnek halinde açıklayalım.
Örnek;
int not ;
26
string not_str ;
not_str = Microsot.VisualBasic.Interaction.InputBox(“ Not girin ”,” Not girişi ”,” ”, 20,
20) ;
not = Convert.ToInt(not_str) ;
if ( not < 50 )
{
MessageBox.Show(“ Kaldınız “) ;
}
else if ( not >=50 && not < 80 )
{
MessageBox.Show(“ İyi aldınız “) ;
}
else if ( not >=80 && not =< 100 )
{
MessageBox.Show(“ Çok iyi aldınız “) ;
}
Yukarıda içiçe else-if deyimleri gösterilmiştir. Her deyim sırasıyla çalıştırılmaktadır ve
girilen not değeri içerisindeki değere göre ekrana yazdırılmaktadır.
2.2.12.2. for Deyimi
do-while döngülerinde döngünün kaç kez tekrarlanacağı önceden bilinmez. for deyimi
ile kurulan döngülerin kaçkez tekrarlanacağı önceden bellidir. do-while döngüsünde
olduğu gibi istenirse belli bir şart dahilinde for döngüsünden harhangi bir anda çıkılabilir.
for deyimi genel olarak döngü değişkeni kullanılmadan önce tanımlanır. İkinci
parametre olarak ilk değer ve üçüncü parametre olarak artım miktarı belirlenir.
27
Pek çok uzun işlem gerektiren dizilerde for döngüsü kullanılmaktadır. Bu kullanım alt
alta diziler şeklinde olmaktadır. Bu dizi tanımlamalarının içerisinde if, else if gibi
deyimlerde kullanılabilmektedir. Burada program içerisinde for döngümüzü örnek verelim.
Örnek;
for (byte i = 0; i < 3; i++)
{
if (sender == mybutton[i])
{
mybutton[i].BackColor = Color.Red;
motor_numarası = Convert.ToByte(i + 1);
textBox10.Text = Convert.ToString(rc_motor_pozisyonu[motor_numarası]) +
Convert.ToString(Convert.ToChar(176));
}
else mybutton[i].BackColor = Color.WhiteSmoke;
}
rc_poz = Convert.ToByte(rc_motor_poz[motor_no]);
}[10]
Örnek de for döngüsü içerisindeki i hangi butonun seçilmiş olduğunu göstermektedir.
Seçilen buton color.red komutu ile kırmızı renk alacaktır. Motor numarası byte tipinde
birer birer artırılarak sistemdeki mevcut motorlar seçilecektir. Her motor seçiminde
pozisyon değeri textBox’a çıktı olarak yazdırılacaktır.
28
2.3. USB
2.3.1. USB Haberleşmesi
Universal serial bus’ın (USB) geliştirilmesiyle bilgisayar ve telekomünikasyon
endüstrisinde geliştirilmiş, iletişim standartlarında yeni bir bağlantı şeklidir. Amacı,
geleneksel seri ve paralel portların yerini almak ve işi evrenselleştirmektir. Günümüzde
üretilen bütün bilgisayarlar USB içermektedir. USB’ler bağlandıkları aletlere güç verirler
ve belli bir data hızı sağlarlar. Bilgisayar ile çevre birimleri arasındaki bağlantıyı da sağlar
ve gerçek zamanlı olarak çalışır. Bu çevre birimlerine örnek olarak klavye, fare, oyun
çubuğu, telefon, tarayıcı, yazıcı, hoparlör, disket sürücü, kamera, modem vb. verilebilir.
Böylece kimsenin böyle bir cihazı sıfırdan geliştirme çabasına gerek kalmamıştır. USB çok
çeşitli çevrebirimiyle en verimli haberleşmeye imkân vermek üzere tasarlanmıştır. Yeni
üretilen bilgisayarlarda bir çift USB portu yer almaktadır. USB’nin kullanım kolaylığını
sağlayan arabirimi, diğer tüm arabirimlerle kıyaslandığında oldukça karmaşık bir yapıya
sahiptir.[6]
USB bilgisayar ile harici bir cihaz arasındaki haberleşme açısından iyi bir çözümdür.
Kapasitesi sınırlı bir cihazla ya da çok yönlü ve standart cihazlarla kullanılması
mümkündür.
2.3.2. Kullanıcıya Sağladığı Avantajlar
2.3.2.1. Kullanım Kolaylığı
USB’nin tasarımındaki başlıca sebeptir. Çeşitli cihazlarla kullanım için bir tane
arabirim kullanmaktadır. Böylece donanım her bir cihaz için ayrı destekler içermemekte,
ayrıca ayrı bir konektöre ihtiyaç duyulmamaktadır. Kullandığımız bir USB çevrebirimi
sisteme bağladı zaman, Windows cihazı otomatik olarak tespit eder ve uygun sürücüyü
yükler. Cihazın ilk takılışı sırasında Windows kullanıcıdan sürücü disketini isteyebilir.
Yüksek işlemi otomatik olarak yürür ve harici bir sürücü istemez, bu sürücü Windows’un
içerisinde gömülüdür. USB cihazlarda biz kullanıcı olarak ayar yapamayız. Bilgisayarlarda
normal olarak iki USB portu vardır. Kablo konnektörleri hatalı takmaya imkan vermezler.
Kablo uzunlukları 5 metreden 30 metreye kadar değişebilir.
29
USB arabirimi bilgisayar ve hub kaynağından beslemeli 5 Volt gerilimi güç ve toprak
hatları sayesinde harici bir güç kaynağı gerektirmezler. Ayrıca harici bir adaptör
gerektirmeden diğer donanım birimlerini de besleme imkanı sağlar.
2.2.3.2. USB Hızı
USB üç hızı desteklemektedir.
Yüksek hız: Saniyede 480 Mbit
Tam hız: Saniyede 12 Mbit
Düşük hız: Saniyede 1,5 Mbit
2.3.2.3 Güvenilir Veri Transferi
USB’nin güvenilirliği donanım tasarımından ve transfer protokollerinden kaynaklanır.
USB dönüştürücüler, alıcılar ve kablolarına yönelik donanım spesifikasyonları veri
hatalarına yol açan gürültünün büyük bir kısmını elimine etmektedir. USB protokolü veri
hatalarının tespitini mümkün kılmakta ve vericiyi yeniden gönderim yapabileceği
konusunda bilgilendirmektedir. Donanımsal tespit, bildirim ve yeniden iletim USB
donanımında çözülmektedir.
2.3.2.4. Maliyet Açısından Avantajları
USB’nin arabirimleri diğer arabirimle kıyaslandığında pahalı sayılmazlar. Yeterli hızı
kullanıcı için karşılayabiliyorsa, son derece düşük maliyetle bu arabirimi kullanmak
mümkündür. Tek bir soketten birçok donanım aygıtına erişebildiğimizi de düşünürsek
günümüz teknolojisi için vazgeçilmez bir arabirimdir diyebiliriz.
2.3.2.4.1. Güç Sarfiyatı
Tasarruflu devreler ve kod sayesinde, kullanılmayan USB cihazlarının güçleri kesilir.
Ancak bu enerji kesilmesinde bile bu cihazlar gerektiğinde yanıt vermeye hazırdırlar. Bu
özelliğin asıl faydası, genel tasarruf avantajına ek olarak, bir mili amperin bile önemli
olduğu bilgisayarlarda ortaya çıkar. Çünkü batarya kullanan cihazlarda güç tasarrufu ayrı
bir öneme sahiptir. Bu tür cihazlarda batarya ömrü de sınırlı olduğu için ayrıca güç
sarfiyatı önemlidir.
30
2.3.2.4.2. Esneklik
Dört transfer tipi ve üç hızı ile USB, birçok cihaz için uygulanabilirlik kazanmaktadır.
Gecikme toleransı olmayan data transferlerinde, hız veya müteakip transferler arasında
geçen zaman USB tarafından garanti edilmektedir. İşletim sistemi, cihaz sürücüleri ve
uygulama yazılımları nedeniyle gecikmelerin ortaya çıkması kaçınılmazdır. Bizim
projemizde USB, diğer arabirimlerden farklı olarak, sinyallere belli fonksiyonlar
yüklemektedir. Çünkü gönderine PWM şekli rc servo motor tarafından algılanacak ve
girilen veriye göre hareket elde edilecektir. Yani burada darbe genişliğinden bir harekete
dönüşüm söz konusudur.
2.3.2.5. Tasarımcıya Sağladığı Avantajlar
Gerek donanım, gerekse yazılım ve yonga kodu açısından, tasarımcıya sağladığı pek
çok önemli avantajlarından söz edebiliriz. Bu avantaj USB protokolünün yapısal
esnekliğinde, kontrolörlerden ve işletim sisteminden gelen destekten ve arabirim üreticisi
sayısının çokluğundan kaynaklanır. Günümüzdeki bütün teknoloji firmaları harici
donanımlara bağlanmak için USB konektörleri kullanmaktadır. 30 metreye kadar bir
haberleşme desteği sunması da üreticileri bu protokolü kullanmaya itmiştir. [16]
2.3.2.6. İşletim Sistemi Desteği
İletişim sistemi desteğini birkaç kategoride listeleyebiliriz.
Sisteme takılan ya da sökülen cihazı algılamak
Yazılım sürücülerinin USB donanımıyla haberleşmesini ve uygulamalarını USB
cihazlara ulaşmasını sağlayacak bir mekanizma olması
USB porta takılan cihazlarla veri alış-veriş şeklini belirlemek üzere haberleşme
yapmak
İşletim sistemi desteği, programlama düzeyinde, uygulama programlayıcılarının
sistemce desteklenen fonksiyonlar üzerinden cihazlara erişimini mümkün kılan sürücüleri
içerir. Sürücüleri bulunan cihazlar şunlardır: İnsan arabirimi cihazları (klavye, fare, oyun
konsolu), audio cihazları, modemler, durgun görüntü kameraları, tarayıcılar ve yazıcılardır.
USB uygulamaları, sürücülerle haberleşen API fonksiyonlardan ve diğer sistem
elemanlarından faydalanırlar. Windows’un USB donanımıyla haberleşmesi düşük düzeyli
31
sürücülerle gerçekleşmektedir. Bu nedenle, USB sürücülerin yazılımı başka arabirimlerle
kıyaslandığında yazılması daha kolaydır. Ayrıca sürücü programlarının yazılması da daha
kolaydır. [16]
2.3.2.7. USB Kablolar ve Konektörler
Bir bilgisayara USB cihaz bağlamak oldukça kolaydır. USB konektörü cihazın
arkasında veya önünde bulunan USB girişlere takmak yeterli olacaktır. Takılan, yeni bir
cihaz ise işletim sistemi otomatik olarak tespit edecek ve cihazın sürücüsünü soracaktır.
Eğer cihaz kurulduysa bilgisayar cihazı aktive edecek ve onunla haberleşmeye
başlayacaktır. USB cihaz istenilen zamanda takılıp çıkartılabilir.
Şekil 2.13 USB Kablo ve Konektör
Şekil 2.13’de USB kablo ve konektörü görülmektedir. USB kafa karışıklığını önlemek
için A ve B konektörü standartlarını kullanır. Düz olan uç A konektörüdür ve bilgisayara
takılan terminaldir. Yuvarlak olan uç ise B konektörüdür ve bilgisayardan gelen veri
akışını yönlendirmektedir. Birçok USB cihaz kendi kablosuyla birlikte gelmektedir. Bu
dâhili kablo, A konektörü içerir. Eğer kablosuyla gelmezse üzerinde B tipi soket girişi
bulunmaktadır.
2.3.2.8. USB Haberleşmesi Projemize Uygun Mu?
USB’nin projemize uygun olup olmadığına karar verebilmek için şunlara bakmak
gerekir.
Kullanacağımız donanımla bilgisayar arasındaki alış-veriş hangi hızla gerçekleşir?
Donanımla çevrebirimi arasındaki haberleşme nasıl sağlanır?
Çevre birimdeki kod neleri üstlenir?
32
Yukarıdaki sorulara cevap verdikten sonra diğer donanımsal parçaların birleştirilmesine
başlayabiliriz. Aslında bütün projeler USB konektörle rahatça gerçekleştirilebilir; fakat
bazı uygulamalar uzak mesafelerde alıcı vericilerle gerçekleştirildiği için radyo dalgaları
alıcı ve vericileri kullanılır.
2.3.2.9. USB Haberleşmesi İçin Olması Gereken Koşullar
Bir USB çevre biriminin tasarımında, bağlı olacağı bilgisayarın USB arabirimleriyle
çalışabilmesi gerekmektedir. USB ile çalışacak bilgisayarlarda en az iki şeye ihtiyaç vardır.
Bunlardan ilki bir USB portuna bağlı bir denetleyici, ikincisi ise USB bağlantıyı
destekleyen bir işletim sistemi gerekmektedir. Fakat günümüzde bütün teknoloji firmaları
USB arabirimini destekleyen aygıtlar üretmektedir. Bu durum günlük hayatta bir ihtiyaçtan
değil bir zorunluluktan dolayıdır. Bir faks cihazından tutunda cebinizdeki telefonlar bile
USB arabirimi ile bilgisayar ünitelerine veya harici donanım ünitelerine bağlanmaktadır.
2.3.2.9.1. Denetleyici
Bilgisayar üreticilerinin USB bağlantısını desteklemeleri sayesinde, yeni bilgisayarlarda
bir USB denetleyicisi ve en az iki port konektörü yer almaktadır. 97 yılı öncesi modellerde
USB desteğine rastlamak pekte olası değildir. Yeni üretilen bilgisayarlarda iki veya daha
fazla USB port kullanılması bir defada birden fazla harici donanıma bağlanma imkanı
sağlamıştır. USB denetleyicisi haberleşme esnasında bilgi alış-verişini, USB portun takılıp
takılmadığı gibi temel fonksiyonları denetler. USB denetleyicisi eğer bilgisayarın ana
kartında yoksa bilgisayarın bus yuvası üzerindeki genişleme kartı üzerine de
eklenebilmektedir.
2.3.2.10. USB Haberleşme Elemanları
USB’nin fiziksel bileşenleri şunlardır: devreler, konektörler ve kablolar. Bu parçalar
yönetici ki burada yönetici bilgisayardır, yöneticiye bağlı bir ya da daha çok cihaz arasında
yer alırlar. Yönetici ünite bizim projemizde bilgisayardır. Bilgisayar burada ana kontrol
elemanı görevi görmektedir. Sistemdeki ana denetleyici ve ana hub, işletim sistemi ile
bus’a bağlı cihazlar arasındaki haberleşmeyi yürütür.
Sistemdeki ana denetleyici veriyi bus’lardan göndermeye uygun hale getirir. Gelen bu
veri işletim sisteminin anlayacağı şekle çevrilir ve bus üzerinden haberleşme için gereken
diğer işleri üstlenir.
33
Ana hub’da bulunan konektörler takılı cihazlara yöneliktir. Bir cihaz bilgisayar
takıldığında veya çıkarıldığında, bu durum hub tarafından algılanır. Bu cihaz ayrıca ana
denetleyiciden gelen istekleri aktarır, denetleyici ile diğer cihazlar arasındaki veri akışını
yürütür. Bu veri akışını yürütmede bazı çalışma prensipleri vardır. Bu prensipler aşağıda
verilmiştir.
Kesme: Genelde bilgisayar donanım birimlerinde kullanılan cihazlarda
kesmeler tercih edilir. Örneğin; yazıcı, klavye
Bulk: Büyük veri paketleri halinde veri alan cihazlar bu modu kullanır.
Böyle büyük bir data gönderilirken alıcı cihazın doğru cihaz olup olmadığı
kontrol edilir.
Eş frekanslı mod: Ses ve görüntü çıktısı sağlayan cihazlar eş frekanslı modu
kullanırlar. Bu modda kullanılan donanım cihazıyla bilgisayar arasındaki
veri akışı gerçek zamanlı olarak gerçekleşir ve hata doğrulaması yoktur.
Haberleşmede kullanılan hub’lar da bir ya da daha fazla port bulunabilir. Hub ile
bilgisayar arasındaki iletişim, cihazlardaki devreler ve program kodlarıyla gerçekleşir.
Burada kullanılan bir cihaz bir fonksiyon veya ayrı bir hub’a sahip bir cihaz olabilir; fakat
bir cihazda birden fazla hub olabilir ama bir tane bus adresi mevcuttur. Buda kullanıcının
ve cihazın diğer bağlantı ünitelerindeki yanlışlıkları ortadan kaldırmasına faydalı
olmaktadır.
2.3.2.11. USB Cihaz Tespiti
Bilgisayar açıldığında hub’lar USB portlara takılı cihazları bildirirler. Yönetici yani
bilgisayar sırayla adlandırma denilen bir işlemle cihazlara bir adres tayin ederek her
birinden ek bilgi isteğinde bulunur. Bilgisayar açıkken bir cihazın takılması veya
çıkartılması halinde yönetici bilgisayar durumu öğrenir ve cihazı adlar sıralamasına alır
veya adlar sıralamasından çıkarır.
34
2.4. MikroC Programı
2.4.1. MikroC Yazım Kuralları Nelerdir?
Her programlama dilinde olduğu gibi MikroC programının da kendine özgü yazım
kuralları vardır. Nasıl C# programını oluştururken tipleri ve karakterleri ayrı tanımlıyorsak,
MicroC içerisinde de böyle bir ayrı tanımlama yapılmaktadır. MikroC dili kendine özgü
birkaç programlama komutu hariç hemen hemen C ile aynı dilde yazılmıştır. C’de program
yazıyorken nelere dikkat ediyorsak, MikroC programını yazarken de aynı şeylere dikkat
etmeliyiz diyebiliriz. C programı içerisinde değişkenler ve sabit fonksiyonlara ifadeler
verilirken bazı kurallara uyulması gerekilmektedir. Aynı şekilde MikroC’de de bu
kurallara uyulması gerekir. Örneğin, MikroC karakterleri içerisinde MikroC komut isimleri
ve İngilizce karakterlerden hariç başka komutlar kullanılmamaktadır.
2.4.2. MikroC Operatörleri
Değişken ve fonksiyon tipleri kullanılarak komut işletimi yapılmasını gerçekleştiren
mantıksal karakterlere operatör adı verilmektedir. Yazılımda kullanılacak operatörler,
basamak sıralarına göre yazılmalıdır. Çünkü her kullanılan operatörün bir öncelik
sıralaması vardır. Ayrıca kullanılan iç içe parantezler, normal parantezler ve köşeli
parantezler; bu önceliğin sırasını belirleyebilir.
MikroC’de kullanılan operatörler için 15 öncelik sırası mevcuttur. Eğer bir operatör
aynı kategoride aynı karakter ise bu operatörlerin öncelik sıraları da aynıdır. Fakat
fonksiyon içerisinde parantezleme işlemleri varsa bu öncelik sırası değişebilmektedir. Tüm
programlama dillerinde olduğu gibi MikroC programında da bazı sabit operatörler
mevcuttur. MikroC’de bulunan temel operatörlerin listesi aşağıda verilmiştir.
Mantıksal operatörler
Atama operatörleri
Karşılaştırma operatörleri
Aritmetik operatörler
Deyimler ve ifade operatörleri
Operatör fonksiyonlarının karakterleri ekler kısmında ayrıca verilecektir.
35
2.4.3. Kontrol Fonksiyonları
Kontrol fonksiyonları girilen değerlere göre operatörler tarafından karşılaştırılan
değerlere göre programın işletilmesini sağlayan yapılardır. MikroC içerisinde iki farklı
yapı söz konusudur. Bunlar;
if-else yapısı
switch-case yapısı
Biz burada sadece programı yazarken kullandığımız if-else komutundan bahsedeceğiz.
Birkaç basamak işlemi farkıyla if-else komutu switch-case komutuna çok benzerdir.
2.4.3.1. IF-ELSE Fonksiyonu
C# programından da bildiğimiz üzere if-else komutu bir karşılaştırma komutudur.
Fonksiyon içerisinde karşılaştırma yaparken doğru değeri ekrana alt bir program
kullanarak yazdırmaktadır. If deyimi içerisinde karşılaştırılan ifade eğer doğruysa program
if deyimi içerisinde kalır ve doğru kontrol değerini ekranda gösterir. Eğer if bloğu
içerisinde karşılanmayan bir operatör mevcutsa bu kez program if bloğunu atlar ve alt
fonksiyonlara dallanır. Basit bir MicroC if bloğunu aşağıdaki gibi yazabiliriz.[5]-[11]
if (istenilen koşul)
{
Koşul doğru ise çalıştırılacak satır veya alt satırlar.
}
else
{
Koşul yanlış ise üst satırlar atlanır ve program buradan devam eder.
}
Yukarıdaki bu yapının birkaç değişik versiyonu daha mevcuttur. Buda if-else if
yapısıdır; fakat genel yapı itibariyle bu iki komut arasında çok bir fark yoktur.
36
2.4.4. Döngü Yapıları
Yazılan bir program içerisinde bazı komutların birden fazla çalıştırılması
gerekmektedir. Bir kodun birden fazla çalıştırılmasını sağlayan yapılara döngü yapıları
denir. C dilinde kullanılan bütün döngü yapıları, MikroC dili içinde de kullanılmaktadır.
Bu döngüler;
for döngüsü
while döngüsü
do-while döngüsü
While döngüsü ile do-while döngüsü temelde benzer döngülerdir. Biz burada sadece
çok sıkça kullanılan for döngüsünden bahsedeceğiz. RC servo motor seçiminde aslında
yukarıdaki bu üç döngüden herhangi birini kullanabilirdik. Fakat diğer döngülerle
kıyaslandığında for döngüsünün kullanımı hem daha güçlü hem daha kolaydır. For
döngüsünde döngüye girilmeden önce sayacın başlangıç değeri değişkene atanır. Bu aşama
her döngü başlangıcında en az bir defa yapılmaktadır. Girilen koşul ifadeleri ilk basamakta
kontrol edilir. Girilen koşul sağlanıyorsa döngüye girilir. Koşul yanlış oluncaya kadar
döngü işletilmeye devam edilir. Üçüncü parametreyle ise döngü sayacındaki artış miktarı
kontrol edilir. Bu yapı aşağıda verilmiştir.
for( sayac = 0; sayac < i; sayac ++ )
Yukarıdaki nu yapıyı üç farklı çıkış pinine ayrı ayrı gidecek şekilde oluşturduk. Bu
pinlere bağlı her bir rc servo motoruda for döngüsü içerisinde bir bir artırarak saydırdık.
Böylece her bir artımda hareket edecek motor numarası da değişmiş oldu.[10]
2.4.5. MikroC Derleyicisinin Kullanımı
Diğer programlama dilleriyle kıyaslandığında MikroC derleyicisinin kullanımı çok
kolaydır. Program yazımı hariç diğer tüm konfigürasyon ayarları manuel olarak
yapılabilmektedir. Bazı temel dosyaları da yazılım kendisi oluşturmaktadır. Bu yüzden çok
kullanışlı ve anlaşılması kolay bir dil olduğunu söylemek mümkündür. Burada derleyicinin
kullanımının bir örnekle daha kolay anlaşılacağını düşündük ve basamak basamak bu
adımların nasıl gerçekleştirildiğinden söz edeceğiz.
37
2.4.6. Proje Başlangıç Adımları
MikroC programı sadece bir .ppc uzantılı dosyadan oluşan uygulamaları organize eder.
MicroC’nin PIC IDE’si belli bir zaman içerisinde bir tane proje kullanımına izin
vermektedir. Eğer kullanılan kaynak dosyaları projenin bir parçası ise derleme işlemi
gerçekleşir.
MikroC içerisinde yazılacak bir proje dosyası aşağıdaki özellikleri içermesi
gerekmektedir.
Proje adı ve proje dosyası
Programlanacak hedef cihaz (Örneğin; PIC18F4550)
Konfigürasyon ayarları
Osilatör ayarları için cihaz clock’ları
Proje kaynak dosyaları
Binary dosyalar ve bazı temel dosyalar.
Şekil 2.14 MicroC’de yeni bir proje penceresi açma
Şekil 2.14 MicroC’de nasıl pencere açıldığını göstermektedir ve MicroC’de yeni bir
pencere oluşturmak çok kolaydır. Project menüsünden New Project seçeneğini
seçtiğimizde MikroC bize yeni bir çalışma projesi açar. Bu yeni pencere MyProject.c
dosyası şeklinde gözükür ve görüne bu pencerede bazı ayarlar yapmamız gerekmektedir.
Açılıştaki pencere digger sayfada verilmiştir.[17]
38
Şekil 2.15 MicroC’de proje açmada bazı temel ayarlar
Project penceresinden sonra şekil 2.15’deki gibi bir pencere açılır. Bu pencerede proje
adı, projenin nereye kaydedileceği, kullanılacak pic’in seçimi ve osilatör ayarları için clock
seçilmelidir. Bu pencereden ayrı olarak konfigürasyon ayarları devices flags penceresinden
yapılır. Bu ayarlar pic programlarken hangi konfigürasyon ayarlarının kullanılacağını
içermektedir. Buradaki ayarlardan emin değilsek default deyip bu adımı geçebiliriz.
Bütün bu işlemlerden sonra karşımıza kod penceresi açılacaktır. MikroC’de açılacak
olan ilk kod penceresi Led_Blinking.c adı altında bir projedir. Bu proje hemen hemen
bütün pic uygulamalarında yer alan ‘Hello World’ (Merhaba Dünya) uygulamasıdır.
2.4.7. MicroC’de Derleme
Bir proje oluşturduktan ve kaynak kodlarını yazdıktan sonra sıra projeyi derlemeye
gelir. Proje derlendikten sonra kaydedilen dosya içerisinde .hex dosyası oluşturulur. Bu
dosya bizim pic’e yazacağımız dosyadır. Derleme için üç farklı seçenek vardır. .hex
dosyasını oluşturmak için Build sekmesine tıklanır.
39
Şekil 2.16 Derleme Penceresi
Şekil 2.16’da derleme butonları gözükmektedir. Burada Build All Projects seçeneği
projeyle ilgili bütün dosyaları ve eğer varsa kaynak dosyaları derler. Built + Program
seçeneği en kullanışlı opsiyonlardan birisidir.[17] Program bu komutla derlendikten sonra
PICFlash programmer tarafından pic’e yazdırılabilir. Derleme sırasında herhangi bir hata
olup olmadığını Message Window penceresinden kontrol edebiliriz. Herhangi bir hata
oluşmadıysa, MikroC çıkış dosyalarını oluşturacaktır.
40
2.5. Servo Motorlar
2.5.1. Genel Anlamda Servo Motor
Servo motorlar girişine verilen kodlanmış sinyaller yardımıyla istenilen açısal
pozisyonlara göre hareket ve kontrol yeteneğine sahip motorlardır. Kodlanmış bu sinyal
servo motorun girişinde kaldığı sürece servo motor konumunu değiştirmeyecektir ve bu
durum bize motoru sabitleme konumuyla ilgili ayrı bir işlev yapmama olanağı
sağlamaktadır. Eğer servo motorun girişindeki kodlanmış sinyali değiştirirsek, servo motor
üzerine uygulanan bu kodu anlayarak istenilen açıya göre kendini ayarlamak için kullanır.
Bu tip motorlar robot uygulamalarında sıklıkla kullanılmaktadır ve bu motorların tercih
edilmesinde pekçok sebep vardır. Bunlara ilerleyen başlıklarda değineceğiz.
2.5.2. Servo Motorların Diğer Motorlarla Kıyaslanması
Tasarım sürecinde sistemimizde kullanacağımız motor hangi tip motor olması
gerektiğine karar verebilmek için araştırmalar yaptık. Hemen hemen tüm motor türlerini
birbirleri arasında kıyasladık ve bizim sistemimizde en iyi çalışacak motor seçimine gittik.
Bu seçimde de aşağıdaki niteliklere dikkat ettik:
a) Yüksek tork: Tutucu sistem ve robot kolun ağırlığı göz önüne alındığında yüksek
torka sahip bir motor ihtiyacı vardı. Sabit kamerayı taşıyabilmek, farklı açılarda
ayarlama yapabilmek için motorun torku sistemimizin verimli şekilde çalışabilmesi
için çok önemlidir. Aynı zaman da boyutlarının çok küçük olmasına rağmen sisteme
büyük güçte tork sağlamaktadırlar.
b) Doğru konumlama: Projemiz bilgisayar arayüz programı ile çalışacak ve istenilen
açılara göre kol sistemi dönmeler gerçekleştirecektir. Bu dönüşlerdeki
konumlamalar bir sonraki dönüşün sağlıklı bir şekilde gerçekleştirilebilmesi için
önemlidir.
c) Kolay kurulum: Servo motorun tutucu kısımlara monte edilmesi kolaydır. Tutucu
kısımlara monte edilmek için farklı yöntemler kullanılabilir. Örneğin servo motor
tutucu kısma yapıştırılabilir veya kolaylıkla vidalanabilir.
41
d) Ekonomik oluşu: Üç adet servo motor kullanacak olduğumuzu ve motor çeşitleri
arasında bir kıyaslama yaptığımızı düşünürsek servo motorlar çok düşük bir
maliyetle elde edilebilir.
e) Kontrol kolaylığı: Gerek gönderilen verilere hızlı tepki vermesi gerek üzerinde bir
geri besleme ünitesi olmasıyla servo motorlar büyük bir kontrol kolaylığı
sağlamaktadır. Servo motorun dönüş yönü, dönüş açısı kolaylıkla girilebilmekte ve
servo motor üzerinde bulunan pwm girişiyle kodlanmış sinyalleri büyük bir
doğrulukla çözmektedir.
f) Devir sayısı hızlı ve düzgün bir şekilde ayarlanabilir.
2.5.3. Servo Motorların Tipik Yapısı
Genel hatlarıyla servo motorlar endüktör, endüvi, gövde, fırça ve kollektör
takımlarından oluşmaktadırlar. Servo motorları oluşturan kısımlardan bahsedecek olursak.
a) Endüktör: Endüktörün görevi sabit bir manyetik alan meydana getirmektir.
Endüktör servo motorun gövdesinde bulunur ve bir sabitleyici vasıtasıyla gövdeye
tutturulur. Motor çeşitlerine göre endüktörün yapısı değişmektedir. Motorun gücüne
ve devir sayısına göre de endüktör iki veya daha fazla kutuplu yapılabilir.
b) Endüvi: Motorlarda dönen kısmı oluşturmaktadır ve motor miline gerekli olan
hareketi sağlatacak mekanik enerjinin alındığı kısımdır. Motorun büyüklüğüne ve
cinsine göre ebadı değişiklik göstermektedir. Üzerinde bulunan iletken sargılardan
akım aktığında endüvi döner ve endüvinin dönmesi motorun çalışır durumda olduğu
anlamına gelmektedir.
c) Gövde: Endüktör, endüviyi taşıyan ve bütün motor elemanlarını içinde bulunduran
kısımdır.
d) Fırça: Akımın rotora iletilmesini sağlayan kısımdır. Fırçalar ile kollektör arasında
belli bir temas söz konusudur. Eğer fırçalar arasında bir boşluk varsa fırça ve
kollektör arasında kıvılcımlar oluşur. Oluşan bu kıvılcımlar motorun bozulmasına
ve sürekli bakıma ihtiyaç duyulmasına neden olmaktadır.
e) Kollektör: Endüvi sargılarına d.c gerilimin uygulandığı kısımdır.
42
2.5.4. Servo Motorların Çalışma Prensibi
Servo motorların çalışma prensibi motora gönderilen kodlanmış darbeye göre motor
milinin hareket etmesidir. Aşağıdaki şekilde temel fonksiyonlarıyla bir servo motorun blok
diyagramı verilmiştir.
Şekil 2.17 Servo Motorun Çalışma Şeması
Şekil 2.17’de görüldüğü gibi servo motora gönderilen kodlanmış sinyal içerisinde servo
motorun hareket edeceği konum bilgisi bulunmaktadır ve bu konum bilgisi servo motorun
üzerinde bulunan şaftın konumuyla karşılaştırılır. Kompensatör gelen bu konum bilgisini
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ü sağlanır. Şafta bağlı olan potansiyometre
geri besleme görevi yapmaktadır ve geri besleme sinyallerini şanzıman çıkışından alıp
tekrar motora göndermektedir. Yukarıdaki akış diyagramında verilen kısımlar temel
alınarak servo motor hareket edecek ve hareket konumunu verilen bu şemaya göre
ayarlayacaktır.[8]-[14]
2.5.5. RC Servo Motorlar
RC servo motorlar günümüzde pek çok robotik uygulamada kullanılmaktadırlar. Bu tip
motorlar kullanıcılara çok büyük faydalar sağlamaktadır. Bunlardan en önemlisi rc servo
motorların çok büyük bir torka sahip olmasıdır. Boyutunun küçük olması sebebiyle de pek
çok robotik uygulamada rc servo motorlar kullanılmaktadır.[8]
Kullandığımız rc servo motorun çalışma gerilimi 4.8V-6V aralığıdır. Bu gerilimler
servo motora sağlanmazsa tam bir dönüz elde edilememektedir. Aşağıda ayrıca
kullandığımız rc serv motorun çalıştırılma parametreleri verilmiştir.
Metal dişli kutulu
40 mm x 20 mm x 36.5 mm boyutlarında 50 gr ağırlığında
44
3. Bilgisayar Kontrollü Kameralı Robot Kolu Uygulaması
3.1. Mekanik Sistemin Gerçeklenmesi
3.1.1. Malzeme Seçimi
Mekanik tasarıma başlamadan önce öncelikle hangi malzemeyi kullanacağımıza karar
vermemiz gerekiyordu. Yaşadığımız yeri de göz önüne alarak kolaylıkla bulabileceğimiz
ve işleyeceğimiz malzemelerin seçilmesi gerekiyordu. Mekanik sistemin gerçeklenmesine
başlarken ilk önce malzeme numunelerinin alınması gerekiyordu. Bu numuneler bize
mekanik kısmın hangi malzemeden yapılması gerektiğine karar verme imkânı sağlayacaktı.
Biz bu sürece üç adet malzeme numunesi alarak başladık. Numunelerimiz; fiber, bakır şerit
ve plaketti.
Şekil 3.1 Fiber Plaket Numunesi
Şekil 3.1’de görülen fiber malzemesini işlemek oldukça zor bir iştir. Fiber numunesini
Yusuf Rizeli Reklamcılık’tan temin ettik. Daha sonra aldığımız bu numunenin ürerinde
kesme ve delme işlemleri gerçekleştirdik ve bu aşamada şunu gördük ki elimizdeki fiber
küçük parçalara ayrılmayacak şekilde dayanıklıydı ve bizim beklentilerimizi karşılayacak
nitelikte değildi. Bu sebepten dolayı tekrar bu firmaya gittik ve bizim için kesim yapıp
yapamayacaklarını sorduk. Kesim yapabileceklerini fakat ölçülerin en az 5 cm ve üstü
olması gerektiğini bize bildirdiler. Bizim ise ölçümlerimiz mekanik kol kısmında 2 cm
civarlarındaydı. Bu sebepten dolayı fiber malzemesi seçiminden vaz geçmek zorunda
kaldık. Fiberden sonra sistemimizde bakır şerit kullanmaya karar verdik.
45
Şekil 3.2 Bakır Şerit Numunesi
Şekil 3.2’de bakır şerit numunesi görülmektedir. Bakır malzemeleri belli mesafelere
kadar dayanım gösteren malzemelerdir. Buda kullanılacak bakırın boyuna ve enine
bağlıdır. Üzerinde fazla yük yüklendiğinde bakır esneyecek ve şekli kolaylıkla
değişecektir. Bakır şerit konusunda Kimya Mühendisliği Bölümü’den bir arkadaştan bilgi
aldık. Kendisi bakırın belli bir mesafeden sonra esnekliğinin artarak sistemin düzenini
bozacağını bize söyledi; fakat daha sonra bakır numunesi alarak bu aşamayı test ettik.
Gerçekten bakırın 5 cm den sonra çok esnediğini ve hatta eğildiğini gözlemledik. Buna
rağmen biz sistemimizde bakır kullandık. Fakat burada kullandığımız bakırın boyu
esnemeyecek kadar kısaydı. Buda sistemimiz için yeterli tutuculuğu bize sağlamaktaydı.
Burada kullandığımız bakır şeritler sadece sistemdeki rc servo motorları askıya almak için
kullanılmıştır. İki bakır tutucu ayak birbirlerini paralel şekilde desteklediği ve boylarının
yeteri kadar kısa olduğu için sisteme yeterli dayanımı sağlıyordu.
Tüm bu seçim zorluklarından sonra mekanik kısmı daha kolay işleyeceğimiz eve
rahatlıkla gerçekleştireceğimiz bir malzeme olan plaketi seçtik.
Şekil 3.3 Plaket Numunesi
46
Gerek kolay işlenebilirlik gerek fiyatının ucuz olması bizi sistemimizi plaket ile
gerçekleştirmeye itti. Şekil 3.3’deki gibi plaketler kullanarak bütün sistemimizi plaketle
gerçekleştirdik. Her ne kadar plaket kullansak da cıvata deliklerinin delinmesi ve sistemin
dengeye alınması bizim için zor oldu. Çünkü sistem tam kurulmadan deneme amaçlı
mekanik kısmı çalıştırdığımızda istediğimiz senkron hareketi tam olarak elde
edemiyorduk. Tam kurulumda bu hareketi elde ettik. İlerleyen kısımlarda bu konuya daha
detaylı değinilecektir.
3.1.2. Bakır Ayakları Parlatma İşlemi
Bakır şeritlerin büyük parçalarda satılmasından ve pahalı olmasından dolayı bakır
ayakları Trabzon Bakırcılar Çarşısından temin ettik. Temin ettiğimiz bu bakır eski ve
kararmış bir bakırdı. İyi bir görünüm için bakırın parlatılması gerekiyordu. Bu iş için
çeşitli parlatıcılar bulunmasına rağmen fiyatının pahalı olmasından dolayı kimyasal
parlatıcılar kullanmadık. Bu iş için Diş Hekimliği Bölümü’nde okuyan bir arkadaşımızın
dişlere şekil vermek amacıyla kullandığı aletin ucuna silecek takarak parlatma işlemini
gerçekleştirdik.
Bakır ayakları aşağıdaki fotoğrafta gösterildiği gibi temizledik.
Şekil 3.4 Bakır Ayakların Parlatılması
47
Şekil 3.4’deki gibi bakır ayakları parlattık ve 90°‘lik bir eğme yaparak dönel yüzeye
montajını kolaylaştırdık. Buna ek olarak alt vidalı kısım pürüzlendirildiği için rc servo
tutucu ayakların sabit konumda kalması sağlanmış olundu.
3.1.3. Plaketlerin Ölçülerinin Belirlenmesi
Mekanik kısmı gerçekleştirirken en zorlandığımız kısmı gerekli ölçümlerin nasıl
yapılacağı idi. Bir Makine Mühendisliği Bölümü’nde okuyan arkadaşımızın bu konu
hakkında önerilerini dinledik. Kendisi bize ölçümlerimiz ve tork hesabı hakkında yeterli
ölçüde bilgiler verdi. Kurduğunuz sistemin mekanik doğruluğunu sistemimizi adım adım
deneyerek elde ettik. Montaj işlemlerini de adım adım gerçekleştirdik. İlk yaptığımız kol
eklemini yanlış montaj ve uzunluk hesabındaki hatadan dolayı değiştirmek zorunda kaldık.
İlgili şeklimiz diğer sayfada verilmiştir.
Şekil 3.5 İlk eklem montajı
Şekil 3.5 ilk uygulamadaki en büyük hatamız kol olarak düşündüğümüz birinci eklemin
boylarının kısa olmasıydı. Bu kısalıktan dolayı aşağı yukarı hareket sırasında kol kısmı
dönel plakete temas ediyordu. Buda sistemimizin hareketini kısıtlıyordu. Bunu önüne
geçmek için eklem kısımlarını uzattık ve dönel kısmın çapını küçülttük. Burada çapı
48
küçültmemizin amacı hem görüntüyü iyileştirmek hemde ana gövdeye düşen ağırlığı
azaltmaktı.
Bir benzetme yapmak gerekirse bu insan uzuvlarında omuz kısmına denk gelmektedir.
İnsan omzu tam bir dairelik dönüş kabiliyetine sahip değildir. Bizim tasarladığımız gövde
de tam bir daire dönmeyecektir. Yarım dairelik bir alanda dönel hareket yapacaktır. Gövde
kısmında bir adet rc servo motor kullanılmıştır. Çünkü tek bir motor bizim için yeterliydi.
Aynı zamanda sistemde zorunlu olarak tek motor kullanmalıyız. İki adet rc servo motor
zaten gövde de hareket edemezler; aksine birbirlerinin hareketlerini kısıtlamaktadırlar.
Gövdedeki bu motor yükün bir kısmını taşıyabilecek ve üzerindeki yüke hareket
verebilecek nitelikte olmalıydı. İlerleyen kısımlarda bunu nasıl yaptığımız detaylı bir
şekilde anlatılacaktır.
Şekil 3.6 İkinci eklem montajı
Şekil 3.6’daki kısımda sistemimizin birinci eklemini göstermektedir. Biz buradaki
birinci eklemi insan dirseği olarak düşünebiliriz. Bu kısımda iki adet rc servo motor
kullanıldı. Çünkü bir adet rc servo motor kullanılsaydı sistemimizde bir dengesizlik
oluşacaktı ve bu dengesizlik gövde için kullanılan motora ve motor dişlilerine zarar
verecekti. Bu olay aynı zamanda eklemlerle bağlı olan diğer ek kısımlarda da sarsıntıya yol
açabilirdi. Fakat burada iki adet motorun kullanılması bazı avantajlar ve dezavantajlar
katmıştır. Avantaj olarak; el yani birinci eklem olarak düşünülen kısım daha yüksek torka
sahip olmuştur. Motorların gücü ve sistem tasarımındaki hesaplamalarda göz önüne
alındığında bu el uzuvu olarak düşünülen kısımda bulunan iki adet rc servo motor 500
grama yakın kolaylıkla kaldırabilir ve 0° ile 180° arasında hareket kabiliyeti verebilir. Her
bir rc servo motorun ağırlıkları düşünüldüğünde gövdedeki tek rc servo motor bu sistemi
49
taşıyamayacağı için sistemde bazı iyileştirmeler yapmak zorunda kaldık. Öncelikle taşıyıcı
kısımlarda iki adet vida kullandık, daha sonra vida sayısını dörde çıkartmak zorunda
kaldık. İyi bir tutuş için vida sayısını artırmak zorunluydu. Buna ek olarak bu durum bize
iyi bir denge sağlamaktadır.
Şekil 3.7 İkinci eklemin tasarlanması
Şekil 3.7’de sadece bir adet rc servo motordan oluşmaktadır. Son olarak bu eklemi bir
bilek gibi düşünebiliriz. Nasıl bileklerimiz parmaklarımıza son hareketi veriyorsa buradaki
eklem de sistemimize son hareketi verecektir. Burada kullanılacak olan rc servo motorun
doğru ölçülerle birinci eklem kısmında bulunan rc servo motorlar arasına monte edilmesi
gerekmektedir. Belli ölçümlerden sonra bu montajlamayı gerçekleştirdik.
3.1.4. Taşıyıcı Kutunun Yapılması
Taşıyıcı kutu yapılırken sistemin devrilmeyecek şekilde gerçekleştirilmesi
gerekmektedir. Biz taşıyıcı merkez kutumuzu eni 14 cm boyu 10 cm ve yüksekliği 5 cm
olacak şekilde tasarladık. Gerçeklediğimiz sistemi denediğimizde bu ölçümlerin gerçekten
de doğru seçildiğini gözlemledik. Çünkü hareket sürecinde sistemde herhangi bir
dengesizlik durumu söz konusu değildi.
Kutunun yapımındaki hacimsel genişliğin alt kısma yerleştirilecek rc servo motoru içine
alacak şekilde olması gerekmektedir. Bundan dolayı kutunun yüksekliğini de rc servo
motorun yüksekliğinden 1 cm kadar daha fazla yaptık. Bu genişlik bize servo motoru daha
kolay monte etme imkanı sağlamaktadır.
50
Şekil 3.8 Gövde kutusu
Şekil 3.8 asıl gövde kutumuzu göstermektedir. Kutumuzu şekilde görüldüğü gibi yaptık
ve rc servo motoru üst kapak kısmına boyu yeteri kadar uzun olan vidalar yardımıyla
vidaladık. Burada rc servo motorun pozisyonunun sürekli sabit olması için iyi bir vidalama
işlemi gerekmektedir. Çünkü vidalar oynar ve sistemde esneklik meydana getirirse
bilgisayardan gönderilen açı değerleri tam olarak tutturulamaz, kısacası açılarda
hedeflediğimiz değeri tutturamayız.
3.1.5. Döner Eklemin Yapılması
Döner kısım gövde üzerinde yerleştirilmiş üst eklemleri 180° hareket ettirecek şekilde
düşünülmüştür. Bu kısım hem üst uzuvların hareketini taşıyacak hemde taşıyıcı plaketlerin
tutturulduğu kısmı oluşturur. Bu kısmın döner çapı tam bir daire çizmektedir. Bu hareket
tam bir daire olmalıdır; çünkü dönüş esnasında hareketli parça gövdeden kaymamalıdır. Bu
olay şuna benzemektedir. Nasıl omzumuz eklemlerle tutulduysa bu kısımda gövdeye bu
şekilde tutturulmuştur.
Motorun döner ekseni iyi döndürememesi sonucunda motora veya tasarlanan mekanik
kısma zarar vermesi olasıdır. Bu olasılığı ortadan kaldırmak için pergel ve cetvel
yardımıyla dönel eksende milimetreler düzeyinde ölçün yaparak bir kesim yaptık.
51
Şekil 3.9 Döner eklem
Şekilde 3.9’deki döner kısmın çapı 5 cm’dir. Bu çaptaki bir plaket gövde üzerinde
rahatça dönebilmektedir. Şekilden de görüldüğü üzere bu plaket üzerinde hem tutucu
ayakları taşımakta hemde birbirlerine karşılıklı eşit uzaklıkta vidalanmış olan cıvataları
bulundurmaktadır. Buradaki taşıyıcı ayaklar rc servo motorları taşımakta, alttaki dört adet
vida ise hem alttaki rc servo motora aşırı yük baskısını azaltmakta hemde üst kısmın
dengesini sağlamaktadır.
3.1.6. İki RC Servo Motorlu Birinci Eklem
Tasarım projemizde daha önceden belirttiğimiz gibi sistemimiz iki eklemden
oluşmaktadır ve buradaki iki rc servo motorlu birinci eklem sistemimizin ana eklemini
oluşturmaktadır. Bu eklemler bağlandıkları kolları aşağı ve yukarı olmak üzere hareket
ettirecek şekilde düşünülmüştür. Biz sistemimizde tam senkronize bir hareket elde etmek
amacıyla bu iki rc servo motorumuzu aynı çıkış portuna bağladık. Buna rağmen tam bir
senkronize hareket elde edemedik; çünkü rc servo motorların duyarlılığı birbirlerinden çok
küçük farklar göstermektedir. Biz hassaslığımızı ölçümlerimiz sırasında 2°-3°
mertebelerinde gözlemledik. Bu değerlerde optimize edebileceğimiz en küçük değerlerdir.
52
Şekil 3.10 İki RC servo moturlu birinci eklem
Şekil 3.10’dan da göreceğiniz gibi birinci ekleme taşıyıcı kollar monte edilmiştir. Bu
kolların uzunlukları 10 cm civarlarındadır ve taşıyıcı kollardaki uzunluklar birbirlerinde
farklıdır. Bu uzunlukların farklı olmasının sebebi ise ikinci ekleme daha kolay bir hareket
bölgesinin sağlanmak istenmesidir. Çünkü ikinci eklem hareket ederken birinci eklem
tarafından kısıtlanmamalıdır. Herhangi bir temas hem birinci eklemi hemde ikinci eklemi
etkilememektedir. Buda sonuç olarak taşıyıcı kısım olan gövdeyi zorlayacaktır. Bu
zorlamanın fazla olması durumunda kol eğilebilir ve rc servo motorun dişlileri zarar
görebilir.
3.1.7. Bir RC Servo Motorlu İkinci Eklem
İkinci eklem sistemimizin son parçasıdır ve bu eklem dorudan hareket ettireceğimiz
kamera ile bağlantılıdır. İkinci eklem kamerayı sabit tutacak şekilde monte edilmiştir.
Şekil 3.11 Bir RC Servo Motorlu İkinci Eklem
53
Şekil 3.11 son eklemimizin taşıyıcı kolları birinci eklemin taşıyıcı kollarından kısa
seçilmiştir. Bunun sebebi zaten bu eklem üzerinde herhangi bir hareket kısıtlamasının
olmamasıdır. Bu kısım sadece üzerinde bulunduğu kameraya yarım dairelik bir açı verecek
şekilde düşünülmüştür.
3.1.8. Mekanik Sistemin Son Hali
Mekanik sistemi tasarlarken kısa bir süre içerisinde bitireceğimizi düşünmüştük. Fakat
hiçte düşündüğümüz gibi olmadı. Çok az bir uzunluk farkı uzama kısalmadan dolayı tüm
sistemi bir anda etkilemekteydi. Biz en doğru kurulumu deneme yanılma metoduyla
bulduk. Örneğin; bir kolu kısa yaptığımızda kol hemen altındaki ekleme temas ediyordu.
Uzun yaptığımızda ise rc servo motorun torku ya üst eklemi döndürmeye yetmiyor ya da
motor dişlilerinde zorlama veya gıcırdama sesleri geliyordu. Mekanik kısım parçalarını
satın alabilirdik; fakat kendi tasarımımızı kendimizin yapabileceğimize inandığımız için bu
kısmı bizzat kendimiz gerçekleştirdik.
Şekil 3.12 Bilgisayar Kontrollü Kameralı Robot Kolun Son Hali
Robot kolumuzun son hali şekil 3.12’de görülmektedir. Bütün bu uğraşlardan sonra
robot kolumuzu tamamlamış olduk. Ağırlığı ve kapladığı hacim itibariyle kolaylıkla
54
taşınabilir ve istenilen yere monte edilerek çalıştırılabilir. Buradaki tek sorun kamera ve
USB kablomuzun yeteri kadar uzun olmamasıdır.
55
4. SONUÇLAR
Gerçekleştirdiğimiz bu sistemde bilgisayar, control devresi ve rc servo motor arasında
nasıl bir bilgi gönderiminin olduğunu gözlemledik. Bilgisayar aracılığıyla gönderilen ikili
sayılar, kullandığımız rc servo motorlar tarafından hareket fonksiyonlarına çevrilmektedir.
Bazen kullanılan bilgisayarın yavaşlığından dolayı, yapılması istenilen hareketlerde
gecikmeler oluşmaktadır. Ayrıca bu çalışmada servo motorların birinden diğerine
hassaslığınında değiştiğini gözlemledik. Eklem 1 kısmında iki rc servo motor kullandık.
Bu her iki rc servo motora belli açı değerlerini PWM şeklinde gönderdik. Fakat, her iki
motorunda başlangıç açılarının eşit olmadığını gözlemledik. Yani sistemde kullandığımız
rc servo motorlar yüksek kararlılıkta çalışmadı. Örneğin, ilki açı değeri datasını
gönderdiğimizde birinci rc servo motor 10°, ikinci rc servo motor 5°’e kadar hareket
edebildi. Açı değerleri rc servo motorların hareket performanslarının yükseldiğini
gözlemledik. Çünkü ilk harekette motor belli bir yükü hareket ettiriyor. Kutu içerisindeki
çarklar arasında boşluk kalmıyordu.
Program arayüzünde ise Microsoft Visual Studio 2010 seçilmiştir. Burada C#’I tercih
etmemizin en büyük sebebi nesneye yönelik bir programlama programı olmasıdır.
Projemizi yaparken herhangi bir şekil oluşturmamış ve gerekli tüm şekiller C# kütüphanesi
içerisinden alınmıştır. Ayrıca C# bize haberleşmede de kolaylık sağlamaktadır. Hazır
USBhid.dll kütüphanesiyle USB haberleşmesinide kolaylaştırmaktadır. Bu kütüphanin
içerisinde gerekli olan USB haberleşme dosyaları mevcuttur. Bu kütüphaneyi kullanarak
proje başlangıcında hem parallel port hemde seri porttan datalar gönderdik ama seri port
dataları daha doğru ve senkron bir şekilde gönderdiği için seri port kullanmayı tercih ettik.
Sonuç olarak gerçekleştirdiğimiz system insan kolu referans alınarak yapılmıştır. Insan
kolundaki üç eklem sisteme olduğu gibi yansıtılmıştır. Her üç eklemde hareket sağlanmış,
böylece üç boyutlu bir sistem kurulmuştur.
56
KAYNAKLAR
[1]. O. Altınbaşak, Mikrodenetleyiciler ve PIC Programlama, 2. Baskı, İstanbul, Turkey:
Altaş Yayıncılık, 2001.
[2]. D. İbrahim, PIC C Motor Kontrol Projeleri, İstanbul, Turkey: Bileşim Yayıncılık,
2006.
[3]. Z. Bingöl, S. Küçük, Robot Tekniği1, İstanbul, Turkey: Birsen Yayınevi, 2005.
[4]. H. Şahin, A. Dayanık, C. Altınbaşak, PIC Programlama Teknikleri ve PIC16F877A,
İstanbul, Turkey: Altaş Yayıncılık, 2006.
[5]. “PIC18F2455/2550/4455/4550 data sheet,” Microchip Technology, California, U.S.A.
[6]. H. Şahin, K. S. Dedeoğlu, MicroC ve PIC18F4550, 1.Baskı, İstanbul, Turkey: Altaş
Yayıncılık, 2012.
[7]. Ç. Akpolat, PIC Programlama, İstanbul,Turkey: Pusula Yayınları, 2006.
[8]. “Servo Motor ve Sürücüleri,” Megep, Ankara, 2007.
[9]. W. H. Murray, C. H. Pampas, C# Essentials, California, U.S.A: Prentice Hall
Yayıncılık, 2002.
[10]. N. Yanık, Microsoft Visual C# - for .NET Framework 2.0, 1. Baskı İstanbul, Turkey:
Seçkin Yayıncılık, Ekim 2006.
[11]. F. Zengin, M. Şanlı, O. Urban, M. K. Güllü, C Dili ile PIC Uygulamaları, İstanbul,
Turkey: Birsen Yayınevi, 2006.
[12]. G. İ. Kamburoğlu, C# Programlama Kılavuzu, 1. Baskı, İstanbul, Turkey: Alfa
Yayınları, 2002.
[13]. J. L. Fulley, Robotics Introduction Programming and Projects, 2nd ed., Ontario,
Oregen: Treasure Valley Community College, 2005.
[14]. (2008) Tubitak Bilgi Paketi website. [Online]. Available: http://www.tubitak.gov.tr/
[15]. J. Sharp, Microsoft Visual C# 2005 Step by Step, U.S.A: Microsoft Ed., 2005.
[16]. “USB Library ve USB HID Class data sheet,” MicroElektronika Company, U.S.A.
[17]. “Creating The First Project in microC for PIC data sheet”, MicroEektronika
Company, U.S.A.
[18]. J. Aldous, C# Language Specification, New York, U.S.A: Microsoft Edition, 2006.
57
ÖZGEÇMİŞ
Musa ARSLAN 2 Nisan 1988 Yozgat/Çekerek doğumludur.Kendisi İlköğretimini
köyündeki Hasan Çakan İlköğretim okulunda tamamlamıştır. İlköğretim hayatını okul 2. si
olarak tamamlamıştır. Zile Dinçerler Lisesi/Tokat lise eğitimini tamamlamıştır. Lise
eğitiminde de başarılı bir eğitim geçirip 2007 yılında mezun oldu.2007 yılında Karadeniz
Teknik Üniversitesi Elektrik Elektronik Mühendisliği bölümünü kazanmıştır. 2011
Erasmus sınavında yüksek puan alarak Romanya’da staj yapmıştır. Ayrıca TEV’den de
başarı bursu almıştır. Bu lisans bitirme tezi Musa ARSLAN’ın ilk yayınıdır.
58
Tablo 5. MicroC Operatörler Tablosu[5]
Operatör Açıklama
+ Toplama
- Çıkarma
* Çarpma
/ Bölme
% Mod alma
== Eşittir
!= Eşit değildir
< Küçüktür
> Büyüktür
<= Küçük eşittir
>= Büyük eşittir
= Atama operatörü
+= Toplama ataması
-= Çıkarma ataması
*= Çarpma ataması
/= Bölme ataması
%= Mod alma ataması
&& Mantıksal VE işlemi
|| Mantıksal VEYA işlemi
! Mantıksal DEĞİL işlemi
59
EK-1
Karadeniz Teknik Üniversitesi Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği Bölümü
STANDARTLAR VE KISITLAR FORMU
Tasarım Projesinin hazırlanmasında Standart ve Kısıtlarla ilgili olarak, aşağıdaki soruları cevaplayınız.
1. Projenizin tasarım boyutu nedir? Açıklayınız.
Bilgisayar Kontrollü Kameralı Robot Kolu için gerekli olan sistem tasarımı yapılmıştır.
2. Projenizde bir mühendislik problemini kendiniz formüle edip, çözdünüz mü?
Projemizde herhangi bir mühendislik problemi formüle edilip çözülmemiştir.
3. Önceki derslerde edindiğiniz hangi bilgi ve becerileri kullandınız?
Elektrik Makinaları I, Bilgisayara Giriş ve Saysal Tasarım dersleri kapsamındaki bilgilerden
faydalanılmıştır
4. Kullandığınız veya dikkate aldığınız mühendislik standartları nelerdir?
Robot uzuvları ölçümlerinde standartlara dikkat edilmiştir.
5. Kullandığınız veya dikkate aldığınız gerçekçi kısıtlar nelerdir?
a) Ekonomi
Ekonomik açıdan sistemde kullanılan servo motor sayısı azaltılmış, ayrı bir beslemeden değil USB
çıkışından besleme gerilimi alınmıştır.
b) Çevre sorunları:
Kurduğumuz sistemin çevreye herhangi bir olumsuz etkisi bulunmamaktadır.
c) Sürdürülebilirlik:
Teorik hesaplamaların dışına çıkarak sistemimizde sürdürülebilirlik sağlanabilir. Çünkü bu
sistemin asıl yapısı uygulama alanıdır.
60
d) Üretilebilirlik:
Sistem daha gelişmiş modüller kullanılarak üretilebilir ve zaten çok bir maliyeti yoktur.
e) Etik:
Çalışmalarda herhangi bir arkadaşı huzursuz edici durum meydana gelmemiştir.
f) Sağlık:
Sistemimizin sağlık açısından olumsuz bir etkisi yoktur.
g) Güvenlik:
Düşük gerilimle çalışıldığı için herhangi bir güvenlik problemi yoktur.
h) Sosyal ve politik sorunlar:
Bu tür bir sorun bulunmamaktadır.
Not: Gerek görülmesi halinde bu sayfa istenilen maddeler için genişletilebilir.
Projenin Adı Bilgisayar Kontrollü Kameralı Robot Kolu
Projedeki Öğrencilerin adları Musa ARSLAN
Waleed MAWLAVE
Tarih ve İmzalar 24.05.2012