Sunteți pe pagina 1din 10

Robotics with the Boe-Bot Ch.2 1. Servomotorul standard are un mecanism de feedback conectat la elice.

Dupa ce este citita pulsatia, pozitia actuala este comparata cu cea initiala, iar elicea se va roti pana cand cele doua valori coincid. Servomotorul are un cuplu mare cand este pozitionat. Servomotorul cu rotatie continua are un mecanism de feedback care este ajustat la un puls de centru (750 or 1.5mS) pentru a opri servomotorul. Pulsuri cu valori mai mari sau mai mici ii permit sa se roteasca liber cu viteze diferite in ambele directii. 2. Deoarece serovmotoarele nu sunt pre-ajustate din fabrica, acestea se ajusteaza cu ajutorul unei surubelnite pentru a sta nemiscate. Acest lucru se numete centrarea servo. Dupa ajustare se va testa servomotorul pt a ne asigura ca ele functioneaza intr-un mod corespunzator. 3. Variabilele sunt folosite pt a stoca valori. Inainte de a putea utilize o variabila in PBASIC trebe sa ii dam un nume sis a specificam dimensiunea sa. Acest lucru se num declararea unei variabile. Tipuri de variabile: Bit(0-1), Nib(0-15), Byte(0-255), Word(0-65535 sau 32768 la +32767) 4. La un puls de 1.5 ms se foloseste comanda Pulseout 15, 750 pt rotire in sensul acelor de ceas. La un puls de 1.3 se foloseste comanda Pulseout 1.5 650. 5.

P1. DEBUG "Program Running!"

counter VAR Word FOR counter = 1 TO 120 ' Loop for three seconds PULSOUT 13, 850 ' P13 servo counterclockwise PULSOUT 12, 850 ' P12 servo counterclockwise PAUSE 20 NEXT FOR counter = 1 TO 124 ' Loop for three seconds PULSOUT 13, 650 ' P13 servo clockwise PULSOUT 12, 650 ' P12 servo clockwise PAUSE 20 NEXT FOR counter = 1 TO 122 ' Loop for three seconds PULSOUT 13, 650 ' P13 servo clockwise PULSOUT 12, 850 ' P12 servo counterclockwise PAUSE 20 NEXT FOR counter = 1 TO 122 ' Loop for three seconds PULSOUT 13, 850 ' P13 servo counterclockwise PULSOUT 12, 650 ' P12 servo clockwise PAUSE 20 NEXT END Robotics with the Boe-Bot Ch.4 1. Pt ca Boe-Bot-ul sa se deplaseze inainte roate stanga trebuie sa se roteasca invers acelor de ceas, iar cea dreapta in sensul acelor de ceas. 2. Cand Boe-Bot-ul pivoteaza sper stanga roata dreapta se roteste in sensul acelor de ceas iar roate stanga la fel. Comanda este : For counter=1 to 122 Pulseout 13, 650 PULSOUT 12, 650 NEXT 3. FOR counter = 1 TO 40 PULSOUT 12, 750 PULSOUT 13, 750 PAUSE 20 NEXT FOR counter = 1 TO 122 PULSOUT 13, 850 PULSOUT 12, 650 PAUSE 20 NEXT ' Stop one second.

5. Argumentul comanzii PULSOUT specifica ce roata executa miscare si in ce sens ( trigonometric sau acelor de ceas), iar bucla FOR counter=1 to 100 comanda cat timp sa se roteasca roata mentionata in PULSOUT. 6. Pentru a stoca valori n memoria EEPROM a lui BASIC Stamp nainte de rularea unui program folosim Directiva DATA. Ex: DATA "FLFFRBLBBQ" 7. Pentru a extrage o valoare stocat n memoria EEPROM i pt a o copia unei variabile se foloseste comanda READ. Ex: DO UNTIL (instruction = "Q") READ address, instruction address = address + 1 ' PBASIC code block omitted here. LOOP 8. Blocul de cod folosit pentru a selecta o anumit variabil i pentru a o evalua pe baz de caz este SELECT ... CASE ... ENDSELECT. EX: SELECT instruction CASE "F": GOSUB Forward CASE "B": GOSUB Backward CASE "R": GOSUB Right_Turn CASE "L": GOSUB Left_Turn ENDSELECT 9. Poate fi folosita conditia DO UNTIL (conditie) LOOP permite buclei sa se repete pana cand conditia este indeplinita. Conditia DO WHILE(conditie) LOOP perimte buclei sa se repete atata timp cat o stare exista. Conditia DO LOOP UNTIL (conditie) permite buclei sa se repete pana cand caracterul Q este citit din EEPROM. Exercitii: 1. DEBUG "Program Running!" counter VAR Word pulseLeft VAR Word pulseRight VAR Word pulseCount VAR Byte FREQOUT 4, 2000, 3000 pulseLeft = 650: pulseRight = 850: pulseCount = 64: GOSUB Navigate END Navigate: FOR counter = 1 TO pulseCount PULSOUT 13, pulseLeft PULSOUT 12, pulseRight PAUSE 20 NEXT PAUSE 200 RETURN 2. pulseLeft = 850: pulseRight = 850: pulseCount = 8( intoarcere de 30 de grade) pulseLeft = 850: pulseRight = 850: pulseCount = 12 (intoarcere de 45 de grade ) pulseLeft = 850: pulseRight = 850: pulseCount = 16 (intoarcere de 60 de grade) 3. DEBUG "Program Running!" counter VAR Word pulseLeft VAR Word

