Lugu Korea koolipoisist, kes sai ministeeriumilt auhinna järjekorra jälgimise süsteemi eest

Kui ma õppisin keskkooli nooremas klassis (märtsist detsembrini 2016), ärritas mind väga olukord, mis meie koolisööklas välja kujunes.

Probleem üks: liiga kaua järjekorras ootamine

Millist probleemi ma täheldasin? Nagu nii:

Lugu Korea koolipoisist, kes sai ministeeriumilt auhinna järjekorra jälgimise süsteemi eest

Jaotusalale kogunes palju õpilasi ja nad pidid kaua (viis kuni kümme minutit) seisma. Loomulikult on see tavaline probleem ja aus teenindusskeem: mida hiljem jõuate, seda hiljem teid teenindatakse. Nii et saate aru, miks peate ootama.

Probleem kaks: ebavõrdsed tingimused ootajatele

Kuid see pole muidugi veel kõik; pidin jälgima ka teist, tõsisemat probleemi. Nii tõsine, et otsustasin lõpuks proovida olukorrast väljapääsu leida. Gümnaasiumiõpilased (ehk kõik, kes õpivad vähemalt klassi võrra kõrgemal) ja õpetajad läksid jagamisele järjekorras ootamata. Jah, jah, ja sina algklassiõpilasena ei osanud neile midagi öelda. Meie koolis oli klassidevaheliste suhete osas üsna range poliitika.

Seetõttu tulime mina ja mu sõbrad, kui olime algajad, kohvikusse kõige esimesena, tahtsime süüa saama – ja siis ilmusid gümnasistid või õpetajad ja lükkasid meid lihtsalt kõrvale (mõned, kes olid lahkemad, lubasid meil sinna jääda. meie koht järjekorras). Pidime veel viisteist kuni kakskümmend minutit ootama, kuigi jõudsime kohale varem kui kõik teised.

Lõuna ajal oli meil eriti halb. Päeval tormasid kohvikusse absoluutselt kõik (õpetajad, õpilased, töötajad), nii et meile kui algklassilastele ei valmistanud lõunasöök kordagi rõõmu.

Ühised lahendused probleemile

Aga kuna uutel tulijatel polnud valikut, siis mõtlesime välja kaks võimalust, kuidas vähendada rivi taha paiskumise ohtu. Esimene on tulla söögituppa väga varakult (st sõna otseses mõttes enne, kui toitu üldse serveerima hakatakse). Teine eesmärk on pingpongi või korvpalli mängides tahtlikult aega surnuks lüüa ja saabuda väga hilja (umbes kakskümmend minutit pärast lõunasöögi algust).

Mingil määral see töötas. Aga ausalt öeldes ei tahtnud keegi nii kiiresti kui võimalik söögituppa tormata, et lihtsalt süüa saada, või teiste järel külmad toidujäägid ära lõpetada, sest nad olid viimaste seas. Vajasime lahendust, mis annaks meile teada, kui kohvikus pole rahvast täis.

Tore oleks, kui mõni ennustaja meile tulevikku ennustaks ja täpselt sööklasse minemise aja ütleks, et ei peaks kaua ootama. Häda oli selles, et iga päev läks kõik erinevalt. Me ei saanud lihtsalt mustreid analüüsida ja magusat kohta tuvastada. Meil oli ainult üks viis, kuidas söögitoas asjad selgeks teha – jõuda sinna jalgsi ja tee võis olla mitusada meetrit, olenevalt sellest, kus sa asud. Nii et kui tulete, vaatate liini, tulete tagasi ja jätkate samas vaimus, kuni see jääb lühikeseks, raiskate palju aega. Üldiselt oli elu algklasside jaoks vastik ja sellega ei saanud midagi parata.

Eureka – idee luua söökla seiresüsteem

Ja järsku, juba järgmisel õppeaastal (2017), ütlesin endale: "Mis siis, kui teeme süsteemi, mis näitab järjekorra pikkust reaalajas (st tuvastab liiklusummiku)?" Kui see mul oleks õnnestunud, oleks pilt olnud selline: algklassiõpilased heitsid lihtsalt pilgu oma telefonidele, et saada värskeid andmeid praeguse töökoormuse taseme kohta, ja teeksid järeldusi, kas neil on mõtet nüüd minna. .

