Povestea unui școlar coreean care a primit un premiu de la minister pentru un sistem de monitorizare a cozilor

Când eram în primul an de liceu (din martie până în decembrie 2016), eram foarte enervat de situația care s-a dezvoltat în cantina noastră școlară.

Problema XNUMX: așteptarea prea mult timp la coadă

Ce problema am observat? Ca aceasta:

Povestea unui școlar coreean care a primit un premiu de la minister pentru un sistem de monitorizare a cozilor

La zona de distribuție s-au adunat mulți studenți și au fost nevoiți să stea mult timp (cinci-zece minute). Desigur, aceasta este o problemă comună și o schemă de servicii corectă: cu cât ajungeți mai târziu, cu atât veți fi servit mai târziu. Deci ai putea înțelege de ce a trebuit să aștepți.

Problema a doua: condiții inegale pentru cei care așteaptă

Dar, desigur, asta nu este tot; a trebuit să observ și o altă problemă, mai serioasă. Atât de grav încât m-am hotărât în ​​cele din urmă să încerc să găsesc o cale de ieșire din situație. Liceenii (adica toti cei care invata cel putin o nota mai mare) si profesorii au mers la repartitie fara sa stea la coada. Da, da, iar tu, ca elev de școală primară, nu le-ai putut spune nimic. Școala noastră avea o politică destul de strictă în ceea ce privește relațiile dintre clase.

Prin urmare, eu și prietenii mei, în timp ce eram începători, am venit foarte întâi la cantină, eram pe cale să luăm mâncare - și apoi au apărut elevii de liceu sau profesorii și pur și simplu ne-au împins deoparte (unii, care erau mai amabili, ne-au permis să rămânem în locul nostru la rând). A trebuit să așteptăm încă cincisprezece până la douăzeci de minute, deși am ajuns mai devreme decât toți ceilalți.

Ne-am distrat deosebit de prost la prânz. În timpul zilei, absolut toată lumea s-a repezit la cantină (profesori, elevi, personal), așa că pentru noi, ca elevi din clasele primare, prânzul nu a fost niciodată o bucurie.

Soluții comune la problemă

Dar din moment ce nou-veniții nu au avut de ales, am venit cu două modalități de a reduce riscul de a fi aruncați în spatele liniei. Primul este să vii în sala de mese foarte devreme (adică chiar înainte ca mâncarea să înceapă să fie servită). Al doilea este să ucizi în mod deliberat timpul jucând ping-pong sau baschet și să ajungi foarte târziu (aproximativ douăzeci de minute după începerea prânzului).

Într-o oarecare măsură a funcționat. Dar, să fiu sincer, nimeni nu era nerăbdător să se grăbească cât de repede în sala de mese doar pentru a putea mânca, sau să termine după ceilalți resturile reci, pentru că erau printre ultimii. Aveam nevoie de o soluție care să ne anunțe când cantina nu era aglomerată.

Ar fi grozav dacă vreun ghicitor ne-ar fi prezis viitorul și ne-ar spune exact când să mergem în sufragerie, pentru a nu fi nevoiți să așteptăm mult. Necazul era că în fiecare zi totul ieșea diferit. Nu am putea pur și simplu să analizăm tiparele și să identificăm punctul favorabil. Aveam o singură modalitate de a afla cum sunt lucrurile în sala de mese - să ajungem acolo pe jos, iar poteca putea fi de câteva sute de metri, în funcție de locul în care te afli. Așa că dacă vii, uită-te la linie, revino și continuă în același spirit până devine scurtă, vei pierde mult timp. În general, viața era dezgustătoare pentru clasa elementară și nu se putea face nimic în privința asta.

Eureka – ideea creării unui sistem de monitorizare a cantinei

