BÖLÜM 1.  PARALEL PORT

1.1  Portun Tanımı

 

“Paralel port” nedir? Bilgisayar evreninde port, mikroişlemcinin, ya da CPU’nun, diğer bilgisayarlarla veri alışverişinde kullandığı bir sinyal hatları kümesidir. Portun tipik işlevi yazıcıyla,modemle, klavyeyle, ekranla –veya sistem belleği dışındaki herhangi bir aygıt  ya da birimle- iletişimidir. Çoğu bilgisayarın portu dijitaldir. Yani her  sinyal, veya bit, ya 0 ya da 1’dir. Paralel port, bir defada birden fazla bit transfer edebilir. Oysa bir seri port bir defada ancak bir bit transfer yapabilir- bununla birlikte, her iki yönde de transfer yapması mümkündür.

 

Biz belli tipte bir paralel portu ele alacağız. Bu port hemen her PC’de, yani  IBM uyumlu kişisel bilgisayarda mevcuttur. Paralel port, RS-232 seri portla birlikte, PC iletişiminin çekici gücüdür. Yeni PC’lerde SCSI , USB ve IRDA gibi yeni portlar da yer alabilmektedir. Ancak paralel port, kapasitesi, esnekliği ve her PC’de bulunur olma özelliğiyle hala en popüler olanları arasındadır.

Adsız

Şekil 1-1

1.2 Paralel Port Düzeni

Paralel port bilgisayarın en kolay programlanabilir portudur. 25 pinden oluşmaktadır. Bu pinler üzerinde DATA, STATUS, CONTROL adında 3 tane port vardır. Bu pinlerden her hangi bir tanesinin “1” yani YÜKSEK olması durumu, o pinden okunacak voltajın +5 Volt olması anlamına gelir. “0” olması ise DÜŞÜK durumunu yani 0 Volt olduğunu gösterir. Buradan da neden ikilik sayı sisteminin kullanıldığı anlaşılmaktadır.

Bilgisayar paralel porta ulaşılabilmesi için porta bir adres atamıştır. Bu adresi bulmak için Denetim Masasından Sisteme, oradan da aygıt yöneticisine girilir. Portlara (Bağlantı Noktaları) gelinir. LPT portunun Kaynaklarından Giriş-Çıkış aralığındaki değerin ilk kısmındaki değer yazıcı portunun adresidir.

1
Şekil 1-2

0378 adresi için bu değer alt portlara aşağıdaki şekilde dağılır,

 

DATA portu h0378

STATUS portu h0378 + 1 yani h0379

CONTROL portu ise h0378 +2 yani h037A olur.

 

Paralel port temel olarak printer bağlantısı için yaratılmıştır. Her pinin bilgisayarın yazıcı ile anlaşmasını sağlayan bir görevi vardır. Gerçekleştirilecek uygulamalarda çok gerekli olmayacak fakat yinede bilinmesinde fayda vardır. Aşağıda ki tabloda paralel port pinlerindeki sinyalleri ve giriş çıkış yönleri görülmektedir.

Sinyal Adi BIT PI

2
Tablo 1-1 

 

 

1.2.1 Data Portu

Paralel port üzerinde DATA portuna ait 8 adet (D0-D7) pin vardır. Bu port paralel portunuzun taban adresini kullanır. 8 tane DATA pini olduğundan 8 Bitlik veri çıkışı almak mümkündür. Yani bu 8 tane pinin “1” yada “0” değerlerini alması ile veri akışı sağlanmış oluyor. DATA portu normalde veri çıkışı için kullanılmaktadır. Fakat bazı özel ayarlar yapılarak, eğer bilgisayar da destekliyorsa veri girişi yapılması da mümkün olabilir.

Belirtilen şekilde DATA portundan 8 bitlik veri çıkışı alınabilir. DATA portuna hiçbir veri gönderilmediği zaman ki değeri “00000000” dır. Dikkat edilirse 8 tane “0” vardır. Örneğin data portuna 25 değeri gönderilsin. 25 değerinin ikilik sayı sisteminde karşılığı “00011001” dir. Bu durumda D4, D3 ve D0 pinlerine karşılık gelen lojik değerler “1” olduğundan o pinler +5 Volt olacaktır. Aşağıda DATA pinine gönderilen bazı değerler ile hangi pinlerin “1” olacağını gösteren örnek bir tablo görülmektedir.

3
Tablo1-2

DATA pinine istediğimiz değerleri Visual Basic yada QBASIC altındaki OUT komutunu kullanarak göndermeniz mümkün. Komutun kullanım şekli aşağıdaki gibidir.

OUT Adres, Veri

Adres değişkeni DATA portunun adresidir. Örneğin (&h0378). Veri değişkeni ise gönderilecek verinin 10 tabanına göre sayısal değerini içermelidir. Örneğin tüm data pinlerini +5 Volt yapmak için porta “11111111” değerine karşılık gelen 255 değerinin gönderilmesi yeterli olacaktır. Bu komutu Visual Basic altında kullanabilmek için inpout32.dll dosyasının proje ile aynı klasörde bulunması gerekmektedir. Bu dosyanın download kısmından çekilmesi mümkündür.

C ++ derleyicisinde ise bu komutun adı outportb ‘tur ve STDIO.H kütüphanesinde yer alır. Kullanım şekli ise aşağıdaki gibidir.

  • outportb (Adres,Veri)

1.2.2 Status Portu

STATUS portu sayesinde, 15 – 13 – 12 – 11- 10 numaralı pinlerden, 5 bit sayısal giriş yapılabilir. STATUS portu paralel portun taban adresinin +1 fazlasında bulunmaktadır. Örneğin paralel portun taban adresi h378 ise STATUS portu h379 da bulunacaktır. Veri paralel portun şeklinde gözüktüğü gibi S7, S6, S5, S4, S3 pinlerinden yapılacaktır. Bu 5 pinlerden herhangi bir müdahale bulunmadan okunacak lojik değer “1” olacaktır. Eğer voltmetre ile bu pinlerdeki voltajı ölçülürse +5 Volt olduğu görülecektir. Bu pinlere bağlanacak butonlar ile pinler topraklanarak lojik değerlerinin “0” yapılıp bir nevi veri girişi gerçekleştirilmesi mümkündür. Fakat bu pinlerden S7, donanım tarafından tersindirilmiştir. Bunun anlamı o pinin toprağa çekildiği zamanki değerinin “1” olacağıdır.

STATUS portundaki veriyi okumak için Visual Basic ve QBASIC ‘teki INP komutunun kullanım şekli,

 

  • inp (taban_adres+1)

C ++ derleyicisinde ise bu komutun adi inportb ‘tur ve STDIO.H kütüphanesinde yer alır. Kullanım şekli ise aşağıdaki gibidir.

  • inportb (taban_adres+1)

1.2.3 Control Portu

CONTROL portunu hem giriş hem de çıkış için kullanmak mümkündür. Paralel port üzerinde CONTROL portununa ait 4 tane pin vardır. Bu pinlerden C0,C1,C3 pinleri tersinmiştir. Yani tersinmiş olan bu pinlere veri gönderilmediği zaman durumu “1” dir. Bu pinlerden bir tanesine veri gönderildiğinde o pinin değeri “0” olacaktır. DATA ve STATUS pinlerinin yetmediği zamanda CONTROL portları ile çıkış yada giriş almak mümkündür. Programlama sekli STATUS ve DATA portları ile aynıdır.

