Příběh korejského školáka, který dostal od ministerstva cenu za systém sledování front

Když jsem byl v prvním ročníku střední školy (od března do prosince 2016), velmi mě rozčilovala situace, která se v naší školní jídelně vyvinula.

Problém první: čekání ve frontě příliš dlouho

Jaký problém jsem pozoroval? Takhle:

Příběh korejského školáka, který dostal od ministerstva cenu za systém sledování front

U výdejny se shromáždilo mnoho studentů a museli dlouho stát (pět až deset minut). To je samozřejmě běžný problém a férové ​​schéma služeb: čím později dorazíte, tím později budete obslouženi. Takže byste mohli pochopit, proč musíte čekat.

Problém druhý: nerovné podmínky pro čekající

Ale to samozřejmě není vše, musel jsem pozorovat i jiný, vážnější problém. Tak vážné, že jsem se nakonec rozhodl pokusit se najít východisko ze situace. Středoškoláci (tedy všichni, kteří studují alespoň o ročník výše) a učitelé šli do distribuce bez čekání ve frontě. Ano, ano a ty jsi jim jako žák základní školy nemohl nic říct. Naše škola měla docela přísnou politiku ohledně vztahů mezi třídami.

Proto jsme s přáteli, když jsme byli nováčci, přišli do jídelny úplně první, chystali se pro jídlo - a pak se objevili středoškoláci nebo učitelé a prostě nás odstrčili (někteří, kteří byli hodnější, nám dovolili zůstat v naše místo v řadě). Museli jsme čekat dalších patnáct až dvacet minut, ačkoli jsme dorazili dříve než všichni ostatní.

V poledne jsme měli obzvlášť špatný čas. Přes den se do jídelny nahrnuli úplně všichni (učitelé, studenti, zaměstnanci), takže pro nás jako pro žáky základní školy oběd nikdy nebyl radostí.

Společná řešení problému

Protože ale nováčci neměli na výběr, vymysleli jsme dva způsoby, jak snížit riziko odhození do zadní části řady. První je přijít do jídelny velmi brzy (tedy doslova ještě předtím, než se jídlo vůbec začne podávat). Druhým je záměrně zabít čas hraním ping-pongu nebo basketbalu a přijít velmi pozdě (asi dvacet minut po začátku oběda).

Do jisté míry to fungovalo. Ale abych byl upřímný, nikdo se nechtěl co nejrychleji vrhnout do jídelny, jen aby se mohl najíst, nebo dojíst studené zbytky po ostatních, protože byli mezi posledními. Potřebovali jsme řešení, které by nám dalo vědět, když kavárna nebude přeplněná.

Bylo by skvělé, kdyby nám nějaká kartářka předpověděla budoucnost a řekla, kdy přesně máme jít do jídelny, abychom nemuseli dlouho čekat. Potíž byla v tom, že každý den všechno dopadlo jinak. Nemohli jsme jednoduše analyzovat vzory a identifikovat sladkou tečku. Měli jsme jen jeden způsob, jak zjistit, jak to v jídelně chodí – dostat se tam pěšky a cesta mohla být několik set metrů, podle toho, kde jste byli. Pokud tedy přijdete, podíváte se na řadu, vrátíte se a budete pokračovat ve stejném duchu, dokud se nezkrátí, ztratíte spoustu času. Obecně byl život pro základní třídu hnusný a nedalo se s tím nic dělat.

Eureka – myšlenka vytvoření monitorovacího systému jídelny

A najednou už v příštím akademickém roce (2017) jsem si řekl: „Co kdybychom udělali systém, který bude v reálném čase ukazovat délku fronty (tedy detekovat dopravní zácpu)?“ Kdyby se mi to podařilo, obrázek by vypadal takto: žáci základních škol by jednoduše mrkli na své telefony, aby získali aktuální data o aktuální úrovni vytížení, a vyvodili by závěry, zda má smysl jít hned .

Toto schéma v podstatě vyrovnalo nerovnost prostřednictvím přístupu k informacím. S jeho pomocí si žáci základních škol mohli sami vybrat, co je pro ně nejlepší – jít si vystát frontu (pokud nebyla příliš dlouhá) nebo trávit čas užitečněji a později si vybrat vhodnější chvíli. Tato myšlenka mě velmi vzrušovala.

Návrh monitorovacího systému jídelny

V září 2017 jsem musel odevzdat projekt na kurz objektově orientovaného programování a tento systém jsem předložil jako svůj projekt.

