You are on page 1of 6

INFOTEH-JAHORINA Vol. 14, March 2015.

Jedna realizacija plotera


Ognjen Bjelica
Laboratorija za embedded sisteme
Elektrotehniki fakultet u Istonom Sarajevu
Bosna i Hercegovina
ognjen.bjelica@etf.unssa.rs.ba

SadrajU ovom radu predstavljena je jedna realizacija plotera.


Mehanika konstrukcija je u potpunosti zadrana sa starog
ureaja i iskoritena kao polazna osnova za ovu realizaciju.
Originalna elektronika je u potpunosti zamijenjena novom sa
USB HID komunikacijom. Takoe je razvijena i PC aplikacija za
upravljanje radom plotera.
Kljune
rijei-ploter;
mikrokontroler;

I.

rasterizacija;

programiranje;

Osnovne informacije o mikrokontrolerima, kao i


specifinosti izabranog mikrokontrolera e detaljnije biti
opisane u poglavlju Mikrokontroleri, dok e samo
programiranje mikrokontolera, kao jedan od vanijih dijelova
projekta, da se provlai kroz vie poglavlja. Osnovni algoritmi i
dijelovi koda e biti izloeni u poglavljima Rasterizacija i
Praktina realizacija plotera.

UVOD

U ovom radu je prikazana jedna praktina realizacija


plotera. Posebna panja e biti posveena problemima koji se
mogu javiti ili koji su se javljali pri realizaciji ovog projekta,
kao i nainu na koji se oni mogu rijeiti. Svaka realizacija
kompletnog ureaja, pa tako i ovog je relativno kompleksan
zadatak i zahtjeva poznavanje vie oblasti. Zbog lakeg
razumijevanja i praenja, ovaj problem se moe podijeliti na
sljedee zadatke-dijelove:
1.

mehanika

2.

rad i upravljanje step (koranih) motora

3.

mikrokontroleri i programiranje mikrokontrolera

4.

programiranje interfejsa raunar mikrokontroler

5.

rasterizacija

6.

programiranje Windows aplikacija

Slika 1.

Mehanika, tj. sam mehanizam pokretanja olovke, naslijeen


je iz starog plotera tako da ovom dijelu problema nee biti
posveena dodatna panja u nastavku ovog rada. Ovaj
mehanizam sastoji se od ploe za crtanje i dva step motora za
pomjeranje po x i y osi na koje je pomou sajli spojena osovina
koja nosi olovku. Mehanizam koji je koriten moe se vidjeti
na Sl. 1.
Rad i upravljanje step motora, kao i nain povezivanja
raunar (PC Personal Computer) - mikrokontrolerom zbog
ogranienog broja stranica e biti izostavljen iz ovog rada.
Ovdje samo treba napomenuti da za upravljanje step motorom
nisu koritena posebna kola. Upravljake signale generie
mikrokontroler koji je preko Darlingtonovih spojeva povezana
na motor. U ovom projektu koriten je USB - HID (eng.
Universal Serial Bus Human Interface Device) interfejs
protokol za povezivanje izabranog mikrokontolera sa PC-jem.
Vie informacija o nainu na koji su rijeeni ovi problemi
mogue je pogledati u [1].

Mehanika plotera koja je iskoritena kao polazna osnova.

Rasterizacija, odnosno proces prevoenja grafikih


primitiva (linije, krunice, elipse, ...) iz kontinualnog oblika u
diskretni, znaajan je problem sam po sebi. Kroz istorijski
razvoj raunarske grafike razvijen je vei broj algoritama koji
obavljaju ovaj posao. Vie informacija o ovoj problematici bie
iznijeto u poglavlju Rasterizacija.
Na kraju, bilo je potrebno razviti aplikaciju koja e
upravljati radom plotera. Ovaj dio se odnosi na programiranje
Windows aplikacije (u optem sluaju aplikacija ne mora biti
ograniena platformom). Vie informacija o ovom dijelu
projekta e biti iznijeto u poglavlju Praktina realizacija
plotera.
Detaljiniji opis svih dijelova, kao i naina na koji su oni
implementirani u ovoj realizaciji plotera, mogue je pronai u
[1].