Și dintr-o dată, deja în următorul an universitar (2017), mi-am spus: „Dar dacă facem un sistem care să arate lungimea cozii în timp real (adică să detectăm un blocaj de trafic)?” Dacă aș fi reușit, imaginea ar fi fost următoarea: elevii de școală elementară s-ar uita pur și simplu la telefoanele lor pentru a obține date actualizate cu privire la nivelul actual al volumului de muncă și ar trage concluzii dacă are sens să meargă acum. .

În esență, această schemă a netezit inegalitatea prin accesul la informații. Cu ajutorul ei, elevii de școală primară puteau alege singuri ce era cel mai bine pentru ei să facă - să meargă și să stea la coadă (dacă nu era prea lung) sau să petreacă timpul mai util, iar ulterior să aleagă un moment mai potrivit. Am fost foarte entuziasmat de acest gând.

Proiectarea unui sistem de monitorizare a cantinei

În septembrie 2017, a trebuit să depun un proiect pentru un curs de programare orientată pe obiecte și am depus acest sistem ca proiect.

Povestea unui școlar coreean care a primit un premiu de la minister pentru un sistem de monitorizare a cozilor

Planul de sistem inițial (septembrie 2017)

Selecția echipamentului (octombrie 2017)

Povestea unui școlar coreean care a primit un premiu de la minister pentru un sistem de monitorizare a cozilor

Un comutator tactil simplu cu un rezistor de tragere. Schemă cu cinci scuturi în trei rânduri pentru a recunoaște coada de-a lungul a trei linii

Am comandat doar cincizeci de întrerupătoare cu membrană, o mini-placă Wemos D1 bazată pe ESP8266 și câteva cleme inelare la care am plănuit să atașez firele emailate.

Prototipare și dezvoltare (octombrie 2017)

Am început cu o placă - am asamblat un circuit pe ea și l-am testat. Eram limitat la numărul de materiale, așa că m-am limitat la un sistem cu cinci tabliere.

Pentru software-ul pe care l-am scris în C++, mi-am stabilit următoarele obiective:

  1. Lucrați continuu și trimiteți date numai în perioadele în care se servește mâncare (mic dejun, prânz, cină, gustare de după-amiază).
  2. Recunoașteți situația de coadă/trafic din cantină la astfel de frecvențe încât datele să poată fi apoi utilizate în modele de învățare automată (de exemplu, 10 Hz).
  3. Trimiteți date către server într-un mod eficient (dimensiunea pachetului ar trebui să fie mică) și la intervale scurte.

Pentru a le realiza, a trebuit să fac următoarele:

  1. Utilizați modulul RTC (Real Time Clock) pentru a monitoriza în mod continuu ora și pentru a determina când mâncarea este servită în cantină.
  2. Utilizați o metodă de comprimare a datelor pentru a înregistra starea scutului într-un singur caracter. Tratând datele ca pe un cod binar pe cinci biți, am mapat diferitele valori la caractere ASCII, astfel încât acestea să reprezinte elementele de date.
  3. Utilizați ThingSpeak (un instrument IoT pentru analiză și diagrame online) trimițând solicitări HTTP folosind metoda POST.

Desigur, au existat niște bug-uri. De exemplu, nu știam că operatorul sizeof( ) returnează valoarea 4 pentru un obiect char * și nu lungimea șirului (pentru că nu este o matrice și, prin urmare, compilatorul nu calculează lungimea) și am fost foarte surprins de ce solicitările mele HTTP conțineau doar patru caractere din toate adresele URL!

De asemenea, nu am inclus paranteze în pasul #define, ceea ce a dus la rezultate neașteptate. Ei bine sa zicem:

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

Aici ne-am aștepta ca A să fie egal cu 3 (10 / 3 = 3), dar de fapt a fost calculat diferit: 2 (2 * 5/ 3 = 2).

În cele din urmă, un alt bug demn de remarcat cu care m-am ocupat a fost Resetarea cronometrului watchdog. M-am luptat cu această problemă foarte mult timp. După cum sa dovedit mai târziu, încercam să accesez registrul de nivel scăzut de pe cipul ESP8266 într-un mod greșit (din greșeală am introdus o valoare NULL pentru un pointer către o structură).

