Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sustav praćenja čekanja u redu

Kad sam bio u prvom razredu srednje škole (od ožujka do prosinca 2016.), jako me živcirala situacija koja se dogodila u našoj školskoj kantini.

Problem prvi: predugo čekanje u redu

Kakav sam problem uočio? Kao ovo:

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sustav praćenja čekanja u redu

Na dionici se okupilo dosta učenika koji su morali dugo stajati (pet do deset minuta). Naravno, ovo je čest problem i poštena shema usluge: što kasnije stignete, to ćete kasnije biti usluženi. Tako da možete razumjeti zašto ste morali čekati.

Problem drugi: nejednaki uvjeti za čekače

Ali, naravno, to nije sve, morao sam primijetiti i još jedan, ozbiljniji problem. Toliko ozbiljan da sam konačno odlučio pokušati pronaći izlaz iz situacije. Srednjoškolci (odnosno svi koji studiraju barem razred više) i profesori na podjelu su otišli bez čekanja u redu. Da, da, a ti im kao osnovnoškolac nisi mogao ništa reći. Naša je škola imala prilično strogu politiku vezanu uz odnose među razredima.

Stoga smo moji prijatelji i ja, dok smo bili početnici, prvo dolazili u kafeteriju, htjeli uzeti hranu - a onda su se pojavili srednjoškolci ili profesori i jednostavno nas gurnuli u stranu (neki, ljubazniji, dopustili su nam da ostanemo naše mjesto u redu). Morali smo čekati dodatnih petnaest do dvadeset minuta, iako smo stigli ranije od svih ostalih.

Posebno smo se loše proveli za vrijeme ručka. Tijekom dana su apsolutno svi hrlili u kafeteriju (profesori, učenici, djelatnici), tako da nama kao osnovnoškolcima ručak nikad nije bio veselje.

Uobičajena rješenja problema

Ali budući da novopridošlice nisu imale izbora, smislili smo dva načina da smanjimo rizik od izbacivanja na začelje. Prvi je da u blagovaonicu dođete vrlo rano (to jest, doslovno prije nego što se hrana uopće počne posluživati). Drugi je da namjerno ubijete vrijeme igrajući ping-pong ili košarku i dođete vrlo kasno (dvadesetak minuta nakon početka ručka).

Donekle je uspjelo. Ali, iskreno, nitko nije bio željan što brže pojuriti u blagovaonicu samo da bi mogao jesti, ili pojesti hladne ostatke za ostalima, jer su bili među posljednjima. Trebalo nam je rješenje koje će nas obavijestiti kada u kantini nema gužve.

Bilo bi super da nam neka gatara prorekne budućnost i kaže kada točno treba ići u blagovaonicu, da ne čekamo dugo. Nevolja je bila u tome što je svaki dan sve ispalo drugačije. Nismo mogli jednostavno analizirati obrasce i identificirati slatku točku. Imali smo samo jedan način da saznamo kako je u blagovaonici - doći pješice, a put je znao biti i nekoliko stotina metara, ovisno o tome gdje se nalazite. Dakle, ako dođete, pogledate red, vratite se i nastavite u istom duhu dok ne postane kratak, izgubit ćete puno vremena. Općenito, osnovnoškolcima je život bio odvratan i tu se ništa nije moglo učiniti.

Eureka – ideja o stvaranju Sustava za nadzor kantina

I odjednom, već u sljedećoj akademskoj godini (2017.) sam sebi rekao: “Što ako napravimo sustav koji će u realnom vremenu pokazivati ​​duljinu čekanja (odnosno detektirati prometnu gužvu)?” Da sam uspio, slika bi bila ovakva: osnovnoškolci bi jednostavno bacili pogled na mobitel kako bi dobili ažurne podatke o trenutnoj opterećenosti i zaključili ima li smisla da sada idu .

U biti, ova shema je izgladila nejednakost kroz pristup informacijama. Uz njegovu pomoć osnovnoškolci su mogli sami izabrati što im je najbolje - otići i stajati u redu (ako nije predug) ili korisnije provesti vrijeme, a kasnije izabrati prikladniji trenutak. Jako me uzbudila ta pomisao.

Projektiranje sustava nadzora kantine

U rujnu 2017. godine trebao sam predati projekt za tečaj objektno orijentiranog programiranja i prijavio sam ovaj sustav kao svoj projekt.

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sustav praćenja čekanja u redu

