TechLab - Laboratórium budúcnosti

        • 8e. Joystick:bit – Rozšírenie – Lekcia 5

        • Ladenie oneskorenia, rozšírené funkcie, finálny projekt

          Trvanie: 90 minút
          Vek: 12–15 rokov
          Potrebné vybavenie: Micro:bit v2 (3 ks), Joystick:bit, Cutebot, Wonder Rugged Car, XGO Lite, USB kábel, notebook
          Software: MakeCode editor – makecode.microbit.org
          Predchádzajúce znalosti: Joystick:bit Lekcie 1–4


          Čo sa dnes naučíš

          • Merať a znižovať oneskorenie ovládania (latency)
          • Pridať pokročilé funkcie: rýchlostné profily, kombinácie tlačidiel
          • Navrhnúť a realizovať vlastnú scénu s viacerými zariadeniami
          • Pochopiť limity bezdrôtového ovládania micro:bitu

          Prečo záleží na oneskorení

          Keď pohneš joystickom, auto nereaguje okamžite. Medzi pohybom a reakciou uplynie čas – oneskorenie (latency). Skladá sa z:

          Zdroj oneskorenia Typická hodnota
          Čítanie joysticku (pauza v slučke) 50–150 ms
          Odoslanie cez rádio micro:bit 10–30 ms
          Príjem a spracovanie prijímača 10–50 ms
          Pauza v slučke prijímača 50–150 ms
          Celkové oneskorenie 120–380 ms

          Pri hodnote nad 200 ms začína ovládanie pôsobiť „tuhým" dojmom. Pod 100 ms je reakcia plynulá.

          💡 Pre porovnanie: profesionálne herné ovládače majú oneskorenie 1–8 ms. Bluetooth gamepad cca 30 ms. My pracujeme s rádiom micro:bit – je to dostupný HW, nie herný controller.


          Krok 1 – Meranie oneskorenia (15 minút)

          Cieľ: Zistiť aké oneskorenie má tvoj aktuálny systém.

          Metóda – vizuálna:

          1. Drž joystick v ruke pred fotoaparátom mobilu
          2. Zapni záznam videa (spomalené 240fps ak podporuje)
          3. Rýchlo pohni joystickom – sleduj kedy sa auto začne hýbať
          4. V prehrávači počítaj snímky medzi pohybom joysticku a pohybom auta
          5. Pri 30fps: 1 snímka = 33ms, pri 240fps: 1 snímka = 4ms

          Metóda – kódom:

          Pridaj do prijímača dočasný kód:

          pri prijatí rádiového páru (name, value):
            ak name = "ping":
              rádio odošli hodnotu "pong" = value   ← odraz späť
          
          pri prijatí rádiového páru (name, value):   ← na ODOSIELATEĽOVI
            ak name = "pong":
              nastav latencia = rozdiel (čas teraz) - value
              zobraziť číslo latencia
          

          A na odosielateľovi každú sekundu pošli:

          pri aktualizácii každých 1000ms:
            rádio odošli hodnotu "ping" = čas behu (ms)
          

          💡 čas behu (ms) je blok z kategórie Vstup → Viac – vráti počet milisekúnd od zapnutia micro:bitu.


          Krok 2 – Zníženie oneskorenia (15 minút)

          Cieľ: Upraviť program tak aby oneskorenie kleslo pod 150 ms.

          Technika 1 – Zníž pauzy:

          Kde Pôvodná pauza Nová pauza
          Odosielateľ – slučka 100 ms 40 ms
          Prijímač – slučka 100 ms 40 ms

          Technika 2 – Posielaj menej dát:

          Namiesto posielania oboch osí každých 40 ms, posielaj len keď sa hodnota zmenila:

          nastav posledX = 512
          nastav posledY = 512
          
          stále opakovať:
            nastav jx = joystickbit X value
            nastav jy = joystickbit Y value
          
            // Pošli len ak sa hodnota zmenila o viac ako 20
            ak abs(jx - posledX) > 20:
              rádio odošli hodnotu "jx" = jx
              nastav posledX = jx
          
            ak abs(jy - posledY) > 20:
              rádio odošli hodnotu "jy" = jy
              nastav posledY = jy
          
            pauza 30ms
          

          💡 abs() = absolútna hodnota – rozdiel bez ohľadu na znamienko. Blok nájdeš v kategórii Matematika.

          Technika 3 – Vyber pohybový model:

          Model A – príkaz každých 40 ms (push):

          • Odosielateľ stále posiela aktuálnu pozíciu
          • Prijímač vždy vykoná posledný prijatý príkaz
          • Pros: jednoduché, reaktívne
          • Cons: ak prídu dve správy za sebou, staršia sa prejaví len na zlomok sekundy

          Model B – príkaz len pri zmene (event):

          • Odosielateľ pošle príkaz len keď joystick zmení zónu (stred → dopredu, dopredu → stred)
          • Prijímač vykoná príkaz a drží ho kým nepríde nový
          • Pros: menej rádiovej prevádzky, predvídateľnejšie správanie
          • Cons: ak sa rádio stratí, zariadenie zostane v poslednom stave (nemusí zastať)

          Pre auto a psa je Model B zvyčajne lepší. Implementuj ho:

          nastav zóna = "stop"
          nastav posledZona = ""
          
          stále opakovať:
            nastav jx = joystickbit X value
            nastav jy = joystickbit Y value
          
            // Urči zónu
            ak jy < 380:             nastav zóna = "forward"
            inak ak jy > 640:        nastav zóna = "backward"
            inak ak jx < 380:        nastav zóna = "left"
            inak ak jx > 640:        nastav zóna = "right"
            inak:                    nastav zóna = "stop"
          
            // Pošli len ak sa zóna zmenila
            ak zóna ≠ posledZona:
              rádio odošli text zóna
              nastav posledZona = zóna
          
            pauza 30ms
          

          Prijímač potom len spracúva text:

          pri prijatí rádiového textu (receivedString):
            ak receivedString = "forward":  Cutebot go forward speed 70
            ak receivedString = "backward": Cutebot go backward speed 70
            ak receivedString = "left":     Cutebot turn left speed 60
            ak receivedString = "right":    Cutebot turn right speed 60
            ak receivedString = "stop":     Cutebot stop
          

          Krok 3 – Rýchlostné profily (10 minút)

          Cieľ: Tlačidlami prepínať medzi pomalým (presným) a rýchlym (normálnym) režimom.

          Pridaj premennú rychlostny_profil na odosielateľ:

          nastav profil = "normal"    ← 0 = normal, 1 = slow
          
          on joystickbit button C pressed:
            ak profil = "normal":
              nastav profil = "slow"
              zobraziť obrázok [korytnačka]
              rádio odošli text "speed_slow"
            inak:
              nastav profil = "normal"
              zobraziť obrázok [šípka]
              rádio odošli text "speed_normal"
          

          Na prijímači (Cutebot):

          nastav max_speed = 70
          
          pri prijatí rádiového textu (receivedString):
            ak receivedString = "speed_slow":   nastav max_speed = 30
            ak receivedString = "speed_normal": nastav max_speed = 70
            ak receivedString = "forward":  Cutebot go forward speed max_speed
            ...
          

          Krok 4 – Finálny projekt: vlastná scéna (40 minút)

          Cieľ: Navrhnúť a realizovať scénu kde sa zmysluplne zapoja všetky tri zariadenia.

          Toto je najdôležitejší krok celého modulu. Nie je tu presný kód – len zadanie a smer.


          Výber scény

          Vyber si jednu (alebo vymysli vlastnú):


          Scéna 1 – Záchranná misia

          Prostredie: priestor s prekážkami (krabice, knihy)

          Priebeh:

          1. Cutebot (prieskumné vozidlo) vyjde zo základne a preskúma priestor
          2. Keď nájde „obeť" (predmet), zastaví a signalizuje (LED červená)
          3. XGO pes príde k miestu – ramenom uchopí predmet
          4. WRC (transportér) príde, pes položí predmet na neho
          5. WRC odvezie predmet do „nemocnice" (označené miesto)

          Každé zariadenie ovládaš joystickom – prepínaš medzi nimi tlačidlami C/D/E.


          Scéna 2 – Robotický sklad

          Prostredie: označená dráha na podlahe (izolepa)

          Priebeh:

          1. WRC jazdí po dráhe ako dopravný pás (manuálne ovládanie)
          2. Cutebot čaká na určenom mieste – prevezme „tovar" (predmet ktorý WRC privezie)
          3. XGO pes triedi tovar – ramenom ho presunie na jedno z dvoch miest podľa farby (simulovaná – ty rozhoduješ)

          Scéna 3 – Slobodná voľba

          Vymysli vlastnú scénu. Pravidlá:

          • Musia byť zapojené aspoň 2 zariadenia
          • Každé zariadenie má iná úlohu
          • Existuje jasný začiatok a koniec scény
          • Napíš postup na papier pred tým ako začneš programovať

          Ako postupovať

          1. Nakresli si schému – kde sú zariadenia, kde je štart, kde je cieľ, aké sú prekážky
          2. Rozdeľ na kroky – čo sa deje ako prvé, čo ako druhé, kto čo robí
          3. Naprogramuj každé zariadenie zvlášť – Cutebot prijímač, WRC prijímač, XGO prijímač
          4. Naprogramuj odosielateľ – prepínanie skupín rádia + príkazy pre každý krok scény
          5. Nacvič scénu – najprv pomaly, jedno zariadenie po druhom
          6. Spusti celú scénu – všetky zariadenia naraz

          Zhrnutie celého modulu Joystick:bit s rozšírením

          Čo si za 5 lekcií zvládol:

          Lekcia Obsah
          1 Rozšírenie Joystickbit, čítanie osí a tlačidiel, mapovanie hodnôt, rádio
          2 Cutebot 4-smerový + plynulý ovládač, Wonder Rugged Car 8 smerov
          3 XGO pes, prepínanie režimov chôdza/rameno, vlastný protokol
          4 Kombinovaný ovládač pre 3 zariadenia, prepínanie skupín rádia, debug
          5 Meranie oneskorenia, znižovanie latency, rýchlostné profily, finálna scéna

          Kľúčové pojmy:

          Pojem Vysvetlenie
          Rozšírenie (Extension) Balík blokov od výrobcu HW
          Skupina rádia „Kanál" – zariadenia na rovnakej skupine sa počujú
          Protokol Dohodnutý formát správ medzi zariadeniami
          Oneskorenie (Latency) Čas medzi vstupom a reakciou
          Mŕtva zóna Oblasť okolo stredu joysticku kde sa nič nedeje
          Zónový model Posiela príkaz len pri zmene zóny – menej rádiovej prevádzky
          Rýchlostný profil Prepínanie medzi normálnym a pomalým (presným) režimom
          Mecanum kolieska Umožňujú pohyb do strany bez otáčania (Wonder Rugged Car)
          Diferenciálny pohon Otáčanie zmenou rýchlosti ľavého/pravého motora (Cutebot)
          Núdzové zastavenie Príkaz stop odoslaný na všetky skupiny rádia

          Kam ďalej

          Zvládol si bezdrôtové ovládanie viacerých robotov jedným joystickom. Ďalší prirodzený krok:

          • Cutebot – autonómne vozidlo – sledovanie čiary, ultrazvuk, AI kamera – robot sa rozhoduje sám
          • Dobot Magician – Python – priemyselný robot, programovanie v skutočnom jazyku
          • XGO – pokročilé pohyby – choreografia, synchronizované sekvencie
    • Kontakty

      • Základná škola s materskou školou
      • 0915 880 931 - ZÁKLADNÁ ŠKOLA
        0911 348 727 - MATERSKÁ ŠKOLA
        0915 595 176 - ŠKOLSKÁ JEDÁLEŇ
        0908 030 931 - RIADITEĽ
        0940 629 872 - EKONÓMKA
      • Šarišské Dravce 20
        082 73 Šarišské Dravce
        Slovakia
      • sardravce.ms@gmail.com
        sardravce.sj@gmail.com
      • 37876856
    • Prihlásenie