Control Portlarının bir farklı özelliği C5 bitini kullanarak biderectional port özelliğine sahip olan paralel portlarda data registerındaki pinleri giriş/çıkış yapabiliriz.Daha önce de anlatıldığı gibi standart olarak data registerı çıkış(output) olarak kullanılır.Fakat bidirectional özelliği olan portlarda bu pinler giriş olarak ta kullanılabilir.(Not:Bidirectional portlarda data register’ını ya çıkış ya giriş olarak kullanabilirsiniz.Yarısı giriş yarısı çıkış olamaz)

C7^ x
C6 x
C5 Data Register Giriş/Çıkış yapılır (I/O Input/Output)
C4  x
C3^ Pin 17
C2 Pin 16
C1^ Pin 14
C0^ Pin 1

                                                                               Tablo 1-3

 

Yazılan bit abcdefgh ise:

 

a     b     c    d e f g h
x     x    C5    x     C3^   C2      C1^   C0^

                                                    Tablo 1-4

I/O :

a,b, d biti kullanılmaz c biti 0 ise data registerına bağlı pinler çıkıştır, c biti 1 ise data register’ına bağlı pinler giriştir.

1.3 Paralel Porttan Veri Çıkışı

Bilgisayara veri girişi ve çıkışı port uygulamalarının temeli kabul edilir. Yapılacak robotu yönetebilmek için bunun nasıl olduğunu bilmek gerekir. Robot tasarlama kısmına gelene kadar, paralel portu programlamanın iyi bir şekilde öğrenilmesi gereklidir.

Bilgisayarda temel olan iki değer vardır. Bilgisayar içerisinde veri bu iki değer üzerinden akmaktadır. Temel olarak elektronikte, “1” devrenin kapalı (aktif) “0” ise açık (pasif) olduğunu gösterir. Bilgisayarda bu birler ve sıfırların her birine “BIT” bunlardan sekiz tanesinin yan yana gelmiş şekline “1 BYTE” diyoruz.

 

Paralel port bilgisayarın en kolay programlanabilen portudur. Üzerinde 25 Pin vardır 8 BIT veri aktarabilir ve 5 Volt ile çalışır ve tabi ki enerjisini bilgisayardaki ana karttan alır. Bu voltaj büyük bir elektronik eşyayı çalıştırmak için yeterli olmayabilir ancak, böyle bir cihazı çalıştırabilecek basit bir devreyi tetiklemek için yeterli olabilir. Aşağıdaki şekilde görüldüğü gibi paralel port 8 BIT olduğundan veri 8 PIN üzerinden akacaktır. Bu pinler sırası ile örnek program ekranındaki gibidir. Bu sekiz pinin dışında aşağıda TOPRAK olarak gösterilen pinlerin dışındaki kısmın kullanılması gerekecek.

4

                                                                                                Şekil 1-3

Yukarıdaki bu 8 pin özel bir durum olmadığı sürece değerleri “0” dır. Bu pinlerden istenileni “1” durumuna getirilebilir. Paralel port üzerindeki bir data pininin “1” olması o pinin +5 Volt olması anlamına gelir. Bilgisayar sistemlerinde temel rakamlar bunlar olduğundan, yazılan diğer veri ve adresler bilgisayar içerisinde ikilik sayı sisteminde işlenir.

5
Şekil 1-4

Temel amaç her pine önce bir direnç, peşine de ledi bağlamaktır. İlk önce direnç kullanılmasının sebebi ise kullanılacak 1.5 Voltuk ledin paralel porttan gelen 5 Voltluk akım sebebiyle arızalanmamasıdır. Yapılacak bağlantı her data pini üzerinde örnek programın ekranındaki gibi olmalıdır.

 

Devre şu şekilde çalışacaktır;

Paralel port üzerindeki data pinlerinden bir tanesi “1” yapılacak, dolayısıyla o pinin elektriksel değeri +5Volt olacaktır. Buradan çıkan 5 Volt direnç üzerinden geçirilerek üzerindeki akımın değeri ledi bozmayacak değere düşürülür ve bu da led diyotun (+) ucuna bağlanır. Ledin diğer ucu da TOPRAK kısmına bağlanarak devre kapanır.

 

Aşağıdaki tabloda porta gönderilen 8 bitlik hangi veri ile hangi ledlerin yandığı görülecektir.

VERİ D7 D6 D5 D4 D3 D2 D1 D0
1 0 0 0 0 0 0 0 1
4 0 0 0 0 0 1 0 0
16 0 0 0 1 0 0 0 0
25 0 0 0 1 1 0 0 1
70 0 1 0 0 0 1 1 0

Tablo 1-5

1.4 Paralel Porta Veri Girişi

Şimdi paralel porta bağlanılan 5 tane buton ile bilgisayara sayısal veri girişi yapılacaktır. Paralel porttan veri girişi STATUS yada CONTROL portuna ait pinlerden gerçekleştirilebilir. Hatta bazı ayarlamalar yapılarak, eğer bilgisayar da destekliyorsa, DATA pinlerinden giriş yapılması da mümkün olabilir. STATUS portundan veri girişi incelenecektir.

STATUS portu sayesinde, 15 – 13 – 12 – 11- 10 numaralı pinlerden, 5 bit sayısal giriş yapılabilir. STATUS portu paralel portun taban adresinin +1 fazlasında bulunmaktadır. Örneğin paralel portun taban adresi h378 ise STATUS portu h379 da bulunacaktır. Veri paralel portun şeklinde gözüktüğü gibi S7, S6, S5, S4, S3 pinlerinden yapılacaktır. Bu 5 pinlerden herhangi bir müdahale bulunmadan okunacak lojik değer “1” olacaktır. Eğer voltmetre ile bu pinlerdeki voltaj ölçülürse +5 Volt olduğu görülecektir. Bu pinlere bağlanılacak butonlar ile pinler topraklanarak lojik değerleri “0” yapılıp bir nevi veri girişi gerçekleştirilmiş olacaktır.

STATUS portundaki veriyi okumak için INP komutu kullanılacaktır. Kullanım şekli;
inp(taban_adres+1) şeklindedir.

6

Şekil 1-5

 

