ebSkola

1.4 Manipulatori (Satvērējs)

Stundas uzdevums: Izveidot mehānisku satvērēju, izmantojot trešo motoru, un ieprogrammēt robotu autonomi piebraukt pie objekta, satvert to un nogādāt citā laukuma vietā.

Datorika 7. klase (D.7.1.1., D.7.4.2., D.7.5.1.)

70 min plāns: Teorija un paraugs (~10 min) · 1. uzdevums (~15 min) - uzbūvē satvērēju uz trešā motora · 2. uzdevums (~20 min) - atver un aizver spīles ar Hub pogām · 3. uzdevums (~25 min) - izpildi autonomo piegādes misiju. Papildu uzdevumu sāc tikai tad, ja pārējie trīs ir gatavi.

Pirms sāc: paņem robotu no 1.3 stundas, vienu vidējo (Medium) motoru ar vadu, zobratus un vienu LEGO klucīti vai riepu, ko satvert.

Teorija: Neatkarīgu motoru vadība un zobrati

Līdz šim mēs izmantojām tikai rozā "Movement" blokus, kas darbina divus motorus vienlaicīgi kā automašīnas riteņus. Bet lai kustinātu robota roku, pacēlāju vai satvērēju, mums nepieciešams vadīt vienu konkrētu motoru neatkarīgi no pārējiem.

  • "Motor" bloki (Zilā krāsā): Zilie bloki kontrolē tikai vienu norādīto portu (piemēram, portu C). Tie neietekmē robota braukšanu. Tu vari likt ziliem blokiem darboties paralēli rozā blokiem!
  • Pozīcijas un Leņķi: SPIKE motoriem ir iebūvēts precīzs rotācijas sensors. Kad esi pievienojis roku motoram, tev jāzina, kura pozīcija (grādi) atbilst "Atvērts" stāvoklim, un kura – "Aizvērts".
  • Mehāniskā priekšrocība (Zobrati): Ja mazs zobrats griež lielu zobratu, spēks palielinās, bet ātrums samazinās. Ja lielais griež mazo – ātrums palielinās, bet spēks samazinās. Padomā, kas vajadzīgs labam satvērējam – ātrums vai spēks noturēt klucīti?

Vizuālais orientieris: satvērēja kodā meklē zilos "run motor [C] for [90] degrees" un "go to shortest path to position [0]" blokus.

# Manipulatora vadība (3. ass)
from spike import Motor

satverejs = Motor("C")
satverejs.run_for_degrees(90, speed=30)   # aizver
# ... pacelšanas darbības ...
satverejs.run_for_degrees(-90, speed=30)  # atver

Praktiskie uzdevumi

1. uzdevums -

Uzbūvē satvērēju uz trešā motora

Beigās tavam robotam būs spīles, kas ar roku atveras un aizveras.

  1. Iespraud vidējo (Medium) motoru Hub portā C.
  2. Uzbūvē no LEGO klučiem spīles, kas var satvert vienu klucīti vai riepu.
  3. Piestiprini spīles pie motora C ass.
  4. Atver portu skatu un ar roku pagriez motoru līdz spīles ir pilnīgi vaļā.
  5. Pieraksti šo grādu skaitli - tā būs pozīcija "Atvērts".
  6. Pieraksti arī grādus, kad spīles ir ciet - tā būs pozīcija "Aizvērts".

Gatavs, kad: tev README.md failā ir pierakstīti divi skaitļi - grādi atvērtām un aizvērtām spīlēm.

2. uzdevums -

Atver un aizver spīles ar Hub pogām

Beigās kreisā poga aizvērs spīles, bet labā tās atvērs.

  1. Izveido jaunu programmu un ievelc dzelteno bloku when [Left Button] pressed.
  2. Pievieno zem tā zilo bloku run motor [C] for [90] [degrees].
  3. Ievelc otru dzelteno bloku when [Right Button] pressed.
  4. Pievieno zem tā zilo bloku run motor [C] for [-90] [degrees].
  5. Iestati jaudu ar bloku set motor [C] power to [30]%, lai motors neiesprūstu.
  6. Palaid programmu un pārbaudi abas pogas.