Příběh korejského školáka, který dostal od ministerstva cenu za systém sledování front

Počáteční systémový plán (září 2017)

Výběr vybavení (říjen 2017)

Příběh korejského školáka, který dostal od ministerstva cenu za systém sledování front

Jednoduchý dotykový spínač s pull-up rezistorem. Schéma s pěti štíty ve třech řadách pro rozpoznání fronty podél tří linií

Objednal jsem pouze padesát membránových spínačů, mini desku Wemos D1 založenou na ESP8266 a nějaké kroužkové svorky, ke kterým jsem plánoval připevnit smaltované vodiče.

Prototypování a vývoj (říjen 2017)

Začal jsem s prkénkem na krájení - sestavil jsem na něm obvod a vyzkoušel ho. Byl jsem omezen v počtu materiálů, a tak jsem se omezil na systém s pěti nášlapnými deskami.

Pro software, který jsem napsal v C++, jsem si stanovil následující cíle:

  1. Pracujte nepřetržitě a data posílejte pouze v obdobích, kdy se podává jídlo (snídaně, oběd, večeře, odpolední svačina).
  2. Rozpoznejte situaci ve frontě/provozu v jídelně na takových frekvencích, že data pak lze použít v modelech strojového učení (řekněme 10 Hz).
  3. Odesílejte data na server efektivním způsobem (velikost paketů by měla být malá) a v krátkých intervalech.

Abych jich dosáhl, musel jsem udělat následující:

  1. Pomocí modulu RTC (Real Time Clock) můžete nepřetržitě sledovat čas a určit, kdy se v jídelně podává jídlo.
  2. Pomocí metody komprese dat zaznamenejte stav štítu jedním znakem. S daty jsem zacházel jako s pětibitovým binárním kódem a namapoval jsem různé hodnoty na znaky ASCII tak, aby představovaly datové prvky.
  3. Použijte ThingSpeak (nástroj IoT pro analýzy a online grafy) odesíláním požadavků HTTP pomocí metody POST.

Samozřejmě tam byly nějaké chyby. Například jsem nevěděl, že operátor sizeof() vrací hodnotu 4 pro objekt char * a ne délku řetězce (protože to není pole, a proto kompilátor nepočítá délku) a byl jsem velmi překvapen, proč moje požadavky HTTP obsahovaly pouze čtyři znaky ze všech adres URL!

Do kroku #define jsem také nezahrnul závorky, což vedlo k neočekávaným výsledkům. No řekněme:

#define _A    2 * 5 
int a = _A / 3;

Zde by se dalo očekávat, že A bude rovno 3 (10 / 3 = 3), ale ve skutečnosti se počítalo jinak: 2 (2 * 5/ 3 = 2).

Konečně další pozoruhodnou chybou, se kterou jsem se zabýval, bylo resetování časovače hlídacího psa. S tímto problémem jsem se potýkal velmi dlouho. Jak se později ukázalo, snažil jsem se nesprávným způsobem dostat do nízkoúrovňového registru na čipu ESP8266 (omylem jsem zadal hodnotu NULL pro ukazatel na strukturu).

Příběh korejského školáka, který dostal od ministerstva cenu za systém sledování front

Štít na nohy, který jsem navrhl a postavil. V době pořízení fotografie už přežil pět týdnů přešlapování

Hardware (podnožky)

Abych zajistil, že štíty budou schopny přežít drsné podmínky jídelny, stanovil jsem na ně následující požadavky:

  • Štíty musí být dostatečně pevné, aby vždy udržely lidskou váhu.
  • Štíty by měly být tenké, aby nerušily lidi v řadě.
  • Spínač musí být aktivován při šlápnutí.
  • Štíty musí být vodotěsné. V jídelně je vždy vlhko.

Abych tyto požadavky splnil, rozhodl jsem se pro dvouvrstvé provedení - laserem řezaný akryl na základnu a vrchní kryt a korek jako ochrannou vrstvu.

Rozvržení štítu jsem vytvořil v AutoCADu; rozměry – 400 x 400 milimetrů.

Příběh korejského školáka, který dostal od ministerstva cenu za systém sledování front

Vlevo je design, který šel do výroby. Vpravo je možnost s připojením typu Lego

Mimochodem, od pravostranného provedení jsem nakonec upustil, protože s takovým fixačním systémem se ukázalo, že mezi štíty by mělo být 40 centimetrů, což znamená, že potřebnou vzdálenost (více než deset metrů) nemohu urazit.