Paralel porta veri giriş işlemi, temel olarak aynı olsa da veri çıkışından biraz daha karışıktır. Bunun sebebi STATUS portunda bulunan sinyallerden birinin donanım tarafından terslenmiş olmasıdır. Şimdi verinin 8 bit olarak okunduğunu varsayalım. Bu durumda STATUS portundaki binary (ikilik sisteme karşılık gelen) değer, “11111111” olacaktır. Bu da 10 tabanında 255 ‘e denk gelmektedir. Fakat bu porttan veri okunduğunda bambaşka bir değer olan 127 ‘ ye rastlanır. Dikkat edilirse 127 değeri binary olarak okunursa “01111111” değeri elde edilir. İşte buradaki 127 değerinin okunmasının sebebi pinlerden bir tanesi olan S7’nin terslenmiş olmasıdır. Yani S7’ye karşılık gelen pine veri yollandığında o pinin değeri “1” olacaktır. Diğerlerine veri yollandığında ise değerleri “0” olacaktır. Verinin 8 bit olarak okunduğu varsayılmıştı. İşte okunulan değerin son 3 biti esasında okunmuyor. Yani 127 değerinin okunabilir karşılığı “01111xxx” olacaktır. Buradaki x’lerin bir değeri yoktur. İptal edilmiş bitleri göstermek için kullanılmıştır. Gerçekte okunan değer “01111” olacaktır. Bu da STATUS portuna veri girişinin 5 bit olduğunu bir kez daha gösterecektir.

Daha rahat işlem yapabilmek için tersinmiş olan S7 bitinin yazılım olarak tekrar tersindirilmesi gerekmektedir. Yani porta hiç bir müdahalede bulunmadan okunmak istenilen değer “11111xxx” olmalıdır. Bu durumda en baştaki bitin tersindirilmesi gerekecektir. Bu işlemi yapmanın en kolay yolu Xor kullanmaktır.Xor, Exclusive-Or operatörü bir byte içerisindeki bir veya daha fazla biti tersindirmek için kullanılabilecek bir metottur. XOR operatörünün BASIC ‘te kullanımı aşağıdaki gibidir;

(okunan_byte) XOR (maske_byte)

Burada maske değerinde tersindirilmek istenilen bitler için “1” , dokunulmayacak bitler için “0” yazılmalıdır. Örneğin “11100111” değeri “11111110” maskesi ile XOR lanırsa, elde edilen değer, “00011001” olacaktır. Paralel porta gönderilecek byte verisini “10000000” değerinin onluk tabanındaki karşılığı olan “128” ile XOR lanacaktır. Böylece okunulan verinin en başta bulunan S7’den gelen kısmı “1” ise “0”, “0” ise de “1” olacaktır. Sonuçta taban adresi h378 olan paralel porttan veri okumak için yazılması gereken satır aşağıdaki gibi olacaktır;

Değer = inp(&h379) XOR 128

Aşağıdaki tabloda hangi butonlara basıldığında, yukarıdaki komutla hangi verinin okunabileceği gösterilmektedir.

  Butonlar S7 S6 S5 S4 S3 S2 S1 S0 On tabanındaki değer
 S5  1  1  0  1  1  1  1  1  223
 S4  1  1  1  0  1  1  1  1  239
 S5 ve S4  1  1  0  0  1  1  1  1  207
 Tümü  0  0  0  0  0  1  1  1  7

                                      Tablo 1-6

Kullanılmayan S0,S1 ve S2 değerleri genelde “1” olarak gelmektedir fakat bazen bu değişebiliyor. Eğer porttaki bu değerler değişik ise farklı bir sonuç elde edilebilir. Esasında bu veriyi XOR’lamak zorunluluğu yoktur. Bu sadece hesaplamalarda ve mantıkta biraz kolaylık sağlayacaktır. Önemli olan okunan verinin butona basıldıkça değişmesidir.

BÖLÜM 2. STEP MOTOR

2.1 Giriş

Step motor, elektrik enerjisini dönme hareketine çeviren elektro-mekanik bir cihazdır. Açısal konumu adımlar halinde değiştiren çok hassas sinyallerle sürülen motorlardır. Elektrik enerjisi alındığında rotor ve buna bağlı şaft, sabit açısal birimlerde (step-adım) dönmeye başlar. Step motorlar, çok yüksek hızlı anahtarlama özelliğine sahip bir sürücüye bağlıdırlar (step motor sürücüsü). Bu sürücü, bir encoder , PC veya  PLC’den giriş pals’ları alır. Alınan her giriş pals’ında, motor bir adım (step) ilerler. Step motorlar bir motor turundaki adım sayısı ile anılırlar. Örnek olarak 400 adımlık bir step motor bir tam dönüşünde (tur) 400 adım yapar. Bu durumda bir adımın açısı 360/400 = 0.9 derecedir. Bu değer, step motorun hassasiyetinin bir göstergesidir. Bir devirdeki adım sayısı yükseldikçe step motor hassasiyeti ve dolayısı ile maliyeti artar.

7

                                                                                        Şekil 2-1

Adım motorların, endüstriyel ve elektronik uygulamalarda kullanımı oldukça fazladır. En basitinden, bilgisayarımızdaki floppy disket sürücüsünde ve hard diskler de bu teknolojiye başvurulmuştur. Adım motorların hangi yöne doğru döneceği, devir sayısı, dönüş hızı gibi değerler mikroişlemciler veya bilgisayarlar tarafından kontrol edilebilir. Bu özelliklerinden dolayı adım motorlar çok hassas konum kontrolü istenilen yerlerde çok kullanılırlar.Örneğin endüstriyel kontrol teknolojisi içinde bulunan bazı sistemler, robot sistemleri vs. gibi alanlarda sıkça kullanılırlar.

2.1.1 Step motorların avantajları

  • Geri beslemeye ihtiyaç duymazlar. Açık döngülü olarak kontrol edilebilirler
  • Motorun hareketlerinde konum hatası yoktur.
  • Sayısal olarak kontrol edilebildikleri gibi bilgisayar veya mikroişlemciler ile de kontrol edilebilirler.
  • Mekanik yapısı basit olduğundan bakım gerektirmezler.
  • Herhangi bir hasara yol açmadan defalarca çalıştırılabilirler.

 

2.1.2 Step motorların dezavantajları

  • Adım açıları sabit olduğundan hareketleri sürekli değil darbelidir.
  • Sürtünme kaynaklı yükler, açık döngülü kontrolde konum hatası meydana getirebilirler.
  • Elde edilecek güç ve moment sınırlıdır.

Endüstride genellikle unipolar (çok kutuplu) ve bipolar (iki kutuplu) olmak üzere iki tip step motor kullanılır. Daha hassas hareket kontrolü elde etmek amacıyla 5-6…n kutuplu step motorlar da üretilmektedir

8

                                                                                                Şekil 2-2

 

2.2 Step Motor Kontrolü

Step motorun kablolarından bir veya iki tanesi ortaktır (vMotor). Yapılan işlem basit olarak bu ortak kabloya sürekli +12 Volt göndermek ve diğer uçları ise belli bir sıra ile toprağa göndererek bir adim hareketi elde etmektir. Bu iki farklı şekilde yapılabilir. Bunlardan biri 12 Voltluk röle devresine benzer bir devrenin 4 transistörlüsü ile bu sinyalleri göndermektir. Bir diğer yolu ise içerisinde bu transistörleri hali hazırda bulunduran bir entegre kullanmaktır. Kolaylık açısından ikinci yol tercih edilmelidir.

2.2.1 Entegreli sürücü devresi için gerekli olan malzemeler

1X ULN2003 Entegre
1X 1N4001 Diyot
1X 12 Volt 5 Kablolu Step Motor