- 55 -

II.

RASTERIZACIJA

Rasterizacija je, kao to je to i u uvodnom izlaganju


navedeno, proces prevoenja grafikih
kih primitiva iz
kontinualnog u diskretni oblik. Postojii veliki broj algoritama
koji rjeavaju
jeavaju probleme rasterizacije pojedinih primitiva (linije,
krunice, elipse i sl.). Neki od njih suu efikasniji od drugih, neki
imaju kao rezultat ljepu sliku, ali u principu svi rade isti
posao. [2], [3] Algoritmi koji su koriteni pri ovoj praktinoj
prakti
realizaciji plotera ne daju najbolje rezultate, niti su
najefikasniji, ali su najlaki za razumjevanje i idealni su za
shvatanje osnovnih principa.

Formule su preuzete direktno iz matematiih


matemati
tablica i stoga
ovaj algoritam nema najbolje performanse. Ovaj algoritam je
koriten u praktinoj
noj realizaciji projekta zbog toga to je, kao
to je to i u uvodnom dijelu ovog poglavlja reeno,
re
krajnje
jednostavan za razumjeti. U nastavku ovog teksta e biti
prikazani
azani jo neki algoritmi koji rjeavaju
r
isti problem samo
poreenja
enja radi i da se pokae kako se moe posti
postii optimizacija
koritenih algoritama.
2) Nagibni algoritam

A. Rasterizacija prave
1) Osnovni algoritam
Parametarski oblik jednaine
ine prave kroz dve ta
take
M1(x1,y1) i M2(x2,y2):

pri emu je

      


  
 

0  1

(1)
(2)
(3)

Slika 3.

Prava kroz dvije take


ke pojanjenje nagibnog algoritma.

Linija se matematiki
ki moe definisati i kao:



(4)

pri emu je:




Slika 2.




 


(6)



2 
1

(7)

  2  1

(8)

Prava kroz dvije take pojanjenje osnovnog algoritma.


algoritma

Prethodni izraz je jedan od osnovnih izraza u matematikoj


matemati
geometriji i u principu nije konplikovan.
plikovan. Osnovna ideja
id je da se
mijenjanjem koeficijenta
nta k od 0 do 1 sa nekim malim korakom
(u principu to manji to je bolja rezolucija,, s tim da se posle
odreene vrijednosti
dnosti ne mogu postii poboljanja)
pobolja
i
uvrtavanjem u prethodne dvije jednaine
ine mogu proraunati
prora
sve diskretne take
ke x i y koje lee na toj liniji.
Kod koji ovo implementira dat je u nastavku:
void DrawLine(int x1, int y1, int x2,
x2 int y2) {
float i = 0, korak = 0.001;
postavi_olovku_na(x1, y1);
while (i <= 1) {
pom_x = x1 + i*(x2 - x1);
pom_y = y1 + i*(y2 - y1);
postavi_olovku_na(pom_x, pom_y);
i = i + korak;
}
}

[2]

(5)

Kod koji ovo implementira dat je u nastavku:


void DrawLine(int x1, int y1, int x2, int y2) {
int Dy = y2-y1,
, Dx = x2-x1, x, y, xend;
float m = (float)Dy
)Dy / Dx, b = y1 - m*x1;
if (x1>x2) {
x = x2; y = y2;
xend = x1;
;
} else {
x = x1; y = y1;
xend = x2;
;
}
while (x <= xend) {
postavi_olovku_na(x, y);
x++;
y = m*x + b;
}
}

- 56 -

Vidimo da je ovaj algoritam veoma slian


an koritenom, s tim
da se poboljanje ogleda u tome da je eliminisana konstanta k
koja je uticala na kvalitet linije.
ije. Mana ovog algoritma je ta to i
dalje ostaju operacije sa realnim brojevima.
3) Inkrementalni algoritam
Prethodni algoritam se moe poboljati na sledei
slede nain:



(9)

1   1       


   
za

        
  


(10)
Slika 4.

  1