pulseRight VAR Word pulseCount VAR Byte FREQOUT 4, 2000, 3000 pulseLeft = 850: pulseRight = 650: pulseCount = 64: GOSUB Navigate Robotics with the Boe-Bot Ch.5 1. Este un comutator tactil. 2. Zero (0) voli, ducnd la zero binar (0), la registrul de intrare. IN8 = 0 atunci cnd mustata este apsata. IN8 = 1 atunci cnd mustata nu este apsata. 3. IN7 = 1 nseamn mustata drept anu este apsata. IN7 = 0 nseamn mustata dreapta este apsata. IN5 = 1 nseamn mustata stnga nu este apsata. IN5 = 0 nseamn mustata stnga este apsata. 4. Comanda GOSUB efectueaz un salt real. Comanda IF THEN este utilizat pentru a decide la care subrutina sa sara. Aceast decizie se bazeaz pe condiii, declaraii care sunt logice si care se evalueaz cu adevrat sau fals. 5. Programul poate verifica pentru o singur condiie, i dac aceast condiie este adevrat, se poate verifica pentru o alt condiie n prima condiie. P1 a)

b) DEBUG "WHISKER STATES", CR, "Left Right", CR, "------ ------" DO DEBUG CRSRXY, 0, 3, "P5 = ", BIN1 IN5,

" P7 = ", BIN1 IN7 PAUSE 50 IF (IN7 = 0) THEN HIGH 1 ELSE LOW 1 ENDIF IF (IN5 = 0) THEN HIGH 10 ELSE LOW 10 ENDIF LOOP c) DEBUG "Program Running!" pulseCount VAR Byte FREQOUT 4, 2000, 3000 DO IF (IN5 = 0) AND (IN7 = 0) THEN ' Both whiskers detect obstacle GOSUB Back_Up ' Back up & U-turn (left twice) GOSUB Turn_Left GOSUB Turn_Left ELSEIF (IN5 = 0) THEN ' Left whisker contacts GOSUB Back_Up ' Back up & turn right GOSUB Turn_Right ELSEIF (IN7 = 0) THEN ' Right whisker contacts GOSUB Back_Up ' Back up & turn left GOSUB Turn_Left ELSE ' Both whiskers 1, no contacts GOSUB Forward_Pulse ' Apply a forward pulse ENDIF ' and check again LOOP Subrutine: Forward_Pulse: PULSOUT 13,850 PULSOUT 12,650 PAUSE 20 RETURN Turn_Left: FOR pulseCount = 0 TO 20 PULSOUT 13, 650 PULSOUT 12, 650 PAUSE 20 NEXT RETURN Turn_Right: FOR pulseCount = 0 TO 20 ' Right turn, about 90-degrees.

PULSOUT 13, 850 PULSOUT 12, 850 PAUSE 20 NEXT RETURN Back_Up: ' Back up. FOR pulseCount = 0 TO 40 PULSOUT 13, 650 PULSOUT 12, 850 PAUSE 20 NEXT RETURN Robotics with Boe-Bot Ch.6 1. Lumina puternic determina o valoare scazuta a rezistentei pe cand lumina slaba determina valori mai mari ale rezistentei, aproximativ 50 k. Dac nivelurile de lumin sunt ntre strlucitor i ntunecat valorile rezistentei vor fi undeva intre stralucitor si intunecat. 2. nu. Valoarea tensiunii aplicate cauzeaza registrul de intrare sa schimbe ceea ce stocheaza. Dac tensiunea aplicat este mai mic de 1.4 voli, stocheaz un 0. n caz contrar, stocheaz 1. 3. Tensiunea de prag este o valoare care poate fi 1 logic daca este deasupra de prag si 0 logic daca este sub prag. Tensiunea de prag a unui pin I/O pt Basic Stamp este de 1,4 V. 4. Valoarea Vo este determinat de raportul dintre rezistene . Valoarea tensiunii Vo se schimba daca valoare rezistentei se modifica. 5. Acesta verific senzori I intre fiecare puls, n loc de a avea manevre fixe ale mai multor impulsuri. Acest lucru face ca Boe-Bot ul sa fie mult mai receptiv. 6. Declararea unei constant spune compilatorului valoarea constantei d-voastra. O constanta da un nume util unui numar sau unei valori folosita intr-un program . Pentru a folosi o constanta trebuie scris numele constantei oriunde in program unde este nevoie de valoarea acesteia. 7. Expresiile sunt evaluate de la stnga la dreapta. Acest lucru este diferit de cel standard de evaluare algebrice, n cazul n care nmulire i mprire sunt evaluate nainte de a plus i scderea. 8. n FlashLightControlledBoeBot.bs2, mediile au fost utilizate pentru a calcula pragul de iluminare. n RoamingTowardTheLight.bs2 este calculata o medie de citire intre stanga si dreapta . Ele difera prin faptul ca primul se calculeaza static prin declararea unei constante, iar al doilea se calculeaza dimanic ca program ce ruleaza. Ele sunt similare, n sensul c ambele aduga dou valori mpreun i se mparte la 2. P1. DEBUG "Program Running!" pulseCount VAR Byte FREQOUT 4, 2000, 3000 DO IF (IN6 = 0) AND (IN3 = 0) THEN ' Both photoresistors detects GOSUB Back_Up ' shadow, back up & U-turn

