Istorija apie Korėjos moksleivį, kuris gavo ministerijos prizą už eilių stebėjimo sistemą

Kai mokiausi vidurinėje mokykloje (nuo 2016 m. kovo iki gruodžio mėn.), mane labai erzino situacija, susidariusi mūsų mokyklos valgykloje.

Viena problema: per ilgai laukti eilėje

Kokią problemą pastebėjau? Kaip šitas:

Istorija apie Korėjos moksleivį, kuris gavo ministerijos prizą už eilių stebėjimo sistemą

Paskirstymo aikštelėje susirinko daug mokinių ir jiems teko ilgai stovėti (nuo penkių iki dešimties minučių). Žinoma, tai dažna problema ir sąžiningo aptarnavimo schema: kuo vėliau atvyksi, tuo vėliau būsi aptarnaujamas. Kad suprastum, kodėl reikėjo laukti.

Antra problema: nelygios sąlygos laukiantiems

Bet, žinoma, tai dar ne viskas; turėjau pastebėti ir kitą, rimtesnę problemą. Taip rimtai, kad galiausiai nusprendžiau pabandyti rasti išeitį iš susidariusios situacijos. Gimnazistai (tai yra visi, kurie mokosi bent klase aukščiau) ir mokytojai ėjo į skirstymą nelaukdami eilės. Taip, taip, ir jūs, kaip pradinės mokyklos mokinys, negalėjote jiems nieko pasakyti. Mūsų mokykloje buvo gana griežta santykių tarp klasių politika.

Todėl mes su draugais, būdami naujokai, patys pirmi atėjome į valgyklą, ruošėmės pavalgyti - tada atsirado gimnazistai ar mokytojai ir tiesiog nustūmė mus į šalį (kai kurie buvo malonesni, leido pasilikti mūsų vieta eilėje). Teko palaukti papildomai penkiolika–dvidešimt minučių, nors atvykome anksčiau nei visi kiti.

Ypač prastai sekėsi pietų metu. Dieną į valgyklą skubėdavo absoliučiai visi (mokytojai, studentai, darbuotojai), tad mums, pradinukams, pietūs niekada nedžiugino.

Bendri problemos sprendimai

Bet kadangi naujokai neturėjo kito pasirinkimo, sugalvojome du būdus, kaip sumažinti riziką būti numestiems į rikiuotės galą. Pirmasis yra ateiti į valgomąjį labai anksti (ty tiesiogine prasme prieš pradedant patiekti maistą). Antrasis – sąmoningai žudyti laiką žaidžiant stalo tenisą ar krepšinį ir atvykti labai vėlai (maždaug dvidešimt minučių nuo pietų pradžios).

Tam tikru mastu tai veikė. Bet, tiesą pasakius, niekas nenorėjo kuo greičiau lėkti į valgomąjį vien tam, kad galėtų pavalgyti, ar pribaigti šaltų likučių po kitų, nes jie buvo tarp paskutiniųjų. Mums reikėjo sprendimo, kuris mums praneštų, kai kavinė nėra perpildyta.

Būtų puiku, jei kuri nors būrėja nuspėtų mums ateitį ir tiksliai pasakytų, kada eiti į valgomąjį, kad nereikėtų ilgai laukti. Bėda ta, kad kiekvieną dieną viskas klostėsi vis kitaip. Negalėjome tiesiog išanalizuoti modelių ir nustatyti mielą vietą. Turėjome tik vieną būdą sužinoti, kaip viskas valgykloje – nueiti pėsčiomis, o kelias galėjo siekti kelis šimtus metrų, priklausomai nuo to, kur esi. Taigi, jei ateini, pažiūrėsi į eilutę, grįžk ir tęsi ta pačia dvasia, kol ji taps trumpa, sugaišite daug laiko. Apskritai pradinukų klasei gyvenimas buvo šlykštus ir nieko nebuvo galima padaryti.

Eureka – idėja sukurti valgyklos stebėjimo sistemą

Ir staiga, jau kitais mokslo metais (2017 m.), pasakiau sau: „O kas, jei sukurtume sistemą, kuri parodytų eilės ilgį realiu laiku (ty aptiks kamštį)? Jei man būtų pavykę, vaizdas būtų toks: pradinių klasių mokiniai paprasčiausiai žiūrėtų į savo telefonus, kad gautų naujausius duomenis apie esamą darbo krūvį, ir darytų išvadas, ar jiems prasminga eiti dabar. .

