|
|
Bu makalenin farkl� dillerde bulundu�u adresler: English Castellano Deutsch Francais Nederlands Portugues Russian Turkce Arabic |
taraf�ndan Katja and Guido Socher Yazar hakk�nda: Katja LinuxFocus'un Alman edit�r�d�r. Tux, film, fotograf��l��� ve denizi sever. Ana sayfas�na buradan ula�abiliriz. Guido uzun zamandan beri bir Linux hayran� ve o Linux'u d�r�st ve a��k insanlar taraf�ndan tasarland��� i�in seviyor. ��te bu ona a��k kodlu dememizin bir nedeni... Guido'nun sanaldoku sayfas�: linuxfocus.org/~guido ��erik: |
�zet:
Bu makalede bir linux pc nin paralel port arabirimini kullanarak alt� bacakl� bir robotu yapaca��z ve y�netimini sa�layaca��z.
Robotlar herzaman bizi heyecanland�rm��t�r.Bu makalede Stiquito adl� ufak b�ce�e benzeyen bir robot yapaca��z.Stiquito biraz �zel bir robottur,��nk� onun herhangi bir motoru olmamas�na ra�men ninitol telli ayaklar� sayesinde y�r�yebilir ve bunu bir b�cek gibi sessiz bir �ekilde yapabilir. Ama bu robotu yapt���m�zda g�rd�k ki,yeterli s�rt�nme olmay��� nedeniyle �ok yava� y�r�yebiliyordu.�ans eseri, elimizdeki robot kitab� di�er robot tasar�mlar�n�n a��klamalar�n� da i�eriyordu ve burada anlatt���m�z robot yap�m� hakk�nda bize ilham verdi.
Robotu yapmak i�in gerekli olan par�alar:
�ekil 1: Denetim Kart� |
�ekil 2: Kargaburun tarz� bir alet |
G�vde i�in devre kart�n�n 3 par�as�na sahip olmal�y�z.:Bir tane 6*6 delikli
ve 2 tane 6*7 delikli yani 2mm �apl� 4 cm boyundaki pirin� t�ple birle�tirilmi�
3.7 cm m�zik teli
�ekil 4: Omurga ve G�� Kayna�� Yolu
Pirin� t�p� 8,17.5 and 8 mm halinde �ekil 4 deki gibi kesiniz. T�p�n �zerine
ufak �entikler atarak makas yard�m�yla k�r�lmas�n� sa�layabiliriz.Ortadaki t�p�n
6*6 deliklik kontrol kart�ndan biraz daha uzun olmas� �nemlidir.M�zik teli 3.7
cm uzunlu�unda kesin.Ortadaki t�p sa� ve soldaki t�pler mizk teline lehimlendi�inde
rahat�a d�nebilmelidir.
�ekil 5: Kartlar� omurgaya lehimleyin
Ortadaki t�p de �imdi 6*6 delikli denetim kart�na lehimlenmi� olmal�, yaln�z
rotasyon hareketi yapabilmesi sa�lanmal�d�r.Di�er iki t�p de di�er iki kontrol
kart�na lehimlenmi� olmal�d�r.
�imdi 2*7 delikli bir denetim kart�n� ele alal�m. Bu t�p ortadaki pirin� t�p�n kenar�nda dik bir �ekilde durmal�d�r.Denetim kart�
kesici bir aletle �entiklenmi� olmal�d�r ve bunun ortadaki pirin� t�pe
lehimlenmi� olmas� gerekmektedir.Bkz �ekil 6:
�ekil 6: Ufak Devre Kart�n� Eklemek
Pirin� t�p� 1 mm kal�nl���nda z�mparalay�n ve 4 mm uzunlu�unda t�p par�alar�
kesin.T�p� mutfak b��a�� yard�m�yla b�k�n.Bunun i�in 16 tane tutturucuya(crimp)
gereksinim var.
Bu birden �ok tutturma i�lemine ba�lamadan evvel bir par�a nitinolle test etmek
gerekir.Nitinol telin bir ucunu �ok ince pirin� t�p�n(1mm d�� �apl�) i�ine koyun
ve sonra pirin� t�p� kargaburun tarz� aletle ezeriz.��te bu olaya tutturma denir.Yaln�z
burada dikkat etmeniz gereken nokta kargaburunun kalitelisini almakt�r ��nk�
pirin� t�pleri s�k��t�rmak i�in gerekli kuvvet �ok b�y�kt�r.Ayr�ca iyibir elektrik
ba�lant�s� sa�lamak i�in nitinol telin �zerini 600 gridlik z�mparayla z�mparalamak
gerekir.
�imdi ayaklar� hareket ettirmek i�in nitinol teli ba�layaca��z.
�ekil 7: "k�pr�"
E�er bir k�pr� yapmak istiyorsan�z nitinol teli boydan boya uzatmal�y�z. Bir
taraftan ba�layal�m.NItinol teli en son delikten ge�iririz ve bir d���m atar�z(iyi
bir ba�lant� sa�layabilmek i�in).Bu d���m�n �zerine bir tutturucu koyal�m ve
bu tutturucuyla �yle s�k� ba�layal�m ki nitinol tel ikinci bir deli�i tutabilsin.En
a�a��da da nitinol tele bir d���m atal�m ve �zerine bir tuttucu daha ekleyelim
ve bu tutturucuyu da s�k�ca ba�layal�m.Bkz �ekil 7
Devam etmeden �nce nas�l �al��t���n�
bir deneyelim. Bunun i�in; 1.5 V AA mignom bataryas� kullan�n ve bunu
nitinol tellerin birisine ba�lay�n. Tel ba�lant� kurdu�unda g�vdenin orta k�sm�
10 ile 20 derecede d�nebilmelidir.Yaln�z bataryay� 1 sn. den fazla tutmamaya
�al���n yoksa ntinol teli yakabilirsiniz.
�ekil 8: teli b�k�n
10 cm uzunlu�unda m�zik teli keseriz.Bu tellerin ba��nda ve sonunda 1.5 cm lik
k�vr�mlar olu�tururuz ve bu 3 teli birbirlerine paralel olarak robotun g�vdesine
lehimleriz. Bkz. �ekil 8
�ekil 9, 10: robot �zerindeki bacaklar
�imdi nitinol telini 6 aya�a ba�layaca��z
�ekil 11: Devindiricilerin eklenmesi
Nitinol telini tutturucunun i�inden ge�irip denetim kart�ndaki deli�e sokar�z bu
arada nitinol telinin m�zik teline uzakl��� 3 delik kadar olmal�d�r.Daha sonra
tutturucuyu m�zik teliinin �zerinden diz k�vr�m� olu�ana kadar �ekeriz.Bkz.�ekil 11.
Nitinol telini bunun i�inden ge�iririz. �imdi i�in en zor k�sm�na geldik.Robotu
s�k�ca tutun ve sabitleyin daha sonra ayaklar�n� bak�r telle ba�lay�n.M�zik
teli nitinole kar�� bir kuvvet olu�turacakt�r. Bunun i�lemesi i�in nitinol�n
gev�ek olmamas� laz�m.M�zik teli bir kontrol kart� deli�i boyunca nitinole do�ru
�ekilmeli ve sonra tutturucu baca�a lehimlenmelidir.
�ekil12: Nitinol Tel ile M�zik Teli Ayn� Seviyede
M�zik telinin ve nitnol�n ayn� seviyede oldu�una dikkat edin.Ayaklar nitinol
kas�l�rken yukar� ve a�a�� hareket etmemelidirler.Bir bacak sadece arkaya do�ru
hareket etmelidir.
Bu i�lemi di�er be� bacak i�in de uygulay�n.Bacaklar ve robotun ortas�nda bulunan pirin� t�pl� m�zik teli h�zl� bir yolu olu�turular.Bu y�zden m�zik teli, bacaklar ve pirin� t�p aras�nda iyi bir ba�lant� olu�acakt�r.Orta g�vde k�sm� di�er par�alardan ba��ms�z olmas�na ra�men(��nk� d�nebiliyor) orada g�zel bir ba�lant� olu�maz.Bu ba�lant�y� geli�tirebilmek i�in 0.1 mm lik verniklenmi� bak�r telden 3 cm al�r�z ve onu yedek bak�r t�b�n �evresine bobin elde edebilmek i�in sarar�z. Bak�r teli d��ar� ��kar�r daha sonra da ortadaki bobini i�teki ayak �iftine lehimleriz.B�ylece bobinin �ekli maksimum esneklilipe sahip olur. Robot haz�r oldu�u zaman 0.5 m uzunlu�unda verniklenmi� bak�r teli kontrol kart� �zerindeki tutturuculara lehimleriz.Daha sonra g�vdeyle tutturucular� kontrolkart�na lehimleriz. 9 tane tele gereksinimimiz vard�r: Bunlar�n 6 tanesi bacaklar i�in 2 tanesi yukar� a�a�� g�rev yapmak i�in 1 tanesi de g�� kayna�� ba�lant�s� i�in. Ayr�ca par�alar�n son k�s�mlar�na ufak konnekt�rleri de lehimleyebiliriz ki b�ylece konnekt�rleri s�r�c� devresi �zerindeki soketlere ba�layabiliriz
Robotumuz 3 bacakl� y�r�meye uygun �ekilde tasarlanm��t�r. 3 bacakl� y�r�y��
demek 3 baca��n yerde olmas�(2 tanesi bir tarafta 1 tanesi di�er tarafta) ve
3 baca��n da havada olmas� demektir. Robot y�r�rken yerdeki 3 bacakla havadaki
3 bacak ters y�nde hareket ederler
�ekil 14: Y�r�y��
Bu devre kart� bize robotun devinimdiricilerini pc yard�m�yla kullanmam�za izin verir.Bilgisayar program�m�z� geli�tirdi�imizde testi ledlerle yapar�z ve sadece robotun kontrol tellerini kart �zerindeki sokete sokar ve ledlerin do�ru �al���p �al��mad���na bakar�z.Bu program� bu deneyi yaparken kullanabilirsiniz. Robotumuz olduk�a a�t�r. Nitinol�n kas�labilmesi i�in 200 - 25- mA ak�m ge�irilmesi gerekmektedir.3 cm uzunlu�undaki bacaktaki nitinol teller 7 Ohm kadar diren� olu�tururlar. Herzaman yaz�l�m� ilk olarak �al��t�r�n.(S�r�c� devresine g�� vermeden �nce).��nk� b�t�n veri pinleri yaz�l�m taraf�ndan nitnol tele zarar vermemek amac�yla kapat�lm��t�r.Bilgisayar� BIOS'u paralel port veri pinlerine rasgele de�i�ik de�erler verir. Bu de�erlerden baz�lar� a��k durumda olabilir.Yani tele 1 sn den fazla uyguland���nda telin zarar g�rmesine neden olabilir.Nitinol�n so�umas� i�in gerekli olan s�re �s�nmas� i�in gerekli olan s�renin 1.5 kat�d�r. Bkz. Devre Diagram� (Hemen a�a��da)
Devre Diagram� :
�ekil 14: Devre Diagram�
�ekil 14'deki devre diyagram�ndan da g�r�ld��� gibi elektronik olarak sabitlenmi�
bir g�� deste�i kullanaca��z.Bu da bize kal�c� bir g�� sa�layacak b�ylece paralel
portu korumu� olaca��z.D�� elektrik beslemesi yapmak istersek herhangi bir 6-24
V aras� DC g�� kayna�� kullanabiliriz.7805 standart voltaj reg�lat�r�d�r.Burada
dikkat etmemiz gereken tek �ey iki tane kapasit�r�n 7805 voltaj reg�lat�r�ne
�ok yak�n konulmu� olmal�d�r.Aksi takdirde 7805 �ipimiz zarar g�recektir.G�ncel
s�r�c� 8 kere yap�lmal�d�r.BIr tanesi bacak i�in iki tanesi robotun sa�a sola
devinimi i�in kullan�lmal�d�r.Biz k�� bir NPN Darlington tranzist�r� kullanaca��z.��nk�
bizim robotumuzun �ok miktarda ak�ma gereksinimi var.BC875 veya BC618 500mA civar�nda
�al���r. Giri�teki 47K a��k devrenin kapal� olmas�n� sa�lar.Paralel porttaki
voltaj seviyesi a��k durumda 4 Volttan fazla, kapal� durumda da 1 voltan azd�r.
Tranzist�r devreyi a�ma kapama g�revini yapar.1 Ohmluk diren�ler ak�m� s�n�rlarlar
ve robotun ayaklar�n� koururlar ve tabii ki tranzist�rleri de. LED ler de a��k
m� kapal� m� oldu�unu g�sterir.�ekil 15 de devrenin resimlerini g�rebilirsiniz.
K�rm�z� LED leri(robotun devindiricilerine paralel olan) g�rmek zordur ��nk�
bizim kulland���m�z LED'ler saydam k�rm�z�d�r.Konstantan tel bobininden
15 Ohmluk diren�ler yapt�k ,ama bu telden yapmam�z�n nedeni bu telden �ok bulunmas�d�r.
2 W haz�r diren� almak daha uygundur.
Paralel port bir PC den ��k�� portu olarak �al��mak ve yaz�c� takmak i�in tasarlanm��t�r. Baz� paralel portlar hem giri� hem de ��k�� portu olarak da �al��abilirler.Ama biz burada sadece ��k�� portunu kullanaca��z. Daha sonraki yaz�da sens�rleri robota ba�layaca��z ve giri� hatlar�n� kullanaca��z.Paralel port i�in 25 pin bulunmas�na ra�men biz 9 tane kullanaca��z.Bu hatlardan 8 tanesi veri ��k��� i�in kullana�lacakt�r. Pin ��k��lar� a�a��da g�sterilmi�tir.
25 PIN D-SUB FEMALE at the PC. Pin Name Dir Description 1 STROBE [-->] Strobe 2 D0 [-->] Data Bit 0 3 D1 [-->] Data Bit 1 4 D2 [-->] Data Bit 2 5 D3 [-->] Data Bit 3 6 D4 [-->] Data Bit 4 7 D5 [-->] Data Bit 5 8 D6 [-->] Data Bit 6 9 D7 [-->] Data Bit 7 10 ACK [<--] Acknowledge 11 BUSY [<--] Busy 12 PE [<--] Paper End 13 SEL [<--] Select 14 AUTOFD [-->] Autofeed 15 ERROR [<--] Error 16 INIT [-->] Initialize 17 SELIN [-->] Select In 18 GND [---] Signal Ground 19 GND [---] Signal Ground 20 GND [---] Signal Ground 21 GND [---] Signal Ground 22 GND [---] Signal Ground 23 GND [---] Signal Ground 24 GND [---] Signal Ground 25 GND [---] Signal GroundS�r�c� devresini 18.pine ve veri pinlerine(2-9) ba�lay�n.
==== pprobi.c ===== /* vim: set sw=8 ts=8 si : */ /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License. * See http://www.gnu.org/copyleft/ for details. * * Written by Katja Socher <katja@linuxfocus.org> * and Guido Socher <guido@linuxfocus.org> * */ #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <stdarg.h> #include <string.h> #include <math.h> #include <signal.h> #include "robi.h" /* ----------- */ static int opt_r=0; static int fd=0; /* ----------- */ /* ----------- */ void help() { printf("pprobi -- control software for a walking robot\n\ USAGE: pprobi [-h] [parport-device]\n\ \n\ OPTIONS:\n\ -h this help\n\ -r reset the parallel port data pins (all zero) and exit\n\ \n\ The default device is /dev/parport0 \n\ "); #ifdef VERINFO puts(VERINFO); #endif exit(0); } /* Signal handler: all off then exit */ void offandexit(int code) { robi_setdata(fd,0); set_terminal(0); exit(0); } /* ----------- */ int main(int argc, char **argv) { int state,bpat,alternate; char *dev; /* The following things are used for getopt: */ int ch; extern char *optarg; extern int optind; extern int opterr; opterr = 0; while ((ch = (char)getopt(argc, argv, "hr")) != -1) { switch (ch) { case 'h': help(); /*no break, help does not return */ case 'r': opt_r=1; break; case '?': fprintf(stderr, "serialtemp ERROR: No such option. -h for help.\n"); exit(1); /*no default action for case */ } } if (argc-optind < 1){ /* less than one argument */ dev="/dev/parport0"; }else{ /* the user has provided one argument */ dev=argv[optind]; } fd=robi_claim(dev); /* robi_claim has its own error checking */ /* catch signals INT and TERM and switch off all data lines before * terminating */ signal(SIGINT, offandexit); signal(SIGTERM, offandexit); /* initialize parpprt data lines to zero: */ robi_setdata(fd,0); set_terminal(1); /* set_terminal has its own error handling */ state=0; alternate=0; if (opt_r){ offandexit(1); } while(1){ ch=getchoice(); if (ch!=0) state=ch; if (ch == ' '){ printf("Stop\n"); robi_setdata(fd,0); usleep(500*1000); } if (ch == 'q'|| ch == 'x'){ printf("Quit\n"); break; } if (state=='l'){ /*right */ printf("walking right\n"); walkright(fd); } if (state=='h'){ /*left */ printf("walking left\n"); walkleft(fd); } if (state=='j'){ printf("walking back\n"); walkback(fd); } if (state=='k'){ if (alternate){ printf("walking straight on a\n"); walkstraight_a(fd); }else{ printf("walking straight on b\n"); walkstraight_b(fd); } alternate=(alternate +1) %2; } } /* we get here if q was typed */ set_terminal(0); return (0); } ==== robi.c ===== /* vim: set sw=8 ts=8 si : */ /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License. * See http://www.gnu.org/copyleft/ for details. * * Written by Katja Socher <katja@linuxfocus.org> * and Guido Socher <guido@linuxfocus.org> * */ #include <stdio.h> #include <stdlib.h> #include <stdarg.h> #include <sys/types.h> #include <sys/time.h> #include <fcntl.h> #include <unistd.h> #include <signal.h> #include <linux/ppdev.h> #include <sys/ioctl.h> #include <termios.h> #include "robi.h" /* like printf but exit the program */ static int die(const char *fmt, ...) { va_list ap; va_start(ap, fmt); vprintf(fmt, ap); va_end(ap); exit(1); } /* get one character from stdin * Returns non zero if char was read otherwise zero * The arrow keys are mapped as follows: * <- = h * -> = l * v = j * ^ = k */ int getchoice() { int c; char s[20]; if (fgets(s,20,stdin)){ c=s[0]; switch (c){ case 0x1b: /* ESC */ if (s[1] == 0x5b){ /* arrow keys are pressed */ switch (s[2]){ case 0x41: /*up arrow*/ c='k'; break; case 0x42: /*down arrow*/ c='j'; break; case 0x44: /*l arrow*/ c='h'; break; case 0x43: /*r arrow*/ c='l'; break; default: c=0; } }else{ c=0; } break; case ' ': case 'h': case 'j': case 'k': case 'l': case 'q': case 'x': break; default: c=0; } return(c); } return(0); } /* Set the Terminal to Non Canonical mode with echo off * or reset the terminal. * USAGE: set_terminal(1) for canonical */ int set_terminal(int canonical) { static struct termios originalsettings; struct termios newsettings; static int origok=0; /* set if originalsettings valid */ if (canonical){ /* save original settings and set canonical mode*/ tcgetattr(fileno(stdin),&originalsettings); newsettings=originalsettings; newsettings.c_lflag &= ~ICANON; newsettings.c_lflag &= ~ECHO; newsettings.c_cc[VMIN]=0; /* do not block */ newsettings.c_cc[VTIME]=1; /* 100 ms */ if (tcsetattr(fileno(stdin),TCSANOW,&newsettings) !=0){ die("ERROR: could not set terminal attributes on stdin\n"); } origok=1; }else{ if (origok){ /* restore settings */ tcsetattr(fileno(stdin),TCSANOW,&originalsettings); } } return(0); } /* open /dev/parportX device and claim it. * USAGE: fd=robi_claim("/dev/parport0"); * The return value is a file descriptor used by other * functions such as robi_setdata */ int robi_claim(char *dev) { int fd,i; fd = open(dev, O_RDWR ); if (fd < 0) { die("ERROR: cannot open device %s\n",dev); } i=0; /* we need exclusive rights as we do not set the control lines*/ /*ioctl(fd, PPEXCL, &i)&& die("ERROR: request for exclusive rights failed\n");*/ ioctl(fd, PPCLAIM, &i)&&die("ERROR: could not claim parport\n"); return(fd); } /* Walk left */ int walkleft(int fd) { /* first B legs to ground */ robi_setdata(fd,LEGBD); usleep(400 *1000); /* all A legs 1 step */ robi_setdata(fd, LEGB1 | LEGB3 ); usleep(1100 *1000); /* first A legs to ground, cool B*/ robi_setdata(fd,LEGAD); usleep(400 *1000); robi_setdata(fd,0); usleep(1000 *1000); return(0); } /* Walk right */ int walkright(int fd) { /* first A legs to ground */ robi_setdata(fd,LEGAD); usleep(500 *1000); robi_setdata(fd, LEGA3 | LEGAD); usleep(300 *1000); /* all A legs 1 step */ robi_setdata(fd, LEGA1 | LEGA3 ); usleep(1100 *1000); /* first B legs to ground, cool A*/ robi_setdata(fd,LEGBD); usleep(400 *1000); robi_setdata(fd,0); usleep(1000 *1000); return(0); } /* Walk with all 3 legs 1 step forward */ int walkstraight_a(int fd) { /* first A legs to ground */ robi_setdata(fd,LEGAD); usleep(800 *1000); /* all A legs 1 step */ robi_setdata(fd, LEGA1 | LEGA2 | LEGA3 ); usleep(1000 *1000); /* first B legs to ground, cool A*/ robi_setdata(fd,LEGBD); usleep(500 *1000); robi_setdata(fd,0); usleep(1200 *1000); return(0); } /* Walk with all 3 legs 1 step forward */ int walkstraight_b(int fd) { /* first B legs to ground */ robi_setdata(fd,LEGBD); usleep(400 *1000); /* all B legs 1 step */ robi_setdata(fd,LEGB1 | LEGB2 | LEGB3); usleep(1000 *1000); /* A down and cool */ robi_setdata(fd,LEGAD); usleep(800 *1000); robi_setdata(fd,0); usleep(1200 *1000); return(0); } /* Walk with all 6 legs 1 step back */ int walkback(int fd) { /* first A legs to ground */ robi_setdata(fd,LEGAD); usleep(800 *1000); /* all B legs 1 step in the air*/ robi_setdata(fd, LEGB1 | LEGB2 | LEGB3 ); usleep(500 *1000); /* first B legs to ground, cool A*/ robi_setdata(fd,LEGBD); usleep(500 *1000); /* all A legs 1 step in the air*/ robi_setdata(fd,LEGA1 | LEGA2 | LEGA3); usleep(500 *1000); /* A down and cool */ robi_setdata(fd,LEGAD); usleep(800 *1000); robi_setdata(fd,0); usleep(1000 *1000); return(0); } /*---------*/ /* Write a bit pattern to the data lines * USAGE: rc=robi_setdata(fd,bitpat); * The return value is 0 on success. */ int robi_setdata(int fd,unsigned char bitpat) { int rc; rc=ioctl(fd, PPWDATA, &bitpat); return(rc); } ==== robi.h ===== /* vim: set sw=8 ts=8 si et: */ #ifndef H_ROBI #define H_ROBI 1 #define VERINFO "version 0.2" /* the first thing you need to do: */ extern int robi_claim(char *dev); /* write a bit pattern to the data lines of the parallel port: */ extern int robi_setdata(int fd,unsigned char bitpat); /* input and terminal functions */ extern int set_terminal(int canonical); extern int getchoice(); extern int walkstraight_a(int fd); extern int walkstraight_b(int fd); extern int walkback(int fd); extern int walkleft(int fd); extern int walkright(int fd); /* data pins to legs: * A1------=------B1 * = * = * B2------=------A2 * = * = * A3------=------B3 * * * Pin to set A-legs to ground= AD * Pin to set B-legs to ground= BD * * parallel port leg name * ------------------------- * data 0 A1 * data 1 A2 * data 2 A3 * data 3 AD * data 4 B1 * data 5 B2 * data 6 B3 * data 7 BD */ #define LEGA1 1 #define LEGA2 2 #define LEGA3 4 #define LEGAD 8 #define LEGB1 16 #define LEGB2 32 #define LEGB3 64 #define LEGBD 128 #endif
Yaz�l�m�m�z 2.4.x �ekirdektenden kalma ppdev programlama aray�z�n� kullan�r.Bu aray�z paralel port ayg�t s�r�c�leri yazmak i�in uygun ve temiz bir aray�zd�r.Eski �ekirdeklere(2.3.x veya 2.4.x den daha d���k s�r�mlerde) yeni bir �ekirdek mod�l� yazmak zorunda kal�r�z veya daha �irkin bir y�ntem kullanabiliriz.Bu y�ntem sadece root'un program� kulanabilmesine izin vermektir. ppdev aray�z� /dev/parport0 ayg�t dosyas�n� kullan�r.Bu dosyan�n kullan�c� izinlerini ayarlayabilmek i�in paralel port aray�z�n� kullanan kullan�c�ya ba�vurun.
ppdev'i bir mod�l olarak �ekirde�in i�ine derlemek istersek PARPORT mod�l�n� PPDEV ayg�t�yla beraberce derlemelyiz.Bu a�a��daki gibi g�z�kecektir.
# # Parallel port support # CONFIG_PARPORT=m CONFIG_PARPORT_PC=m CONFIG_PARPORT_PC_FIFO=y # CONFIG_PARPORT_PC_SUPERIO is not set # CONFIG_PARPORT_AMIGA is not set # CONFIG_PARPORT_MFC3 is not set # CONFIG_PARPORT_ATARI is not set # CONFIG_PARPORT_SUNBPP is not set CONFIG_PARPORT_OTHER=y CONFIG_PARPORT_1284=y # # Character devices # CONFIG_PPDEV=m #
Program ilk olarak paralel portu ioctl komutu olan PPCLAIN ile ba�lat�r.Terminali kuralsal olmayan moda ge�irir(non canonical). Bu do�rudan klavyeden kullan�c�n�n her giri� sonunda enter'a basmas�n� engelleyerek kullan�c�n�n giri� yapmas�n� sa�lar.Daha sonra program herhangi bir kullan�c� giri�i olup olmad���na bakan ve robotu komuta g�re y�neten bir d�ng� i�ine girer.E�er herhangi bir emir vermezseniz program son komutu uygulamaya devam edecektir( y�r�meye devam etmek gibi). ioctl (fd, PPWDATA, &bitpat); komutu veri hatlar�n�n verilmi� �rne�e g�re ayarlanmas� i�in kullan�l�r.
Robotun pinlerinin �ekildeki gibi s�r�c� devresinin ��k�� hatlar�na ba�lanmas� gereklidir.
Bacaklar: A1------=------B1 = = B2------=------A2 = = A3------=------B3 Pin to set A-legs to ground= AD Pin to set B-legs to ground= BD S�r�c� kart�n�n ��k�� �izgilerinin uyumu : data 0 A1 data 1 A2 data 2 A3 data 3 AD data 4 B1 data 5 B2 data 6 B3 data 7 BDData 0 s�r�c� devresini paralel portun 2.pinine ba�layan ��k��t�r. (D0).
Robotu yaparken zevk alaca��n�z� umuyoruz. Hadi bize kendi robotunuz hakk�nda bilgi verin; �zellikle sizinki bizimkinden farkl� tasarlanm��sa.
|
G�rsely�re sayfalar�n�n bak�m�, LinuxFocus Edit�rleri taraf�ndan yap�lmaktad�r
© Katja and Guido Socher, FDL LinuxFocus.org Buray� klikleyerek hatalar� rapor edebilir ya da yorumlar�n�z� LinuxFocus'a g�nderebilirsiniz |
�eviri bilgisi:
|
2001-08-22, generated by lfparser version 2.17