Põhimõtteliselt silus see skeem teabele juurdepääsu kaudu ebavõrdsust. Selle abiga said algklassilapsed ise valida, mis neil kõige parem teha on - minna sabas seisma (kui see polnud liiga pikk) või kasulikumalt aega veeta ning hiljem valida sobivama hetke. Olin sellest mõttest väga elevil.

Söökla seiresüsteemi projekteerimine

2017. aasta septembris pidin esitama projekti objektorienteeritud programmeerimise kursusele ja selle süsteemi esitasin oma projektina.

Lugu Korea koolipoisist, kes sai ministeeriumilt auhinna järjekorra jälgimise süsteemi eest

Esialgne süsteemiplaan (september 2017)

Seadmete valik (oktoober 2017)

Lugu Korea koolipoisist, kes sai ministeeriumilt auhinna järjekorra jälgimise süsteemi eest

Lihtne puutetundlik lüliti ülestõmbetakistiga. Skeem viie kilbiga kolmes reas järjekorra tuvastamiseks kolmel real

Tellisin vaid viiskümmend membraanlülitit, Wemos D1 miniplaadi ESP8266 baasil ja mõned rõngasklambrid, mille külge plaanisin emailitud juhtmed kinnitada.

Prototüüpimine ja arendus (oktoober 2017)

Alustasin leivalauaga – panin sellele vooluringi kokku ja katsetasin. Mul oli materjalide hulk piiratud, seega piirdusin viie jalalauaga süsteemiga.

C++-s kirjutatud tarkvara jaoks seadsin järgmised eesmärgid:

  1. Töötage pidevalt ja saatke andmeid ainult toidu serveerimisel (hommikusöök, lõuna, õhtusöök, pärastlõunane suupiste).
  2. Tuvastage kohvikus järjekorra/liikluse olukord sellistel sagedustel, et andmeid saaks seejärel kasutada masinõppemudelites (näiteks 10 Hz).
  3. Saatke andmeid serverisse tõhusalt (paketi suurus peaks olema väike) ja lühikeste ajavahemike järel.

Nende saavutamiseks pidin tegema järgmist:

  1. Kasutage moodulit RTC (Real Time Clock), et jälgida pidevalt kellaaega ja määrata, millal kohvikus toitu serveeritakse.
  2. Varjestuse oleku salvestamiseks ühe märgiga kasutage andmete tihendamise meetodit. Käsitledes andmeid viiebitise binaarkoodina, vastendasin erinevad väärtused ASCII-märkidega, nii et need esindasid andmeelemente.
  3. Kasutage ThingSpeaki (IoT tööriist analüütika ja veebidiagrammi koostamiseks), saates HTTP-päringuid POST-meetodi abil.

Muidugi olid mõned vead. Näiteks ma ei teadnud, et operaator sizeof( ) tagastab char * objekti väärtuse 4, mitte stringi pikkuse (kuna see pole massiiv ja seetõttu ei arvuta kompilaator pikkust) ja olin väga üllatunud, miks minu HTTP-päringud sisaldasid kõigist URL-idest ainult nelja tähemärki!

Samuti ei lisanud ma sammu #define sulgusid, mis viis ootamatute tulemusteni. No ütleme:

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

Siin võiks eeldada, et A võrdub 3 (10 / 3 = 3), kuid tegelikult arvutati see erinevalt: 2 (2 * 5/ 3 = 2).

Lõpuks, veel üks tähelepanuväärne viga, millega tegelesin, oli valvekoera taimeri lähtestamine. Ma võitlesin selle probleemiga väga pikka aega. Nagu hiljem selgus, üritasin ESP8266 kiibi madala taseme registrile pääseda valel viisil (sisestasin kogemata struktuurile osutava kursori väärtuse NULL).

Lugu Korea koolipoisist, kes sai ministeeriumilt auhinna järjekorra jälgimise süsteemi eest

