Zgodba o korejskem šolarju, ki je prejel nagrado ministrstva za sistem za spremljanje čakalnih vrst

Ko sem bil v prvem letniku srednje šole (od marca do decembra 2016), me je situacija, ki se je razvila v naši šolski jedilnici, zelo jezila.

Prva težava: predolgo čakanje v vrsti

Kakšno težavo sem opazil? Všečkaj to:

Zgodba o korejskem šolarju, ki je prejel nagrado ministrstva za sistem za spremljanje čakalnih vrst

Na razdelilišču se je zbralo veliko učencev, ki so morali stati dalj časa (pet do deset minut). Seveda je to pogosta težava in pravična shema storitev: pozneje ko prideš, kasneje te bodo postregli. Tako bi lahko razumeli, zakaj morate čakati.

Drugi problem: neenaki pogoji za čakajoče

A to seveda še ni vse, opaziti sem morala še eno, resnejšo težavo. Tako resno, da sem se končno odločil, da bom poskušal najti izhod iz situacije. Dijaki (torej vsi, ki študirajo vsaj razred višje) in učitelji so se na razdelitev odpravili brez čakanja v vrsti. Ja, ja, ti pa jim kot osnovnošolec nisi mogel nič povedati. Naša šola je imela precej strogo politiko glede odnosov med razredi.

Zato smo s prijatelji, ko smo bili novinci, najprej prišli v okrepčevalnico, tik pred hrano - potem pa so se pojavili srednješolci ali profesorji in nas preprosto odrinili (nekateri, ki so bili bolj prijazni, so nam dovolili, da ostanemo v njej). naše mesto v vrsti). Čakati smo morali dodatnih petnajst do dvajset minut, čeprav smo prišli prej kot vsi drugi.

Še posebej slabo smo se imeli v času kosila. Čez dan so čisto vsi hiteli v jedilnico (učitelji, učenci, zaposleni), tako da nam kot osnovnošolcem kosilo nikoli ni bilo v veselje.

Skupne rešitve problema

A ker novinci niso imeli izbire, smo se domislili dveh načinov, kako zmanjšati tveganje, da bi bili vrženi v zadnji del vrste. Prvi je, da pridete v jedilnico zelo zgodaj (torej dobesedno preden se hrana sploh začne streči). Drugi je, da namenoma zabijate čas z igranjem namiznega tenisa ali košarke in pridete zelo pozno (približno dvajset minut po začetku kosila).

Do neke mere je delovalo. A resnici na ljubo nihče ni bil vneto hitel v jedilnico samo zato, da bi lahko jedel, ali da bi za drugimi pojedel hladne ostanke, saj so bili med zadnjimi. Potrebovali smo rešitev, ki bi nas obvestila, ko v kavarni ni gneče.

Super bi bilo, če bi nam kakšna vedeževalka napovedala prihodnost in nam natančno povedala, kdaj naj gremo v jedilnico, da ne bi dolgo čakali. Težava je bila v tem, da se je vsak dan vse obrnilo drugače. Nismo mogli preprosto analizirati vzorcev in identificirati sladke točke. Kako je v jedilnici, smo imeli na voljo samo en način - peš, pot pa je bila lahko dolga tudi več sto metrov, odvisno od tega, kje ste. Torej, če pridete, pogledate vrsto, se vrnete in nadaljujete v istem duhu, dokler se ne skrajša, boste izgubili veliko časa. Na splošno je bilo osnovnošolskemu razredu življenje zoprno in proti temu se ni dalo nič narediti.

Eureka – ideja o izdelavi sistema za spremljanje menz

In kar naenkrat sem si že v naslednjem študijskem letu (2017) rekel: “Kaj če naredimo sistem, ki bo v realnem času prikazoval dolžino čakalne vrste (torej zaznaval zastoj)?” Če bi mi uspelo, bi bila slika takšna: osnovnošolci bi le s pogledom na svoje telefone dobili ažurne podatke o trenutni obremenitvi in ​​sklepali, ali je smiselno, da gredo zdaj. .