Step motor sürücüsü olarak ULN2003 entegresi kullanılır. Sürücü devresi olarak kullanılan ULN2003 İçerisinde 7 adet NPN transistör ve dahili diyot barındırmaktadır. Kullanımı ise oldukça kolaydır. Devre şemasından da anlaşılabileceği gibi 9 numaralı bacağına +12 Volt ve 8 numaralı bacağına da Toprak (ground) uygulanır. Daha sonra 3 ve 6 numaralı bacaklara da paralel portun DATA pinlerinden gelen +5 Voltluk değerler uygulanır. Bu sayede örneğin 3 numaralı bacağa +5 Volt (lojik voltaj) uygulandığında 14 numaralı bacak toprak olacaktır. Aynı şekilde sırayla 4 için 13, 5 için 12, 6 için ise 11 numaralı bacaklar toprak olacaktır.

9

Şekil 2-3

 

5 kablolu step motorun kablolarından bir tanesi vMotor denilen ortak kablodur. Önemli olan bu kablonun hangisi olduğunu bulmaktır. Bunun için avometrenin OHM ölçeri ile kabloların uçları ikişer ikişer ölçülür. Tüm uçlar ile arasındaki direnç aynı olan kablo ortak vMotor kablosudur. Biraz denenerek bulunabilir. Şekilde gözüktüğü gibi, diğer 4 kablo motor kömürlerine (coil) gitmektedir. Bu 4 kablonun da bir sırası vardır. Bu sırayı da deneme yanılma yöntemiyle bulmak mümkün olacaktır. Eğer bu kablolar yanlış sırada bağlanırsa, motor dönmek yerine sadece titreme yapacaktır. Yukarıda da bahsedildiği gibi motora adim attırmak için yapılması gereken, vMotor kablosuna +12 Volt verirken, diğer kömürlere bağlı kablolara belli bir sıra ile toprak göndermektir.

Eğer ters yönde dönüş elde edilmek isteniyorsa, sinyalleri ters yönde (tablodaki satırlar aşağıdan yukarıya doğru okunarak) gönderilebilir.

Yarım Adım Metodu
Değer D3 D2 D1 D0
9 1 0 0 1
1 0 0 0 1
2 0 0 1 0
6 0 1 1 0
4 0 1 0 0
2 0 0 1 0
12 1 1 0 0
8 1 0 0 0

Tablo 2-1          

Tam Adım Metodu
Değer D3 D2 D1 D0
9 1 0 0 1
3 0 0 1 1
6 0 1 1 0
12 1 1 0 0

Tablo 2-2

Dalga sürümü  Adım Metodu
Değer D3 D2 D1 D0
1 0 0 0 1
2 0 0 1 0
4 0 1 0 0
8 1 0 0 0

Tablo 2-3

Bir diğer olayda step motorun referans noktasının nasıl bulunacağıdır. Yani motorun durduğu en son pozisyonun ne olduğu nerden bilinecek? Döndürme işlemine başlanılan nokta biliniyorsa bu çok fazla sorun olmayacaktır. Fakat motoru daha döndürmeye başlamadan, el ile biraz çevrildiğini düşünelim. Bu durumda başlangıç noktası kayacak ve motor istenilen pozisyona gelmeyecektir. Disket sürücülerde kullanılan yöntem oldukça ilkel ama geçerli bir yöntemdir. Disket sürücü bir şekilde diski okuyan kafanın nerede olduğunu bilmek zorundadır. Bunun için motoru bir yönde sürekli döndürerek, kafanın en başa dayanmasını sağlar. Bu gelinen noktaya referans noktası denir. Bu sebeple bazı step motorların kendi etrafında sürekli olarak dönmesini engelleyecek bir tırnak vardır. Motoru referans noktasına dayamak için bu tırnaktan yararlanılır.

 

2.2.2 Transistörlü sürücü devresi için gerekli olan malzemeler :

4X BC547B Transistör
4X 1N4001 Diyot
1X 12 Volt 5 Kablolu Step Motor

10

Şekil 2-4

Her iki devrede de kullanılan diyotun değerinin herhangi bir önemi yoktur. Motorda adım attıktan sonra oluşacak ters EMK bu diyot sayesinde absorbe edilebilir. Bu entegrenin nasıl çalıştığı iyi anlaşılırsa, bir çok uygulamada transistörler ile uğraşılmak zorunda kalınmadan 12 Volt kontrol edilebilir.

+12 Voltluk akım vMotor kablosuna bağlıdır. Motorun diğer kablolarının sıra ile toprağa gönderilmesi gerekmektedir. Transistörün BEYZ ucuna uygulanacak data pininden gelen +5Volt sayesinde transistör tetiklenecek ve kollektör-emitör (CE) iletime geçecektir.

2.3 Step Motorun İç Yapısı

11

                                                                                           Şekil 2-5 

Step motorlar bir dizi kısa elektrik akımıyla hareket ederler. Stator (hareketsiz kısım) birbirine dik manyetik alan üreten iki ayrı bobinden oluşur. Bu bobinlere sırayla elektrik akımı verilerek statorun içerisinde döndürme etkisine sahip bir manyetik oluşması sağlanır. Statorun içindeki rotor (hareketli kısım) bobinler tarafından sırayla oluşturulan manyetik alanla polarize olarak döner. Her bir elektrik akım vurgusu (pulse) rotorun belli bir açı kadar (bir adım) dönmesine

neden olur. Bu şekilde verilen elektrik akım vurgularının frekansı motorun dönme hızını belirler. Hızlı ivmelenme sonucunda step motorda kayma meydana gelebilir bunun önlenmesi için ivmelenme sırasında vurgu sıklığı ayarlanmalıdır. Step motorlarda yüksek hassasiyetin gerektiği durumlarda geri beslemeli kontroller kullanılır. Step motorlar durma pozisyonu etrafında salınım yapabilirler ve hafif yükler taşırken hassasiyeti kaybedebilirler. Eğer güç sadece bir bobine verilirse manyetik alanın etkisiyle rotor sabitlenecektir, bu da motorun durdurulmasında kullanılır.

12

Şekil 2-6

 

2.3.1 Step Motorun Dönme Hareketi

13

                                                                                   Şekil 2-7

 

2.3.2    4 Kablolu step motorun iç bağlantısı

14

                                                                                                   Şekil 2-8

 

2.3.3   6 Kablolu step motorun iç bağlantısı

15

Şekil 2-9

 

 

 

2.3.4   8 Kablolu paralel bağlı step motorun iç bağlantısı

16

Şekil 2-10

 

 

2.3.5  8 Kablolu paralel bağlı step motorun iç bağlantısı

17

Şekil 2-11

 

BÖLÜM 3. UZAKTAN ERİŞİM

3.1 Winsock Object Kullanarak  Socket Programlama

Projedeki programlar TCP/IP protokolüyle haberleşecektir. ” Microsoft Winsock Control”, iki program arasında haberleşmeyi sağlayan VB componentidir.

3.2  Winsock  Object

3.2.1  Temel Method’lar ve Property’ler

 