Iš esmės ši schema išlygino nelygybę per prieigą prie informacijos. Jos pagalba pradinukai galėjo patys pasirinkti, ką jiems geriausia daryti – eiti ir stovėti eilėje (jei ji nebuvo per ilga) arba naudingiau leisti laiką, o vėliau pasirinkti tinkamesnį momentą. Mane labai sujaudino ši mintis.

Valgyklos stebėjimo sistemos projektavimas

2017 metų rugsėjį turėjau pateikti objektinio programavimo kurso projektą, šią sistemą pateikiau kaip savo projektą.

Istorija apie Korėjos moksleivį, kuris gavo ministerijos prizą už eilių stebėjimo sistemą

Pradinis sistemos planas (2017 m. rugsėjo mėn.)

Įrangos pasirinkimas (2017 m. spalio mėn.)

Istorija apie Korėjos moksleivį, kuris gavo ministerijos prizą už eilių stebėjimo sistemą

Paprastas lytėjimo jungiklis su prisitraukimo rezistoriumi. Schema su penkiais skydais trijose eilėse, kad atpažintų eilę išilgai trijų eilučių

Užsisakiau tik penkiasdešimt membraninių jungiklių, Wemos D1 mini plokštę ESP8266 pagrindu ir keletą žiedinių spaustukų, prie kurių planavau pritvirtinti emaliuotus laidus.

Prototipų kūrimas ir kūrimas (2017 m. spalio mėn.)

Pradėjau nuo duonos lentos – ant jos surinkau grandinę ir išbandžiau. Man buvo ribotas medžiagų kiekis, todėl apsiribojau sistema su penkiomis kojelėmis.

Programinei įrangai, kurią parašiau C++, nustatiau šiuos tikslus:

  1. Dirbkite nuolat ir duomenis siųskite tik tais laikotarpiais, kai patiekiamas maistas (pusryčiai, pietūs, vakarienė, popietiniai užkandžiai).
  2. Atpažinkite eilės / eismo situaciją kavinėje tokiais dažniais, kad duomenis būtų galima naudoti mašininio mokymosi modeliuose (tarkim, 10 Hz).
  3. Siųskite duomenis į serverį efektyviai (paketo dydis turi būti mažas) ir trumpais intervalais.

Norėdami juos pasiekti, turėjau atlikti šiuos veiksmus:

  1. Naudokite RTC (realaus laiko laikrodžio) modulį, kad galėtumėte nuolat stebėti laiką ir nustatyti, kada kavinėje patiekiamas maistas.
  2. Norėdami įrašyti ekrano būseną vienu simboliu, naudokite duomenų glaudinimo metodą. Duomenis traktuodamas kaip penkių bitų dvejetainį kodą, įvairias reikšmes susiejau su ASCII simboliais, kad jie atspindėtų duomenų elementus.
  3. Siųsdami HTTP užklausas naudodami POST metodą naudokite „ThingSpeak“ (IoT įrankį analizei ir internetiniam diagramų sudarymui).

Žinoma, buvo keletas klaidų. Pavyzdžiui, aš nežinojau, kad operatorius sizeof( ) grąžina char * objekto reikšmę 4, o ne eilutės ilgį (nes tai nėra masyvas, todėl kompiliatorius neskaičiuoja ilgio) ir labai nustebau, kodėl mano HTTP užklausose buvo tik keturi simboliai iš visų URL!

Taip pat neįtraukiau skliaustų į #define veiksmą, todėl atsirado netikėtų rezultatų. Na, tarkime:

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

Čia būtų galima tikėtis, kad A bus lygus 3 (10 / 3 = 3), bet iš tikrųjų jis buvo skaičiuojamas kitaip: 2 (2 * 5/ 3 = 2).

Galiausiai, dar viena pastebima klaida, su kuria susidūriau, buvo stebėjimo laikmačio nustatymas iš naujo. Su šia problema kovojau labai ilgai. Kaip vėliau paaiškėjo, aš bandžiau pasiekti žemo lygio ESP8266 lusto registrą netinkamu būdu (per klaidą įvedžiau NULL reikšmę rodyklei į struktūrą).

