Micro:bit kao kontroler

Micro:bit kao daljinski upravljač: akcelerometar mjeri nagib (pitch i roll), odašiljač radio-vezom šalje smjer, a prijemnik stane kad izgubi vezu.

micro:bit kao kontroler
U radio igrama poruke smo slali tipkama. Danas ćemo ih slati rukom: nagneš micro:bit, a drugi micro:bit pokaže u koju stranu.

Tako rade mnogi pravi upravljači: igraće konzole koje osjete pokret ruke, autići i dronovi na daljinsko upravljanje. A uskoro ćemo tako upravljati i robotima.

Danas ćemo:

  • saznati kako micro:bit osjeti da je nagnut;
  • izmjeriti nagib u stupnjevima;
  • pretvoriti nagib u strelicu;
  • napraviti odašiljač koji šalje smjer i prijemnik koji ga prikazuje;
  • naučiti prijemnik da stane kad ne čuje odašiljač.

Materijal

Danas svatko ima dva micro:bita:

  • odašiljač – micro:bit koji držiš u ruci, s battery packom;
  • prijemnik – micro:bit koji stoji na stolu, spojen USB kabelom.

To su isti odašiljač i prijemnik kao u radio igrama. Na oba micro:bita je naljepnica s brojem tvoje radio grupe (od 11 do 18). Na jednoj naljepnici piše odašiljač, a na drugoj prijemnik. Zapamti broj svoje grupe, trebat će ti i kasnije.

Dva programa koja rastu

Danas pišeš dva programa, za svaki micro:bit po jedan:

  • Odašiljač gradiš u vježbama 1, 2 i 3.
  • Prijemnik gradiš u vježbama 3, 4 i 5.

Svaka vježba nastavlja tamo gdje je prethodna stala. Zato u svakoj vježbi piše samo što dodaješ, mijenjaš ili uklanjaš, a slika pokazuje nove blokove.

Kako micro:bit zna da je nagnut?

Na stražnjoj strani micro:bita je mali dio koji se zove akcelerometar. On osjeti na koju stranu vuče sila teža.

Zamisli kutiju u kojoj je kuglica. Kad kutiju nagneš, kuglica se otkotrlja na nižu stranu. Akcelerometar nema kuglicu, ali osjeti isto: koja je strana niža i koliko.

Akcelerometar već poznaješ, iako mu nismo znali ime. On prepoznaje protresanje u digitalnoj kockici i u igri mirne ruke.

Micro:bit može biti nagnut na dva načina, kao avion:

  • pitch – naprijed i natrag, kao kad avion spusti ili podigne nos;
  • roll – lijevo i desno, kao kad avion nagne krila.
pitch je nagib naprijed-natrag, a roll nagib lijevo-desno

Nagib čita blok rotation (°) iz kategorije Input. U njemu odabereš pitch ili roll, a blok vrati kut u stupnjevima. Kad micro:bit leži ravno, kut je otprilike 0. Kad stoji okomito, kut je otprilike 90.

Kako držimo odašiljač: ravno na dlanu, ekranom prema gore, s logotipom okrenutim od sebe, kao pladanj. Naprijed znači da kraj s logotipom nagneš prema dolje, od sebe.

Zašto ne koristimo blok on tilt left?

MakeCode ima i događaje tilt left, tilt right, logo up i logo down. Oni se pokrenu jednom, kad micro:bit nagneš jako, gotovo okomito.

Za upravljanje to nije dovoljno. Želimo znati koliko je micro:bit nagnut, i to stalno. Zato čitamo kut blokom rotation (°).

Vježba 1: Koliko je nagnut?

Program: odašiljač, prvi korak   Tehnika: mjerenje prije programiranja

Prije nego što micro:bit naučimo upravljati, izmjerit ćemo kakve brojeve daje.

Spoji na računalo micro:bit s naljepnicom odašiljač. U MakeCodeu napravi novi projekt i nazovi ga Odašiljač. U njemu ćeš raditi i u sljedeće dvije vježbe.

U bloku forever micro:bit stalno mjeri nagib i sprema ga u varijable pitch i roll. Tipke samo pokazuju izmjereni broj.

