Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sistem praćenja redova

Kada sam bio u nižim razredima srednje škole (od marta do decembra 2016. godine), bila sam jako nervirana situacijom koja se razvila u našoj školskoj menzi.

Prvi problem: predugo čekanje u redu

Koji sam problem uočio? Volim ovo:

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sistem praćenja redova

Na distribuciji se okupilo dosta učenika koji su morali dugo stajati (pet do deset minuta). Naravno, ovo je uobičajen problem i fer šema usluge: što kasnije stignete, kasnije će vam biti usluženi. Da biste mogli da razumete zašto ste morali da čekate.

Drugi problem: nejednaki uslovi za one koji čekaju

Ali, naravno, to nije sve, morao sam uočiti i jedan, ozbiljniji problem. Toliko ozbiljno da sam konačno odlučio da pokušam da nađem izlaz iz situacije. Srednjoškolci (odnosno svi koji studiraju barem jedan razred više) i profesori otišli su na raspodjelu bez čekanja u redu. Da, da, a vi kao osnovci niste mogli ništa da im kažete. Naša škola je imala prilično strogu politiku u pogledu odnosa među razredima.

Stoga smo moji prijatelji i ja, dok smo bili novajlije, prvi došli u kafeteriju, spremali se da uzmemo hranu - a onda su se pojavili srednjoškolci ili profesori i jednostavno nas gurnuli u stranu (neki, koji su bili ljubazniji, dozvolili su nam da ostanemo u 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 vreme ručka. Apsolutno svi su tokom dana jurili u kafeteriju (nastavnici, studenti, osoblje), tako da nama, kao osnovnoškolcima, ručak nikada nije bio radost.

Uobičajena rješenja problema

Ali pošto novajlije nisu imale izbora, smislili smo dva načina da smanjimo rizik da budu izbačeni na začelje. Prvi je da dođete u trpezariju veoma rano (tj. bukvalno pre nego što jelo i počne da se servira). 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).

Do neke mjere je uspjelo. Ali, da budem iskren, niko nije žurio da što brže pojuri u trpezariju samo da bi mogao da jede, ili da za ostalima dokrajči hladne ostatke, jer su oni bili među poslednjima. Trebalo nam je rješenje koje će nas obavijestiti kada u kafeteriji nema gužve.

Bilo bi sjajno kada bi nam neka gatara prorekla budućnost i rekla kada bi tačno trebalo da idemo u trpezariju, kako ne bismo dugo čekali. 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 trpezariji – da dođemo pešice, a put je mogao biti nekoliko stotina metara, u zavisnosti od toga gde se nalazite. Dakle, ako dođete, pogledate liniju, vratite se i nastavite u istom duhu dok ne postane kratak, izgubit ćete puno vremena. Općenito, život je bio odvratan za osnovce i tu se ništa nije moglo učiniti.

Eureka – ideja o stvaranju sistema za nadzor kantine

I odjednom, već u narednoj akademskoj godini (2017.), rekao sam sebi: „Šta ako napravimo sistem koji će u realnom vremenu prikazivati ​​dužinu reda (tj. detektovati gužvu)?“ Da sam uspio, slika bi bila sljedeća: osnovci bi jednostavno bacili pogled na svoje telefone kako bi dobili ažurne podatke o trenutnom nivou opterećenja i izvukli zaključke o tome ima li smisla da sada idu .

U suštini, ova šema je izgladila nejednakost kroz pristup informacijama. Uz nju su osnovci mogli sami da izaberu šta im je najbolje – otići i stati u red (ako nije predugačak) ili korisnije provesti vrijeme, a kasnije izabrati prikladniji trenutak. Bila sam veoma uzbuđena zbog ove misli.

Dizajn sistema za nadzor kantine

U septembru 2017. morao sam da predam projekat za kurs objektno orijentisanog programiranja i ovaj sistem sam prijavio kao svoj projekat.

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sistem praćenja redova

Inicijalni sistemski plan (septembar 2017.)

Izbor opreme (oktobar 2017.)

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sistem praćenja redova

Jednostavan taktilni prekidač sa pull-up otpornikom. Šema sa pet štitova u tri reda za prepoznavanje reda duž tri reda

Naručio sam samo pedeset membranskih prekidača, Wemos D1 mini ploču baziranu na ESP8266 i nekoliko prstenastih stezaljki na koje sam planirao pričvrstiti emajlirane žice.

Izrada prototipa i razvoj (oktobar 2017.)

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

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

  1. Radite neprekidno i šaljite podatke samo u periodima kada se servira hrana (doručak, ručak, večera, popodnevna užina).
  2. Prepoznajte situaciju u redu/prometu u kafeteriji na takvim frekvencijama da se podaci mogu koristiti u modelima mašinskog učenja (recimo, 10 Hz).
  3. Šaljite podatke serveru na efikasan način (veličina paketa bi trebala biti mala) iu kratkim intervalima.