Početni plan sustava (rujan 2017.)

Odabir opreme (listopad 2017.)

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sustav praćenja čekanja u redu

Jednostavan taktilni prekidač s otpornikom za povlačenje. Shema s pet štitova u tri reda za prepoznavanje reda duž tri linije

Naručio sam samo pedesetak membranskih prekidača, Wemos D1 mini ploču baziranu na ESP8266 i neke prstenaste stezaljke na koje sam planirao pričvrstiti emajlirane žice.

Izrada prototipova i razvoj (listopad 2017.)

Počeo sam s matičnom pločom - sklopio strujni krug na njoj i testirao je. Bio sam ograničen u broju materijala pa sam se ograničio na sustav s pet podnožja.

Za softver koji sam napisao u C++, postavio sam sljedeće ciljeve:

  1. Radite kontinuirano i šaljite podatke samo u periodima kada se poslužuje hrana (doručak, ručak, večera, popodnevni snack).
  2. Prepoznajte situaciju u redu čekanja/prometu u kantini na takvim frekvencijama da se podaci zatim mogu koristiti u modelima strojnog učenja (recimo, 10 Hz).
  3. Šaljite podatke poslužitelju na učinkovit način (veličina paketa treba biti mala) i u kratkim intervalima.

Da bih ih postigao morao sam učiniti sljedeće:

  1. Koristite RTC (Real Time Clock) modul za kontinuirano praćenje vremena i određivanje kada je hrana poslužena u kantini.
  2. Koristite metodu kompresije podataka za snimanje stanja štita u jednom znaku. Tretirajući podatke kao pet-bitni binarni kod, mapirao sam različite vrijednosti u ASCII znakove tako da predstavljaju elemente podataka.
  3. Koristite ThingSpeak (IoT alat za analitiku i mrežno crtanje) slanjem HTTP zahtjeva koristeći POST metodu.

Naravno, bilo je i grešaka. Na primjer, nisam znao da operator sizeof() vraća vrijednost 4 za char * objekt, a ne duljinu niza (jer to nije niz i stoga kompajler ne izračunava duljinu) i bio sam jako iznenađen zašto su moji HTTP zahtjevi sadržavali samo četiri znaka iz svih URL-ova!

Također nisam uključio zagrade u koraku #define, što je dovelo do neočekivanih rezultata. Pa recimo:

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

Ovdje bi se očekivalo da će A biti jednako 3 (10 / 3 = 3), ali zapravo je izračunato drugačije: 2 (2 * 5/ 3 = 2).

Naposljetku, još jedna značajna pogreška s kojom sam se pozabavio je Reset na nadzornom mjeraču vremena. Borio sam se s ovim problemom jako dugo. Kako se kasnije pokazalo, pokušavao sam pristupiti registru niske razine na ESP8266 čipu na pogrešan način (greškom sam unio NULL vrijednost za pokazivač na strukturu).

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sustav praćenja čekanja u redu

Štitnik za noge koji sam dizajnirao i izradio. U trenutku kad je fotografija snimljena već je preživio pet tjedana gaženja

Hardver (daske za noge)

Kako bih osigurao da su štitovi mogli preživjeti teške uvjete kantine, postavio sam im sljedeće zahtjeve:

  • Štitovi moraju biti dovoljno jaki da izdrže ljudsku težinu u svakom trenutku.
  • Štitovi trebaju biti tanki kako ne bi smetali ljudima u redu.
  • Prekidač mora biti aktiviran kada se na njega nagazi.
  • Štitovi moraju biti vodootporni. Blagovaonica je uvijek vlažna.

Kako bih ispunio te zahtjeve, odlučio sam se za dvoslojni dizajn - laserski rezani akril za podlogu i gornji poklopac te pluto kao zaštitni sloj.

Napravio sam izgled štita u AutoCAD-u; dimenzije – 400 x 400 milimetara.

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sustav praćenja čekanja u redu

S lijeve strane je dizajn koji je krenuo u proizvodnju. S desne strane je opcija s vezom tipa Lego

Usput, na kraju sam odustao od desnog dizajna jer se s takvim sustavom pričvršćivanja pokazalo da između štitova treba biti 40 centimetara, što znači da nisam mogao pokriti potrebnu udaljenost (više od deset metara).

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sustav praćenja čekanja u redu

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sustav praćenja čekanja u redu