Winsock Objesinin en çok kullanılan metodları şunlardır;
Accept: Gelen bağlantıları kabul etmek için kullanılır
Listen: Belirli bir portta dinlemede kalmak için kullanılır
Connect: Belirli bir ip’ye, belirli bir porttan bağlanmak için kullanılır.
Close: Socketi kapatır.
LocalHostName: Yerel Bilgisayar adı (bkz Denetim Masası->Ağ->Tanımlama)
LocalIp: O anki Ip numaranız
RemoteHost: Bağlanmak istediğiniz bilgisayarın ip numarası veya domain name’i
LocalPort: Yerel port
RemotePort: Bağlanılmak istenen makinenin port numarası
3.2.2   Event’ ler

 

Close: Socket kapatılırken oluşur.
Connect: Socket karsı bilgisayara bir bağlantı gerçekleştirirse oluşur. Burada ilginç bir nokta vardır. Karsı taraf sizin bağlantı isteğinizi kabul veya ret etmeden önce aslında sizin bilgisayarını da bir connect event’ i oluşur. Bu da socket uygulamalarında bir takım problemler oluşturuyor.
ConnectionRequest: Bilgisayarınıza başka bir makineden bağlantı isteği geldiğinde oluşur.
DataArrival: bilgisayarınıza veri yollandığında oluşur.
Error: Scokette hata olması durumunda bu event çalışır
SendComplete: Yollama işlemi tamamlandığında..
SendProgress: Yollama işlemi devam ederken.

3.2.3   Socket Durumları

 

Bir socket 10 durumda bulunabilir. Socket’ in o anki durumu State isimli property ile öğrenilebilir.
Socketimizin adi winsock1 olsun;

Winsock1.state = 0 ise socket kapalı durumda
Winsock1.state = 1 ise Acık durumda
Winsock1.state = 2 ise Belirli bir porttan dinleme (Listen State)
Winsock1.state = 3 ise Bağlantıda belirsizlik var
Winsock1.state = 4 ise Karşı bilgisayar bulunuyor
Winsock1.state = 5 ise Karşı bilgisayar bulundu
Winsock1.state = 6 ise Bağlanılıyor
Winsock1.state = 7 ise Bağlanıldı
Winsock1.state = 8 ise Karşı taraf bağlantıyı kesiyor
Winsock1.state = 9 ise Hata oluştu

Bir socketi dinlemeye almak ve gelen bağlantıları kabul/ret etmek
Örnek bir VB kodu;
Private Sub Form_Load()
Winsock1.LocalPort = 15000 ‘15000 numaralı port
Winsock1.Listen ‘Bu porttan dinlemede kal
Txt_localip.text = Winsock1.LocalIP ‘Kendi ip numaramızı textbox’a yazdırıyoruz
End Sub

Bilgisayarınızda 65535 adet port bulunur ve bunlardan 1000′ in altındakiler işletim sistemi tarafından kullanılır. İşimizi şansa bırakmayıp genelde programdaki port numaralarını 10000 ve ustu olarak seçelim. Su ana kadar sadece bir socket yarattık ve onu 15000 numaralı porttan dinlemeye aldık.

 

Şimdi şu kodu inceleyelim. Bir bağlantı gelmiş ve connectionRequest Event’ i otomatik olarak oluşmuş ve bizim daha önceden yazdığımız kod otomatik olarak işletilecek;
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Dim cevap
ziyaretçi = Winsock1.RemoteHostIP
DoEvents
cevap = MsgBox ( ziyaretçi+ ” isimli bilgisayardan bağlanma isteği geldi. Kabul ediyor musunuz?”, vbYesNo + vbQuestion)
If cevap = vbYes Then ‘Kabul ediyorsak
If Winsock1.State <> sckClosed Then Winsock1.Close ‘burası çok önemli
‘bir socket listen state’ti ise, close edilmeden
‘accept state’e geçirilemez.
Winsock1.Accept (requestID) ‘Bağlantıyı kabul ettik, RequestID event’in parametresi
Txt_remoteip.text = Winsock1.RemoteHostIP ‘Karşı tarafın ip numarasını textbox a yaz.
Else ‘Kabul etmiyorsak
Winsock1.Close ‘Socketi kapat
Winsock1.LocalPort = 15000 ‘Daha sonra gelecek istekler için tekrar aç
Winsock1.Listen ‘Dinlemede kal
End If
End Sub

3.2.4  Bir Socket İle Belirli Bir Port’a Bağlanmak

 

Aşağıdaki kodu inceleyelim;

Private Sub btn_baglan_Click()
Winsock2.RemoteHost = txt_remoteip.text ‘212.23.23.3 gibi bir ip ya da irc.xnet.org gibi bir adres
Winsock2.RemotePort = 15000 ‘Karşı tarafın port numarası.. Bağlanabilmek için karşı taraf bu porttan
‘dinlemede olmalıdır.
Winsock2.Connect ‘Bağlan
End Sub

 

Bundan sonra sizin bilgisayarınızda Connect isimli Event oluşurken, karşı tarafta ise ConnectionRequest isimli event oluşur. Ama o sizin bağlantınızı kabul etmese bile sizde Connect Event’ i oluşacaktır. Basit nuke programları Connect Event’ i oluşur oluşmaz bu eventin içinden illegal data yollamaya başlarlar. Eğer bu portlardan (mesela 139) dinlemede kalan ve gelen bağlantıları ret eden bir program yazarsanız, karşı tarafın nuke programı hata verecektir. Eğer daha kotu bir programcı tarafından yazıldıysa çökecektir.
3.2.5 Data Yollamak

 

Aşağıdaki kodu inceleyelim,

Diyelim ki bir düğmeye bastınız ve karşı tarafa bir cümle yollamak istiyorsunuz;

If Winsock2.State <> sckConnected Then ‘Eğer socket connect olmamışsa
Winsock2.Close ‘socketi kapat
MsgBox “karşı tarafa bağlı değilsiniz”
Exit Sub
End If
If Trim(txt_mesaj.text) <> “” Then ‘Eğer textbox bos değilse
mesaj = “<” + isim + “> ” + txt_mesaj.text + Chr(10) ‘irc tipinde bir mesaj formatı hazırla
Winsock2.SendData (mesaj) ‘Yolla
End If

Bunu yaptığınızda sizin bilgisayarınızda SendProgress ve SendComplete Event’leri oluşurken, karşı tarafta DataArrival Event’ i oluşur.

3.2.6 Data Almak

 

Bilgisayarımıza karşı taraftan data geldiğinde DataArrival Event’ i oluşur.

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim msg_al As String
Winsock1.GetData msg_al, vbString, bytesTotal ‘vbString mesajın tipini temsil eder
Txt_ekran.text=Txt_ekran.text+msg_al
End Sub

Bu kodla da data alınıyor ve ekrana yazdırılıyor. Ancak önümüze her gelen datayı böyle almamalıyız. En basitinden mesajın uzunluğunu  kontrol etmek gerekebilir.

3.3    TCP/IP Port Numaraları Ve Karşılıkları

Not: Bu bilgiler Windows 98 işletim sisteminin service adlı dosyasından alınmıştır

# Copyright (c) 1993-1995 Microsoft Corp.

#

# This file contains port numbers for well-known services as defined by

# RFC 1060 (Assigned Numbers).