Příběh korejského školáka, který dostal od ministerstva cenu za systém sledování front

Příběh korejského školáka, který dostal od ministerstva cenu za systém sledování front

Pro připojení všech spínačů jsem použil smaltované dráty - celkem zabraly více než 70 metrů! Do středu každého štítu jsem umístil membránový spínač. Z bočních štěrbin vyčnívaly dvě spony – nalevo a napravo od vypínače.

No, pro hydroizolaci jsem použil elektrickou pásku. Hodně elektrické pásky.

A všechno fungovalo!

Období od pátého listopadu do dvanáctého prosince

Příběh korejského školáka, který dostal od ministerstva cenu za systém sledování front

Fotografie systému - zde je vidět všech pět štítů. Vlevo je elektronika (D1-mini / Bluetooth / RTC)

XNUMX. listopadu v osm ráno (čas snídaně) začal systém sbírat aktuální data o situaci v jídelně. Nevěřil jsem svým očím. Zrovna před dvěma měsíci jsem načrtl obecné schéma, seděl jsem doma v pyžamu, a jsme tady, celý systém funguje bez problémů... nebo ne.

Softwarové chyby během testování

Chyb v systému bylo samozřejmě dost. Tady jsou ty, které si pamatuji.

Program při pokusu o připojení klienta k ThingSpeak API nezkontroloval dostupné Wi-Fi body. Abych chybu napravil, přidal jsem další krok ke kontrole dostupnosti Wi-Fi.

Ve funkci nastavení jsem opakovaně volal „WiFi.begin“, dokud se neobjevilo připojení. Později jsem zjistil, že připojení je navázáno firmwarem ESP8266 a funkce begin se používá pouze při nastavování Wi-Fi. Situaci jsem napravil tak, že jsem funkci zavolal pouze jednou, během nastavování.

Zjistil jsem, že rozhraní příkazového řádku, které jsem vytvořil (mělo to nastavit čas, změnit nastavení sítě), nefunguje v klidu (tedy mimo snídani, oběd, večeři a odpolední čaj). Také jsem viděl, že když nedochází k žádnému protokolování, vnitřní smyčka se nadměrně zrychluje a sériová data se čtou příliš rychle. Proto jsem nastavil zpoždění, aby systém čekal na další příkazy, které přijdou, když jsou očekávány.

Óda na hlídacího psa

Jo a ještě jedna věc k tomu problému s hlídacím časovačem - vyřešil jsem to přesně ve fázi testování v „polních“ podmínkách. Bez nadsázky to bylo vše, na co jsem čtyři dny myslel. Každou přestávku (trvající deset minut) jsem spěchal do bufetu, abych vyzkoušel novou verzi kódu. A když se otevřela distribuce, seděl jsem hodinu na podlaze a snažil se chytit brouka. Na jídlo jsem ani nepomyslel! Díky za všechny dobré věci, Hlídací pes ESP8266!

Jak jsem přišel na WDT

Příběh korejského školáka, který dostal od ministerstva cenu za systém sledování front

Úryvek kódu, se kterým jsem se potýkal

Našel jsem program, nebo spíše rozšíření pro Arduino, který analyzuje datovou strukturu softwaru, když dojde k Wdt-resetu, a přistupuje k souboru ELF zkompilovaného kódu (korelace mezi funkcemi a ukazateli). Když se to stalo, ukázalo se, že chybu lze odstranit následovně:

Příběh korejského školáka, který dostal od ministerstva cenu za systém sledování front

Sakra! Kdo věděl, že oprava chyb v systému v reálném čase je tak obtížná! Chybu jsem však odstranil a ukázalo se, že je to hloupá chyba. Kvůli mé nezkušenosti jsem napsal smyčku while, ve které pole překročilo hranice. Fuj! (index++ a ++index jsou dva velké rozdíly).

Příběh korejského školáka, který dostal od ministerstva cenu za systém sledování front

Problémy s hardwarem během testování

Samozřejmě vybavení, tedy štíty na nohy, mělo k ideálu daleko. Jak můžete očekávat, jeden z přepínačů je zaseknutý.

Příběh korejského školáka, který dostal od ministerstva cenu za systém sledování front

XNUMX. listopadu během oběda se zasekl vypínač na třetím panelu