Povestea unui școlar coreean care a primit un premiu de la minister pentru un sistem de monitorizare a cozilor

Un scut pentru picioare pe care l-am proiectat și construit. În momentul în care a fost făcută fotografia, el supraviețuise deja cinci săptămâni de călcare în picioare

Hardware (plate pentru picioare)

Pentru a mă asigura că scuturile au putut supraviețui condițiilor dure ale cantinei, le-am stabilit următoarele cerințe:

  • Scuturile trebuie să fie suficient de puternice pentru a susține greutatea umană în orice moment.
  • Scuturile trebuie să fie subțiri pentru a nu deranja oamenii din rând.
  • Comutatorul trebuie activat atunci când este călcat.
  • Scuturile trebuie să fie impermeabile. Sala de mese este mereu umedă.

Pentru a îndeplini aceste cerințe, am optat pentru un design cu două straturi - acrilic tăiat cu laser pentru bază și capacul superior și plută ca strat protector.

Am realizat aspectul scutului în AutoCAD; dimensiuni – 400 pe 400 milimetri.

Povestea unui școlar coreean care a primit un premiu de la minister pentru un sistem de monitorizare a cozilor

În stânga este designul care a intrat în producție. În dreapta este o opțiune cu o conexiune de tip Lego

Apropo, în cele din urmă am abandonat designul din dreapta deoarece cu un astfel de sistem de fixare s-a dovedit că ar trebui să existe 40 de centimetri între scuturi, ceea ce înseamnă că nu puteam acoperi distanța necesară (mai mult de zece metri).

Povestea unui școlar coreean care a primit un premiu de la minister pentru un sistem de monitorizare a cozilor

Povestea unui școlar coreean care a primit un premiu de la minister pentru un sistem de monitorizare a cozilor

Pentru a conecta toate întrerupătoarele am folosit fire emailate - în total au luat mai mult de 70 de metri! Am plasat un comutator cu membrană în centrul fiecărui scut. Două cleme ieșeau din fantele laterale - la stânga și la dreapta comutatorului.

Ei bine, pentru impermeabilizare am folosit bandă electrică. Multă bandă electrică.

Și totul a funcționat!

Perioada de la XNUMX noiembrie până la XNUMX decembrie

Povestea unui școlar coreean care a primit un premiu de la minister pentru un sistem de monitorizare a cozilor

Fotografie a sistemului - toate cele cinci scuturi sunt vizibile aici. În stânga este electronica (D1-mini / Bluetooth / RTC)

Pe XNUMX noiembrie la ora opt dimineața (ora micul dejun), sistemul a început să colecteze date actuale despre situația din sala de mese. Nu-mi venea să cred ochilor. Cu doar două luni în urmă schițam schema generală, stând acasă în pijama, și iată-ne, întregul sistem funcționând fără probleme... sau nu.

Erori software în timpul testării

Desigur, au existat o mulțime de erori în sistem. Iată-i pe cei de care îmi amintesc.

Programul nu a verificat punctele Wi-Fi disponibile atunci când a încercat să conecteze clientul la API-ul ThingSpeak. Pentru a remedia eroarea, am adăugat un pas suplimentar pentru a verifica disponibilitatea Wi-Fi.

În funcția de configurare, am sunat în mod repetat „WiFi.begin” până când a apărut o conexiune. Ulterior am aflat că conexiunea este stabilită de firmware-ul ESP8266, iar funcția de start este folosită doar la configurarea Wi-Fi. Am corectat situația apelând funcția o singură dată, în timpul instalării.

Am descoperit că interfața de linie de comandă pe care am creat-o (era menită să seteze ora, să schimbe setările rețelei) nu funcționează în repaus (adică în afara micul dejun, prânz, cină și ceai de după-amiază). De asemenea, am văzut că atunci când nu are loc înregistrarea, bucla internă se accelerează excesiv și datele seriale sunt citite prea repede. Prin urmare, am setat o întârziere astfel încât sistemul să aștepte să sosească comenzi suplimentare când sunt așteptate.