V bistvu je ta shema zgladila neenakost z dostopom do informacij. Z njegovo pomočjo so lahko osnovnošolci sami izbrali, kaj jim je najbolj všeč - iti in stati v vrsti (če ni bila predolga) ali čas preživeti bolj koristno, kasneje pa izbrati primernejši trenutek. Ta misel me je zelo navdušila.

Zasnova sistema za spremljanje menze

Septembra 2017 sem moral oddati projekt za tečaj objektno orientiranega programiranja in kot projekt sem oddal ta sistem.

Zgodba o korejskem šolarju, ki je prejel nagrado ministrstva za sistem za spremljanje čakalnih vrst

Začetni sistemski načrt (september 2017)

Izbor opreme (oktober 2017)

Zgodba o korejskem šolarju, ki je prejel nagrado ministrstva za sistem za spremljanje čakalnih vrst

Enostavno taktilno stikalo s vlečenim uporom. Shema s petimi ščiti v treh vrstah za prepoznavanje čakalne vrste v treh linijah

Naročil sem samo petdeset membranskih stikal, mini ploščo Wemos D1 na osnovi ESP8266 in nekaj obročastih sponk, na katere sem nameraval pritrditi emajlirane žice.

Izdelava prototipov in razvoj (oktober 2017)

Začel sem s testno ploščo - na njej sestavil vezje in ga preizkusil. Pri številu materialov sem bil omejen, zato sem se omejil na sistem s petimi stopnicami.

Za programsko opremo, ki sem jo napisal v C++, sem si zastavil naslednje cilje:

  1. Delajte neprekinjeno in pošiljajte podatke samo v času strežbe hrane (zajtrk, kosilo, večerja, popoldanska malica).
  2. Prepoznajte čakalno vrsto/prometno situacijo v kavarni pri takih frekvencah, da se lahko podatki nato uporabijo v modelih strojnega učenja (recimo 10 Hz).
  3. Strežniku pošiljajte podatke na učinkovit način (velikost paketa naj bo majhna) in v kratkih intervalih.

Da sem jih dosegel, sem moral narediti naslednje:

  1. Uporabite modul RTC (Real Time Clock) za stalno spremljanje časa in določanje, kdaj je hrana postrežena v kavarni.
  2. Uporabite metodo stiskanja podatkov za zapis stanja ščita v enem znaku. Ker sem podatke obravnaval kot petbitno binarno kodo, sem različne vrednosti preslikal v znake ASCII, tako da so predstavljali podatkovne elemente.
  3. Uporabite ThingSpeak (orodje IoT za analitiko in spletne grafikone) tako, da pošljete zahteve HTTP z metodo POST.

Seveda je bilo nekaj napak. Na primer, nisem vedel, da operator sizeof( ) vrne vrednost 4 za objekt char * in ne dolžine niza (ker ni matrika in zato prevajalnik ne izračuna dolžine) in bil sem zelo presenečen, zakaj so moje zahteve HTTP vsebovale samo štiri znake iz vseh URL-jev!

Prav tako nisem vključil oklepajev v korak #define, kar je povzročilo nepričakovane rezultate. No recimo:

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

Tukaj bi pričakovali, da bo A enako 3 (10 / 3 = 3), a dejansko je bilo izračunano drugače: 2 (2 * 5/ 3 = 2).

Nazadnje, še ena omembe vredna napaka, s katero sem se ukvarjal, je bila ponastavitev časovnika čuvaja. S to težavo sem se boril zelo dolgo. Kot se je kasneje izkazalo, sem poskušal dostopati do nizkonivojskega registra na čipu ESP8266 na napačen način (po pomoti sem vnesel vrednost NULL za kazalec na strukturo).

Zgodba o korejskem šolarju, ki je prejel nagrado ministrstva za sistem za spremljanje čakalnih vrst