Planiraj prije nego što programiraš:
STALNO PONAVLJAJ
postavi pitch na rotation pitch
postavi roll na rotation roll
KADA PRITISNEM A
prikaži pitch
KADA PRITISNEM B
prikaži roll
odašiljač, prvi korak: mjerenje nagiba

Predvidi

Prije mjerenja pogodi: kad micro:bit nagneš naprijed, hoće li pitch biti pozitivan ili negativan broj? A kad ga nagneš ulijevo, kakav će biti roll?

Izmjeri

Drži micro:bit nagnut i pritisni tipku. Broj prolazi ekranom, pa ga pažljivo pročitaj. Upiši brojeve u tablicu:

Položajpitch (A)roll (B)
Ravno
Naprijed (logo prema dolje)
Natrag (logo prema gore)
Lijevo
Desno
Provjeri svoju tablicu
Ravno: pitch i roll su blizu 0. Naprijed: pitch je negativan, na primjer −30. Natrag: pitch je pozitivan, na primjer 30. Lijevo: roll je negativan. Desno: roll je pozitivan. Točni brojevi ovise o tome koliko jako nagneš micro:bit.

Primijeti da broj rijetko bude točno 0, čak i kad micro:bit miruje na stolu. Senzor nije savršen, a ruka nikad nije potpuno mirna. Zato ćemo u sljedećoj vježbi reći: nagnut je tek ako je kut veći od 20 stupnjeva.

Vježba 2: Nagib postaje strelica

Program: odašiljač, drugi korak   Tehnika: lanac uvjeta i mrtva zona

Nastavljamo u projektu Odašiljač. Sada micro:bit treba sam odlučiti u koju je stranu nagnut i pokazati strelicu.

Smjer pamti nova varijabla smjer, i to kao broj, jer ćemo ga u sljedećoj vježbi slati radio-vezom. To su naše dogovorene poruke:

NagibsmjerNa ekranu
pitch manji od −201 – naprijed↑
pitch veći od 202 – natrag↓
roll manji od −203 – lijevo←
roll veći od 204 – desno→
sve ostalo0 – stojtočkica u sredini
pet položaja odašiljača: ravno je točkica, a nagib naprijed, natrag, lijevo i desno daje strelicu

Ukloni blokove on button A pressed i on button B pressed. Kad bi ostali, broj i strelica borili bi se za isti ekran. Brojeve iz vježbe 1 ionako imaš u tablici.

Dodaj u blok forever, ispod dva mjerenja, lanac uvjeta koji postavlja smjer, i na kraju poziv funkcije prikaziSmjer. Napravi funkciju prikaziSmjer s jednim brojem, smjer, kao funkciju Svjetlo u semaforu.

Dodaj u program:
STALNO PONAVLJAJ
(mjerenje pitch i roll ostaje iz vježbe 1)
AKO je pitch < −20
postavi smjer na 1
INAČE AKO je pitch > 20
postavi smjer na 2
INAČE AKO je roll < −20
postavi smjer na 3
INAČE AKO je roll > 20
postavi smjer na 4
INAČE
postavi smjer na 0
prikaziSmjer (smjer)
FUNKCIJA prikaziSmjer (smjer)
AKO je smjer = 1
prikaži strelicu prema gore
INAČE AKO je smjer = 2
prikaži strelicu prema dolje
INAČE AKO je smjer = 3
prikaži strelicu ulijevo
INAČE AKO je smjer = 4
prikaži strelicu udesno
INAČE
prikaži točkicu
odašiljač, drugi korak: lanac uvjeta i funkcija prikaziSmjer

Strelice prikazuje blok show arrow iz kategorije Basic, a točkicu nacrtaj blokom show leds.

Mrtva zona

Između −20 i 20 stupnjeva micro:bit ne pokazuje nijednu strelicu, nego točkicu. To područje zovemo mrtva zona. Bez nje bi strelica stalno skakala, jer ruka nikad nije potpuno mirna. Robot bi se trzao od svakog malog pokreta ruke.

Redoslijed je važan

Uvjeti su složeni u lanac: if, pa else if, pa opet else if… Micro:bit ih provjerava odozgo prema dolje i izvrši samo prvi koji je ispunjen. Ostale više ne gleda.

Što ako micro:bit nagneš i naprijed i ulijevo? Oba uvjeta su ispunjena, ali naprijed je u lancu prije lijevo, pa pobjeđuje strelica prema gore.