Gatavs, kad: kreisā poga aizver spīles, labā atver, un motors nedūc iesprūdis.

3. uzdevums -

Izpildi autonomo piegādes misiju

Beigās robots pats aizbrauks pie klucīša, satvers to un atvedīs atpakaļ.

  1. Noliec klucīti tieši 30 cm attālumā no robota priekšas.
  2. Sāc programmu ar zilo bloku, kas atver satvērēju.
  3. Pievieno rozā bloku move [forward] for [30] [cm].
  4. Pievieno zilo bloku, kas aizver spīles ap klucīti.
  5. Pievieno rozā bloku move [backward] for [30] [cm].
  6. Pievieno beigās zilo bloku, kas atver spīles un noliek klucīti.
  7. Pieraksti vienu secinājumu: kāpēc satveršanai labāk lietot laiku, nevis grādus.

Gatavs, kad: robots pats atved klucīti atpakaļ uz starta vietu un palaiž to vaļā.

Papildu uzdevums - "Sargātāja" režīms ar diviem sensoriem

Ja pamatdarbs ir gatavs, liec robotam pašam noķert objektu un aiznest to līdz zaļajai zonai.

  1. Pievieno robotam gan distances, gan krāsu sensoru.
  2. Uzraksti programmu, kurā robots stāv uz vietas ar atvērtām spīlēm.
  3. Pievieno nosacījumu: kad distances sensors rāda mazāk par 5 cm, spīles aizveras.
  4. Pievieno pēc tam griešanos, kamēr krāsu sensors ierauga zaļu.
  5. Pievieno beigās spīļu atvēršanu.

Gatavs, kad: robots pats satver tuvumā noliktu objektu un palaiž to vaļā tieši uz zaļās zonas.

Biežākās kļūdas (un kā tās labot):

  • Satvērējs kustas pārāk vāji vai nespēj pacelt objektu: Tavs mehānisms ir pārāk tiešs. Pamēģini izmantot zobratus, lai palielinātu griezes momentu (spēku): uzliec mazu zobratu uz motora ass un lielu zobratu uz satvērēja ass.
  • Programma "iestrēgst" pie zilā bloka un robots nebrauc tālāk: Ja lieto run motor for [degrees] bloku un spīles fiziski nevar sasniegt šos grādus (jo priekšmets ir pa vidu), programma gaidīs mūžīgi. Risinājums: satveršanai lieto laiku - start motor [C], wait [1] seconds, stop motor [C].
  • Satvērējs atveras vaļā pats no sevis pēc satveršanas: LEGO motoriem ir pretestība, bet smagums tos var atgriezt atpakaļ. Ieslēdz motora "Hold" (turēšanas) funkciju vai pievieno tārpa zobratu (worm gear), kas bloķē kustību atpakaļ.

Koda piemērs (satveršana ar laiku, nevis grādiem - grūtākā daļa)

# SPIKE Word Blocks vizuālā koda tekstuālā reprezentācija
# Grūtākā vieta: ja spīles satveršanai lieto grādus, motors iesprūst
# pret klucīti un programma apstājas uz visiem laikiem. Tāpēc te lieto laiku.

when program starts
set movement motors to [A] and [B]

# 1. Atver satvērēju
run motor [C] to position [0] degrees at [50]% speed

# 2. Brauc pie mērķa
move [forward] for [30] [cm]

# 3. Satver objektu (izmantojot laiku, lai neiesprūstu)
start motor [C] at [50]% speed
wait [1] seconds
stop motor [C]

# 4. Atgriežas un noliek
move [backward] for [30] [cm]
run motor [C] to position [0] degrees
        
Robots sagatavo spīles atvērtā pozīcijā, aizbrauc norādīto distanci, saspiež spīles uz 1 sekundi (pietiekami, lai satvertu objektu bez motora iestrēgšanas), atbrauc atpakaļ un noliek objektu.