Da bih ih ostvario morao sam uraditi sljedeće:

  1. Koristite RTC (Sat realnog vremena) modul za kontinuirano praćenje vremena i određivanje kada se hrana poslužuje u kafeteriji.
  2. Koristite metod kompresije podataka da zabilježite stanje š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 online crtanje) slanjem HTTP zahtjeva pomoću POST metode.

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

Takođe nisam uključio zagrade u #define korak, š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 je u stvari izračunato drugačije: 2 (2 * 5/ 3 = 2).

Konačno, još jedna značajna greška s kojom sam se bavio je reset na watchdog tajmeru. Borio sam se sa ovim problemom veoma dugo. Kako se kasnije ispostavilo, pokušavao sam da pristupim registru niskog nivoa na ESP8266 čipu na pogrešan način (greškom sam uneo NULL vrednost za pokazivač na strukturu).

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sistem praćenja redova

Štit za stopala koji sam dizajnirao i napravio. U vrijeme snimanja fotografije već je preživio pet sedmica gaženja

Hardver (daske za stopala)

Kako bih osigurao da štitovi mogu preživjeti teške uslove menze, postavio sam sljedeće zahtjeve za njih:

  • Štitovi moraju biti dovoljno jaki da izdrže ljudsku težinu u svakom trenutku.
  • Štitovi bi trebali biti tanki da ne ometaju ljude u redu.
  • Prekidač mora biti aktiviran kada se na njega stupi.
  • Štitovi moraju biti vodootporni. Trpezarija je uvek vlažna.

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

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

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sistem praćenja redova

Na lijevoj strani je dizajn koji je ušao u proizvodnju. Na desnoj strani je opcija sa vezom tipa Lego

Inače, na kraju sam odustao od dizajna desne ruke jer se s takvim sistemom fiksiranja pokazalo da između štitova treba biti 40 centimetara, što znači da nisam mogao preći potrebnu udaljenost (više od deset metara).

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sistem praćenja redova

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sistem praćenja redova

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

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

I sve je uspjelo!

Period od petog novembra do dvanaestog decembra

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sistem praćenja redova

Fotografija sistema - svih pet štitova je vidljivo ovdje. Sa lijeve strane je elektronika (D1-mini / Bluetooth / RTC)

XNUMX. novembra u osam ujutru (vreme doručka) sistem je počeo da prikuplja aktuelne podatke o stanju u trpezariji. Nisam mogao vjerovati svojim očima. Pre samo dva meseca sam skicirao opštu šemu, sedeći kod kuće u pidžami, i evo nas, ceo sistem radi bez problema... ili ne.

Softverske greške tokom testiranja

Naravno, bilo je dosta grešaka u sistemu. Evo onih kojih se sećam.

Program nije provjerio dostupne Wi-Fi tačke kada je pokušao povezati klijenta na ThingSpeak API. Da ispravim grešku, dodao sam dodatni korak za provjeru dostupnosti Wi-Fi mreže.

U funkciji podešavanja više puta sam zvao “WiFi.begin” dok se ne pojavi veza. Kasnije sam saznao da vezu uspostavlja firmver ESP8266, a funkcija start se koristi samo prilikom podešavanja Wi-Fi-ja. Ispravio sam situaciju pozivom funkcije samo jednom, tokom podešavanja.

Otkrio sam da sučelje komandne linije koje sam kreirao (bilo je namijenjeno za postavljanje vremena, promjenu mrežnih postavki) ne radi u mirovanju (tj. van doručka, ručka, večere i popodnevnog čaja). Također sam vidio da kada ne dođe do evidentiranja, interna petlja se pretjerano ubrzava i serijski podaci se čitaju prebrzo. Stoga sam postavio odgodu tako da sistem čeka da stignu dodatne komande kada se očekuju.

Oda psu čuvaru

Oh, i još nešto u vezi tog problema sa watchdog tajmerom - riješio sam ga upravo u fazi testiranja u “terenskim” uslovima. Bez pretjerivanja, ovo je bilo sve o čemu sam razmišljao četiri dana. Svake pauze (u trajanju od deset minuta) jurila sam u kafeteriju samo da isprobam novu verziju koda. A kada je distribucija otvorena, sjedio sam na podu sat vremena pokušavajući uhvatiti bubu. Nisam ni razmišljao 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 sistem praćenja redova

Isječak koda s kojim sam se borio