Predvidi

  • pitch je −35, a roll 10. Što pokazuje ekran?
  • pitch je 5, a roll 25. Što pokazuje ekran?
  • pitch je −10, a roll −10. Što pokazuje ekran?

Isprobaj

U simulatoru micro:bit možeš nagnuti mišem. Zatim prenesi program na odašiljač i nagni ga rukom u svih pet položaja sa slike.

Vježba 3: Odašiljač šalje, prijemnik prima

Programi: odašiljač, treći korak, i prijemnik, prvi korak   Tehnika: redovito slanje

Sada uzmi oba micro:bita. Odašiljač držiš u ruci i on šalje smjer. Prijemnik stoji na stolu i pokazuje što je primio.

odašiljač nagnut naprijed šalje broj 1, a prijemnik u istoj radio grupi pokazuje strelicu prema gore

Dva micro:bita, dva programa

Od sada imaš dva projekta, Odašiljač i Prijemnik. Lako se dogodi da program odašiljača završi na prijemniku. Zato:

  • prije prijenosa pogledaj naljepnicu na micro:bitu koji je spojen na računalo;
  • na računalo spajaj samo jedan micro:bit odjednom;
  • u oba programa postavi broj radio grupe s naljepnice;
  • odašiljač programiraj preko USB kabela, a zatim ga odspoji i spoji na battery pack.

Odašiljač: treći korak

Nastavljamo u projektu Odašiljač.

Dodaj u blok on start radio grupu s naljepnice. Dodaj još jedan blok forever, koji svake desetinke sekunde pošalje smjer.

Dodaj u program:
KADA PROGRAM POČNE
postavi radio grupu na broj s naljepnice
STALNO PONAVLJAJ (novi, drugi blok)
pošalji broj smjer
pričekaj 0,1 sekundu
odašiljač, treći korak: radio grupa i drugi blok forever koji šalje smjer

Program može imati više blokova forever, i svi rade istodobno. Prvi mjeri i pokazuje strelicu, a drugi šalje. Zašto ne sve u jednom? Blok show arrow prikazuje strelicu 0,6 sekundi i tek onda pušta program dalje. Da je slanje u istom bloku, odašiljač bi slao samo jednom u 0,6 sekundi. Ovako drugi blok šalje svake desetinke, što god radio prvi.

Zašto smjer šaljemo stalno, a ne samo kad se promijeni? Ako se jedna poruka izgubi, sljedeća stiže već za desetinku sekunde. A brže od toga ne šaljemo, jer bi se poruke gomilale.

Odašiljač je sada gotov.

Prijemnik: prvi korak

Spoji na računalo micro:bit s naljepnicom prijemnik. Napravi novi projekt i nazovi ga Prijemnik. Najprije provjeravamo samo jedno: stiže li išta? Prijemnik zato pokaže svaki broj koji primi.

Planiraj prije nego što programiraš:
KADA PROGRAM POČNE
postavi radio grupu na broj s naljepnice
KADA PRIMIM BROJ
prikaži primljeni broj
prijemnik, prvi korak: prikazuje primljeni broj

Predvidi

  • Nagneš odašiljač naprijed. Koji broj pokazuje prijemnik?
  • Odašiljač leži ravno na stolu. Koji broj pokazuje prijemnik?
  • Što bi prijemnik pokazivao da ima drugu radio grupu?

Isprobaj

Nagni odašiljač u svih pet položaja i usporedi brojeve s tablicom dogovorenih poruka iz vježbe 2. Ako ne stiže nijedan broj, provjeri radio grupu u oba programa i jesu li programi na pravim micro:bitovima.

Zatim brzo mijenjaj nagib, naprijed, natrag, pa opet naprijed. Prati li prijemnik tvoju ruku ili kasni?

Vježba 4: Broj postaje strelica

Program: prijemnik, drugi korak   Tehnika: brzo primi, polako prikaži

Nastavljamo u projektu Prijemnik. U vježbi 3 si vidio/la da prijemnik kasni kad brzo mijenjaš nagib. Zašto? Poruka stiže svake desetinke sekunde, a prikaz broja traje mnogo dulje. Poruke čekaju u redu, a prijemnik kasni sve više.