Za spajanje svih prekidača koristio sam emajlirane žice - ukupno im je trebalo više od 70 metara! Postavio sam membranski prekidač u sredinu svakog štita. Iz bočnih utora virile su dvije kopče - lijevo i desno od prekidača.

Pa, za hidroizolaciju sam koristio električnu traku. Puno električne trake.

I sve je radilo!

Razdoblje od petog studenog do dvanaestog prosinca

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sustav praćenja čekanja u redu

Fotografija sustava - ovdje se vidi svih pet štitova. S lijeve strane je elektronika (D1-mini / Bluetooth / RTC)

XNUMX. studenog u osam ujutro (vrijeme doručka) sustav je počeo prikupljati aktualne podatke o stanju u blagovaonici. Nisam mogla vjerovati svojim očima. Prije samo dva mjeseca skicirao sam opću shemu, sjedeći kod kuće u pidžami, i evo nas, cijeli sustav funkcionira bez problema... ili ne.

Programske pogreške tijekom testiranja

Naravno, bilo je dosta grešaka u sustavu. Evo kojih se sjećam.

Program nije provjeravao dostupne Wi-Fi točke prilikom pokušaja povezivanja klijenta s ThingSpeak API-jem. Kako bih ispravio pogrešku, dodao sam dodatni korak za provjeru dostupnosti Wi-Fi mreže.

U funkciji postavljanja više sam puta pozivao "WiFi.begin" dok se nije pojavila veza. Kasnije sam saznao da vezu uspostavlja ESP8266 firmware, a funkcija starta koristi se samo pri postavljanju Wi-Fi-ja. Ispravio sam situaciju pozivanjem funkcije samo jednom, tijekom postavljanja.

Otkrio sam da sučelje naredbenog retka koje sam stvorio (bilo je namijenjeno postavljanju vremena, promjeni mrežnih postavki) ne radi u mirovanju (to jest, izvan doručka, ručka, večere i popodnevnog čaja). Također sam vidio da se unutarnja petlja pretjerano ubrzava, a serijski se podaci čitaju prebrzo, kada nema zapisivanja. Stoga sam postavio odgodu tako da sustav čeka da stignu dodatne naredbe kada se očekuju.

Oda psu čuvaru

I još nešto o onom problemu sa watchdog timerom - riješio sam ga upravo u fazi testiranja u “terenskim” uvjetima. Bez pretjerivanja, samo o tome sam četiri dana razmišljao. Svaki odmor (koji je trajao deset minuta) žurio sam u kafeteriju samo da isprobam novu verziju koda. A kad je distribucija otvorena, sjedio sam na podu sat vremena, pokušavajući uhvatiti bubu. Nisam ni razmišljala o hrani! Hvala za sve dobre stvari, ESP8266 Watchdog!

Kako sam shvatio WDT

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sustav praćenja čekanja u redu

Isječak koda s kojim sam se mučio

Pronašao sam program, odnosno proširenje za Arduino, koji analizira strukturu podataka softvera kada se dogodi Wdt-reset, pristupajući ELF datoteci kompajliranog koda (korelacije između funkcija i pokazivača). Kada je to učinjeno, pokazalo se da se greška može otkloniti na sljedeći način:

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sustav praćenja čekanja u redu

Kvragu! Pa, tko bi rekao da je ispravljanje grešaka u sustavu u stvarnom vremenu tako teško! Međutim, uklonio sam grešku i pokazalo se da je to glupa greška. Zbog svog neiskustva, napisao sam while petlju u kojoj je niz izašao izvan granica. Uf! (index++ i ++index su dvije velike razlike).

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sustav praćenja čekanja u redu

Problemi s hardverom tijekom testiranja

Naravno, oprema, odnosno štitnici za noge, bili su daleko od idealnih. Kao što možete očekivati, jedan od prekidača se zaglavio.

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sustav praćenja čekanja u redu

XNUMX. studenog, za vrijeme ručka, zaglavio je prekidač na trećoj ploči

Iznad sam dao snimak zaslona online grafikona s web stranice ThingSpeak. Kao što vidite, nešto se dogodilo oko 12:25, nakon čega je štiht broj tri otkazao. Kao rezultat toga, duljina čekanja je određena na 3 (vrijednost je 3 * 100), čak i kada zapravo nije dosegla treći štit. Popravak je bio u tome što sam dodao još podstava (da, ljepljivu traku) kako bih prekidaču dao više prostora.