Istorija apie Korėjos moksleivį, kuris gavo ministerijos prizą už eilių stebėjimo sistemą

Pėdų skydas, kurį sukūriau ir pagaminau. Tuo metu, kai buvo padaryta nuotrauka, jis jau buvo išgyvenęs penkias trypimo savaites

Techninė įranga (kojų lentos)

Siekdamas užtikrinti, kad skydai galėtų ištverti atšiaurias valgyklos sąlygas, jiems iškėliau šiuos reikalavimus:

  • Skydai turi būti pakankamai stiprūs, kad visą laiką atlaikytų žmogaus svorį.
  • Skydai turi būti ploni, kad netrukdytų eilėje stovintiems žmonėms.
  • Jungiklis turi būti įjungtas užlipus.
  • Skydai turi būti atsparūs vandeniui. Valgomajame visada drėgna.

Kad atitikčiau šiuos reikalavimus, apsistojau prie dviejų sluoksnių dizaino – lazeriu pjaustyto akrilo pagrindui ir viršutiniam dangčiui bei kamščiu kaip apsauginiam sluoksniui.

Skydo maketą padariau AutoCAD programoje; matmenys – 400 x 400 milimetrų.

Istorija apie Korėjos moksleivį, kuris gavo ministerijos prizą už eilių stebėjimo sistemą

Kairėje yra dizainas, kuris buvo pradėtas gaminti. Dešinėje yra galimybė su Lego tipo jungtimi

Beje, dešiniojo dizaino galiausiai atsisakiau, nes su tokia tvirtinimo sistema pasirodė, kad tarp skydų turi būti 40 centimetrų, vadinasi, negaliu įveikti reikiamo atstumo (daugiau nei dešimties metrų).

Istorija apie Korėjos moksleivį, kuris gavo ministerijos prizą už eilių stebėjimo sistemą

Istorija apie Korėjos moksleivį, kuris gavo ministerijos prizą už eilių stebėjimo sistemą

Visiems jungikliams sujungti naudojau emaliuotus laidus – iš viso jų prireikė daugiau nei 70 metrų! Kiekvieno skydo centre įdėjau membraninį jungiklį. Iš šoninių angų išsikišo du spaustukai – jungiklio kairėje ir dešinėje.

Na, o hidroizoliacijai naudojau elektrinę juostą. Daug elektros juostos.

Ir viskas pavyko!

Laikotarpis nuo lapkričio penktos iki gruodžio dvyliktos

Istorija apie Korėjos moksleivį, kuris gavo ministerijos prizą už eilių stebėjimo sistemą

Sistemos nuotrauka – čia matomi visi penki skydai. Kairėje yra elektronika (D1-mini / Bluetooth / RTC)

Lapkričio XNUMX d. aštuntą ryto (pusryčių laikas) sistema pradėjo rinkti aktualius duomenis apie situaciją valgykloje. Negalėjau patikėti savo akimis. Vos prieš du mėnesius braižiau bendrą schemą, sėdėjau namuose su pižama, ir štai, visa sistema veikia be kliūčių... ar ne.

Programinės įrangos klaidos testavimo metu

Žinoma, sistemoje buvo daug klaidų. Štai tuos, kuriuos prisimenu.

Bandydama prijungti klientą prie ThingSpeak API, programa netikrino, ar yra pasiekiamų „Wi-Fi“ taškų. Kad ištaisyčiau klaidą, pridėjau papildomą veiksmą, kad patikrinčiau „Wi-Fi“ prieinamumą.

Sąrankos funkcijoje aš pakartotinai skambinau „WiFi.begin“, kol atsirado ryšys. Vėliau sužinojau, kad ryšį užmezga ESP8266 programinė įranga, o pradžios funkcija naudojama tik nustatant Wi-Fi. Situaciją ištaisiau iškviesdamas funkciją tik vieną kartą, sąrankos metu.

Atradau, kad mano sukurta komandų eilutės sąsaja (skirta laikui nustatyti, tinklo nustatymams keisti) neveikia ramybės būsenoje (ty ne pusryčių, pietų, vakarienės ir popietės arbatos metu). Taip pat mačiau, kad kai nevyksta registracija, vidinė kilpa per daug pagreitėja, o serijiniai duomenys nuskaitomi per greitai. Todėl nustatiau delsą, kad sistema lauktų papildomų komandų, kai jų tikimasi.