Ščitnik za noge, ki sem ga oblikoval in izdelal. V času nastanka fotografije je preživel že pet tednov gaženja

Okovje (deske za noge)

Da bi zagotovili, da so ščitniki lahko preživeli težke pogoje menze, sem zanje postavil naslednje zahteve:

  • Ščiti morajo biti dovolj močni, da ves čas podpirajo človeško težo.
  • Ščitniki naj bodo tanki, da ne motijo ​​ljudi v vrsti.
  • Stikalo mora biti aktivirano, ko stopite nanj.
  • Ščitniki morajo biti vodotesni. Jedilnica je vedno mokra.

Da bi izpolnil te zahteve, sem se odločil za dvoslojno zasnovo - lasersko rezan akril za podlago in zgornji pokrov ter pluto kot zaščitno plast.

Postavitev ščita sem naredil v AutoCAD-u; dimenzije - 400 x 400 milimetrov.

Zgodba o korejskem šolarju, ki je prejel nagrado ministrstva za sistem za spremljanje čakalnih vrst

Na levi je dizajn, ki je šel v proizvodnjo. Na desni je možnost s povezavo tipa Lego

Mimogrede, desno zasnovo sem sčasoma opustil, ker se je pri takem sistemu pritrditve izkazalo, da mora biti med ščitniki 40 centimetrov, kar pomeni, da zahtevane razdalje (več kot deset metrov) nisem mogel premagati.

Zgodba o korejskem šolarju, ki je prejel nagrado ministrstva za sistem za spremljanje čakalnih vrst

Zgodba o korejskem šolarju, ki je prejel nagrado ministrstva za sistem za spremljanje čakalnih vrst

Za povezavo vseh stikal sem uporabil emajlirane žice - skupaj so potrebovale več kot 70 metrov! Na sredino vsakega ščita sem postavil membransko stikalo. Iz stranskih rež sta štrleli dve sponki - levo in desno od stikala.

No, za hidroizolacijo sem uporabil električni trak. Veliko električnega traku.

In vse je delovalo!

Obdobje od petega novembra do dvanajstega decembra

Zgodba o korejskem šolarju, ki je prejel nagrado ministrstva za sistem za spremljanje čakalnih vrst

Slika sistema - tukaj je vidnih vseh pet ščitov. Na levi je elektronika (D1-mini / Bluetooth / RTC)

XNUMX. novembra ob osmih zjutraj (čas zajtrka) je sistem začel zbirati aktualne podatke o stanju v jedilnici. Nisem mogla verjeti svojim očem. Še pred dvema mesecema sem skiciral splošno shemo, sedel doma v pižami, in tukaj smo, celoten sistem deluje brez težav ... ali pa tudi ne.

Programske napake med testiranjem

Seveda je bilo v sistemu veliko napak. Tukaj so tiste, ki se jih spomnim.

Program ni preveril razpoložljivih točk Wi-Fi, ko je poskušal odjemalca povezati z API-jem ThingSpeak. Za odpravo napake sem dodal dodaten korak za preverjanje razpoložljivosti Wi-Fi.

V nastavitveni funkciji sem večkrat klical »WiFi.begin«, dokler se ni pojavila povezava. Kasneje sem izvedel, da povezavo vzpostavi strojna programska oprema ESP8266, funkcija začetek pa se uporablja samo pri nastavitvi Wi-Fi. Situacijo sem popravil tako, da sem funkcijo poklical samo enkrat, med nastavitvijo.

Ugotovil sem, da vmesnik ukazne vrstice, ki sem ga ustvaril (namenjen je bil nastavljanju časa, spreminjanju omrežnih nastavitev), ne deluje v mirovanju (to je izven zajtrka, kosila, večerje in popoldanskega čaja). Opazil sem tudi, da se notranja zanka prekomerno pospeši, ko se beleženje ne zgodi, serijski podatki pa se berejo prehitro. Zato sem nastavil zakasnitev, tako da sistem čaka na dodatne ukaze, ki prispejo, ko se pričakujejo.