Ponekad je moj sustav doslovno bio iščupan iz korijena kada bi se žica zapela za vrata. Kroz ova vrata u blagovaonicu su se nosila kolica i paketi, tako da su ona sa sobom nosila žicu, zatvarajući se i izvlačeći je iz utičnice. U takvim sam slučajevima primijetio neočekivani kvar u protoku podataka i pretpostavio da je sustav isključen iz izvora napajanja.

Širenje informacija o sustavu kroz školu

Kao što je već spomenuto, koristio sam ThingSpeak API koji vizualizira podatke na web mjestu u obliku grafikona, što je vrlo zgodno. Općenito, samo sam objavio poveznicu na svoj raspored u školskoj Facebook grupi (tražio sam ovu objavu pola sata i nisam je mogao pronaći - vrlo čudno). Ali pronašao sam post na mom Bandu, školskoj zajednici, od 2017. studenog XNUMX.:

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sustav praćenja čekanja u redu

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sustav praćenja čekanja u redu

Reakcija je bila divlja!

Objavio sam ove postove kako bih potaknuo zanimanje za svoj projekt. Međutim, čak i samo gledanje u njih prilično je zabavno. Recimo, ovdje se jasno vidi da je broj ljudi naglo skočio u 6:02 i praktički pao na nulu do 6:10.

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sustav praćenja čekanja u redu Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sustav praćenja čekanja u redu

Gore sam priložio nekoliko grafikona koji se odnose na ručak i popodnevni čaj. Zanimljivo je napomenuti da se vrhunac posla u vrijeme ručka gotovo uvijek dogodio u 12:25 (red je stigao do petog štita). A za popodnevnu užinu općenito je neuobičajena velika gužva (red je dugačak najviše jednu tablu).