#

# Format:

#

# <service name>  <port number>/<protocol>  [aliases…]   [#<comment>]

#

 

echo                7/tcp

echo                7/udp

discard             9/tcp    sink null

discard             9/udp    sink null

systat             11/tcp

systat             11/tcp    users

daytime            13/tcp

daytime            13/udp

netstat            15/tcp

qotd               17/tcp    quote

qotd               17/udp    quote

chargen            19/tcp    ttytst source

chargen            19/udp    ttytst source

ftp-data           20/tcp

ftp                21/tcp

telnet             23/tcp

smtp               25/tcp    mail

time               37/tcp    timserver

time               37/udp    timserver

rlp                39/udp    resource      # resource location

name               42/tcp    nameserver

name               42/udp    nameserver

whois              43/tcp    nicname       # usually to sri-nic

domain             53/tcp    nameserver    # name-domain server

# <service name>  <port number>/<protocol>  [aliases…]   [#<comment>]

 

domain             53/udp    nameserver

nameserver         53/tcp    domain        # name-domain server

nameserver         53/udp    domain

mtp                57/tcp                  # deprecated

bootp              67/udp                  # boot program server

tftp               69/udp

rje                77/tcp    netrjs

finger             79/tcp

link               87/tcp    ttylink

supdup             95/tcp

hostnames         101/tcp    hostname      # usually from sri-nic

iso-tsap          102/tcp

dictionary        103/tcp    webster

x400              103/tcp                  # ISO Mail

x400-snd          104/tcp

csnet-ns          105/tcp

pop               109/tcp    postoffice

pop2              109/tcp                  # Post Office

pop3              110/tcp    postoffice

portmap           111/tcp

portmap           111/udp

sunrpc            111/tcp

sunrpc            111/udp

auth              113/tcp    authentication

sftp              115/tcp

path              117/tcp

uucp-path         117/tcp

nntp              119/tcp    usenet        # Network News Transfer

ntp               123/udp    ntpd ntp      # network time protocol (exp)

nbname            137/udp

nbdatagram        138/udp

nbsession         139/tcp

NeWS              144/tcp    news

Sgmp              153/udp    sgmp

tcprepo           158/tcp    repository    # PCMAIL

snmp              161/udp    snmp

snmp-trap         162/udp    snmp

print-srv         170/tcp                  # network PostScript

vmnet             175/tcp

load              315/udp

vmnet0            400/tcp

# <service name>  <port number>/<protocol>  [aliases…]   [#<comment>]

 

sytek             500/udp

biff              512/udp    comsat

exec              512/tcp

login             513/tcp

who               513/udp    whod

shell             514/tcp    cmd           # no passwords used

syslog            514/udp

printer           515/tcp    spooler       # line printer spooler

talk              517/udp

ntalk             518/udp

efs               520/tcp                  # for LucasFilm

route             520/udp    router routed

timed             525/udp    timeserver

tempo             526/tcp    newdate

courier           530/tcp    rpc

conference        531/tcp    chat

rvd-control       531/udp    MIT disk

netnews           532/tcp    readnews

netwall           533/udp                  # -for emergency broadcasts

uucp              540/tcp    uucpd         # uucp daemon

klogin            543/tcp                  # Kerberos authenticated rlogin

kshell            544/tcp    cmd           # and remote shell

new-rwho          550/udp    new-who       # experimental

remotefs          556/tcp    rfs_server rfs# Brunhoff remote filesystem

rmonitor          560/udp    rmonitord     # experimental

monitor           561/udp                  # experimental

garcon            600/tcp

maitrd            601/tcp

busboy            602/tcp

acctmaster        700/udp

acctslave         701/udp

acct              702/udp

acctlogin         703/udp

acctprinter       704/udp

elcsd             704/udp                  # errlog

acctinfo          705/udp

acctslave2        706/udp

acctdisk          707/udp

kerberos          750/tcp    kdc           # Kerberos authentication–tcp

kerberos          750/udp    kdc           # Kerberos authentication–udp

kerberos_master   751/tcp                  # Kerberos authentication

# <service name>  <port number>/<protocol>  [aliases…]   [#<comment>]

 

kerberos_master   751/udp                  # Kerberos authentication

passwd_server     752/udp                  # Kerberos passwd server

userreg_server    753/udp                  # Kerberos userreg server

krb_prop          754/tcp                  # Kerberos slave propagation

erlogin           888/tcp                  # Login and environment passing

kpop             1109/tcp                  # Pop with Kerberos

phone            1167/udp

ingreslock       1524/tcp

maze             1666/udp

nfs              2049/udp                  # sun nfs

knetd            2053/tcp                  # Kerberos de-multiplexor

eklogin          2105/tcp                  # Kerberos encrypted rlogin

rmt              5555/tcp    rmtd

mtb              5556/tcp    mtbd          # mtb backup

man              9535/tcp                  # remote man server

w                9536/tcp

mantst           9537/tcp                  # remote man server, testing

bnews           10000/tcp

rscs0           10000/udp

queue           10001/tcp

rscs1           10001/udp

poker           10002/tcp

rscs2           10002/udp

gateway         10003/tcp

rscs3           10003/udp

remp            10004/tcp

rscs4           10004/udp

rscs5           10005/udp

rscs6           10006/udp

rscs7           10007/udp

rscs8           10008/udp

rscs9           10009/udp

rscsa           10010/udp

rscsb           10011/udp

qmaster         10012/tcp

qmaster         10012/udp

 

BÖLÜM 4.  ROBOKOL PROGRAMI

4.1 ROBOKOL Programının Arayüzleri

4.1.1 Otomatik Kontrol Arayüzü

18

Şekil 4-1

 

  • Bu arayüz sayesinde Robot Kolu programlanabiliyor. Üst üste 5 uygulamayı gerçekleştiriyor. Her uygulamada seçilen açı, yön, motor ve uygulamanın tamamı için belirlenen frekans değerleriyle robot kolu hareket ediyor.

 

  • Bu kontrol modu, bir uygulamada aynı anda iki step motorun çalışmasına izin vermez. Seçilen motor yanan lamba ile temsil ediliyor.

  4.1.2 Bar Kontrol Arayüzü

19

Şekil 4-2

 

  • Bu arayüz ile her motoru manuel olarak tek tek kontrol edebiliriz. Uygulamayı istediğimiz yönde ( saat yönü-saat yönü tersi) ve istediğimiz hızda gerçekleştirebiliriz.

4.1.3 Joystick İle  Kontrol Arayüzü

20

Şekil 4-3

  • Bu arayüzde Sistemimize gameport ile bağlı olan bir joystick sayesinde kontrolü gerçekleştirebiliriz. Joystick’in hareketleri butonlardan görülebilir.
  • Sistemde aşağı-yukarı bir, sağ-sol bir, çapraz yönler birer ve joystick’in iki butonu bir step motoru olmak üzere toplam 5 adet step motor kontrolü gerçekleştirilir.