GOSUB Turn_Left ' (left twice). GOSUB Turn_Left ELSEIF (IN6 = 0) THEN ' Left photoresistor detects GOSUB Back_Up ' shadow, back up & turn right. GOSUB Turn_Right ELSEIF (IN3 = 0) THEN ' Right photoresistor detects GOSUB Back_Up ' shadow, back up & turn left. GOSUB Turn_Left ELSE ' Neither photoresistor detects GOSUB Forward_Pulse ' shadow, apply a forward pulse. ENDIF LOOP Subroutine : Forward_Pulse: ' Send a single forward pulse. PULSOUT 12,650 PULSOUT 13,850 PAUSE 20 RETURN Turn_Left: ' Left turn, about 90-degrees. FOR pulseCount = 0 TO 20 PULSOUT 12, 650 PULSOUT 13, 650 PAUSE 20 NEXT RETURN Turn_Right: FOR pulseCount = 0 TO 20 ' Right turn, about 90-degrees. PULSOUT 12, 850 PULSOUT 13, 850 PAUSE 20 NEXT RETURN Back_Up: ' Back up. FOR pulseCount = 0 TO 40 PULSOUT 12, 850 PULSOUT 13, 650 PAUSE 20 NEXT RETURN Robotics with Boe-Bot Ch.7 1. 38.5 kHz este frecvena de armonicei. Si frecventa fundamental trimisa este 65536 38500 = 27036 Hz . Semnalele sunt trimise pentru 1 milisecunda, i LED-ul IR trebuie s fie conectat la I / O Pin 2. 2.

3. Un semnal slab nseamn:ca a fost detectat un IR la 38.5 kHz, astfel, un obiect a fost detectat. Un semnal mare nseamn ca nu a fost detectat nici un IR la 38.5kHz, deci, nici un obiect 4. Electric vorbind pentru ambele LED-uri va cauza LED-ul sa staluceasca mai puternic. n ceea ce privete rezultatele, LED-urile IR fac posibil detectarea obiectelor care sunt la distnata. P1. a)

b) irDetectLeft VAR Bit irDetectRight VAR Bit DEBUG "Testing piezospeaker..." FREQOUT 4, 2000, 3000

DEBUG CLS, "IR DETECTORS", CR, "Left Right", CR, "----- -----" DO FREQOUT 8, 1, 38500 irDetectLeft = IN9 FREQOUT 2, 1, 38500 irDetectRight = IN0 IF (irDetectLeft = 0) THEN HIGH 10 ELSE LOW 10 ENDIF IF (irDetectRight = 0) THEN HIGH 1 ELSE LOW 1 ENDIF DEBUG CRSRXY, 2, 3, BIN1 irDetectLeft, CRSRXY, 9, 3, BIN1 irDetectRight PAUSE 100 LOOP c) DEBUG "Program Running!" irDetectLeft VAR Bit irDetectRight VAR Bit pulseCount VAR Byte FREQOUT 4, 2000, 3000 DO FREQOUT 8, 1, 38500 ' Store IR detection values in irDetectLeft = IN9 ' bit variables. FREQOUT 2, 1, 38500 irDetectRight = IN0 IF (irDetectLeft = 0) AND (irDetectRight = 0) THEN GOSUB Back_Up ' Both IR pairs detect obstacle GOSUB Turn_Left ' Back up & U-turn (left twice) GOSUB Turn_Left ELSEIF (irDetectLeft = 0) THEN ' Left IR pair detects GOSUB Back_Up ' Back up & turn right GOSUB Turn_Right ELSEIF (irDetectRight = 0) THEN ' Right IR pair detects GOSUB Back_Up ' Back up & turn left GOSUB Turn_Left ELSE ' Both IR pairs 1, no detects

GOSUB Forward_Pulse ' Apply a forward pulse ENDIF ' and check again LOOP Subrutine: Forward_Pulse: ' Send a single forward pulse. PULSOUT 13,850 PULSOUT 12,650 PAUSE 20 RETURN Turn_Left: ' Left turn, about 90-degrees. FOR pulseCount = 0 TO 20 PULSOUT 13, 650 PULSOUT 12, 650 PAUSE 20 NEXT RETURN Turn_Right: FOR pulseCount = 0 TO 20 ' Right turn, about 90-degrees. PULSOUT 13, 850 PULSOUT 12, 850 PAUSE 20 NEXT RETURN Back_Up: ' Back up. FOR pulseCount = 0 TO 40 PULSOUT 13, 650 PULSOUT 12, 850 PAUSE 20 NEXT RETURN

S-ar putea să vă placă și