PEPICA

Robotska ruka koja sortira ping-pong loptice


Ako pažljivo pogledate sliku na desnoj strani, primjetiti ćete ova robotska ruka ima samo dva stepena slobode: lijevo- desno i gore-dolje. Hvataljka se aktivira pomoću elektromagneta i podešena je samo za hvatanje i dizanje ping-pong loptica. Usprkos jednostavne izvedbe, pomoću ovog se modela mogu izvoditi vrlo interesantni eksperimenti, i to stoga jer ima uz hvataljku smješten fotootpornik pomoću kojeg se može mjeriti svjetlost koja se reflektira od svake ping-pong loptice, pa tako možemo razlučiti bijele od sivih ili crnih ping-pong loptica. Naročito obratite pažnju kako su pmoću dioda i graničnih kontakata spojeni motori na naše robotsko sučelje!

Kako se iz slike lijepo može vidjeti, na osovinu koja pokreće ruku lijevo-desno učvršćen je zaslon u obliku leptirića koji prekida snop svijetlosti koji emitira infracrvena led-dioda, pa se na taj način može vrlo precizno kontrolirati položaj hvataljke u odnosu na svaku pojedinu ping-pong lopticu. U trenutku kada se otvori mikroprekidač koji je na lijevoj slici označen sa START, znamo da je robotska ruka u početnom položaju, pa nakon uključivanja motora treba samo brojiti impulse koji dolaze sa fotootpornika brojača, što se čini funkcijom STRIG (1). Kako ruka polako napreduje, fotootpornik za mjerenje svjetline šalje podatke o jakosti svijetla koja se reflektira od svake pojedine loptice preko funkcije STICK (0). Ako se te vrijednosti usporede sa stanjem brojača, lako je odrediti koja je loptica tamnija, a koja svjetlija. Pošto se na modelu koriste isključivo mikroprekidači sa trajno zatvorenim kontaktima, bilo je vrlo lako načiniti i sigurnosne sklopke za zaustavljanje motora u krajnjim položajima sa diodama koje ne kraju puta sprečavaju okretanje motora u neželjenom smjeru.

QBASIC program koji slijedi upravlja ovom robotskom rukom i nakon što provjeri svjetlinu svake loptice, uzima najtamniju lopticu i stavlja je na prvo mjesto u nizu.
Da bi stvar ispravno funkcionirala, žljeb sa ping-pong lopticama mora biti malo nagnut, tako da kada hvataljka izvuče koju lopticu, ostale popune njezino mjesto.Preporučamo vam da priloženi program pažljivo analizirate, jer je vrlo pregledno i strukturirano napisan, pa iz njega možete naučiti nekoliko interesantnih programskih tehnika za kontrolu kompjutorski upravljanih modela koje će vam sigurno dobro doći i kod programiranja vaših vlastitih zamisli.

(Autor konstrukcije i programa je Borko Boranić)

' PEPICA
DIM a(100)
DIM b(100)
SCREEN 11
CLS
izlaz = 888: ' ili 956
OUT izlaz, 0
SLEEP 5
vrijeme = 20
GOSUB okvir
GOSUB okvir2
GOSUB legenda0
'
'GOSUB legenda
'GOSUB radi
'END
GOSUB start
GOSUB legenda0prazno
GOSUB traga
GOSUB start
GOSUB traga1
GOSUB legenda0prazno
END
GOSUB legenda
GOSUB radi
END
'
legenda0:
LOCATE 3, 32: PRINT "P E P I C A"
LOCATE 10, 15: PRINT "Pricekaj 20 sekundi do zauzimanja pocetnog polozaja."
RETURN
'
legenda0prazno:
LOCATE 10, 15: PRINT " "
RETURN

legenda:
y = 6
LOCATE 3, 32: PRINT "P E P I C A"
LOCATE y + 4, 20: PRINT "A = desno Y = lijevo"
LOCATE y + 5, 20: PRINT "X = gore S = dolje"
LOCATE y + 6, 20: PRINT "K = hvatanje M = pu{tanje"
LOCATE y + 7, 20: PRINT "J = pali `aruljicu N = gasi `aruljicu"
LOCATE y + 8, 20: PRINT "O = pam}enje polo`aja P = izlaz iz upisa"
LOCATE y + 9, 30: PRINT "Razmaknica = stoj"
RETURN
'
okvir:
y = 7
lin$ = "": raz$ = ""
FOR i = 1 TO 78
lin$ = lin$ + CHR$(205)
raz$ = raz$ + CHR$(32)
NEXT i
up$ = CHR$(201) + lin$ + CHR$(187)
dn$ = CHR$(200) + lin$ + CHR$(188)
vt$ = CHR$(186)
LOCATE y, 1: PRINT up$
FOR i = 1 TO 10
LOCATE y + i, 1: PRINT vt$ + raz$ + vt$
NEXT i
LOCATE y + 11, 1: PRINT dn$
'LINE (0, 300)-(592, 300)
'LINE (0, 450)-(592, 450)
FOR i = 0 TO 291 STEP 72
'LINE (i, 450)-(i, 300)
CIRCLE (i + 72, 375), 35
NEXT i

RETURN