Výše jsem poskytl snímek online grafu z webu ThingSpeak. Jak vidíte, kolem 12:25 se stalo něco, načež selhal štít číslo tři. V důsledku toho byla délka fronty určena na 3 (hodnota je 3 * 100), i když ve skutečnosti nedosáhla třetího štítu. Oprava spočívala v tom, že jsem přidal další vycpávky (ano, lepicí pásku), abych dal přepínači více místa.

Někdy byl můj systém doslova vykořeněný, když se drát zachytil ve dveřích. Těmito dveřmi se do jídelny vozily vozíky a balíky, takže drát nesl s sebou, zavíral se a vytahoval ze zásuvky. V takových případech jsem zaznamenal neočekávanou poruchu v toku dat a uhodl jsem, že systém byl odpojen od zdroje napájení.

Šíření informací o systému po celé škole

Jak již bylo zmíněno, použil jsem ThingSpeak API, které vizualizuje data na webu ve formě grafů, což je velmi pohodlné. Obecně jsem v podstatě jen zveřejnil odkaz na svůj rozvrh ve školní facebookové skupině (hledal jsem tento příspěvek půl hodiny a nemohl jsem ho najít - velmi zvláštní). Ale našel jsem příspěvek na mé kapele, školní komunitě, s datem 2017. listopadu XNUMX:

Příběh korejského školáka, který dostal od ministerstva cenu za systém sledování front

Příběh korejského školáka, který dostal od ministerstva cenu za systém sledování front

Reakce byla divoká!

Tyto příspěvky jsem zveřejnil, abych vzbudil zájem o můj projekt. Už jen pohled na ně je však sám o sobě docela zábavný. Řekněme, že zde jasně vidíte, že počet lidí prudce vyskočil v 6:02 a prakticky klesl na nulu v 6:10.

Příběh korejského školáka, který dostal od ministerstva cenu za systém sledování front Příběh korejského školáka, který dostal od ministerstva cenu za systém sledování front

Výše jsem připojil pár grafů, které se týkají oběda a odpoledního čaje. Je zajímavé, že vrchol zátěže v době oběda nastával téměř vždy ve 12:25 (fronta dosáhla pátého štítu). A na odpolední svačinu je obecně netypické mít velký dav lidí (fronta je dlouhá maximálně jedno prkno).

