Přejít k navigační liště

Zdroják » Různé » Microbit robůtek Cutebot s joystickem

Microbit robůtek Cutebot s joystickem

Články Různé

Nedávno mi Milan Lempera ukázat spoustu udělátek. Mimo jiné doplňky pro microbit od firmy Elecfreaks. Podíváme se na robůtka Cutebot a použití joystiku.

Text vyšel původně na webu autora.

Další „hračky“ pro potřeby kroužku aktivně nevyhledávám, ale nedokážu těm dobrým odolat. Na posledním semináři pro učitele informatiky mě přítomností poctil Milan Lempera, programátor a vedoucí kroužku, který s sebou na ukázku přivezl spoustu udělátek. Mimo jiné doplňky pro microbit od firmy Elecfreaks. Jmenovitě se chci věnovat robůtkovi Cutebot a joystiku. Ukázalo se, že škola zakoupila tři kusy verze 2, takže jsem si je hned půjčil domů, nastudoval, a zařadil na program svého kroužku.

Úvod

Z mých textů je patrné, že co se robotů týče, vybral jsem si Meet Edison a jsem s nimi spokojen (a to mluvím o verzi dva, trojku jsem ještě neměl v ruce, ale vypadá dobře). Ovšem proč nezkusit něco jiného, že?

Edison je robustní, ale neumožňuje připojovat periferie. Cutebot je opak, zašlápnutí ho asi může dost pocuchat, zato ho lze rozšiřovat.

A je nutné ho sestavit. Není to nic obtížného, ale didakticky to hodnotím pozitivně (IKEA efekt). Zatímco u robota stačí zapojit senzor a oboustrannou páskou přilepit držák baterie, tak u joysticku je nutné i šroubovat, což se u dětí na prvním stupni ukázalo jako velká výzva, která nám zabrala velkou část hodiny. Aby bylo jasno, i za šroubky a čas s nimi strávený jsem rád. Úmyslně jsem to dětem neskládal já předem.

Kód editujete normálně jak jste zvyklí na makecode.microbit.org, jen si přidáte rozšíření blokového jazyka.

Periferie

V krabici dostanete ultrazvukový senzor HC-SR04. Hned vedle konektoru pro ultrazvukový senzor najdete I2C konektor pro další moduly. To je trochu i nevýhoda, protože HC-SR04 velmi snadno vložíte do špatného konektoru a Cutebot se pak chová podivně. Prostě běžné potíže hardwarového světa.

Dále se na desce nachází i konektor pro zapojení serva, to jsem ještě nevyzkoušel.

Didaktické materiály

Líbí se mi anglické návody na webu Elecfreaks.

Edison detekuje překážku pomocí infračerveného světla, se kterým podle mě nejde dosáhnout takové přesnosti jako s ultrasonickým čidlem. Využito v lekci 10, udržování fixní vzdálenosti, říkal jsem tomu adaptivní tempomat.

Naší vrcholnou hodinou bylo ovládání Cutebotu joystickem, lekce 13.

Joystick

Joystick na sobě má vibrační motorek pro poskytnutí zpětné vazby (pozor, máte-li microbity v obalech, tak pro tento účel doporučuji sundat).

Jako úlohu ahoj světe pro joystick jsem zvolil ukazatel směru ovládaný gamepadem. V základu se jedná o čtyři směry.

Abych však jen neodkazoval na cizí návody, tak přidám něco ze své zahrádky. Děti zajímalo, jak ukazovat i úhlopříčky. To jsem z hlavy nedal, ale vypracoval jsem si v klidu za domácí úkol. V emulátoru se to ladí trochu těžkopádně, musíte si nastavovat hodnoty na analogových pinech P1 a P2. Povšimněte si inicializace joysticku, chvíli mi trvalo, než jsem přišel na, že když to zapomenu, tak joystick fungovat nebude.

Zároveň jsem se zasekl na tom, že zásadní refactoring se v blocích dělá celkem pracně. Naštěstí jsem si uvědomil, že se můžu přepnout do javascriptu, upravit si tam, a pak se opět vrátit do blokového jazyka..