Odė sarginiam šuniui

O, ir dar vienas dalykas apie tą problemą, susijusią su sarginiu laikmačiu - aš ją išsprendžiau būtent bandymo etape „lauko“ sąlygomis. Be perdėto, tai buvo viskas, apie ką galvojau keturias dienas. Kiekvieną pertrauką (trunkančią dešimt minučių) skubėdavau į kavinę vien tam, kad išbandyčiau naują kodo versiją. O kai atsidarė platinimas, valandą sėdėjau ant grindų ir bandžiau pagauti klaidą. Apie maistą net negalvojau! Ačiū už visus gerus dalykus, ESP8266 Watchdog!

Kaip aš supratau WDT

Istorija apie Korėjos moksleivį, kuris gavo ministerijos prizą už eilių stebėjimo sistemą

Kodo fragmentas, su kuriuo man buvo sunku

Radau programą, tiksliau – Arduino plėtinį, kuri analizuoja programinės įrangos duomenų struktūrą, kai įvyksta Wdt atstatymas, pasiekiant sukompiliuoto kodo ELF failą (funkcijų ir rodyklių koreliacijos). Kai tai buvo padaryta, paaiškėjo, kad klaidą galima pašalinti taip:

Istorija apie Korėjos moksleivį, kuris gavo ministerijos prizą už eilių stebėjimo sistemą

Velnias! Na, kas žinojo, kad realaus laiko sistemos klaidų taisymas buvo toks sunkus! Tačiau klaidą pašalinau ir tai pasirodė kvaila. Dėl savo nepatyrimo parašiau ciklą, kuriame masyvas peržengė ribas. Ach! (indeksas++ ir ++indeksas yra du dideli skirtumai).

Istorija apie Korėjos moksleivį, kuris gavo ministerijos prizą už eilių stebėjimo sistemą

Aparatinės įrangos problemos bandymo metu

Žinoma, įranga, tai yra kojų skydai, toli gražu nebuvo ideali. Kaip ir galima tikėtis, vienas iš jungiklių užstrigo.

Istorija apie Korėjos moksleivį, kuris gavo ministerijos prizą už eilių stebėjimo sistemą

Lapkričio XNUMX d., per pietus, užstrigo trečiojo skydelio jungiklis

Aukščiau pateikiau internetinės diagramos iš ThingSpeak svetainės ekrano kopiją. Kaip matote, kažkas atsitiko apie 12:25, po to sugedo skydas numeris trečias. Dėl to eilės ilgis buvo nustatytas kaip 3 (reikšmė yra 3 * 100), net jei iš tikrųjų ji nepasiekė trečiojo skydo. Pataisymas buvo tas, kad pridėjau daugiau paminkštinimo (taip, lipnios juostos), kad jungikliui būtų daugiau vietos.

Kartais mano sistema tiesiogine prasme buvo išrauta, kai laidas įstrigo duryse. Pro šias duris į valgyklą buvo nešami vežimėliai ir paketai, kad jis kartu su savimi nešė laidą, uždarydama ir ištraukdama iš lizdo. Tokiais atvejais pastebėjau netikėtą duomenų srauto gedimą ir spėjau, kad sistema buvo atjungta nuo maitinimo šaltinio.

Informacijos apie sistemą sklaida visoje mokykloje

Kaip jau minėta, aš naudojau ThingSpeak API, kuri vizualizuoja duomenis svetainėje grafikų pavidalu, o tai yra labai patogu. Apskritai, aš tiesiog paskelbiau nuorodą į savo tvarkaraštį mokyklos Facebook grupėje (šio įrašo ieškojau pusvalandį ir neradau - labai keista). Bet radau įrašą savo grupėje, mokyklos bendruomenėje, 2017 m. lapkričio XNUMX d.:

Istorija apie Korėjos moksleivį, kuris gavo ministerijos prizą už eilių stebėjimo sistemą

Istorija apie Korėjos moksleivį, kuris gavo ministerijos prizą už eilių stebėjimo sistemą

Reakcija buvo laukinė!

