Přeskočit obsah

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í

  1. Místo přepínání barvy zpět přidejte funkci ovládání jasu
  2. Zobrazte zvolenou barvu a jas na displej (‘B1.C2’ brightness = 1, color = 2)
  3. 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:
COLOR_SCHEME = [
    (100, 0, 50),
    (200, 100, 50),
    (50, 50, 50),
]

aktuální barva

current_color = 1

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í

  1. Upravte program tak, aby místo displeje k vyjádření teploty využíval různé zvukové frekvence.
  2. 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

temp = 25.4
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í

  1. 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:
distance_cm = 1

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í

  1. 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:
MORSE_DICT= [
    ‘A’: ‘.-’,
    ‘B’: ‘-...’,
    ‘C’: ‘-.-.’,
    ‘9’: ‘----.’,
    ‘0’: ‘-----’,
]

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í

  1. 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í :

state = 3
0 = running, 1 = setting hours, 

čas

hours = 0, minutes = 0, seconds = 0

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í

  1. 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ěží
running = False
proměnná ukládající časovou hodnotu
current_time

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í

  1. 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í:
start_time = time.time_ns()

konečný čas

total_time = time.time_ns() - start_time

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í

  1. Na start hry a pro vyhodnocení přidejte jednoduchou animaci, kdy například výsledek zabliká.
  2. 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
clickable = False
running = True

čas

random_time = random.uniform(2.2, 6.6)
start_time = time.time_ns()

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í

  1. Při každém stisknutí tlačítka hráčem příslučná strana problikne, aby signalizovala, že hráč tlačítko stisknul.
  2. Kromě blikání bude signalizace probíhat i pomocí pípání dvou různých frekvencí.
  3. 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
values = []

konstanty pro rozsvícení displaye

left = '88  '
right = '  88'

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?