Jalakaitse, mille kujundasin ja ehitasin. Foto tegemise ajal oli ta juba viis nädalat trampimist üle elanud

Riistvara (jalalauad)

Tagamaks, et kilbid suudaksid söökla karmides tingimustes ellu jääda, seadsin neile järgmised nõuded:

  • Kilbid peavad olema piisavalt tugevad, et toetada inimese raskust kogu aeg.
  • Kilbid peaksid olema õhukesed, et mitte segada järjekorras olevaid inimesi.
  • Lüliti peab peale astumisel olema aktiveeritud.
  • Kilbid peavad olema veekindlad. Söögituba on alati niiske.

Nende nõuete täitmiseks otsustasin kahekihilise disainiga - laseriga lõigatud akrüül alus- ja pealiskatteks ning kork kaitsekihiks.

Kilbi paigutuse tegin AutoCADis; mõõtmed - 400 x 400 millimeetrit.

Lugu Korea koolipoisist, kes sai ministeeriumilt auhinna järjekorra jälgimise süsteemi eest

Vasakul on tootmisse läinud kujundus. Paremal on Lego-tüüpi ühendusega võimalus

Muide, parempoolsest kujundusest ma lõpuks loobusin, sest sellise kinnitussüsteemiga selgus, et kilpide vahele peaks jääma 40 sentimeetrit, mis tähendab, et ma ei saanud nõutavat vahemaad (üle kümne meetri) läbida.

Lugu Korea koolipoisist, kes sai ministeeriumilt auhinna järjekorra jälgimise süsteemi eest

Lugu Korea koolipoisist, kes sai ministeeriumilt auhinna järjekorra jälgimise süsteemi eest

Kõigi lülitite ühendamiseks kasutasin emaili juhtmeid - kokku kulus neid üle 70 meetri! Panin iga kilbi keskele membraanlüliti. Külgmistest piludest ulatusid välja kaks klambrit - lülitist vasakule ja paremale.

No hüdroisolatsiooniks kasutasin elektrilinti. Palju elektrilinti.

Ja kõik töötas!

Ajavahemik viiendast novembrist kuni kaheteistkümnenda detsembrini

Lugu Korea koolipoisist, kes sai ministeeriumilt auhinna järjekorra jälgimise süsteemi eest

Süsteemi foto - kõik viis kilpi on siin nähtavad. Vasakul on elektroonika (D1-mini / Bluetooth / RTC)

XNUMX. novembril hommikul kell kaheksa (hommikusöögi aeg) alustas süsteem jooksvate andmete kogumist olukorra kohta sööklas. Ma ei uskunud oma silmi. Alles kaks kuud tagasi visandasin ma üldskeemi, istusin pidžaamas kodus ja siin me oleme, kogu süsteem töötab ilma tõrgeteta... või mitte.

Tarkvaravead testimise ajal

Loomulikult oli süsteemis palju vigu. Siin on need, mida ma mäletan.

Programm ei kontrollinud saadaolevaid WiFi-punkte, kui üritas klienti ThingSpeak API-ga ühendada. Vea parandamiseks lisasin Wi-Fi saadavuse kontrollimiseks täiendava sammu.

Seadistusfunktsioonis helistasin korduvalt "WiFi.begin", kuni tekkis ühendus. Hiljem sain teada, et ühenduse loob ESP8266 püsivara ja algusfunktsiooni kasutatakse ainult Wi-Fi seadistamisel. Parandasin olukorra, kutsudes funktsiooni ainult üks kord, seadistamise ajal.

Avastasin, et minu loodud käsurea liides (see oli mõeldud kellaaja määramiseks, võrguseadete muutmiseks) ei tööta puhkeolekus (st väljaspool hommiku-, lõuna-, õhtusööki ja pärastlõunateed). Samuti nägin, et kui logimist ei toimu, kiireneb sisemine ahel liigselt ja jadaandmeid loetakse liiga kiiresti. Seetõttu seadsin viivituse, et süsteem ootaks täiendavate käskude saabumist siis, kui neid oodatakse.