(11)

Kod koji ovo implementira dat je u nastavku:

slijedi da je

1 
  

(12)

[2]
Kod koji ovo implementira dat je u nastavku:
void DrawLine(int x1, int y1, int x2,
x2 int y2) {
int Dy = y2-y1, Dx = x2-x1,
, x, y, xend;
float m = (float)Dy / Dx;
if (x1>x2) {
x = x2;
y = y2;
xend = x1;
} else {
x = x1;
y = y1;
xend = x2;
}
while (x <= xend) {
postavi_olovku_na(x, y);
x++;
y += m;
}
}

Kao to je ve reeno,
eno, ovaj algoritam predstavlja
poboljanje prethodnog. Vidimo da je smanjen broj operacija
sa realnim brojevima, ali one nisu u potpunosti eliminisane.

4) Bresenham-ov algoritam
Ovaj algoritam je jedan od najboljih (ako ne i najbolji) i
najefikasnijih algoritama rasterizacije linije.
 

(13)

void DrawLine(int x1, int y1, int x2, int y2) {


int Dy = y2-y1,
, Dx = x2-x1, x, y, xend,
d = 2*Dy-Dx,
Dx, inc1 = 2*Dy,
inc2 = 2*(Dy*Dx);
if (x1>x2) {
x = x2;
y = y2;
xend = x1;
;
} else {
x = x1;
y = y1;
xend = x2;
;
}
while (x <= xend) {
postavi_olovku_na(x, y);
if (d<0)
{
d += inc1;
}
else
{
d += inc2;
y++;
}
}
}

Kao to se to iz samog algoritma moe vidjeti, sve