Pronašao sam program, odnosno proširenje za Arduino, koji analizira strukturu podataka softvera kada dođe do Wdt-resetovanja, pristupajući ELF datoteci kompajliranog koda (korelacije između funkcija i pokazivača). Kada je to urađeno, 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 sistem praćenja redova

Prokletstvo! Pa, ko je znao da je ispravljanje grešaka u sistemu u realnom vremenu tako teško! Međutim, uklonio sam grešku i ispostavilo se da je to glupa greška. Zbog svog neiskustva, napisao sam while petlju u kojoj je niz otišao izvan granica. Ugh! (indeks++ i ++index su dvije velike razlike).

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sistem praćenja redova

Problemi sa hardverom tokom testiranja

Naravno, oprema, odnosno štitnici za noge, bila je daleko od idealne. Kao što možete očekivati, jedan od prekidača je zaglavljen.

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sistem praćenja redova

XNUMX. novembra, tokom ručka, zaglavio se prekidač na trećem panelu

Iznad sam dao snimak ekrana online grafikona sa ThingSpeak web stranice. Kao što vidite, nešto se dogodilo oko 12:25, nakon čega je otkazao štit broj tri. Kao rezultat, dužina reda je određena na 3 (vrijednost je 3 * 100), čak i kada u stvari nije dostigla treći štit. Popravka je bila u tome što sam dodao više podloga (da, ljepljive trake) kako bih prekidaču dao više prostora.

Ponekad bi moj sistem bio bukvalno iskorijenjen kada bi se žica zakačila za vrata. Kola i paketi su se kroz ova vrata unosila u trpezariju, tako da je nosila žicu sa sobom, zatvarajući je i izvlačeći je iz utičnice. U takvim slučajevima primijetio sam neočekivani kvar u protoku podataka i pretpostavio da je sistem isključen iz izvora napajanja.

Širenje informacija o sistemu u cijeloj školi

Kao što je već spomenuto, koristio sam ThingSpeak API, koji vizualizira podatke na stranici u obliku grafikona, što je vrlo zgodno. Uglavnom, samo sam postavio link do svog rasporeda u školskoj Facebook grupi (tražio sam ovu objavu pola sata i nisam mogao da je nađem - vrlo čudno). Ali pronašao sam objavu na svom Bandu, školskoj zajednici, od 2017. novembra XNUMX.:

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sistem praćenja redova

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sistem praćenja redova

Reakcija je bila divlja!

Objavio sam ove postove da potaknem interesovanje za svoj projekat. Međutim, i sam pogled na njih je sam po sebi prilično zabavan. Recimo da se ovdje jasno vidi da je broj ljudi naglo skočio u 6:02 i praktično pao na nulu do 6:10.

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sistem praćenja redova Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sistem praćenja redova

Iznad 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 događao u 12:25 (red je stigao do petog štita). A za popodnevnu užinu generalno je neuobičajeno imati veliku gužvu (red je dugačak najviše jednu tablu).