Ood valvekoerale

Oh, ja veel üks asi selle probleemi kohta valvekoera taimeriga - lahendasin selle täpselt testimisetapis "välitingimustes". Ilma liialduseta oli see kõik, millele ma nelja päeva jooksul mõtlesin. Igal pausil (kestvus kümme minutit) tormasin kohvikusse lihtsalt selleks, et koodi uut versiooni proovida. Ja kui jaotus avanes, istusin tund aega põrandal ja püüdsin putukat tabada. Ma isegi ei mõelnud toidule! Aitäh kõigi heade asjade eest, ESP8266 Watchdog!

Kuidas ma WDT-le aru sain

Lugu Korea koolipoisist, kes sai ministeeriumilt auhinna järjekorra jälgimise süsteemi eest

Koodilõik, millega mul oli probleeme

Leidsin programmi või õigemini Arduino laienduse, mis Wdt-reset’i toimumisel analüüsib tarkvara andmestruktuuri, pääsedes ligi koostatud koodi ELF failile (funktsioonide ja osutite seosed). Kui see tehtud, selgus, et vea saab kõrvaldada järgmiselt:

Lugu Korea koolipoisist, kes sai ministeeriumilt auhinna järjekorra jälgimise süsteemi eest

Pagan võtaks! Noh, kes teadis, et vigade parandamine reaalajas süsteemis oli nii keeruline! Siiski eemaldasin vea ja see osutus lolliks veaks. Oma kogenematuse tõttu kirjutasin ajatsükli, milles massiiv läks üle piiride. Uhh! (indeks++ ja ++indeks on kaks suurt erinevust).

Lugu Korea koolipoisist, kes sai ministeeriumilt auhinna järjekorra jälgimise süsteemi eest

Probleemid riistvaraga testimise ajal

Muidugi polnud varustus ehk jalakaitsed kaugeltki ideaalne. Nagu arvata võis, on üks lülititest kinni.

Lugu Korea koolipoisist, kes sai ministeeriumilt auhinna järjekorra jälgimise süsteemi eest

XNUMX. novembril lõuna ajal jäi kolmanda paneeli lüliti kinni

Ülalpool olen esitanud ThingSpeaki veebisaidi veebigraafiku ekraanipildi. Nagu näha, juhtus midagi kella 12:25 paiku, misjärel kilp number kolm ebaõnnestus. Selle tulemusel määrati järjekorra pikkuseks 3 (väärtus on 3 * 100), isegi kui see tegelikult ei jõudnud kolmanda kilbini. Parandus oli see, et lisasin rohkem polsterdust (jah, kleeplint), et anda lülitile rohkem ruumi.

Mõnikord läks mu süsteem sõna otseses mõttes välja, kui juhe ukse vahele jäi. Selle ukse kaudu viidi kärud ja pakid söögituppa, nii et see kandis juhtme endaga kaasa, sulgedes ja tõmmates selle pistikupesast välja. Sellistel juhtudel märkasin andmevoos ootamatut tõrget ja aimasin, et süsteem on toiteallikast lahti ühendatud.

Süsteemi puudutava teabe levitamine kogu koolis

Nagu juba mainitud, kasutasin ThingSpeak API-t, mis visualiseerib saidil olevaid andmeid graafikute kujul, mis on väga mugav. Üldiselt postitasin ma lihtsalt kooli Facebooki gruppi oma ajakava lingi (otsisin seda postitust pool tundi ja ei leidnud - väga imelik). Kuid leidsin oma Bändist, kooli kogukonnast, postituse 2017. novembril XNUMX:

Lugu Korea koolipoisist, kes sai ministeeriumilt auhinna järjekorra jälgimise süsteemi eest

Lugu Korea koolipoisist, kes sai ministeeriumilt auhinna järjekorra jälgimise süsteemi eest

Reaktsioon oli metsik!

Postitasin need postitused, et tekitada huvi oma projekti vastu. Kuid isegi nende vaatamine on iseenesest üsna meelelahutuslik. Oletame, et siin on selgelt näha, et inimeste arv hüppas järsult 6:02 ja langes praktiliselt nulli 6:10.

