Projekty
Barevné světlo
Zadání
Vytvořte program pro DT-Box, který rozsvítí barevné světlo (WSLED) a umožní pomocí zvoleného tlačítka měnit barvy dle přednastaveného barevného schematu. Jedním tlačítkem se barva změní na následující, druhým na předchozí.
Rozšíření
- Místo přepínání barvy zpět přidejte funkci ovládání jasu
- Zobrazte zvolenou barvu a jas na displej (‘B1.C2’ brightness = 1, color = 2)
- Dokážete uložit současnou barvu tak, aby zůstala zvolená i po odpojení napájení?
Evokace
Představte si situaci, kdy chcete umožnit měnit barvu osvětlení podle nálady/tématu. Například v restauraci.
- Kde jinde by se to dalo využít?
- Viděli jste podobné použití v praxi?
- Jak vypadá ovládání takového zařízení? (tlačítka, nastavovací kolečka, mobilní aplikace)
- Které parametry chceme ovládat? (barva, intenzita)
- Jaké jsou požadavky na ovládání (intuitivnost, častost použití, cena)
Uvědomění
- Jaké periferie knihovny dtbox budeme potřebovat?
-
Button, WSLed
- Jak se reprezentuje barva v počítači?
- trojice hodnot RGB … 0-255
- Jaké datové reprezentace budeme potřebovat?
- barevné schema:
-
aktuální barva
Jak zjistím počet prvků v seznamu?
len(COLOR_SCHEME)
Jaká bude hlavní struktura kódu?
- konstanta pro reprezentaci barevného schématu (seznam trojic)
- proměnná aktuální barva (index do barevného schématu)
- obsluha tlačítek (funkce pro přechod na další/předchozí index)
- nekonečná smyčka, která aktualizuje barvu LED dle hodnoty
current_color
Jaké jsou rizikové stavy?
- přetečení / podtečení indexu, je třeba předcházet a hodnotu indexu rotovat, pokud je třeba
- podtečení do záporných hodnot menších, než délka slovníku nevadí, proč? Viz. záporné indexy v Pythonu.
Reflexe
Co se vám na řešení líbí/nelíbí?
Kde si dokážete představit použití vašeho řešení? (kontrola s odpověďmi u evokace)
Jak byste pozměnili projekt, aby byl lépe použitelný v praxi?
Které části implementace byly nejnáročnější?
Co byste poradili někomu, kdo se chystá vytvořit podobný projekt?
Teploměr
Zadání
Vytvořte program pro DT-Box, který bude ukazovat aktuální teplotu na sedmisegmentovém displeji.
Rozšíření
- Upravte program tak, aby místo displeje k vyjádření teploty využíval různé zvukové frekvence.
- Upravte program tak, aby sloužil jako zdravotnický teploměr tak, že bude pomocí barev na barevné diodě rozlišovat tři stavy; podchlazený, zdravý a zvýšená teplota.
Evokace
Představte si situaci, kdy potřebujete změřit teplotu.
- Například při destilaci.
- Kde jinde by se to dalo využít? (zdravotnictví)
- Viděli jste podobné použití v praxi? (domácí teploměr)
- Jak vypadá ovládání takového zařízení? (tlačítko na vypnutí a zapnutí)
Uvědomění
- Jaké periferie knihovny dtbox budeme potřebovat?
- Thermometer, Display
- Jaké datové reprezentace budeme potřebovat?
-
aktuální teplota
Jak získám teplotu z teploměru?get_temp()
Jaká bude hlavní struktura kódu?
- nekonečná smyčka aktualizující zobrazenou hodnotu na displeji
- proměnná aktuální tepolota
Reflexe
Co se vám na řešení líbí/nelíbí?
Kde si dokážete představit použití vašeho řešení? (kontrola s odpověďmi u evokace)
Jak byste pozměnili projekt, aby byl lépe použitelný v praxi?
Které části implementace byly nejnáročnější?
Co byste poradili někomu, kdo se chystá vytvořit podobný projekt?
Parkovací senzor
Zadání
Vytvořte program pro DT-Box, který bude na displeji zobrazovat aktuální vzdálenost DT-Boxu od nejbližšího objektu.
Rozšíření
- Přibližte tento program skutečnému parkovacímu senzoru tím, že místo displeje budete používat pípání, přičemž se podle vzdálenosti bude měnit frekvence pípání.
Evokace
Představte si situaci, kdy potřebujete znát vzdálenost od nějakého objektu. Například právě pro parkovací senzor.
- Kde jinde by se to dalo využít?
- Znáte zvíře, které tento princip má jako jeden ze smyslů?
Uvědomění
- Jaké periferie knihovny dtbox budeme potřebovat?
- Ultrasonic, Display
- Jaké datové reprezentace budeme potřebovat?
- aktuální vzdálenost:
Jaká bude hlavní struktura kódu?
- proměnná
distance_cm
reprezentující aktuální vzdálenost - nekonečná smyčka, která aktualizuje hodnotu na displeji
Reflexe
Co se vám na řešení líbí/nelíbí?
Kde si dokážete představit použití vašeho řešení? (kontrola s odpověďmi u evokace)
Jak byste pozměnili projekt, aby byl lépe použitelný v praxi?
Které části implementace byly nejnáročnější?
Co byste poradili někomu, kdo se chystá vytvořit podobný projekt?
Morseova abeceda
Zadání
Vytvořte program pro DT-Box, který zadaný řetězec převede do morseovy abecedy a následně přečte pomocí pípání. Mezi jednotlivými písmeny by měla být krátká pauza a mezi slovy o něco delší pauza.
Rozšíření
- Oproti jednoduššímu způsobu, kdy slovník obsahuje i číslice, číslice ze slovníku vyřaďte a místo toho vytvořte algoritmus, který převede číslici podle její hodnoty.
Evokace
Morseova abeceda se využívala hlavně v armádě.
- Proč se využívala zrovna morseova abeceda? (snadný převod do binární soustavy (.-) → (01))
- Jak vypadá ovládání takového zařízení? (jedno tlačítko, které rozpozná krátký a dlouhý stisk)
Uvědomění
- Jaké periferie knihovny dtbox budeme potřebovat?
- Buzzer
Jak převést řetězec na velká písmena?
string.upper()
- Jaké datové reprezentace budeme potřebovat?
- slovník morseovy abecedy:
Jak získám prvek ze slovníku?
MORSE_DICT[‘A’]
>>> ‘.-’
Jak zjistím, zda je znak písmeno?
character.isalpha()
Jak zjistím, zda je znak číslice?
character.isdigit()
Jaká bude hlavní struktura kódu?
- Konstanta pro reprezentaci slovníku morseovy abecedy
- Funkce char_to_morse(), která každý znak převede do morseovy abecedy
- Funkce get_morse(phrase), která pomocí předchozí metody vytvoří řetězec s celou frází převedenou do morseovy abecedy
- Funkce play_morse(code), která vypípá danou větu
Jaké jsou rizikové stavy?
- Neznámý znak (např. ‘á, @, atd…’). Je potřeba takové znaky zcela vypustit.
Reflexe
Co se vám na řešení líbí/nelíbí?
Kde si dokážete představit použití vašeho řešení? (kontrola s odpověďmi u evokace)
Jak byste pozměnili projekt, aby byl lépe použitelný v praxi?
Které části implementace byly nejnáročnější?
Co byste poradili někomu, kdo se chystá vytvořit podobný projekt?
Hodiny
Zadání
Vytvořte program pro DT-Box, který bude představovat hodiny. Čas nastaví na začátku uživatel pomocí dvou tlačítek. Hodiny by měly zobrazovat hodiny a minuty, avšak musí si pamatovat i vteřiny.
Rozšíření
- Klasické hodiny mají mezi minutami a hodinami tečku, která bliká v intervalu jedné vteřiny. Přidejte tuto funkci.
Evokace
Hodiny jsou každodenní přístroj používaný téměř každým.
- Jaké další přístroje využívají hodiny? (Budík, stopky, časovač)
- Jak vypadá ovládání takového zařízení? (tlačítka)
Uvědomění
- Jaké periferie knihovny dtbox budeme potřebovat?
- Button, Display
- Jaké datové reprezentace budeme potřebovat?
-
stav, ve kterém se hodiny nacházejí :
-
čas
Jak zjistím čas?
time.time_ns()
Jaká bude hlavní struktura kódu?
- proměnná určující stav hodin (spuštěno, nastavování hodin/minut, čekání na start)
- proměnné uchovávající čas (
hours
,minutes
,seconds
) - obsluha tlačítek (set přepínající stavy a change měnící hodnoty proměnných hours a minutes)
- nekonečná smyčka, která každou vteřinu provede přičtení do proměnné seconds a případně překreslí displej
Jaké jsou rizikové stavy?
- přetečení sekund, minut a hodin, je potřeba dodržet šedesátkovou soustavu
Reflexe
Co se vám na řešení líbí/nelíbí?
Kde si dokážete představit použití vašeho řešení? (kontrola s odpověďmi u evokace)
Jak byste pozměnili projekt, aby byl lépe použitelný v praxi?
Které části implementace byly nejnáročnější?
Co byste poradili někomu, kdo se chystá vytvořit podobný projekt?
Stopky
Zadání
Vytvořte program stopky pro DT-Box, které uživateli umožní spustit, pozastavit, znovu spustit a resetovat stopky. zároveň bude čas po celou dobu vykreslován na sedmisegmentovém displeji.
Rozšíření
- Jednodušší způsob, který nevyužívá knihovny ‘time’, je velmi nepřesný, naprogramujte s pomocí této knihovny přesnější stopky.
Evokace
Stopky jsou obecně používány pro měření určitého časového úseku.
- Kde se konkrétně využívají? (závody)
- Viděli jste podobné použití v praxi?
- Jak vypadá ovládání takového zařízení? (tlačítka, mobilní aplikace)
- Jakou funkci lze přidat? (kola)
Uvědomění
- Jaké periferie knihovny dtbox budeme potřebovat?
- Button, Display
- Jaké datové reprezentace budeme potřebovat?
-
- logická proměnná, zda stopky právě běží
- proměnná ukládající časovou hodnotu
Jaká bude hlavní struktura kódu?
- proměnná ukládající čas
- obsluha tlačítek (pozastavení a spuštění stopek)
- nekonečná smyčka využívající metody sleep_ms pro počítání času, která přičítá čas a aktualizuje hodnotu zobrazenou na displeji
Nedostatky
Metoda sleep_ms je velmi nepřesná je tedy pro toto použití nevhodná
Reflexe
Co se vám na řešení líbí/nelíbí?
Kde si dokážete představit použití vašeho řešení? (kontrola s odpověďmi u evokace)
Jak byste pozměnili projekt, aby byl lépe použitelný v praxi?
Které části implementace byly nejnáročnější?
Co byste poradili někomu, kdo se chystá vytvořit podobný projekt?
Vnitřní hodiny
Zadání
Vytvořte hru pro DT-Box, ve které uživatel bude muset stisknout tlačítko po uplynutí určitého časového úseku. Hra bude spočívat v tom, že hráč celou dobu čas neuvidí, ale uvidí ho až na konci, načež se mu zobrazí odchylka od cíleného časového úseku.
Rozšíření
- Přidejte na začátek i konec programu blikající animaci, která dodá hře lepší vzhled.
Evokace
Pomocí této hry si může hráč změřit přesnost svého vnímání času.
- K čemu je dobré mít přesné vnímání času? (vytrvalostní běžci pro udržení tempa)
- Viděli jste podobné použití v praxi?
- Jak vypadá ovládání takového zařízení? (tlačítka, nastavovací kolečka, mobilní aplikace)
- Které parametry chceme ovládat? (barva, intenzita)
- Jaké jsou požadavky na ovládání (intuitivnost, častost použití, cena)
Uvědomění
- Jaké periferie knihovny dtbox budeme potřebovat?
- Button, Display
- Jaké datové reprezentace budeme potřebovat?
- čas spuštění:
-
konečný čas
Jak spočítám absolutní hodnotu?
abs(-3)
Jaká bude hlavní struktura kódu?
- proměnné uchovávající čas
- obsluha tlačítek (spuštění, konec)
- funkce end vyhodnocující výsledek
Jaké jsou rizikové stavy?
- záporná hodnota při zastavení před skončením časomíry, nutno při odčítání použít absolutní hodnotu
Reflexe
Co se vám na řešení líbí/nelíbí?
Kde si dokážete představit použití vašeho řešení? (kontrola s odpověďmi u evokace)
Jak byste pozměnili projekt, aby byl lépe použitelný v praxi?
Které části implementace byly nejnáročnější?
Co byste poradili někomu, kdo se chystá vytvořit podobný projekt?
Test reakční doby
Zadání
Vytvořte hru pro DT-Box, která vyzkouší hráčovy reflexy tím, že po náhodné době po spuštění rozsvítí displej a hráč musí co nejrychleji stisknout tlačítko. Následně hráč dostane výsledek v podobě hodnoty reprezentující dobu, kterou hráči trvalo zareagovat. Pokud hráč stiskne tlačítko před rozsvícením, je to neplatný pokus.
Rozšíření
- Na start hry a pro vyhodnocení přidejte jednoduchou animaci, kdy například výsledek zabliká.
- Změňte program tak, aby byl pro dva hráče, kteří budou soutěžit a program ukáže vítěze.
Evokace
Představte si situaci, kdy potřebujete co nejrychleji reagovat. Například při řízení.
- Kde jinde jsou rychlé reakční schopnosti nezbytné? (sport, riziková povolání)
- Kdy jste se naposledy ocitli v situaci, kdy bylo potřeba rychlé reakce?
Uvědomění
- Jaké periferie knihovny dtbox budeme potřebovat?
- Button, Display
- Jaké datové reprezentace budeme potřebovat?
- logické hodnoty pro správnou funkčnost obsluhy tlačítek
-
čas
Jak získám náhodnou hodnotu ze zadaného rozmezí?
random.uniform(2.2, 6.6)
Jak získám absolutní hodnotu?
abs(-3)
Jaká bude hlavní struktura kódu?
- konstanta náhodného času
- proměnná času počátku
- obsluha tlačítek (start a konec)
- smyčka zajišťující, že se displej rozsvítí ve správnou chvíli
Jaké jsou rizikové stavy?
- stisknutí tlačítka před rozsvícením, je potřeba diskvalifikovat
Reflexe
Co se vám na řešení líbí/nelíbí?
Kde si dokážete představit použití vašeho řešení? (kontrola s odpověďmi u evokace)
Jak byste pozměnili projekt, aby byl lépe použitelný v praxi?
Které části implementace byly nejnáročnější?
Co byste poradili někomu, kdo se chystá vytvořit podobný projekt?
Memory game
Zadání
Vytvořte program ro DT-Box, který vytvoří náhodnou sérii čtyř logických hodnot, podle kterých postupně rozsvítí buď pravou nebo levou stranu. Hráč si tuto sekvenci musí zapamatovat a po přehrání pomocí tlačítek naklikat stejnou sekvenci.
Rozšíření
- Při každém stisknutí tlačítka hráčem příslučná strana problikne, aby signalizovala, že hráč tlačítko stisknul.
- Kromě blikání bude signalizace probíhat i pomocí pípání dvou různých frekvencí.
- Udělejte hru složitější tím, že se po každém správném zadání sekvence prodlouží.
Evokace
Představte si situaci, kdy si potřebujete zapamatovat sekvenci údajů. Například při vaření?
- Kde jinde je potřeba si pamatovat určitou sekvenci? (zneškodnéní výbušnin)
Uvědomění
- Jaké periferie knihovny dtbox budeme potřebovat?
- Button, Display
- Jaké datové reprezentace budeme potřebovat?
- sérii logických hodnot
-
konstanty pro rozsvícení displaye
Jak získám náhodnou logickou hodnotu?
values.append(random.getrandbits(1))
Reflexe
Co se vám na řešení líbí/nelíbí?
Kde si dokážete představit použití vašeho řešení? (kontrola s odpověďmi u evokace)
Jak byste pozměnili projekt, aby byl lépe použitelný v praxi?
Které části implementace byly nejnáročnější?
Co byste poradili někomu, kdo se chystá vytvořit podobný projekt?