Oda psu čuvaju

Aja, pa še nekaj glede tistega problema s časovnikom watchdog - rešil sem ga ravno v fazi testiranja v "terenskih" pogojih. Brez pretiravanja je bilo to vse, o čemer sem razmišljal štiri dni. Vsak odmor (ki je trajal deset minut) sem hitel v kavarno, samo da bi preizkusil novo različico kode. In ko se je distribucija začela, sem eno uro sedel na tleh in poskušal ujeti hrošča. Na hrano sploh nisem pomislila! Hvala za vse dobre stvari, ESP8266 Watchdog!

Kako sem ugotovil WDT

Zgodba o korejskem šolarju, ki je prejel nagrado ministrstva za sistem za spremljanje čakalnih vrst

Delček kode, s katerim sem imel težave

Našel sem program ali bolje rečeno razširitev za Arduino, ki analizira podatkovno strukturo programske opreme, ko pride do ponastavitve Wdt, in dostopa do datoteke ELF prevedene kode (korelacije med funkcijami in kazalci). Ko je bilo to storjeno, se je izkazalo, da je napako mogoče odpraviti na naslednji način:

Zgodba o korejskem šolarju, ki je prejel nagrado ministrstva za sistem za spremljanje čakalnih vrst

Prekleto! No, kdo bi vedel, da je odpravljanje napak v sistemu v realnem času tako težko! Vendar sem napako odstranil in izkazalo se je, da je neumna napaka. Zaradi neizkušenosti sem napisal zanko while, v kateri je matrika presegla meje. Uf! (index++ in ++index sta dve veliki razliki).

Zgodba o korejskem šolarju, ki je prejel nagrado ministrstva za sistem za spremljanje čakalnih vrst

Težave s strojno opremo med testiranjem

Seveda je bila oprema, torej ščitniki za noge, daleč od idealne. Kot bi lahko pričakovali, se je eno od stikal zataknilo.

Zgodba o korejskem šolarju, ki je prejel nagrado ministrstva za sistem za spremljanje čakalnih vrst

XNUMX. novembra se je med kosilom zataknilo stikalo na tretji plošči

Zgoraj sem posredoval posnetek zaslona spletnega grafikona s spletnega mesta ThingSpeak. Kot lahko vidite, se je okoli 12 nekaj zgodilo, nato pa je odpovedal ščit številka tri. Posledično je bila dolžina čakalne vrste določena na 25 (vrednost je 3 * 3), čeprav v resnici ni dosegla tretjega ščita. Popravek je bil v tem, da sem dodal več oblazinjenja (da, lepilni trak), da sem stikalu dal več prostora.

Včasih je bil moj sistem dobesedno izruvan, ko se je žica ujela v vrata. Vozičke in pakete so nosili skozi ta vrata v jedilnico, tako da so s seboj nosila žico, se zaprla in potegnila iz vtičnice. V takšnih primerih sem opazil nepričakovano napako v pretoku podatkov in uganil, da je sistem odklopljen od vira napajanja.

Razširjanje informacij o sistemu po šoli

Kot že omenjeno, sem uporabil ThingSpeak API, ki vizualizira podatke na spletnem mestu v obliki grafov, kar je zelo priročno. Na splošno sem v bistvu samo objavil povezavo do svojega urnika v šolski skupini na Facebooku (to objavo sem iskal pol ure in je nisem našel - zelo čudno). Vendar sem našel objavo na mojem Bandu, šolski skupnosti, z dne 2017. novembra XNUMX:

Zgodba o korejskem šolarju, ki je prejel nagrado ministrstva za sistem za spremljanje čakalnih vrst

Zgodba o korejskem šolarju, ki je prejel nagrado ministrstva za sistem za spremljanje čakalnih vrst

Reakcija je bila divja!