4.1.4 Animasyon Arayüzü

 21

                                                Şekil 4-4

  • Menüdeki bağlan butonuna basıldığında açılan pencere ağ üzerinden(D.P.U. Network) robotu kontrol etmemizi sağlar.IP bölümüne robotun bağlı olduğu bilgisayarın IP’si yazılır , port kısmına ise yukarıda verdiğimiz işletim sisteminin kullandığı portların haricinde bir port numarası yazılır.Program standart olarak kullanıcıya 15000 nolu portu önerir.
  • Ayrıca bu bağlantının gerçekleşebilmesi için Robokol Server programını kullanan kullanıcı bizim bağlanma isteğimize olumlu karşılık vermesi gerekir.Aksi taktirde bağlantı gerçekleşmez.

Ayarlar butonuna basıldığında çıkan pencereden bilgisayarın paralel port (LPT1)’u seçilmelidir.

4.2 Yazılım Algoritması

22

4.3 ROBOKOL  Programının Help Formu

i-Giriş

ii-Step Motorlar

a)Manuel kontrol

b)Otomatik kontrol

c)joystick kontrol

iii-ROBOKOL <client >

iv-ROBOKOL <server>

v-Projenin Sürücü Devresi

4.3.1 Giriş

Bu program,lisans tezimiz olan ROBOKOL projesinin yazılımıdır. Donanım (robot kol) aynı anda sadece bir motorun çalışmasını destekliyor.Yazılım da bu gerçeğe paralel olarak hazırlandı.

Donanım olarak tasarladığımız robot kolu ilk başlarda sadece tekbir yöntemle

sürmeyi  düşünüyorduk. İnternetten incelediklerimizle, hocalarımızın tavsiyeleriyle (joystick mod, otomatik mod) kontrol türlerini üçe çıkardık.

Yazılım üç kontrolü de destekliyor. Barındığı ufak sorunlardan dolayı beta sürümü olarak değerlendirebiliriz.

Eğer istenirse yardımcı programıyla beraber robotkol’un uzaktan kontrolü

Yapılabilir .Ayrıca, D.P.Ü Merkez Kampüs yerel ağı içerisinde yazılımın çalışması denenmiştir (D.P.U.  B.İ.M.  Network  Odası – Tahsin ERSOY).

15000 nolu TCP\IP portundan bağlantı gerçekleştiriliyor. Bu portun numarasını

İşletim  sisteminin portlarıyla  çakışmaması için programda seçilebilen numara olarak vermedik. Zamanın kısıtlı olması dolayısıyla uzaktan erişim için sadece joystick kodları eklenmiştir. Kontrol sadece joystick ile yapılabilmektedir.

Dikkat edilmesi gereken bir diğer nokta ise program çalıştırıldıktan sonra  Port

Ayarlarından  paralel port numarasının mutlaka seçilmesidir (&h378).

4.3.2 Step Motorlar

Projemizde  4 adet step  motor kullandık. Bunlardan ikisi,Sanyo firmasının ürettiği step motorlar. Bu iki motorun bağlantıları aynı. Siyah kablo Vmotor kablosu. Bu motorların kırmızı renkli iki tane ortak Vmotor kablosu var. Biz bunları birleştirdik.Data  kabloların sırası

  • Turuncu->Kırmızı->Sarı->Mavi kablo.

NMB markalı step motorların renk sırası ise şöyle:

  • Siyah->Sarı->Kahverengi->Turuncu.

4.3.3 ROBOKOL <Client>

Program kendi başına da kullanılabilir. Çalıştığı bilgisayarın paralel portundan kontrolü gerçekleştirir. Program ilk açıldığında yapılması gereken -giriş bölümünde anlatıldığı gibi- port ayarlarından bilgisayarın portunu (paralel port) seçmektir. Aksi taktirde program size uyarı verecek ve herhangi bir uygulama yapmayacaktır. Üç farklı modla kontrol yapılabilir.

Manuel kontrolle, seçilen motorun istenilen yönde çalıştırılması sağlanabilir.

Otomatik kontrolle, motorlar yaptığınız ufak programcığa göre çalışırlar.

Joystick kontrol ile, motorların kontrolünü bilgisayarınıza bağladığınız joystick ile yapabilirsiniz. Yön olarak:

Sol-sağ 1.motoru, İleri-geri 2.motoru, solüst-sağalt 3.motoru, sağalt-solüst

4.motoru, butonlar ise (5.motor kullanılması halinde) 5.motoru

çalıştırır.

4.3.4 ROBOKOL <Server>

Bu programı kullanarak internet üzerinden kontrol yapılabilir. Bilgisayarınızın 15000 TCP/IP portunu açar ,bağlantı gerçekleştirildikten sonra ROBOKOL<Client>’ den gelecek emirlerle hareketi sağlar..

Burada belirtilmesi gereken ise sadece joystick kodlarının yüklendiği ve sadece

joystick ile kontrol yapılabileceğidir.

4.3.5 Projenin Sürücü Devresi

Motor sürücü devresinde 4 adet ULN2003, 2 adet 74HCT244 (buffer) entegrelerini kullandık.ULN 2003 entegresi step motor sürücüsü devresinin  paketlenmiş hali. 7 kabloya kadar destekliyor.Bu entegre ile step motoru sürmek transistörlü devresine göre daha kolay oldu. Ek bir sürücü devresi yapmak zorunda kalmadık. 74HCT244 entegresi dörtlü gruplar halinde 3 durumlu bufferlar (tampon) içeriyor. Bu bufferlar hem bilgisayarın paralel portunu koruyor hem de  dörtlü  buffer gruplarının enable (seçme) ucu sayesinde step motorları ayrı ayrı seçebildik.

 

BÖLÜM 5.  ELEKTRONİK DEVRE

5.1 Devre Şeması

 

23

   Şekil 5-1

 

  • Bu devrede ULN 2003 entegrelerinden motorlara data çıkışları alınıyor. 74HCT244 entegresi ise control portlarından gelen veriye göre motorlardan birini seçiyor. Data ve control portları ise bilgisayarın paralel portunun bağlantılarıdır.

BÖLÜM 6.  PROJE NOTLARI

6.1 Kontrol Türü Seçimi

  • Yapılacak projede kullanılacak kontrol tabanı olarak PC seçilmiştir. Bu sebeple mikrodenetleyici kullanılmamıştır. PC üzerindeki paralel port, seri port, PCI slotları ve usb port iskelelerinden biri seçilmeliydi.
  • Seri port uzun mesafelerde kullanılan bir kontrol türüdür. Dijital veri birkaç saat darbesi (clock pulse) sonunda iletilir. Yapılacak olan robot kolunda verinin paralel olarak step motorlara ulaştırılması gerekmektedir. Bu ulaşımda seri olarak gelmiş veri, içeride (devre kartı) paralel olarak motorun data girişlerine yansıtılmalıdır. Bu olay ek bir devre (seri-paralel dönüşüm) ihtiyacı oluşturduğundan seri port tercih edilmemiştir.
  • USB portu seri haberleşme mantığıyla çalıştığı için tercih edilmemiştir.
  • PCI slotlarının kullanımı için bilgisayarın PCI yuvalarına takılacak bir kart dizayn etmek gerektiğinden tercih edilmemiştir.
  • Paralel portta ise, verilerin paralel olması (veriler tek saat darbesinde çıkışa yansıtılır.), bir defada birden fazla bit transfer edebilmesi, programlanmasının kolaylığı, kullanım yaygınlığı ve mesafenin kısa olması tercih sebebi olmuştur.

