Úloha železniční přejezd z kroužku programování pro děti

železniční přejezd

Netriviálních úloh programování pro děti není nikdy dost. Ukážu vám úlohu Železniční přejezd, na jejímž vzniku jsem se podílel.

Text vyšel původně na autorově blogu.

Úloha železniční přejezd pochází z kroužku programování a používá robotů Meet Edison. Roboty jsem představoval v článku Hodina kódu s LightBot a Meet Edison. Tehdy jsem si pochvaloval dostatek didaktických materiálů, ale dnes už mi přijde, že tam chybí zajímavé a složitější úlohy. Ty je potřeba vymyslet.

S touto úlohou přišel Martin Javorek na @programohrajeme. Jeho varianta je složitější, využívá Python. Já jsem ji zjednodušil pro menší děti, abych vystačil jen s vizuálním „kostkovým“ jazykem.

Teoretický základ: jak funguje železniční přejezd

Po tragédii na železničním přejezdu ve Studénce jsem narazil na článek, který vysvětluje, jak fungují železniční přejezdy. Dozvíte se v něm řadu věcí, např. proč je v zákoně ustanoveno:

Řidič nesmí vjíždět na železniční přejezd, sklápějí-li se, jsou-li sklopeny nebo zdvihají-li se závory.

Pro naši potřebu si úlohu oproti reálnému přejezdu značně zjednodušíme.

Zadání

Naprogramujte chráněný železniční přejezd:

  • Závory se sklopí, když se vlak dostane do přibližovacího úseku.
  • Zdvihnou se, jakmile vjede do anulačního obvodu.
    • Anulační obvod se spouští projetím lokomotivy, musí proto být dostatečně daleko od závor. (Na kontrolu projetí posledního vagonu byste už potřebovali Python a jednalo by se o složitější úlohu.)
  • Po dobu zdvíhání a sklápění budou závory vydávat akustický a světelný výstražný signál.
  • Uvažujte pouze jednosměrný provoz.
  • Programujte v prostředí EdBlock.

@programohrajeme: Pěkná vlaková úloha s roboty, kterou postavily a naprogramovaly naše děti za nedělní dopoledne. Bylo to samozřejmě těžší, než to na první pohled vypadalo, ale úspěch, video viz původní tweet

Pro koho je úloha určená

  • Úlohu zvládnou děti od 7 let.
  • Musí již znát základy práce s robotem Meet Edison a dokázat postavit jednoduché věci z Lega.
  • Jsou potřeba základní znalosti programování, zejména koncept opakuj a posílání zpráv (ty lze probrat až v rámci této úlohy).

Úlohu lze za výrazné pomoci lektora zvládnout za 60 minut. Pokud by to měli řešit jako problém, tedy na řešení přijít co nejvíc sami, bylo by potřeba času mnohem víc.

Potřeby

  • robot Meet Edison, 3 kusy
  • vláčkodráha
  • mašinka (nemusí být nutně s pohonem) s vagony
  • libovolné Lego technic na sestavení závory a podložení robotů do správné výšky

K našemu řešení použijeme EdBlock

Pokud EdBlock neznáte, následující video vám ho představí.

Řešení

Pro každou komponentu (přibližovací úsek, závory a anulační obvod) budete potřebovat samostatného robota. Doporučuji rozlišit si přibližovací úsek a anulační bod barevnou kostičkou, abyste pak pracně nehledali záměnu.

Přibližovací úsek

Přibližovací úsek po projetí vlaku pošle zprávu přes infračervené rozhraní. Spouštěčem zprávy bude detekce překážky. Potřebujeme, aby se pro vlakovou soupravu poslala pouze jediná zpráva, takže po odeslání vložíme adekvátní pauzu. Pro potřeby ladění si můžeme rozsvítit LEDky. Navrhuji rozsvítit, pokud je přibližovací úsek připravený poslat zprávu. Po odeslání, když čeká, zhasne. Vše se opakuje v nekonečné smyčce.

Závory

Závory čekají na zprávu z přibližovacího úseku nebo anulačního obvodu. Nekontrolují, zda jim nějaká zpráva přišla víckrát. Během zdvihání i sklápění blikají a pípají. Je potřeba odladit velikost kroku a počet opakování.

 

Anulační obvod

Anulační obvod funguje úplně stejně jako přibližovací úsek. Spouštěčem je opět detekce překážky, tedy lokomotiva, nepočítáme poslední vagon soupravy. Jediný, ale podstatný, rozdíl je v tom, že pošle jinou zprávu, aby je závory dokázaly rozlišit.

 

Problémy s realizací

Při realizaci jsem narazil na dva drobné technické problémy. Za prvé jsem musel řešení zjednodušit více, než jsem chtěl, jelikož mi výrazové prostředky vizuálního jazyka nedovolily blikat a pípat i se spuštěnými závorami (respektive, aby pak byly schopné reagovat na zprávu o zvednutí). Pokud se vám někomu podaří vylepšit, budu rád za zpětnou vazbu. Za druhé jsme museli řešit to, že sklápění závory nemůže být na stejný počet kroků, jelikož dlouhá a těžká závora motor převažuje a asi o kousek přeskočí (stačí ubrat kroky). (Pozn. redakce: Jeden ze čtenářů upozornil, že problém by se vyřešil protizávažím, které se ostatně používá i u skutečných závor.)

Kromě technického problému jsem řešil i ten didaktický. Na kroužku jsem měl zhruba osm dětí a jen tři roboty, tudíž jsem potřeboval, aby pracovali v kolektivu, nikoliv samostatně. Což nemusí být na škodu, ostatně Mitchel Resnick v knize Lifelong Kindergarten prosazuje princip 4P (Projects, Passion, Peers, and Play; tedy projekty, vášeň, parťáci a hra). Nicméně kromě technické části pak potřebujete sledovat dynamiku skupiny a kromě implementačních rad případně korigovat i chování jednotlivců, když nevede ke zdárnému konci.

Související

Snažím se pořádně dělat IT, které mě živí. Jsem Javista (sňatek z rozumu), ale zamiloval jsem si Groovy. Mám blog, kam píšu i věci mimo softwarové inženýrství.

Zatím nebyl přidán žádný komentář, buďte první!

Přidat komentář
Zdroj: https://www.zdrojak.cz/?p=22352