Rješenje: kad stigne broj, prijemnik ga samo zapamti. Prikazuje ga u bloku forever, i to uvijek najnoviji broj. Pravilo glasi: brzo primi, polako prikaži.

Promijeni blok on radio received: umjesto da prikaže broj, neka ga zapamti u varijabli smjer. Napravi funkciju prikaziSmjer, istu kao u odašiljaču, prema planu iz vježbe 2. Dodaj blok forever koji je poziva.

Promijeni i dodaj:
KADA PRIMIM BROJ
zapamti ga u smjer
STALNO PONAVLJAJ
prikaziSmjer (smjer)
FUNKCIJA prikaziSmjer (smjer)
(ista kao u odašiljaču)
prijemnik, drugi korak: zapamti smjer i prikaži ga u bloku forever

Funkcija je u oba programa ista. Zato oba micro:bita isti broj prikazuju istom strelicom.

Predvidi

  • Nagneš odašiljač ulijevo. Što pokazuje prijemnik?
  • Brzo mijenjaš nagib. Kasni li prijemnik sada?
  • Nagneš odašiljač naprijed i isključiš battery pack. Što će pokazivati prijemnik?

Isprobaj

Prenesi program na prijemnik i upravljaj njime. Zatim isprobaj zadnje pitanje: nagni odašiljač naprijed i isključi battery pack.

Vježba 5: Ako te ne čujem, stajem

Program: prijemnik, treći korak   Tehnika: sigurnosno pravilo

Kad isključiš odašiljač, prijemnik i dalje pokazuje zadnju strelicu, zauvijek. On ne zna da je odašiljač isključen, nego misli da je zadnja poruka još uvijek točna.

Zamisli da je prijemnik robot. Zadnja poruka je bila naprijed, a onda se odašiljaču ispraznila baterija. Robot bi vozio naprijed, sve do zida!

U radio igrama smo naučili da nitko ne javlja je li poruka stigla. Zato prijemnik mora sam primijetiti kad poruke prestanu stizati. Odašiljač šalje svake desetinke sekunde, pa u pola sekunde mora stići nekoliko poruka. Ako ne stigne nijedna, veza je prekinuta.

odašiljač je isključen, pola sekunde ne stiže nijedna poruka, pa prijemnik pokazuje X

Prijemnik zato pamti kada je stigla zadnja poruka. Koristimo štopericu iz igre mirne ruke: blok running time (ms).

Nastavljamo u projektu Prijemnik. Dodaj u blok on radio received pamćenje vremena u novu varijablu zadnjaPoruka. Promijeni blok forever: poziv funkcije stavi u if / else.

Dodaj i promijeni:
KADA PRIMIM BROJ
zapamti ga u smjer
postavi zadnjaPoruka na running time
STALNO PONAVLJAJ
AKO je running time − zadnjaPoruka > 500
prikaži X
INAČE
prikaziSmjer (smjer)
prijemnik, treći korak: sigurnosno pravilo

running time − zadnjaPoruka je vrijeme koje je prošlo od zadnje poruke. Ako je to više od 500 ms, prijemnik pokaže X: stoj. Čim poruke ponovno počnu stizati, opet pokazuje strelicu.

Ovo pravilo zovemo sigurnosno pravilo. Mnogi dronovi i autići na daljinsko upravljanje imaju slično pravilo: kad izgube vezu s upravljačem, stanu ili se spuste.

Prijemnik je sada gotov.

Predvidi

  • Uključiš prijemnik prije odašiljača. Što pokazuje prijemnik na početku? Zašto?
  • Isključiš battery pack odašiljača. Koliko brzo prijemnik pokaže X?
  • Hodaš s odašiljačem sve dalje od prijemnika. Što će se na kraju dogoditi?

Isprobaj

Isključi i uključi battery pack odašiljača i gledaj prijemnik. Zatim, uz dopuštenje voditelja, odnesi odašiljač što dalje i pogledaj kad se pojavi X.