Paskelbiau šiuos įrašus, kad paskatinčiau susidomėjimą savo projektu. Tačiau net tiesiog pažvelgti į juos yra gana smagu. Tarkime, čia aiškiai matosi, kad žmonių skaičius smarkiai šoktelėjo 6:02 ir praktiškai nukrito iki nulio 6:10.

Istorija apie Korėjos moksleivį, kuris gavo ministerijos prizą už eilių stebėjimo sistemą Istorija apie Korėjos moksleivį, kuris gavo ministerijos prizą už eilių stebėjimo sistemą

Aukščiau pridėjau keletą grafikų, susijusių su pietumis ir popietės arbata. Įdomu pastebėti, kad darbo krūvio pikas pietų metu beveik visada būdavo 12:25 (eilė siekdavo penktą skydą). O popietiniams užkandžiams apskritai nebūdinga didelė žmonių minia (eilė yra daugiausia vienos lentos ilgio).

Žinote, kas juokinga? Ši sistema vis dar gyva (https://thingspeak.com/channels/346781)! Prisijungiau prie anksčiau naudotos paskyros ir pamačiau štai ką:

Istorija apie Korėjos moksleivį, kuris gavo ministerijos prizą už eilių stebėjimo sistemą

Aukščiau esančiame grafike mačiau, kad gruodžio trečiąją žmonių antplūdis buvo žymiai mažesnis. Ir nieko keisto – buvo sekmadienis. Šią dieną beveik visi kur nors važiuoja, nes dažniausiai tik sekmadienį galima išeiti iš mokyklos teritorijos. Aišku, kad savaitgalį kavinėje gyvos sielos nepamatysi.

Kaip už savo projektą gavau pirmąją Korėjos švietimo ministerijos premiją

Kaip matote patys, prie šio projekto nedirbau, nes siekiau užsitarnauti kokį nors apdovanojimą ar pripažinimą. Aš tiesiog norėjau panaudoti savo įgūdžius, kad išspręsčiau lėtinę problemą, su kuria susidūriau mokykloje.

Tačiau mūsų mokyklos mitybos specialistė panelė O, su kuria labai susidraugavau planuodama ir plėtodama savo projektą, vieną dieną paklausė, ar žinau apie kavinės idėjų konkursą. Tada pagalvojau, kad tai buvo kažkokia keista idėja palyginti valgomojo idėjas. Bet perskaičiau informacinį bukletą ir sužinojau, kad projektas turi būti pateiktas iki lapkričio 24 d.! Na gerai. Greitai užbaigiau koncepciją, duomenis ir grafiką ir išsiunčiau paraišką.

Pradinės konkurso idėjos pakeitimai

Beje, sistema, kurią galiausiai pasiūliau, šiek tiek skyrėsi nuo jau įdiegtos. Iš esmės savo pradinį metodą (eilės ilgio matavimą realiuoju laiku) pritaikiau daug didesnėms Korėjos mokykloms. Palyginimui: mūsų mokykloje mokosi trys šimtai mokinių, o kai kuriose – tiek žmonių vienoje klasėje! Man reikėjo išsiaiškinti, kaip padidinti sistemos mastelį.

Todėl pasiūliau koncepciją, kuri būtų labiau pagrįsta „rankiniu“ valdymu. Šiais laikais Korėjos mokyklose jau yra įdiegtas visų klasių maitinimo planas, kurio griežtai laikomasi, todėl sukūriau kitokį „signal-response“ tipo sistemą. Idėja buvo ta, kad kai priekyje jūsų kavinėje apsilankiusi grupė pasiekia tam tikrą linijos ilgio ribą (ty eilė tapo trumpa), jie rankiniu būdu siųs jums signalą mygtuku arba jungikliu ant sienos. . Signalas bus perduodamas į televizoriaus ekraną arba per LED lemputes.

Tiesiog labai norėjau išspręsti problemą, kuri iškilo visose šalies mokyklose. Dar labiau sustiprėjau savo ketinimais, kai išgirdau istoriją iš panelės O – aš jums papasakosiu dabar. Pasirodo, kai kuriose didelėse mokyklose eilė nusidriekia už valgyklos, į gatvę dvidešimt-trisdešimt metrų, net ir žiemą, nes niekas negali tinkamai organizuoti proceso. O kartais atsitinka taip, kad keletą minučių valgomajame apskritai niekas nepasirodo - ir tai taip pat yra blogai. Mokyklose, kuriose mokosi daug mokinių, darbuotojai vos turi laiko visus aptarnauti, net jei nesugaištama nei viena minutė. Todėl tie, kurie į skirstymą ateina paskutiniai (dažniausiai pradinukai), tiesiog neturi pakankamai laiko pavalgyti.

Taigi, nors paraišką turėjau pateikti skubotai, labai gerai apgalvojau, kaip galėčiau ją pritaikyti platesniam naudojimui.

Žinutė, kad laimėjau pirmą prizą!

Trumpai tariant, buvau pakviestas ateiti ir pristatyti savo projektą vyriausybės pareigūnams. Taigi aš panaudojau visus savo „Power Point“ talentus ir atėjau pristatyti!

Istorija apie Korėjos moksleivį, kuris gavo ministerijos prizą už eilių stebėjimo sistemą

Pristatymo pradžia (kairėje – ministras)

Tai buvo įdomi patirtis – ką tik sugalvojau kavinės problemai ir kažkaip patekau tarp konkurso nugalėtojų. Net stovėdamas ant scenos vis galvojau: „Hm, ką aš čia veikiu? Bet apskritai šis projektas man atnešė didelę naudą – daug sužinojau apie įterptinių sistemų kūrimą ir projektų įgyvendinimą realiame gyvenime. Na, žinoma, gavau prizą.

išvada

Čia yra ironija: kad ir kiek dalyvaudavau visokiuose konkursuose ir mokslo mugėse, į kurias tikslingai užsiregistravau, nieko gero iš to neišėjo. Ir tada galimybė mane tiesiog rado ir davė gerų rezultatų.

Tai privertė susimąstyti apie priežastis, skatinančias imtis projektų. Kodėl aš pradedu dirbti - „laimėti“ ar išspręsti tikrą problemą aplinkiniame pasaulyje? Jei jūsų atveju veikia antrasis motyvas, labai raginu neapleisti projekto. Taikydami tokį požiūrį į verslą, pakeliui galite sutikti netikėtų galimybių ir nejausite spaudimo iš poreikio laimėti – pagrindinis jūsų motyvatorius bus aistra verslui.

Ir svarbiausia: jei pavyks įgyvendinti padorų sprendimą, iškart galėsite jį išbandyti realiame pasaulyje. Mano atveju platforma buvo mokykla, tačiau laikui bėgant patirtis kaupiasi, ir kas žino – galbūt jūsų aplikacija pasinaudos visa šalis ar net visas pasaulis.

Kiekvieną kartą, kai galvoju apie šią patirtį, aš savotiškai didžiuojuosi savimi. Negaliu paaiškinti kodėl, bet projekto įgyvendinimo procesas man tiesiog suteikė didelį malonumą, o prizas buvo papildoma premija. Be to, džiaugiausi, kad galėjau išspręsti savo klasės draugams problemą, kuri kasdien griauna jų gyvenimus. Vieną dieną vienas studentas priėjo prie manęs ir pasakė: „Jūsų sistema labai patogi“. Aš buvau septintame danguje!
Manau, kad ir neturėdamas jokių apdovanojimų jaučiausi didžiuotis savo tobulėjimu vien dėl to. Galbūt tokį pasitenkinimą atnešė pagalba kitiems... apskritai mėgstu projektus.

Ko tikėjausi pasiekti šiuo straipsniu

Tikiuosi, kad perskaitę šį straipsnį iki galo jus įkvėpė padaryti tai, kas bus naudinga jūsų bendruomenei ar net jums pačiam. Raginu jus panaudoti savo įgūdžius (programavimas tikrai yra vienas iš jų, bet yra ir kitų), kad pakeistumėte jus supančią tikrovę į gerąją pusę. Galiu užtikrinti, kad patirties, kurią įgysite šiame procese, negalima lyginti su niekuo kitu.

Tai taip pat gali atverti kelius, kurių nesitikėjai – man taip nutiko. Taigi prašau, darykite tai, kas jums patinka, ir palikite savo ženklą pasaulyje! Vieno balso aidas gali supurtyti visą pasaulį, tad tikėk savimi.

Štai keletas su projektu susijusių nuorodų:

Šaltinis: www.habr.com

Добавить комментарий