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 movingbloks 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.
- Atrodi distances sensoru ar "divām acīm" un piestiprini to bāzes priekšpusē, vērstu taisni uz priekšu.
- Iespraud sensora vadu Hub portā C.
- Atver SPIKE lietotnē portu skatu (Dashboard) pie savienotā Huba attēla.
- Pietuvini roku sensoram un vēro, kā portā C mainās centimetru skaitlis.
- 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ā.
- Izveido jaunu programmu ar bloku
set movement motors to [A] and [B]. - Pievieno bloku
set movement speed to [40]%. - Pievieno rozā bloku
start moving [forward], nevis bloku ar norādītu attālumu. - Ievelc oranžajā blokā
wait untilsensora bloku[Distance Sensor on C] closer than [10] [cm]. - Pievieno zem gaidīšanas bloka rozā bloku
stop moving. - 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.
- Ieliec visu 2. uzdevuma kodu oranžajā
foreverciklā. - Pievieno uzreiz aiz
stop movingblokumove [backward] for [10] [cm]. - Pievieno zem tā bloku
move [right] for [150] [degrees]. - Palaid programmu un noliec robota ceļā divas kastes.
- Maini pagrieziena grādus, ja robots pēc pagrieziena atkal uzbrauc tai pašai kastei.
- 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.
- Izveido jaunu programmu ar
set movement motors to [A] and [B]un oranžoforeverciklu. - Ieliec ciklā
if ... else ...bloku ar nosacījumu[Distance Sensor on C] farther than [20] [cm]. - Ieraksti "if" daļā bloku
start moving [forward]. - Ieraksti "else" daļā otru
ifbloku ar nosacījumucloser than [10] [cm]un komandustart moving [backward]. - 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 tavuwait untilsensoru. Sensoriem vienmēr lieto bezgalīgostart movingbloku. - Sensors nereaģē: Pārbaudi, vai
wait untilblokā 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]