Dodatni zadaci

  1. Istraži prag. Promijeni 20 u 10, pa u 40 (u odašiljaču, na sva četiri mjesta). S kojim brojem najlakše upravljaš? Što se događa kad je prag premalen, a što kad je prevelik? Zapiši koji ti broj najbolje odgovara.
  2. Dijagonale. Kad je odašiljač nagnut i naprijed i ulijevo, neka se pokaže kosa strelica (↖). Isto napravi za ostala tri kosa smjera. Pomoć: koristi blok and iz radio igara i nove brojeve od 5 do 8. Kose smjerove provjeri prije ravnih, jer pobjeđuje prvi ispunjeni uvjet. Funkciju prikaziSmjer promijeni na oba micro:bita.
  3. Tipke kao rezerva. Dok držiš tipku A, neka odašiljač šalje lijevo, a dok držiš B, desno, bez obzira na nagib. Pomoć: blok button A is pressed radi kao pin P1 is pressed iz igre mirne ruke.

Što slijedi?

Uskoro će prijemnik biti robot. Umjesto strelice pokretat će motore, a umjesto X-a će ih zaustaviti. Odašiljač ostaje isti.

Što smo naučili?

  • Akcelerometar osjeti na koju stranu vuče sila teža, pa micro:bit zna je li nagnut i koliko.
  • pitch je nagib naprijed-natrag, a roll nagib lijevo-desno. Blok rotation (°) vraća ga u stupnjevima.
  • Naprijed daje negativan pitch, natrag pozitivan. Lijevo daje negativan roll, desno pozitivan.
  • Mrtva zona između −20 i 20 stupnjeva brine da se strelica ne trza od malih pokreta ruke.
  • U lancu uvjeta s else if izvrši se samo prvi ispunjeni uvjet, pa je redoslijed važan.
  • Program može imati više blokova forever koji rade istodobno.
  • Program može rasti korak po korak: svaki korak dodaje nešto novo, a prije sljedećeg ga testiramo.
  • Odašiljač šalje smjer stalno, svake desetinke sekunde, a prijemnik ga brzo primi i polako prikaže.
  • Sigurnosno pravilo: kad prijemnik pola sekunde ne čuje odašiljač, stane.

Pitanja za kraj

1. Koji dio micro:bita osjeti nagib?
Akcelerometar. On osjeti na koju stranu vuče sila teža. Isti dio prepoznaje i protresanje.
2. Koja je razlika između pitch i roll?
pitch je nagib naprijed-natrag, kao kad avion spusti ili podigne nos. roll je nagib lijevo-desno, kao kad avion nagne krila.
3. Zašto koristimo blok rotation, a ne događaj tilt left?
Događaj tilt left pokrene se jednom, kad je micro:bit jako nagnut. Blok rotation stalno kaže koliko je micro:bit nagnut, u stupnjevima, a to treba za upravljanje.
4. Što je mrtva zona i zašto nam treba?
To je područje između −20 i 20 stupnjeva, u kojem micro:bit ne pokazuje nijednu strelicu. Bez nje bi strelica skakala od svakog malog pokreta ruke.
5. Odašiljač je nagnut i naprijed i ulijevo. Koju strelicu pokazuje i zašto?
Strelicu prema gore. Oba uvjeta su ispunjena, ali naprijed je u lancu prije lijevo, a izvrši se samo prvi ispunjeni uvjet.
6. Zašto odašiljač ima dva bloka forever?
Prvi mjeri nagib i prikazuje strelicu, što traje 0,6 sekundi. Drugi šalje smjer svake desetinke sekunde, bez čekanja na prvi.
7. Zašto je prijemnik u vježbi 3 kasnio kad si brzo mijenjao/la nagib?
Prikazivao je svaki broj čim je stigao, a prikaz traje dulje od desetinke sekunde. Poruke su čekale u redu, pa je prijemnik kasnio sve više. Zato u vježbi 4 broj samo zapamti, a prikazuje ga u bloku forever.
8. Što bez sigurnosnog pravila radi prijemnik kad isključiš odašiljač?
I dalje pokazuje zadnju strelicu. Da je prijemnik robot, nastavio bi voziti u zadnjem smjeru.
9. Kako prijemnik zna da je veza prekinuta?
Pamti kada je stigla zadnja poruka. Ako je od tada prošlo više od 500 ms, a odašiljač šalje svake desetinke, veza je prekinuta, pa prijemnik pokaže X.
10. Zašto prijemnik pokazuje X i kad ga uključiš prije odašiljača?
Još nije stigla nijedna poruka, pa je od zadnje poruke prošlo više od 500 ms. Za prijemnik je to isto kao prekinuta veza.