Znaš što je smiješno? Ovaj sustav još uvijek živi (https://thingspeak.com/channels/346781)! Prijavio sam se na račun koji sam prije koristio i vidio ovo:

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sustav praćenja čekanja u redu

Na gornjem grafikonu sam vidio da je trećeg prosinca priljev ljudi bio znatno manji. I nije ni čudo – bila je nedjelja. Na ovaj dan gotovo svi negdje idu, jer u većini slučajeva samo nedjeljom možete napustiti školsko dvorište. Jasno je da vikendom u kantini nećete vidjeti žive duše.

Kako sam dobio prvu nagradu od Korejskog ministarstva obrazovanja za svoj projekt

Kao što vidite i sami, nisam radio na ovom projektu jer sam pokušavao zaraditi nekakvu nagradu ili priznanje. Samo sam želio upotrijebiti svoje vještine za rješavanje kroničnog problema s kojim sam se suočavao u školi.

Međutim, naša školska nutricionistica, Miss O, s kojom sam se jako zbližila dok sam planirala i razvijala svoj projekt, jednog me dana pitala znam li za natječaj za ideje za kafeteriju. Tada sam pomislio da je to neka čudna ideja uspoređivati ​​ideje za blagovaonicu. Ali pročitao sam informator i saznao da se projekt mora predati do 24. studenog! Dobro Dobro. Brzo sam doradio koncept, podatke i grafiku te poslao prijavu.

Izmjene izvorne ideje za natječaj

Inače, sustav koji sam na kraju predložio bio je malo drugačiji od onog koji je već implementiran. U biti, prilagodio sam svoju izvornu metodu (mjerenje duljine čekanja u redu u stvarnom vremenu) za mnogo veće korejske škole. Za usporedbu: u našoj školi ima tri stotine učenika, a u nekima ima toliko ljudi u samo jednom razredu! Morao sam smisliti kako skalirati sustav.

Stoga sam predložio koncept koji se više temeljio na "ručnoj" kontroli. Danas su korejske škole već uvele plan obroka za sve razrede, koji se strogo pridržava, pa sam izgradio drugačiji okvir tipa "signal-odgovor". Ideja je bila da kada grupa koja posjećuje kafeteriju ispred vas dosegne određeno ograničenje u duljini reda (odnosno, red postane kratak), ručno vam pošalje signal pomoću gumba ili prekidača na zidu . Signal će se prenositi na TV ekran ili preko LED žarulja.

Samo sam jako želio riješiti problem koji se pojavio u svim školama u zemlji. Još više sam se učvrstio u svojoj namjeri kada sam čuo priču od gospođice O - sad ću vam ispričati. Ispada da se u nekim velikim školama red i zimi proteže izvan kantine, na ulicu i po dvadeset do trideset metara, jer nitko ne zna kako treba organizirati proces. A ponekad se dogodi da se nekoliko minuta nitko uopće ne pojavi u blagovaonici - a to je također loše. U školama s velikim brojem učenika, osoblje jedva ima vremena poslužiti sve, čak i ako se ne izgubi niti jedna minuta vremena za obrok. Stoga oni koji zadnji stignu na podjelu (obično su to učenici osnovnih škola) jednostavno nemaju dovoljno vremena za jelo.

Dakle, iako sam morao podnijeti svoju prijavu u žurbi, dobro sam razmislio kako je mogu prilagoditi za širu upotrebu.

Poruka da sam osvojio prvu nagradu!

Ukratko, pozvan sam da dođem i predstavim svoj projekt vladinim dužnosnicima. Pa sam upotrijebio sve svoje Power Point talente i došao i prezentirao!

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sustav praćenja čekanja u redu

Početak izlaganja (krajnje lijevo - ministar)

Bilo je to zanimljivo iskustvo - upravo sam smislio nešto za problem s kafeterijom i nekako završio među pobjednicima natječaja. Čak i dok sam stajao na pozornici, stalno sam razmišljao: “Hmm, što ja uopće radim ovdje?” Ali općenito, ovaj mi je projekt donio veliku korist - naučio sam puno o razvoju ugrađenih sustava i implementaciji projekata u stvarnom životu. Pa, dobio sam nagradu, naravno.

Zaključak

Ima tu neke ironije: koliko god sam sudjelovao na svim mogućim natjecanjima i znanstvenim sajmovima na koje sam se ciljano prijavljivao, od toga nije bilo ništa dobro. A onda me prilika jednostavno pronašla i dala dobre rezultate.

To me potaknulo na razmišljanje o razlozima koji me motiviraju da se prihvatim projekata. Zašto počinjem raditi - da “pobijedim” ili da riješim stvarni problem u svijetu oko sebe? Ako je drugi motiv na djelu u vašem slučaju, snažno vas potičem da ne napuštate projekt. S ovakvim pristupom poslu možete se susresti s neočekivanim prilikama na putu i nećete osjećati pritisak od potrebe za pobjedom - vaš glavni motivator bit će strast za vašim poslom.

I što je najvažnije: ako uspijete implementirati pristojno rješenje, možete ga odmah isprobati u stvarnom svijetu. U mom slučaju platforma je bila škola, no s vremenom se skuplja iskustvo i tko zna – možda će baš vašu aplikaciju koristiti cijela država ili čak cijeli svijet.

Svaki put kad pomislim na ovo iskustvo, nekako sam ponosna na sebe. Ne mogu objasniti zašto, ali proces realizacije projekta jednostavno mi je donio veliko zadovoljstvo, a nagrada je bila dodatni bonus. Osim toga, bio sam zadovoljan što sam svojim kolegama iz razreda uspio riješiti problem koji im je svakodnevno uništavao živote. Jednog dana jedan od studenata mi je prišao i rekao: "Vaš sustav je vrlo zgodan." Bio sam u sedmom nebu!
Mislim da bih se i bez ikakvih nagrada osjećao ponosan na svoj razvoj samo zbog ovoga. Možda mi je pomoć drugima donijela takvo zadovoljstvo... općenito, volim projekte.

Što sam se nadao postići ovim člankom

Nadam se da ste čitanjem ovog članka do kraja dobili inspiraciju da učinite nešto što će koristiti vašoj zajednici ili čak samo vama. Potičem vas da upotrijebite svoje vještine (programiranje je svakako jedna od njih, ali postoje i druge) kako biste promijenili stvarnost oko sebe na bolje. Uvjeravam vas da se iskustvo koje ćete steći u procesu ne može usporediti ni s čim drugim.

Također može otvoriti putove koje niste očekivali – to se meni dogodilo. Stoga, molim vas, radite ono što volite i ostavite svoj trag u svijetu! Odjek jednog jedinog glasa može potresti cijeli svijet, stoga vjerujte u sebe.

Evo nekoliko poveznica vezanih uz projekt:

Izvor: www.habr.com

Dodajte komentar