›_ ebskola.lv
sākt stundu →
Robotika · 7.–9. klase · LEGO SPIKE Prime - 5 stundas

1. Tēma - // LEGO SPIKE un robota pamatkustības

Apgūsti LEGO SPIKE Prime robotu montāžu un programmēšanu. Piecu stundu laikā iemācies vadīt motorus, nolasīt sensorus un programmēt autonomu robotu, kas seko līnijai un izvairās no šķēršļiem.

5 stundas LEGO SPIKE Prime Python pseudokods montāža + sensori
LEGO SPIKE Prime motors · sensori Python pseudokods
# 02 špikeris

1. tēmas špikeris - LEGO SPIKE

Kustība, sensori, satvērējs un misija. Katrs bloks atbilst vienai stundai.

1.1 Pamatkustība ar rozā blokiem

when program starts
set movement motors to [A] and [B]     <- OBLIGĀTI pirmais
set movement speed to [40]%

move [forward] for [50] [cm]           <- brauc uz priekšu 50 cm
move [Right] for [180] [degrees]       <- griežas

repeat [4]                             <- kvadrāts: 4 reizes
    move [forward] for [20] [cm]
    move [Right] for [180] [degrees]

UZMANĪBU par pagriezieniem:
  180 grādi = RITEŅA apgrieziens, NEVIS robota pagrieziens telpā!
  Lai robots pagrieztos par 90 grādiem pret sienu, riteņiem
  bieži jāgriežas 175-185 grādi. To atrod, mainot skaitli un pārbaudot.

Rozā "Movement" bloki  = abi motori kopā (kā automašīnai)
Zilie "Motor" bloki    = viens konkrēts motors (roka, satvērējs)

Porti: šajā kursā A = kreisais ritenis, B = labais, C = satvērējs, E/F = sensori.

1.2 Distances sensors

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

start moving [forward]                 <- BEZGALĪGS bloks
wait until [Distance Sensor on F] distance < [15] [cm]
stop moving

NEPAREIZI:
  move [forward] for [10] [cm]         <- šim ir beigu punkts,
  wait until ...                          tāpēc tas IGNORĒ sensoru

PAREIZI:
  start moving [forward]               <- bez beigu punkta,
  wait until ...                          tāpēc sensors var to apturēt

Izvairīšanās cikls:
forever
    if [Distance Sensor on F] distance < [15] [cm] then
        move [backward] for [10] [cm]
        move [Right] for [180] [degrees]
    else
        start moving [forward]

Ja robots ietriecas sienā, gandrīz vienmēr iemesls ir move for [10] cm lietošana start moving vietā.

1.3 Krāsu sensors un līniju sekotājs

# Slieksni NEVAR uzminēt - to jāIZMĒRA katrā klasē!
# 1. Noliec sensoru uz MELNĀS līnijas -> portu skats rāda, piem.,  8%
# 2. Noliec sensoru uz BALTĀ laukuma  -> portu skats rāda, piem., 76%
# 3. Slieksnis = vidējais aritmētiskais: (8 + 76) / 2 = 42

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

forever
    if [Color Sensor on E] reflection < [42]% then
        start moving at [20] % steering    <- redz melnu, griežas atpakaļ
    else
        start moving at [-20] % steering   <- redz baltu, griežas atpakaļ

# Divi režīmi:
#   Color            atpazīst krāsu (sarkans, zaļš) - prasa labu gaismu
#   Reflected Light  0-100% - LĪNIJAI lieto ŠO, tas ir precīzāks

Ar noklusējuma slieksni 50 tumšākā klasē robots baltu virsmu noturēs par melnu un aizbrauks prom no līnijas.

1.4 Satvērējs uz trešā motora

# Satveršanai lieto LAIKU, nevis grādus!

NEPAREIZI:
  run motor [C] for [90] [degrees]
  # Ja klucītis ir pa vidu, motors nevar sasniegt 90 grādus
  # -> programma gaida MŪŽĪGI un tālāk neiet

PAREIZI:
  start motor [C] at [30]% speed
  wait [1] seconds
  stop motor [C]

Pilns misijas algoritms:
when program starts
set movement motors to [A] and [B]
run motor [C] to position [0] degrees   <- atver spīles (sākuma stāvoklis)
move [forward] for [30] [cm]
start motor [C]
wait [1] seconds
stop motor [C]                          <- satvēra
move [backward] for [30] [cm]
run motor [C] to position [0] degrees   <- atlaida

# Zobrati: mazs griež lielu -> vairāk SPĒKA, mazāk ātruma

Ja programma "iestrēgst" un robots nekustas tālāk, meklē run motor for degrees bloku.

1.5 Misija: sākuma stāvoklis ir obligāts

# Biežākā problēma: misija izdodas PIRMAJĀ reizē, bet otrajā ne.
# Iemesls: spīles palika aizvērtas un mainīgie - saskaitīti.

when program starts

# --- 1. SĀKUMA STĀVOKLIS (bez šī misija strādā tikai vienreiz) ---
set movement motors to [A] and [B]
set movement speed to [40]%
run motor [C] to position [0] degrees    # spīles atpakaļ vaļā
set [Kravas] to [0]                      # skaitītājs uz nulli

# --- 2. MISIJA ---
move [forward] for [30] [cm]
wait until [Distance Sensor on F] distance < [10] [cm]
stop moving
start motor [C]
wait [1] seconds
stop motor [C]
move [backward] for [30] [cm]
run motor [C] to position [0] degrees
change [Kravas] by [1]

# Testē TRĪS reizes pēc kārtas - tikai tad zini, ka misija ir stabila.

Sensoriem lieto portus E un F - A, B un C jau ir aizņemti ar motoriem.

motors.start(steering=0, speed=50) # LEGO robots kustas uz priekšu