Lugu Korea koolipoisist, kes sai ministeeriumilt auhinna järjekorra jälgimise süsteemi eest Lugu Korea koolipoisist, kes sai ministeeriumilt auhinna järjekorra jälgimise süsteemi eest

Ülalpool olen lisanud paar graafikut, mis on seotud lõuna- ja pärastlõunateega. Huvitav on märkida, et lõuna ajal oli töökoormuse tippaeg peaaegu alati kell 12:25 (järjekord ulatus viienda kilbini). Ja pärastlõunaseks suupisteks on üldiselt ebaloomulik, et rahvast on palju (järjekord on maksimaalselt ühe laua pikkune).

Teate, mis on naljakas? See süsteem on endiselt elus (https://thingspeak.com/channels/346781)! Logisin sisse kontole, mida varem kasutasin ja nägin järgmist:

Lugu Korea koolipoisist, kes sai ministeeriumilt auhinna järjekorra jälgimise süsteemi eest

Ülaltoodud graafikult nägin, et kolmandal detsembril oli inimeste juurdevool oluliselt väiksem. Ja pole ime – oli pühapäev. Sel päeval lähevad peaaegu kõik kuhugi, sest enamasti saab kooli territooriumilt lahkuda vaid pühapäeval. Selge on see, et nädalavahetusel ei näe kohvikus elavat hinge.

Kuidas ma sain oma projekti eest Korea haridusministeeriumilt esimese auhinna

Nagu te ise näete, ei töötanud ma selle projekti kallal, sest püüdsin teenida mingit auhinda või tunnustust. Tahtsin lihtsalt kasutada oma oskusi, et lahendada krooniline probleem, millega koolis silmitsi seisin.

Meie kooli toitumisnõustaja preili O, kellega ma oma projekti kavandades ja arendades väga lähedaseks sain, küsis aga ühel päeval, kas ma tean kohvikuideede konkursist. Siis mõtlesin, et see on mingi imelik idee võrrelda söögitoa ideid. Aga lugesin infovoldikut ja sain teada, et projekt tuleb esitada 24. novembriks! Hästi hästi. Lõpetasin kiiresti kontseptsiooni, andmed ja graafika ning saatsin avalduse.

Muudatused konkursi algidees

Muide, süsteem, mille ma lõpuks välja pakkusin, erines veidi juba rakendatud süsteemist. Põhimõtteliselt kohandasin oma algset meetodit (järjekorra pikkuse mõõtmine reaalajas) palju suuremate Korea koolide jaoks. Võrdluseks: meie koolis on kolmsada õpilast, mõnes teises aga nii palju inimesi ühes klassis! Mul oli vaja välja mõelda, kuidas süsteemi skaleerida.

Seetõttu pakkusin välja kontseptsiooni, mis põhines rohkem "käsitsi" juhtimisel. Tänapäeval on Korea koolides juba kehtestatud kõikidele klassidele toiduplaan, millest rangelt kinni peetakse, mistõttu ehitasin üles teistsuguse “signaal-vastuse” tüüpi raamistiku. Mõte seisnes selles, et kui teie ees kohvikut külastav seltskond jõuab liini pikkuses teatud piirini (st järjekord muutus lühikeseks), saadab ta teile käsitsi signaali, kasutades nuppu või lülitades seina sisse. . Signaal edastatakse teleriekraanile või LED-pirnide kaudu.

Tahtsin lihtsalt väga lahendada probleemi, mis tekkis kõigis riigi koolides. Sain oma kavatsuses veelgi tugevamaks, kui kuulsin lugu preili O-lt – ma räägin teile kohe. Selgub, et mõnes suures koolis ulatub järjekord ka talvel kahekümne-kolmekümne meetri kaugusele sööklast väljapoole, tänavale, sest keegi ei oska seda protsessi korralikult korraldada. Ja mõnikord juhtub, et mitu minutit ei ilmu keegi söögituppa üldse - ja see on ka halb. Paljude õpilaste arvuga koolides on töötajatel vaevalt aega kõiki teenindada, isegi kui söögiaega ei raisata minutitki. Seetõttu ei ole neil, kes jagamisele viimastena jõuavad (tavaliselt algklasside õpilased), lihtsalt aega süüa.

Seega, kuigi pidin oma avalduse esitama kiirustades, mõtlesin väga hoolikalt läbi, kuidas saaksin seda laiemaks kasutamiseks kohandada.

Sõnum, et võitsin esimese auhinna!

Lühidalt öeldes kutsuti mind tulema ja oma projekti valitsusametnikele esitlema. Seega panin kõik oma Power Pointi anded tööle ja tulin ja esitlesin!

Lugu Korea koolipoisist, kes sai ministeeriumilt auhinna järjekorra jälgimise süsteemi eest

Ettekande algus (äärmisel vasakpoolne – minister)

See oli huvitav kogemus – mõtlesin lihtsalt midagi kohvikuprobleemi jaoks välja ja sattusin kuidagi konkursi võitjate hulka. Isegi laval seistes mõtlesin pidevalt: "Hmm, mida ma siin üldse teen?" Aga üldiselt tõi see projekt mulle palju kasu – õppisin palju manussüsteemide arendamise ja projektide elluviimise kohta päriselus. Noh, ma sain muidugi auhinna.

Järeldus

Siin on omajagu irooniat: ükskõik kui palju ma kõikvõimalikel konkurssidel ja teadusmessidel osalesin, kuhu sihikindlalt end kirja panin, ei tulnud sellest midagi head. Ja siis see võimalus lihtsalt leidis mind ja andis häid tulemusi.

See pani mind mõtlema põhjustele, mis motiveerivad mind projekte ette võtma. Miks ma alustan tööd - "võitmiseks" või reaalse probleemi lahendamiseks ümbritsevas maailmas? Kui teie puhul toimib teine ​​motiiv, soovitan tungivalt projekti mitte loobuda. Sellise lähenemisega äritegevusele võite oma teel kohata ootamatuid võimalusi ega tunne võiduvajadusest tulenevat survet – teie peamiseks motivaatoriks on kirg teie ettevõtte vastu.

Ja mis kõige tähtsam: kui õnnestub mõni korralik lahendus ellu viia, saad seda kohe pärismaailmas proovida. Minu puhul oli platvorm kool, kuid aja jooksul koguneb kogemusi ja kes teab - võib-olla kasutab teie rakendust kogu riik või isegi kogu maailm.

Iga kord, kui sellele kogemusele mõtlen, olen enda üle uhke. Ma ei oska seletada, miks, aga projekti elluviimise protsess pakkus mulle lihtsalt suurt rõõmu ja auhind oli lisaboonus. Lisaks oli mul hea meel, et suutsin oma klassikaaslaste jaoks iga päev lahendada probleemi, mis nende elu rikkus. Ühel päeval tuli üks õpilastest minu juurde ja ütles: "Teie süsteem on väga mugav." Ma olin seitsmendas taevas!
Ma arvan, et isegi ilma auhindadeta tunneksin uhkust oma arengu üle ainuüksi selle nimel. Võib-olla pakkus mulle sellise rahulolu just teiste aitamine... üldiselt ma armastan projekte.

Mida ma selle artikliga saavutada lootsin

Loodan, et lugedes seda artiklit lõpuni, olete saanud inspiratsiooni teha midagi, mis toob kasu teie kogukonnale või isegi teile endale. Soovitan teil kasutada oma oskusi (programmeerimine on kindlasti üks nendest, kuid on ka teisi), et muuta reaalsust teie ümber paremaks. Võin teile kinnitada, et selle käigus saadud kogemusi ei saa millegi muuga võrrelda.

See võib avada ka teid, mida te ei oodanud – see juhtus minuga. Nii et palun tehke seda, mis teile meeldib, ja jäta maailmale oma jälje! Ühe hääle kaja võib raputada kogu maailma, nii et uskuge endasse.

Siin on mõned projektiga seotud lingid:

Allikas: www.habr.com

Lisa kommentaar