ebSkola

1.2 Distances sensors un izvairīšanās no šķēršļiem

Stundas uzdevums: Pievienot robotam distances sensoru, likt tam apstāties 10 cm pirms sienas un bezgalīgi apbraukt šķēršļus.

Datorika 7. klase (D.7.2.1., D.7.4.1.)

70 min plāns: Teorija un paraugs (~10 min) · 1. uzdevums (~15 min) - pieliec distances sensoru un nolasi attālumu portu skatā · 2. uzdevums (~25 min) - robots apstājas 10 cm pirms sienas · 3. uzdevums (~20 min) - forever cikls, kas apbrauc šķēršļus. Papildu uzdevumu sāc tikai tad, ja pārējie trīs ir gatavi.

Pirms sāc: paņem iepriekšējā stundā uzbūvēto braukšanas bāzi, distances sensoru ar vadu un divas kastes vai grāmatas šķēršļiem uz grīdas.

Teorija: Kā robots "redz" šķēršļus?

Iepriekšējā stundā mēs teicām robotam precīzi, cik tālu braukt (piemēram, 50 cm). Bet reālajā pasaulē robotiem bieži jābrauc nezināmā vidē, līdz tie kaut ko pamana. Šim nolūkam izmanto sensorus un "Gaidīšanas" (Wait) komandas.

  • Distances sensors: Izraida cilvēka ausij nedzirdamus skaņas viļņus (ultraskaņu) un klausās atbalsi. Jo ātrāk atbalss atgriežas, jo tuvāk ir šķērslis. Tas mēra attālumu procentos vai centimetros.
  • "Start Moving" bloks: Atšķirībā no "Move for [10] cm", kas liek robotam nobraukt un apstāties, zaļais start moving bloks ieslēdz motorus un atstāj tos ieslēgtus uz visiem laikiem... ja vien mēs nepavēlam citādi!
  • "Wait until" bloks (Oranžais): Šis ir maģiskais bloks! Tas liek programmai "iesaldēties" un gaidīt. Ja mēs ieslēdzam motorus un tad ieliekam wait until [Distance Sensor on C] closer than [15] [cm], motori darbosies TIKAI TIK ILGI, kamēr attālums kļūs mazāks par 15 cm. Pēc tam programma pāries pie nākamā bloka (piemēram, apstāšanās).

Vizuālais orientieris: SPIKE programmā veido ķēdi "start moving [forward]" -> "wait until [sensor port] is closer than [15] cm" -> "stop moving".

1. uzdevums -

Pieliec distances sensoru un nolasi attālumu ekrānā

Beigās tu redzēsi ekrānā, kā mainās centimetri, kad pietuvini roku sensoram.

  1. Atrodi distances sensoru ar "divām acīm" un piestiprini to bāzes priekšpusē, vērstu taisni uz priekšu.
  2. Iespraud sensora vadu Hub portā C.
  3. Atver SPIKE lietotnē portu skatu (Dashboard) pie savienotā Huba attēla.
  4. Pietuvini roku sensoram un vēro, kā portā C mainās centimetru skaitlis.
  5. Pieraksti mazāko un lielāko attālumu, ko sensors vēl parāda.

Gatavs, kad: portu skatā pie porta C skaitlis samazinās, kad tuvini roku, un palielinās, kad to attālini.

2. uzdevums -

Liec robotam apstāties 10 cm pirms sienas

Beigās robots pats piebremzēs plaukstas platumā pirms kastes un neietrieksies tajā.

  1. Izveido jaunu programmu ar bloku set movement motors to [A] and [B].
  2. Pievieno bloku set movement speed to [40]%.
  3. Pievieno rozā bloku start moving [forward], nevis bloku ar norādītu attālumu.
  4. Ievelc oranžajā blokā wait until sensora bloku [Distance Sensor on C] closer than [10] [cm].
  5. Pievieno zem gaidīšanas bloka rozā bloku stop moving.
  6. Palaid robotu no 1 metra attāluma pret kasti un nomēri atstarpi.

Gatavs, kad: robots apstājas 8–12 cm attālumā no kastes un nepieskaras tai.

3. uzdevums -

Liec robotam bezgalīgi apbraukt šķēršļus

Beigās robots pats brauks pa istabu un pie katra šķēršļa griezīsies prom.

  1. Ieliec visu 2. uzdevuma kodu oranžajā forever ciklā.
  2. Pievieno uzreiz aiz stop moving bloku move [backward] for [10] [cm].
  3. Pievieno zem tā bloku move [right] for [150] [degrees].
  4. Palaid programmu un noliec robota ceļā divas kastes.
  5. Maini pagrieziena grādus, ja robots pēc pagrieziena atkal uzbrauc tai pašai kastei.
  6. Pieraksti vienu teikumu: kāpēc robots pats atsāk braukt uz priekšu bez jaunas komandas?

Gatavs, kad: robots vienā palaišanas reizē apbrauc vismaz trīs šķēršļus un ne reizi neietriecas.

Papildu uzdevums - Notur 15 cm distanci no rokas

Beigās robots sekos tavai plaukstai turp un atpakaļ, paturot vienādu atstarpi.

  1. Izveido jaunu programmu ar set movement motors to [A] and [B] un oranžo forever ciklu.
  2. Ieliec ciklā if ... else ... bloku ar nosacījumu [Distance Sensor on C] farther than [20] [cm].
  3. Ieraksti "if" daļā bloku start moving [forward].
  4. Ieraksti "else" daļā otru if bloku ar nosacījumu closer than [10] [cm] un komandu start moving [backward].
  5. Pievieno šī otrā bloka "else" daļā stop moving.

Gatavs, kad: robots seko rokai uz priekšu, atkāpjas, kad roka par tuvu, un stāv, kad atstarpe ir ap 15 cm.

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

  • Robots ietriecas sienā, neapstājoties: Tu kļūdījies ar starta bloku. Ja lieto move [forward] for [10] cm (kam ir norādīts beigu punkts), tas ignorēs tavu wait until sensoru. Sensoriem vienmēr lieto bezgalīgo start moving bloku.
  • Sensors nereaģē: Pārbaudi, vai wait until blokā izvēlētais ports (piem., C) sakrīt ar reālo portu, kurā vads iesprausts Hubā.
  • Robots šķērsli "pamana" pārāk vēlu: Distances sensors vislabāk redz cietus, plakanus priekšmetus. Ja šķērslis ir apaļš, ļoti tievs (kā krēsla kāja) vai no mīksta auduma, skaņa var neatbalsoties pareizi. Mēģiniet testēt ar grāmatu vai kasti.

Koda piemērs (Šķēršļu apbraukšanas algoritms)


# SPIKE Word Blocks vizuālā koda tekstuālā reprezentācija

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

forever:
    start moving [forward]
    wait until [Distance Sensor on C] closer than [15] [cm]
    stop moving
    move [backward] for [10] [cm]
    move [right] for [180] [degrees]
        
Robots brauks taisni, līdz šķērslis būs tuvāk par 15 cm. Tad tas apstāsies, pabrauks 10 cm atpakaļ, pagriezīsies prom no šķēršļa un atsāks ciklu no jauna.