Te objave sem objavil, da bi vzbudil zanimanje za svoj projekt. Vendar je že sam pogled nanje precej zabaven sam po sebi. Tukaj lahko recimo jasno vidite, da je število ljudi močno poskočilo ob 6:02 in do 6:10 praktično padlo na nič.

Zgodba o korejskem šolarju, ki je prejel nagrado ministrstva za sistem za spremljanje čakalnih vrst Zgodba o korejskem šolarju, ki je prejel nagrado ministrstva za sistem za spremljanje čakalnih vrst

Zgoraj sem priložil nekaj grafov, ki se nanašajo na kosilo in popoldanski čaj. Zanimivo je, da je bil vrh delovne obremenitve v času kosila skoraj vedno ob 12 (čakalna vrsta je dosegla peti ščit). In za popoldansko malico je na splošno neobičajna velika množica ljudi (čakalna vrsta je dolga največ eno desko).

Veš kaj je smešno? Ta sistem še vedno živi (https://thingspeak.com/channels/346781)! Prijavil sem se v račun, ki sem ga uporabljal prej, in videl tole:

Zgodba o korejskem šolarju, ki je prejel nagrado ministrstva za sistem za spremljanje čakalnih vrst

Na zgornjem grafu sem videl, da je bil tretjega decembra naval ljudi bistveno manjši. In nič čudnega – bila je nedelja. Na ta dan se skoraj vsi nekam odpravijo, saj v večini primerov le v nedeljo lahko zapustite šolsko okolico. Jasno je, da ob koncu tedna v kavarni ne boste videli žive duše.

Kako sem prejel prvo nagrado korejskega ministrstva za izobraževanje za svoj projekt

Kot lahko vidite sami, tega projekta nisem delal zato, ker sem si skušal prislužiti kakšno nagrado ali priznanje. Želel sem le uporabiti svoje sposobnosti za rešitev kronične težave, s katero sem se soočal v šoli.

Toda naša šolska nutricionistka Miss O, s katero sem se med načrtovanjem in razvojem svojega projekta zelo zbližala, me je nekega dne vprašala, ali vem za natečaj za ideje o kavarnah. Potem se mi je zdela nekakšna čudna ideja primerjati ideje za jedilnico. Prebral pa sem informator in izvedel, da je treba projekt oddati do 24. novembra! Dobro dobro. Hitro sem dodelal koncept, podatke in grafiko ter poslal prijavo.

Spremembe prvotne ideje za tekmovanje

Mimogrede, sistem, ki sem ga na koncu predlagal, je bil nekoliko drugačen od že implementiranega. V bistvu sem svojo prvotno metodo (merjenje dolžine čakalne vrste v realnem času) prilagodil za veliko večje korejske šole. Za primerjavo: na naši šoli je tristo učencev, na nekaterih drugih pa toliko ljudi v samo enem razredu! Moral sem ugotoviti, kako povečati sistem.

Zato sem predlagal koncept, ki je bolj temeljil na "ročnem" upravljanju. Dandanes so korejske šole že uvedle načrt obrokov za vse razrede, ki se ga strogo držijo, zato sem zgradil drugačen okvir tipa "signal-odziv". Ideja je bila, da ko skupina, ki je obiskala kavarno pred vami, doseže določeno mejo dolžine vrste (tj. vrsta se skrajša), vam ročno pošlje signal z gumbom ali stikalom na steni . Signal se bo prenašal na TV zaslon ali preko LED žarnic.

Zelo sem želel rešiti problem, ki se je pojavil v vseh šolah v državi. Še bolj pa sem se v svoji nameri utrdila, ko sem slišala zgodbo gospodične O - zdaj vam bom povedala. Izkazalo se je, da se v nekaterih velikih šolah vrsta celo pozimi razteza izven jedilnice, na ulico za dvajset do trideset metrov, ker nihče ne zna pravilno organizirati procesa. In včasih se zgodi, da se nekaj minut v jedilnici sploh nihče ne pojavi - in to je tudi slabo. V šolah z velikim številom učencev ima osebje komaj čas, da postreže vse, tudi če ni izgubljene niti minute časa za obrok. Zato tisti, ki na razdelitev pridejo zadnji (običajno osnovnošolci), preprosto nimajo dovolj časa za hrano.

Čeprav sem moral oddati prijavo v naglici, sem zelo dobro premislil, kako bi jo lahko prilagodil širši uporabi.

Sporočilo, da sem dobil prvo nagrado!

Skratka, povabili so me, naj svoj projekt predstavim vladnim uradnikom. Tako sem uporabil vse svoje talente za Power Point in prišel in predstavil!

Zgodba o korejskem šolarju, ki je prejel nagrado ministrstva za sistem za spremljanje čakalnih vrst

Začetek predstavitve (skrajno levo - minister)

Bila je zanimiva izkušnja – pravkar sem si izmislil nekaj za problem kavarne in se nekako znašel med zmagovalci natečaja. Tudi ko sem stala na odru, sem razmišljala: "Hm, kaj pa jaz sploh počnem tukaj?" Toda na splošno mi je ta projekt prinesel veliko korist - veliko sem se naučil o razvoju vgrajenih sistemov in izvajanju projektov v resničnem življenju. No, nagrado sem seveda prejela.

Zaključek

Tukaj je nekaj ironije: ne glede na to, koliko sem sodeloval na vseh mogočih tekmovanjih in znanstvenih sejmih, na katere sem se načrtno prijavljal, ni bilo nič dobrega. In potem me je priložnost le našla in mi dala dobre rezultate.

To me je spodbudilo k razmišljanju o razlogih, ki me motivirajo, da se lotim projektov. Zakaj se lotim dela - "zmagati" ali rešiti resničen problem v svetu okoli sebe? Če je v vašem primeru na delu drugi motiv, vam toplo priporočam, da projekta ne opustite. S tem pristopom k poslu se lahko na poti srečate z nepričakovanimi priložnostmi in ne boste čutili pritiska zaradi potrebe po zmagi – vaš glavni motivator bo strast do vašega podjetja.

In kar je najpomembnejše: če vam uspe implementirati spodobno rešitev, jo lahko takoj preizkusite v resničnem svetu. V mojem primeru je bila platforma šola, a sčasoma se izkušnje nabirajo in kdo ve – morda bo vašo aplikacijo uporabljala cela država ali celo cel svet.

Vsakič, ko pomislim na to izkušnjo, sem nekako ponosen nase. Ne morem pojasniti, zakaj, toda proces izvajanja projekta mi je preprosto prinesel veliko veselje, nagrada pa je bila dodaten bonus. Poleg tega sem bil zadovoljen, da sem sošolcem lahko rešil težavo, ki jim je vsak dan grenila življenje. Nekega dne je eden od študentov prišel do mene in rekel: "Vaš sistem je zelo priročen." Bil sem v sedmih nebesih!
Mislim, da bi bil tudi brez nagrad ponosen na svoj razvoj že zaradi tega. Mogoče mi je pomoč drugim prinesla tako zadovoljstvo ... na splošno imam rada projekte.

Kar sem upal doseči s tem člankom

Upam, da ste z branjem tega članka do konca dobili navdih, da naredite nekaj, kar bo koristilo vaši skupnosti ali celo samo vam. Spodbujam vas, da s svojimi veščinami (programiranje je zagotovo ena izmed njih, obstajajo pa tudi druge) spremenite realnost okoli sebe na bolje. Zagotavljam vam, da izkušenj, ki jih boste pridobili v procesu, ni mogoče primerjati z ničemer drugim.

Lahko tudi odpre poti, ki jih niste pričakovali – to se je zgodilo meni. Zato vas prosim, počnite, kar imate radi, in pustite svoj pečat svetu! Odmev enega samega glasu lahko pretrese ves svet, zato verjemite vase.

Tukaj je nekaj povezav, povezanih s projektom:

Vir: www.habr.com

Dodaj komentar