joystickbit.initJoystickBit()
basic.forever(<strong>function</strong> () {
    <strong>if</strong> (joystickbit.getRockerValue(joystickbit.rockerType.Y) <strong>>=</strong> 800 <strong>&&</strong> joystickbit.getRockerValue(joystickbit.rockerType.X) <strong>>=</strong> 800) {
        basic.showArrow(ArrowNames.NorthWest)
    } <strong>else</strong> <strong>if</strong> (joystickbit.getRockerValue(joystickbit.rockerType.Y) <strong>>=</strong> 800 <strong>&&</strong> joystickbit.getRockerValue(joystickbit.rockerType.X) <strong><=</strong> 200) {
        basic.showArrow(ArrowNames.NorthEast)
    } <strong>else</strong> <strong>if</strong> (joystickbit.getRockerValue(joystickbit.rockerType.Y) <strong><=</strong> 200 <strong>&&</strong> joystickbit.getRockerValue(joystickbit.rockerType.X) <strong><=</strong> 200) {
        basic.showArrow(ArrowNames.SouthEast)
    } <strong>else</strong> <strong>if</strong> (joystickbit.getRockerValue(joystickbit.rockerType.Y) <strong><=</strong> 200 <strong>&&</strong> joystickbit.getRockerValue(joystickbit.rockerType.X) <strong>>=</strong> 800) {
        basic.showArrow(ArrowNames.SouthWest)
    } <strong>else</strong> <strong>if</strong> (joystickbit.getRockerValue(joystickbit.rockerType.X) <strong><=</strong> 200 <strong>&&</strong> (joystickbit.getRockerValue(joystickbit.rockerType.Y) <strong>></strong> 200 <strong>||</strong> joystickbit.getRockerValue(joystickbit.rockerType.Y) <strong><</strong> 800)) {
        basic.showArrow(ArrowNames.East)
    } <strong>else</strong> <strong>if</strong> (joystickbit.getRockerValue(joystickbit.rockerType.Y) <strong><=</strong> 200 <strong>&&</strong> (joystickbit.getRockerValue(joystickbit.rockerType.X) <strong>></strong> 200 <strong>||</strong> joystickbit.getRockerValue(joystickbit.rockerType.X) <strong><</strong> 800)) {
        basic.showArrow(ArrowNames.South)
    } <strong>else</strong> <strong>if</strong> (joystickbit.getRockerValue(joystickbit.rockerType.X) <strong>>=</strong> 800 <strong>&&</strong> (joystickbit.getRockerValue(joystickbit.rockerType.Y) <strong>></strong> 200 <strong>||</strong> joystickbit.getRockerValue(joystickbit.rockerType.Y) <strong><</strong> 800)) {
        basic.showArrow(ArrowNames.West)
    } <strong>else</strong> <strong>if</strong> (joystickbit.getRockerValue(joystickbit.rockerType.Y) <strong>>=</strong> 800 <strong>&&</strong> (joystickbit.getRockerValue(joystickbit.rockerType.X) <strong>></strong> 200 <strong>||</strong> joystickbit.getRockerValue(joystickbit.rockerType.X) <strong><</strong> 800)) {
        basic.showArrow(ArrowNames.North)
    } <strong>else</strong> {
        basic.showIcon(IconNames.SmallDiamond)
    }
})
Code language: PHP (php)

Kdyby vám docházely nápady, tak na joysticku můžete po stisku tlačítka ukazovat vzdálenost, kterou naměřil ultrazvukový senzor Cutebotu.

Závěr

Výrobky Elecfreaks jsou zajímavé (pravděpodobně o nich nepíšu naposledy). Cutebot i joystick ve výuce jistě využijete. Pokud byste museli vybírat jediný směr kvůli omezené časové dotaci nebo nedostatku finančních prostředku, tak zvažte, zda jste hračičkové (chcete věci spojovat a řešit případné problémy) nebo zda preferujete kompaktní a robustní řešení. Zároveň dodávám, že informatika i kroužek se zvládnou obejít bez podobných pomůcek. Určitě se nemusíte cítit provinile, pakliže je nemáte. I když pozornost dětí to přitáhne. Respektive to s pomůckami nemusíte přehánět.

Související

Komentáře

Odebírat
Upozornit na
guest
0 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
Zobrazit všechny komentáře

Stav SIMD v Rustu v roce 2025

Různé
Komentáře: 1
SIMD - neboli Single Instruction, Multiple Data - znamená, že procesor může jednou instrukcí zpracovat více datových prvků najednou. Typicky to znamená, že místo sčítání dvou čísel přičtete dvě sady čísel paralelně. To může přinést výrazné zrychlení například při zpracování obrazu, audia nebo numerických výpočtů. Pokud již SIMD znáte, tato tabulka je vše, co budete potřebovat. A pokud s SIMD teprve začínáte, tabulku pochopíte do konce tohoto článku

GPUI Component: moderní Rust GUI komponenty pro cross-platform desktop aplikace

Různé
Komentáře: 0
GPUI Component je open-source Rust knihovna rozšiřující framework GPUI o více než 60 moderních, nativních a multiplatformních UI komponent. Staví na deklarativním přístupu, stateless renderování a jednoduchém API inspirovaném Reactem či Yew. Díky optimalizovanému výkonu, podpoře témat a flexibilním layoutům umožňuje rychlý vývoj desktopových aplikací, jako je například trading nástroj Longbridge Pro. Knihovna je licencována pod Apache 2.0 a dostupná na GitHubu.