Oda câinelui de pază

Ah, și încă ceva despre problema aceea cu timer-ul watchdog - am rezolvat-o tocmai în faza de testare în condiții „de câmp”. Fără exagerare, la asta m-am gândit timp de patru zile. La fiecare pauză (care dura zece minute) mă grăbeam la cantină doar pentru a încerca noua versiune a codului. Și când s-a deschis distribuția, am stat o oră pe jos, încercând să prind bug-ul. Nici nu m-am gândit la mâncare! Mulțumesc pentru toate lucrurile bune, ESP8266 Watchdog!

Cum mi-am dat seama de WDT

Povestea unui școlar coreean care a primit un premiu de la minister pentru un sistem de monitorizare a cozilor

Fragment de cod cu care mă luptam

Am găsit un program, sau mai degrabă o extensie pentru Arduino, care analizează structura de date a software-ului atunci când are loc o resetare Wdt, accesând fișierul ELF al codului compilat (corelații între funcții și pointeri). Când s-a făcut acest lucru, s-a dovedit că eroarea poate fi eliminată după cum urmează:

Povestea unui școlar coreean care a primit un premiu de la minister pentru un sistem de monitorizare a cozilor

La naiba! Ei bine, cine știa că remedierea erorilor într-un sistem în timp real este atât de dificilă! Cu toate acestea, am eliminat bug-ul și s-a dovedit a fi un bug prost. Din cauza lipsei mele de experiență, am scris o buclă while în care matricea a depășit limitele. Uf! (index++ și ++index sunt două diferențe mari).

Povestea unui școlar coreean care a primit un premiu de la minister pentru un sistem de monitorizare a cozilor

Probleme cu hardware-ul în timpul testării

Bineînțeles că echipamentul, adică scuturile pentru picioare, era departe de a fi ideal. După cum vă puteți aștepta, unul dintre comutatoare este blocat.

Povestea unui școlar coreean care a primit un premiu de la minister pentru un sistem de monitorizare a cozilor

Pe XNUMX noiembrie, în timpul prânzului, comutatorul de pe al treilea panou s-a blocat

Mai sus am oferit o captură de ecran a unei diagrame online de pe site-ul ThingSpeak. După cum puteți vedea, ceva s-a întâmplat în jurul orei 12:25, după care scutul numărul trei a eșuat. Ca urmare, lungimea cozii a fost determinată a fi 3 (valoarea este 3 * 100), chiar și atunci când de fapt nu a ajuns la al treilea scut. Soluția a fost că am adăugat mai multă căptușeală (da, bandă adezivă) pentru a oferi comutatorului mai mult spațiu.

Uneori, sistemul meu a fost literalmente dezrădăcinat când firul a fost prins în ușă. Cărucioarele și pachetele au fost transportate prin această ușă în sufragerie, astfel încât să purta firul împreună cu el, închizând-o și trăgând-o din priză. În astfel de cazuri, am observat o defecțiune neașteptată a fluxului de date și am ghicit că sistemul a fost deconectat de la sursa de alimentare.

Diseminarea informațiilor despre sistem în întreaga școală

După cum am menționat deja, am folosit API-ul ThingSpeak, care vizualizează datele de pe site sub formă de grafice, ceea ce este foarte convenabil. În general, tocmai am postat un link către programul meu în grupul de Facebook al școlii (am căutat această postare timp de o jumătate de oră și nu l-am găsit - foarte ciudat). Dar am găsit o postare pe trupa mea, o comunitate școlară, din 2017 noiembrie XNUMX:

Povestea unui școlar coreean care a primit un premiu de la minister pentru un sistem de monitorizare a cozilor

Povestea unui școlar coreean care a primit un premiu de la minister pentru un sistem de monitorizare a cozilor

Reacția a fost sălbatică!