Víš co je vtipný? Tento systém stále žije (https://thingspeak.com/channels/346781)! Přihlásil jsem se do účtu, který jsem používal dříve a viděl jsem toto:

Příběh korejského školáka, který dostal od ministerstva cenu za systém sledování front

V grafu výše jsem viděl, že třetího prosince byl příliv lidí výrazně menší. A není divu – byla neděle. V tento den se téměř každý někam vydá, protože ve většině případů lze opustit areál školy pouze v neděli. Je jasné, že o víkendu v kavárně neuvidíte živou duši.

Jak jsem za svůj projekt dostal první cenu od korejského ministerstva školství

Jak můžete sami vidět, na tomto projektu jsem nepracoval, protože jsem se snažil získat nějaké ocenění nebo uznání. Chtěl jsem jen využít své schopnosti k vyřešení chronického problému, kterému jsem čelil ve škole.

Naše školní výživová poradkyně slečna O, se kterou jsem se při plánování a vývoji svého projektu velmi sblížila, se mě však jednoho dne zeptala, zda nevím o soutěži nápadů na kavárny. Pak mě napadlo, že je to nějaký zvláštní nápad porovnávat nápady na jídelnu. Ale přečetl jsem si informační brožuru a dozvěděl jsem se, že projekt musí být podán do 24. listopadu! Ale Ale. Rychle jsem dokončil koncept, data a grafiku a odeslal přihlášku.

Změny původního nápadu soutěže

Mimochodem, systém, který jsem nakonec navrhl, se mírně lišil od již implementovaného. V podstatě jsem svou původní metodu (měření délky fronty v reálném čase) upravil pro mnohem větší korejské školy. Pro srovnání: v naší škole je tři sta studentů a v některých jiných je tolik lidí v jedné třídě! Potřeboval jsem přijít na to, jak škálovat systém.

Proto jsem navrhl koncept, který byl více založen na „ručním“ ovládání. V současné době již korejské školy zavedly jídelní plán pro všechny třídy, který je striktně dodržován, proto jsem vytvořil jiný rámec typu „signál-odezva“. Myšlenka byla taková, že když skupina navštěvující bufet před vámi dosáhne určitého limitu délky fronty (to znamená, že se fronta zkrátí), ručně vám pošle signál pomocí tlačítka nebo vypínače na zdi. . Signál bude přenášen na televizní obrazovku nebo prostřednictvím LED žárovek.

Opravdu jsem chtěl vyřešit problém, který se objevil na všech školách v zemi. Ještě více jsem byl ve svém záměru posílen, když jsem slyšel příběh od slečny O – teď vám ho povím. Ukazuje se, že v některých velkých školách se řada i v zimě táhne za bufet, do ulice na dvacet až třicet metrů, protože ten proces nikdo neumí pořádně zorganizovat. A někdy se stane, že se několik minut v jídelně vůbec nikdo neobjeví - a to je také špatné. Ve školách s velkým počtem studentů mají zaměstnanci sotva čas obsloužit všechny, i když nepromarní ani minutu jídla. Proto ti, kteří dorazí do distribuce jako poslední (většinou žáci základních škol), prostě nemají dostatek času na jídlo.

Takže, i když jsem musel svou žádost podat narychlo, velmi pečlivě jsem přemýšlel, jak bych ji mohl přizpůsobit pro širší použití.

Zpráva, že jsem vyhrál první cenu!

Stručně řečeno, byl jsem pozván, abych přišel a představil svůj projekt vládním úředníkům. Takže jsem dal do práce všechny své talenty v Power Pointu a přišel jsem a prezentoval!

Příběh korejského školáka, který dostal od ministerstva cenu za systém sledování front

Začátek prezentace (zcela vlevo - ministr)

Byla to zajímavá zkušenost - právě jsem vymyslel něco pro problém s kafeterií a nějak jsem skončil mezi vítězi soutěže. I když jsem stál na pódiu, stále jsem si říkal: "Hmm, co tady vůbec dělám?" Obecně mi ale tento projekt přinesl velký přínos – naučil jsem se hodně o vývoji embedded systémů a implementaci projektů v reálném životě. No, samozřejmě jsem dostal cenu.

Závěr

Je tu jistá ironie: jakkoli jsem se účastnil nejrůznějších soutěží a vědeckých veletrhů, kam jsem se cíleně přihlásil, nic dobrého z toho nebylo. A pak mě ta příležitost prostě našla a dala mi dobré výsledky.

To mě přimělo přemýšlet o důvodech, které mě motivují k tomu, abych se pustil do projektů. Proč začínám pracovat – abych „vyhrál“ nebo vyřešil skutečný problém ve světě kolem mě? Pokud ve vašem případě funguje druhý motiv, důrazně vám doporučuji, abyste projekt neopouštěli. S tímto přístupem k podnikání se můžete po cestě setkat s nečekanými příležitostmi a nebudete pociťovat tlak z potřeby vyhrát – vaším hlavním motivátorem bude vášeň pro vaše podnikání.

A hlavně: pokud se vám podaří implementovat slušné řešení, můžete si ho hned vyzkoušet v reálném světě. V mém případě byla platforma škola, ale postupem času se zkušenosti kumulují a kdo ví – třeba vaši aplikaci využije celá země nebo dokonce celý svět.

Pokaždé, když o této zkušenosti přemýšlím, jsem na sebe hrdý. Nedokážu vysvětlit proč, ale proces realizace projektu mi prostě přinesl velké potěšení a cena byla dalším bonusem. Navíc mě potěšilo, že jsem mohl za své spolužáky vyřešit problém, který jim každý den ničil život. Jednoho dne za mnou přišel jeden ze studentů a řekl: "Váš systém je velmi pohodlný." Byl jsem v sedmém nebi!
Myslím, že i bez jakýchkoliv ocenění bych byl na svůj vývoj hrdý. Možná mi takové uspokojení přinesla pomoc druhým... obecně projekty miluji.

Čeho jsem chtěl tímto článkem dosáhnout

Doufám, že přečtením tohoto článku až do konce jste byli inspirováni k tomu, abyste udělali něco, co prospěje vaší komunitě nebo dokonce jen vám samotným. Doporučuji vám využít své dovednosti (programování je určitě jednou z nich, ale existují i ​​​​jiné), abyste změnili realitu kolem sebe k lepšímu. Mohu vás ujistit, že zkušenosti, které tím získáte, se nedají s ničím jiným srovnávat.

Může také otevřít cesty, které jste nečekali – to se mi stalo. Takže prosím, dělejte to, co máte rádi, a udělejte svou stopu ve světě! Ozvěna jediného hlasu může otřást celým světem, tak si věřte.

Zde je několik odkazů souvisejících s projektem:

Zdroj: www.habr.com

Přidat komentář