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. |
(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