'
radi:
DO
'LOCATE 3, 10: PRINT " "
LOCATE 3, 10: PRINT USING "####"; STICK(0)
PSET (2 * n, 500 - STICK(0))
q$ = INKEY$
'q$ = INPUT$(1)
IF q$ = "A" OR q$ = "a" THEN x = 1: GOSUB ide
IF q$ = "Y" OR q$ = "y" THEN x = 2: GOSUB ide
IF q$ = "S" OR q$ = "s" THEN x = 4: GOSUB ide
IF q$ = "X" OR q$ = "x" THEN x = 8: GOSUB ide
IF q$ = "K" OR q$ = "k" THEN z = 16: GOSUB ide
IF q$ = "M" OR q$ = "m" THEN z = 0: GOSUB ide
IF q$ = "J" OR q$ = "j" THEN w = 64: GOSUB ide
IF q$ = "N" OR q$ = "n" THEN w = 0: GOSUB ide
IF q$ = " " THEN x = 0: GOSUB ide
IF q$ = CHR$(27) THEN OUT izlaz, 0: END
IF x = 2 THEN GOSUB brojinaprijed
IF x = 1 THEN GOSUB brojinatrag
IF STRIG(5) = 0 THEN n = 0
LOOP
RETURN
'
okvir2:
y = 1
lin$ = "": raz$ = ""
FOR i = 1 TO 78
lin$ = lin$ + CHR$(205)
raz$ = raz$ + CHR$(32)
NEXT i
up$ = CHR$(201) + lin$ + CHR$(187)
dn$ = CHR$(200) + lin$ + CHR$(188)
vt$ = CHR$(186)
LOCATE y, 1: PRINT up$
FOR i = 1 TO j + 3
LOCATE y + i, 1: PRINT vt$ + raz$ + vt$
NEXT i
LOCATE y + 4, 1: PRINT dn$
RETURN

'
ide:
t = TIMER
'LOCATE 4, 60: PRINT " "
'LOCATE 4, 60: PRINT USING "###"; t - t0
t0 = t
OUT izlaz, x + z + w
RETURN
'
brojinaprijed:
u = ulaz
ulaz = STRIG(1)
IF u <> ulaz THEN
n = n + 1
END IF
LOCATE 3, 60: PRINT USING "####"; n
RETURN
'
brojinatrag:
u = ulaz
ulaz = STRIG(1)
IF u <> ulaz THEN
n = n - 1
END IF
LOCATE 3, 60: PRINT USING "####"; n
RETURN
'
start:
'
t0 = TIMER
WHILE TIMER - t0 < vrijeme OR STRIG(5) <> 0
OUT izlaz, 5: ' desno i gore
WEND
'
OUT izlaz, 0
RETURN
'
traga:
OUT izlaz, 64: ' pali §aruljicu
'LOCATE 3, 10: PRINT USING "####"; STICK(0)
'PSET (2 * n + k * 72, 500 - STICK(0))
t0 = TIMER
WHILE TIMER - t0 < 2
WEND
OUT izlaz, 64 + 2: ' pali §aruljicu i ide lijevo
n = 0
k = 0
WHILE k < 4
a(k) = STICK(0): ' oźitava stanje fotootpornika za 4 polo§oaja
LOCATE 3, 5: PRINT k + 1, a(k)
WHILE n < 72
u = ulaz
ulaz = STRIG(1): ' stanje fotobrojaźa - brojanje okretaja - polo§aj
IF u <> ulaz THEN
n = n + 1
END IF
LOCATE 3, 60: PRINT USING "####"; n
WEND
k = k + 1: n = 0
LOCATE 3, 5: PRINT k + 1, a(k - 1)
WEND
a(4) = STICK(0): ' stanje fotootpornika u petom polo§aju - peta loptica
'
' ispis stanja fotootpornika - sjaj loptica - manji broj = svjetlije
sum = 0
FOR k = 0 TO 4
LOCATE 20, 8 + k * 9: PRINT a(k)
sum = sum + a(k)
NEXT k
srd = sum / 5: ' srednja vrijednost osvijetljenosti loptice
LOCATE 20, 50: PRINT sum
LOCATE 20, 59: PRINT srd
tamn = srd: ' definiranje odstupanja temnije loptice od srednje osvijetljenosti
RETURN
'
traga1: ' tra§i tamniju lopticu
FOR k = 0 TO 4
IF a(k) > tamn THEN mjesto = k
NEXT k
f = mjesto * 71: 'pozicija tamnije loptice
PAINT (72 + f, 375): ' oznaźuje tamniju od pet loptica lopticu na slici
OUT izlaz, 2: ' ide lijevo
WHILE n < f: ' broji do polo§aja tamnije loptice
u = ulaz
ulaz = STRIG(1)
IF u <> ulaz THEN
n = n + 1
END IF
LOCATE 3, 60: PRINT USING "####"; n
WEND
'
OUT izlaz, 16 + 8: ' hvatanje i gore
'
t0 = TIMER
WHILE TIMER - t0 < vrijeme
WEND
'
WHILE STRIG(5) <> 0
OUT izlaz, 1 + 16
WEND
'
OUT izlaz, 16 + 4
t0 = TIMER
WHILE TIMER - t0 < vrijeme
WEND
OUT izlaz, 0
RETURN