s
operacije se obavljaju nad cjelobrojnim
c
brojevima, a sva
mnoenja se vre sa brojem dva, to se radi efikasnijeg
izvrenja moe zamjeniti operacijom
operacij
iftovanja za jedno mjesto
ulijevo. Na primjer:
inc1=2*Dy
se moe napisati kao:

  0  "# $% & %*$ +,-*$


 ( 0  "# $% & %
%*$ +,-*$
[2]

Odluivanje
ivanje da li e linija proi
pro kroz tau P ili P.

inc1=Dy<<1
Prikaz implementacije ostalih algoritama zbog ogranienog
ograni
broja stranica, ne moe stati u ovaj rad.

- 57 -

III.

PRAKTINA REALIZACIJA PLOTERA

Nakon sagledavanja svih vanijih problema i upoznavanja


sa svim dijelovima plotera, moe se pristupiti praktinoj
prakti
realizaciji plotera. Najvaniji dio elektronike koja je zaduena
za upravljanje ploterom predstavlja mikrokontroler. Za ovu
svrhu izabran je Microchip-ov PIC18F4550
4550 mikrokontroler,
prvenstveno zbog injenicee da posjeduje USB interfejs [4].
Ovim je izbjegnuta upotreba dodatnih
tnih kola za komunikaciju.
Osnovni problem pri spajanju mikrokontrolera sa step
motorima predstavlja
stavlja razlika u zahtjevanim naponima
napajanja. Naime, mikrokontroler zahtjeva napon napajanja od
5 V, dok koriteni step motori rade
de sa 12 V. Da bi se
prevaziao ovaj problem iskoriteni su Darlington-ovi
Darlington
spojevi,
tj. ULN2803 kola koja u sebi sadre niz od 8 Darlington-ovih
Darlington
spojeva [5]. U principu, ova kola nisu idealan izbor za kontrolu
step motora, jer postoji veliki broj drajvera za upravljanje step
motorima. Razlog zato su izabrana
abrana ba ova kola je taj to
zahtjevaju runo
no kontrolisanje motora, to ih ini idealnim za
shvatanje principa upravljanja step motora.
Napajanje samog mikrokontolera je uzeto sa USB porta,
dok napajanje step motora zahtjeva transformator i 7812 kolo
(stabilizator napona) [6].
Na portove B i D mikrokontrolera spojena su dva
ULN2803 kola (po jedan na port), a njihovi izlazi su izvedeni
na konektore na koje e se povezati
vezati step motori. Glavni razlog
zato su iskoriteni ba ovi portovi je raspored njihovih pinova
na mikrokontroleru, tj.rutiranje tampane ploice
plo
je
jednostavnije. U optem sluaju
aju mogu se koristiti proizvoljni
pinovi, ne moraju ak ni biti na istom portu.
etna ema prikazana je na Sl. 5. Kao
K to se to moe
Kompletna
vidjeti, ema je poprilino
no jednostavna. Kao to je to u vie
navrata reeno,
eno, osnovna ideja prilikom realizacije bila je
napraviti sistem koji je to jednostavniji za razumjevanje i koji
je potpuno funkcionalan.. Kasnije je lako pojedine dijelove
koda optimizovati ili koristiti druga kola kad je hardver u
pitanju.
A. Program mikrokontrolera (Firmware)
Imajuii na umu princip rada step motora, kao i na
nain na
koji je step motor povezan sa PIC18F4550
4550 mikrokontolerom,
program koji upravlja ploterom je relativno jednostavan.
Najvanije funkcije koje su zaduene za interakciju step
motora i mikrokontolera su:

void pomjeri_se_lijevo()

void pomjeri_se_desno()

void pomjeri_se_dole()

void pomjeri_se_gore()

void spusti_olovku()

void podigni_olovku()

void postavi_olovku_na(int xx, int yy)

Slika 5.

ema plotera.

Funkcija pomjeri_se_lijevo() generie sekvencu signala na


odgovarajuim
im pinovima mikrokontrolera koja kao rezultat
pokreee motor plotera (koji je zaduen za x-osu),
x
a koji
pomjera olovku u lijevu stranu za jedan korak. Prije nego to
izvri pomjeranje olovke, provjerava se da li je ona
o dola do
kraja papira (tj. da li je x koordinata vea
ve od 1). Ako je uslov
ispunjen (olovka nije dola do kraja papira), tada se generie
ranije pomenuta sekvenca i aurira se novo stanje koordinata
(vrednost x koordinate se smanji za jedan).
Ostale funkcije
cije implementirane su na slian
sli
nain.

- 58 -

B. Windows aplikacija koja upravlja radom plotera

Slika 6.

Razvijena aplikacija - rad sa DXF fajlovima.

S obzirom da PC raspolae znatno veim


ve
resursima, on
omoguava
ava i realizaciju sloenijih zadataka. Sam proces
komunikacije sa PIC18F4550 mikrokontrolerom, zahvaljujui
zahvaljuju
HID protokolu, dosta je jednostavan. Meutim,
utim, da bi program
dobro izgledao, kao i da bi korisnika zatitio
zatit od moguih
greaka, realizovana aplikacija je kompleksnija nego to je to
neophodno.
Jedan od veih
ih problema pri pisanju programa za PC bio je
problem itanja i DXF-aa (Drawing Exchange Format). Da bi
svoj crte, zajedno sa svim svojim podeavanjima (koritena
(ko
metrika, uglovi,...) mogli rekonstruisati, AutoDesk-ovi
Auto
strunjaci razvili su pomenuti format [7].. Koliko je format
komplikovan govori informacija da prazan crte sadri 11490
linija koda, a broj razlika izmeuu praznog crtea i crtea koji
sadri samo jednu liniju iznosi 138. Sreom,
Sre
DXF koristi
tekstualne fajlove, pa je bilo moguee analizirati njihov sadraj.
Korisniki
ki interfejs razvijene aplikacija prikazan je na Sl 6.,
7. i 8.

Slika 7.

Razvijena aplikacija Vizuelni prikaz sadraja DXF fajla.

Slika 8.

Razvijena aplikacija runo


ru
zadavanje komandi ploteru.

Kao to se to sa prethodnih
nih slika moe vidjeti,
vidje korisniki
interfejs je jednostavan,
stavan, ali omoguava
omogu
potpunu kontrolu nad
ploterom. Samo crtanje je ostavljeno
ostavlje
kompleksnim i
popularnim programima, kao to su to AutoCAD, CorelDRAW
i sl. Na Sl. 9 prikazano je nekoliko primitiva nactanih iz runog
ru
reima. Unutar ovog reima, kao to se to vidi na Sl. 8, mogue
mogu
je izabrati tip primitive koja eli da se nacrta i zadati njene
parametre, dok se sa lijeve strane prikazuje znaenje
zna
pojedinih
polja na formi. Tako npr. za Bezierovu krivu potrebno je
popuniti polja X1, Y1, X2, Y2, X3, Y3i X4, Y4. Ostala polja
(r1 i r2 u ovom sluaju)
aju) su onemoguena.
onemogu

- 59 -

Mogue je ak, relativno jednostavno, poboljati i


rezoluciju plotera.:

Slika 9.

Primjer iscrtanih primitiva sa realizovanim hardverom i softverom.

IV.

Mjesta optimizaciji uvjek ima i samo je pitanje koliko


panje vrijedi posvetiti ovom problemu. Dvije optimizacije
koje su dosta jednostavne i ne zahtjevaju nikakvu izmjenu
hardvera su:

Bolja rezolucija moe se postii ako se izmjene


funkcije pomjeri_se_lijevo(), pomjeri_se_desno(),
pomjeri_se_dole() i pomjeri_se_gore(). Trenutno
su funkcije realizovane tako da se pomjere za par
koraka odjednom, radi jednostavnijeg izvoenja.
Nain na koji se ovo moe izvesti je uvoenjem
niza koji e pamtiti trenutni poloaj i njegove
susjedne poloaje (stanja pinova redoslijed
paljenja namotaja step motora).

Takoe, mogue je iskoristiti neko gotovo kolo


koje omoguava upravljanje step motorom
mikrokoracima. Ovaj nain zahtjeva malu izmjenu
hardvera i prethodno pomenutih funkcija. Sve
ostalo ostaje isto. Na ovaj nain rezolucija se moe
poveati i par stotina puta.

LITERATURA

ZAKLJUAK

U ovom radu izloena je jedna praktina realizacija plotera


i, kao to je to ranije reeno, cilj ovog projekta nije bio
napraviti najoptimalnije mogue reenje. Osnovni cilj bio je
upoznati se sa osnovama svih koritenih tehnologija.

Zamijeniti koritene algoritme rasterizacije


efikasnijim algoritmima i na to je skrenuta panja
ranije u radu (poglavlje Rasterizacija). Moglo bi se
rei da je ova optimizacija poprilino oigledna.
Druga stvar koja bi se mogla optimizovati jeste
Windows aplikacija. Ovaj problem i nije toliko
oigledan, ali sam redoslijed iscrtavanja grafikih
objekata je veoma vaan za performanse sistema plotera. Treba napisati algoritam za sortiranje
grafikih primitiva tako da se zavretak jedne
primitive nae to blie poetku sledee. Drugim
rijeima, treba izbjei duga premjetanja olovke
izmeu crtanja.

[1] Ognjen Bjelica, PRAKTINA REALIZACIJA PLOTERA,


Zavrni rad, Elektrotehniki fakultet u Istonom Sarajevu, 2010.
[2] Slobodanka orevi-Kajan, Skripte sa predavanja iz
predmeta Raunarska grafika.
[3] James D. Foley, Andries Van Dam, Steven K. Feiner, John F.
Hughes, Computer Graphics: Principles and Practice in C,
(Second Edition). 1995.
[4] Microchip, PIC18F2455/2550/4455/4550 Data Sheet.
[5] Texas Instruments, ULN2803A Darlington Transistor Arrays.
[6] Texas Instruments, LM78XX Series Voltage Regulators.
[7] AutoCAD, DXF Reference. 2007.

ABSTRACT

This paper presents one realisation of plotter. All


mechanical parts are salvaged from old device which provided
starting point for this realization. Original electronics was
completely replaced with new one with USB HID
communication. For purpose of controlling plotter, PC
application was developed.

- 60 -

ONE REALIZATION OF PLOTTER


Ognjen Bjelica

You might also like