Am postat aceste postări pentru a stârni interesul față de proiectul meu. Cu toate acestea, chiar și doar privirea la ele este destul de distractiv în sine. Să presupunem că puteți vedea clar aici că numărul de oameni a sărit brusc la 6:02 și practic a scăzut la zero la 6:10.

Povestea unui școlar coreean care a primit un premiu de la minister pentru un sistem de monitorizare a cozilor Povestea unui școlar coreean care a primit un premiu de la minister pentru un sistem de monitorizare a cozilor

Mai sus am atașat câteva grafice care se referă la prânz și ceaiul de după-amiază. Este interesant de observat că vârful volumului de muncă la ora prânzului a avut loc aproape întotdeauna la 12:25 (coada a ajuns la al cincilea scut). Iar pentru o gustare de după-amiază este, în general, neobișnuit să ai o mulțime mare de oameni (coada este de cel mult o tablă).

Știi ce e amuzant? Acest sistem este încă în viață (https://thingspeak.com/channels/346781)! M-am conectat la contul pe care l-am folosit înainte și am văzut asta:

Povestea unui școlar coreean care a primit un premiu de la minister pentru un sistem de monitorizare a cozilor

În graficul de mai sus, am văzut că pe XNUMX decembrie afluxul de oameni a fost semnificativ mai mic. Și nu e de mirare - era duminică. În această zi, aproape toată lumea pleacă undeva, pentru că în cele mai multe cazuri doar duminică poți părăsi terenul școlii. Este clar că nu vei vedea un suflet viu în cantină în weekend.

Cum am primit premiul I de la Ministerul Coreean al Educației pentru proiectul meu

După cum puteți vedea singur, nu am lucrat la acest proiect pentru că încercam să câștig un fel de premiu sau recunoaștere. Am vrut doar să-mi folosesc abilitățile pentru a rezolva o problemă cronică cu care mă confruntam la școală.

Cu toate acestea, nutriționistul școlii noastre, domnișoara O, de care am devenit foarte apropiată în timp ce îmi planificam și dezvoltam proiectul, m-a întrebat într-o zi dacă știu de un concurs pentru idei de cantină. Apoi m-am gândit că este o idee ciudată să compar idei pentru sala de mese. Dar am citit broșura informativă și am aflat că proiectul trebuie depus până pe 24 noiembrie! Ei bine. Am finalizat rapid conceptul, datele și grafica și am trimis aplicația.

Modificări la ideea inițială pentru competiție

Apropo, sistemul pe care l-am propus până la urmă a fost ușor diferit de cel deja implementat. În esență, mi-am adaptat metoda originală (măsurarea lungimii cozii în timp real) pentru școli coreene mult mai mari. Spre comparație: în școala noastră sunt trei sute de elevi, iar în alții sunt atât de mulți oameni într-o singură clasă! Trebuia să-mi dau seama cum să scalez sistemul.

Prin urmare, am propus un concept care se bazează mai mult pe control „manual”. În zilele noastre, școlile coreene au introdus deja un plan de masă pentru toate clasele, care este strict respectat, așa că am construit un cadru diferit de tip „semnal-răspuns”. Ideea aici a fost că, atunci când grupul care vizitează cantina dinaintea ta a atins o anumită limită a lungimii liniei (adică linia a devenit scurtă), ți-ar trimite manual un semnal folosind un buton sau comutator de pe perete. . Semnalul va fi transmis pe ecranul televizorului sau prin becuri LED.

Mi-am dorit foarte mult să rezolv o problemă care a apărut în toate școlile din țară. Am fost și mai întărit în intenția mea când am auzit o poveste de la domnișoara O - vă spun acum. Se pare că în unele școli mari linia se extinde dincolo de cantină, în stradă pe douăzeci până la treizeci de metri, chiar și iarna, pentru că nimeni nu poate organiza corect procesul. Și uneori se întâmplă ca timp de câteva minute să nu apară deloc în sala de mese - și acest lucru este, de asemenea, rău. În școlile cu un număr mare de elevi, personalul abia are timp să servească pe toată lumea, chiar dacă nu se pierde nici un minut din timpul mesei. Prin urmare, cei care ajung ultimii la distribuție (de obicei elevi din clasele primare) pur și simplu nu au suficient timp să mănânce.

Așadar, deși a trebuit să-mi depun cererea în grabă, m-am gândit foarte atent cum aș putea să o adaptez pentru o utilizare mai largă.

Mesaj că am câștigat premiul I!

Pe scurt, am fost invitat să vin și să prezint proiectul meu oficialilor guvernamentali. Așa că mi-am pus toate talentele Power Point la lucru și am venit și am prezentat!

Povestea unui școlar coreean care a primit un premiu de la minister pentru un sistem de monitorizare a cozilor

Începutul prezentării (extrema stângă - ministru)

A fost o experiență interesantă - tocmai am venit cu ceva pentru problema cantinei și am ajuns cumva printre câștigătorii competiției. Chiar și stând pe scenă, m-am tot gândit: „Hmm, ce caut aici?” Dar, în general, acest proiect mi-a adus un mare beneficiu - am învățat multe despre dezvoltarea sistemelor încorporate și implementarea proiectelor în viața reală. Ei bine, am primit un premiu, desigur.

Concluzie

Există o oarecare ironie aici: indiferent cât de mult am participat la tot felul de competiții și târguri de știință la care m-am înscris intenționat, nu a ieșit nimic bun. Și atunci oportunitatea tocmai m-a găsit și mi-a dat rezultate bune.

Acest lucru m-a făcut să mă gândesc la motivele care mă motivează să asum proiecte. De ce încep să lucrez - pentru a „câștiga” sau pentru a rezolva o problemă reală din lumea din jurul meu? Dacă al doilea motiv este la lucru în cazul dumneavoastră, vă încurajez cu tărie să nu abandonați proiectul. Cu această abordare a afacerilor, poți întâlni oportunități neașteptate pe parcurs și nu vei simți presiunea nevoii de a câștiga - principalul tău motiv de motivare va fi pasiunea pentru afacerea ta.

Și cel mai important: dacă reușiți să implementați o soluție decentă, o puteți încerca imediat în lumea reală. În cazul meu, platforma a fost o școală, dar în timp, experiența se acumulează și cine știe - poate aplicația ta va fi folosită de toată țara sau chiar de întreaga lume.

De fiecare dată când mă gândesc la această experiență, sunt oarecum mândru de mine. Nu pot explica de ce, dar procesul de implementare a proiectului mi-a adus pur și simplu o mare plăcere, iar premiul a fost un bonus suplimentar. În plus, m-am bucurat că am putut să rezolv pentru colegii mei o problemă care le strică viața în fiecare zi. Într-o zi, unul dintre studenți a venit la mine și mi-a spus: „Sistemul tău este foarte convenabil”. Eram în al șaptelea cer!
Cred că, chiar și fără premii, m-aș simți mândru de dezvoltarea mea numai pentru asta. Poate că a ajutat pe alții mi-a adus o asemenea satisfacție... în general, îmi plac proiectele.

Ce am sperat să obțin cu acest articol

Sper că, citind acest articol până la sfârșit, ai fost inspirat să faci ceva care să-ți beneficieze comunitatea sau chiar doar pentru tine. Vă încurajez să vă folosiți abilitățile (programarea este cu siguranță una dintre ele, dar sunt și altele) pentru a schimba în bine realitatea din jurul vostru. Vă pot asigura că experiența pe care o veți dobândi în acest proces nu poate fi comparată cu nimic altceva.

De asemenea, poate deschide căi la care nu te așteptai - asta mi s-a întâmplat. Așa că te rog, fă ceea ce îți place și pune amprenta în lume! Ecoul unei singure voci poate zgudui întreaga lume, așa că crede în tine.

Iată câteva link-uri legate de proiect:

Sursa: www.habr.com

Adauga un comentariu