Znate šta je smiješno? Ovaj sistem je još uvijek živ (https://thingspeak.com/channels/346781)! Ulogovao sam se na nalog koji sam ranije koristio i video ovo:

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sistem praćenja redova

Na gornjem grafikonu sam vidio da je trećeg decembra bio znatno manji priliv ljudi. I nije ni čudo - bila je nedelja. Na ovaj dan skoro svi negdje idu, jer se u većini slučajeva samo nedjeljom može napustiti školski prostor. Jasno je da vikendom u kafeteriji nećete videti ni žive duše.

Kako sam dobio prvu nagradu od korejskog ministarstva obrazovanja za svoj projekat

Kao što vidite i sami, nisam radio na ovom projektu jer sam pokušavao da zaradim neku vrstu nagrade ili priznanja. Samo sam želio da iskoristim svoje vještine da riješim hronični problem sa kojim sam se suočavao u školi.

Međutim, naša školska nutricionistica, gospođica O, s kojom sam se jako zbližio planirajući i razvijajući svoj projekat, jednog dana me je pitala da li znam za konkurs za ideje za kafeterije. Onda sam pomislio da je neka čudna ideja da uporedim ideje za trpezariju. Ali pročitao sam informativnu knjižicu i saznao da se projekat mora predati do 24. novembra! Dobro dobro. Brzo sam finalizirao koncept, podatke i grafiku i poslao aplikaciju.

Promjene originalne ideje za takmičenje

Inače, sistem koji sam na kraju predložio bio je malo drugačiji od onog koji je već implementiran. U suštini, prilagodio sam svoju originalnu metodu (mjerenje dužine reda u realnom vremenu) za mnogo veće korejske škole. Poređenja radi: u našoj školi ima tri stotine učenika, a u nekim drugim ima toliko ljudi u samo jednom odeljenju! Morao sam da smislim kako da skaliram sistem.

Stoga sam predložio koncept koji je više zasnovan na „ručnoj” kontroli. Danas su korejske škole već uvele plan obroka za sva odeljenja, koji se striktno pridržava, pa sam napravio drugačiji okvir tipa „signal-response”. Ideja je bila da kada grupa koja je posetila kafeteriju ispred vas dostigne određenu granicu dužine reda (odnosno, red postane kratak), oni će vam ručno poslati signal pomoću dugmeta ili prekidača na zidu. . Signal će se prenositi na TV ekran ili preko LED sijalica.

Samo sam zaista želio da riješim problem koji se pojavio u svim školama u zemlji. Još više sam ojačao u svojoj namjeri kada sam čuo priču od gospođice O - sad ću vam ispričati. Ispostavilo se da se u nekim velikim školama red proteže dalje od kafeterije, na ulicu i po dvadeset do trideset metara, čak i zimi, jer niko ne može kako treba da organizuje proces. A ponekad se dogodi da se nekoliko minuta uopće niko ne pojavi u blagovaonici - i to je također loše. U školama sa velikim brojem učenika, osoblje jedva ima vremena da sve usluži, čak i ako se ne gubi ni jedan minut vremena za obrok. Dakle, oni koji posljednji stignu na raspodjelu (najčešće osnovci) jednostavno nemaju dovoljno vremena za jelo.

Dakle, iako sam morao na brzinu da predam prijavu, ipak sam dobro razmislio kako da je prilagodim za širu upotrebu.

Poruka da sam osvojio prvu nagradu!

Ukratko, pozvan sam da dođem i predstavim svoj projekat državnim zvaničnicima. Tako sam stavio sve svoje Power Point talente u rad i došao i predstavio!

Priča o korejskom školarcu koji je dobio nagradu od ministarstva za sistem praćenja redova

Početak izlaganja (krajnje lijevo - ministar)

Bilo je to zanimljivo iskustvo - upravo sam smislio nešto za problem kafeterije i nekako završio među pobjednicima takmičenja. Čak i stojeći na sceni, stalno sam razmišljao: „Hm, šta ja uopšte radim ovde?“ Ali generalno, ovaj projekat mi je doneo veliku korist - naučio sam mnogo o razvoju ugrađenih sistema i implementaciji projekata u stvarnom životu. Pa, dobio sam nagradu, naravno.

zaključak

Ima tu neke ironije: koliko god da sam učestvovao na raznim takmičenjima i sajmovima nauke na koje sam se namerno prijavljivao, ništa dobro od toga nije bilo. A onda me je prilika našla i dala mi dobre rezultate.

Ovo me navelo na razmišljanje o razlozima koji me motiviraju da se bavim projektima. Zašto počinjem da radim – 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 ohrabrujem da ne odustajete od projekta. Sa ovakvim pristupom poslovanju, usput se susrećete s neočekivanim prilikama i nećete osjećati pritisak zbog potrebe za pobjedom – vaš glavni motivator će biti strast prema vašem poslu.

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, ali vremenom se gomila iskustvo i ko zna – možda će vašu aplikaciju koristiti cijela država ili čak cijeli svijet.

Svaki put kada pomislim na ovo iskustvo, nekako sam ponosna na sebe. Ne mogu objasniti zašto, ali sam proces realizacije projekta jednostavno prinio 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 svaki dan uništavao živote. Jednog dana mi je prišao jedan od studenata i rekao: „Vaš sistem je veoma zgodan.“ Bio sam na sedmom nebu!
Mislim da bih se i bez nagrada osjećao ponosnim na svoj razvoj samo zbog ovoga. Možda mi je pomoć drugima donela takvo zadovoljstvo... generalno, volim projekte.

Ono što sam nadao da ću postići ovim člankom

Nadam se da ste čitanjem ovog članka do kraja bili inspirirani da učinite nešto što će koristiti vašoj zajednici ili čak samo vama. Ohrabrujem vas da iskoristite svoje vještine (programiranje je svakako jedna od njih, ali ima i drugih) da promijenite stvarnost oko sebe na bolje. Uvjeravam vas da se iskustvo koje ćete steći u tom procesu ne može porediti ni sa čim drugim.

Takođe može otvoriti puteve koje niste očekivali - to mi se dogodilo. Zato vas molim, radite ono što volite i ostavite svoj trag u svijetu! Odjek jednog jedinog glasa može potresti cijeli svijet, zato vjerujte u sebe.

Evo nekoliko linkova vezanih za projekat:

izvor: www.habr.com

Kupite pouzdan hosting za sajtove sa DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan web hosting sa DDoS zaštitom, VPS VDS servere | ProHoster