6.2  Programlama Dili

 

Programlama dili olarak Microsoft Visual Basic 6.0(VB) kullanılmıştır. Basic tabanlı olmasından dolayı çoğu basic komutlarını içerir. İleri programlama dili olduğu için üst düzey uygulamalar kolaylıkla gerçekleştirilir. Günümüz programlarının sahip olduğu ara yüzler rahatlıkla tasarlanabilir. Doküman olarak internette  çok yer alan ve Türkçe portalları (vbasicmaster.com, vbturk.net …) olan birkaç programlama dilinden biridir. VB, C diline yakın olmadığı için yazılan programlar sadece Windows işletim sistemlerinde çalışır, Linux ve diğer işletim sistemlerinde çalışmaz.

 

6.3  Elektronik Devre

Step motor sürücü devresinin paketlenmiş olduğu ULN2003 entegresi seçilmiştir. Motorları seçme (Enable uçlu dörtlü buffer grubu) özelliğinden ve bilgisayarın paralel portunu  bufferlarla (tampon) koruduğundan 74HCT244 entegresi tercih edilmiştir. RJ45 çekirdekleri motor data girişlerine çakılmış ve bu çekirdekler kart üzerindeki data prizlerine takılıp çıkarılabilir hale getirilmiştir.

6.4 Eklem Motorları

Robot kolun hareketinin adım şeklinde kontrol edilmesi, ucuz olması ve piyasada yaygın bulunması sebebiyle Sanyo firmasının ürettiği 1.8 (derece/adım)’lık  step motorlar kullanılmıştır.

6.5 Projede Karşılaşılan Bazı Sorunlar Ve Çözümleri

6.5.1 Yazılım

  1. a) ROBOKOL programında Otomatik Kontrol Modunu oluştururken matematiksel bir sorunla karşılaştık. Otamatik modda seçilen motorun numarası (index ), alt programa gönderiliyor. Bu veri (index) (X) paralel portun control portuna çıkış olarak gönderiliyor. Dört adet motor, dört adet control pini ile seçiliyor. Bu index programa geldiğinde çıkışa [F(X)] aşağıdaki veri gönderilmesi gerekiyordu.
X F(x)
1 5
2 6
3 0
4 12
5 2

 Tablo 6-1

 

Yani X değerlerine karşı F(X) değerleri üretmemiz gerekiyordu. Bunun için fonksiyon yazmalıydık.Bu fonksiyonu biraz çaba harcayarak bulduk.

F(X)=5+(X-1)-7/2*(X-1)*(X-2)+25/6*(X-1)*(X-2)*(X-3)                                       -65/24*(X-1) *(X-2)*(X-3)*(X-4)

  1. b) Paralel Port’a veri çıkışını sağlan komut INP ve OUT komutları. Bu komutları dll kütüphanesinin içinden API çağrıları ile çağırıyoruz. Normalde çalışması gerekirken çıkış alamadık. Uzun uğraşlar sonunda sorunun nedenini bulduk.Bu inpout32.dll dosyası Win98’de gizli dosya olmaması gerekiyor.Bu yapmak için Bilgisayarım->Görünüm-> Klasör Seçenekleri-> Görünüm-> Gizli dosyalar sekmesinde Tüm Dosyaları Göster yapmanız gerekiyor.

6.5.2 Donanım

  1. a) Step motorları eklemlerle birleştirdik.Robot kolu çalıştırdığımızda kolu yukarı aşağı hareketini sağlayan motor eklemin uçunda yer alan motorları kaldırmadı. Motorun gerilimi 5-6 Volt artırdık biraz iyileşme oldu ama yine kaldırmadı. Sonunda dengeleyici ağırlık koyduk. Bu kolun hareketini kolaylaştırdı ve hiç hareket etmeyen motor, yaklaşık 50 derecelik bir dönüş gerçekleştirdi.
  1. b) Motorların data kabloları eğer yeterince uzun ve esnek olmazsa kolun hareketini kısıtlıyor. Bu kabloların sert kablolardan olmaması gerekiyor. Bizim kullandığımız CAT5 kablosuydu (İnternet kablosu). Yeterince esnek değildi ve motorların hareketlerini biraz sınırladı.
  1. c) Kullandığımız motorlar step motor olduğu için fazla güçlü değiller. Bu motorların torku arttırılması gerekiyor. Yani dengeleyici ağırlıklarla beraber her motor bir dişli kümesiyle çalışmalı. Böylece tork 5-6 kat artabilir. Biz mekanik kısıtlamalar nedeniyle bunu gerçekleştiremedik.

6.6 Deney Sonuçları:

  1. a) Robot Kolu ROBOKOL programıyla kontrol ederken (Örneğin Bar Modu kullanırken), motorlara dönmesi için komut verdiğinizde 100 msn lik bir gecikme ile robot kolu dönmeye başlıyor.Yazılım, komut alındıktan sonra 100 msn sistemi bekletiyor ve ondan sonra paralel porta çıkış veriyor. Böyle yapmamızın nedeni sistemin ürettiği darbeler arasına süre koyarak kararlılığı artırmak. Bu sistem geri beslemesiz olduğu için bu bir zorunluluktur.
  1. b) Motorların açıları:

1.Motor:  Bu motor  zeminde yer alıyor .Görevi ise kolun kendi etrafında dönmesini sağlamak.Bu motordan bezim açı olarak beklentimiz +150 ve –150  derece olmak üzere toplam 300 derecelik dönme açı idi. Robot kolun tasarımında diğer 3 motorun data kablolarını bu motorun bulunduğu  eklem üzerinden atlattırdık. Bu kablolar nedeniyle görülen dönme açısı +90 ve –90 olmak üzere toplam 180 derece olarak gerçekleşti.

2.Motor:  Bu motor ikinci eklemi oluşturuyor.Görevi ise kolun diğer kısmını yukarı aşağı hareket ettirmek.

Beklentimiz toplam 140 derecelik bir dönme açısıydı.Motorun tork  yetersizliğinden dolayı koyduğumuz dengeleyici ağırlık sayesinde sınırlı bir dönme açısı elde edebildik.Bu açı +25 ve –25 olmak üzere toplam 50 derecelik bir dönüş.

  1. Motor: Bu motor kendinden sonraki parmak olarak tasarlanan sistemi döndürüyor.Bu motor beklentilerimizin hepsini karşıladı. +170 ve –170 derece olmak üzere toplam 340 derecelik dönme sağladı.

4.Motor :Bu motor robot kolu parmağı olarak tasarlanan çubuğu döndürüyor.Motorun üzerine sabitlenmiş diğer çubukla beraber parmağı oluşturuyorlar. Dönme açısı ise  65 derece.

  1. c) Paralel porttan çekilen akımın değerinin 12-17 mA arası olduğu saptanmıştır.

Yazar Hakkında

Anonim {arifalakara}alakaraarif@gmail.com

Yorumlar


Sen de Yorumla!