bİlgİsayar kontrollÜ kamerali robot...

75
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

Upload: others

Post on 12-Sep-2019

9 views

Category:

Documents


0 download

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

43

4.8V’da 13 kg/cm 6V’da 15 kg/cm torklu

Ortalama hızı 0.15sn/60 derecedir.

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