Historien om en koreansk skolegutt som mottok en pris fra departementet for et køovervåkingssystem

Da jeg gikk på ungdomstrinnet på videregående (fra mars til desember 2016), var jeg veldig irritert over situasjonen som utviklet seg i skolens kafeteria.

Problem én: å vente for lenge i kø

Hvilket problem observerte jeg? Som dette:

Historien om en koreansk skolegutt som mottok en pris fra departementet for et køovervåkingssystem

Mange elever samlet seg ved utdelingsområdet og de måtte stå lenge (fem til ti minutter). Selvfølgelig er dette et vanlig problem og en rettferdig serviceordning: Jo senere du kommer, jo senere vil du bli servert. Så du kan forstå hvorfor du må vente.

Problem to: ulik vilkår for de som venter

Men det er selvfølgelig ikke alt, jeg måtte også observere et annet, mer alvorlig problem. Så alvorlig at jeg til slutt bestemte meg for å prøve å finne en vei ut av situasjonen. Videregående elever (det vil si alle som studerer minst en karakter høyere) og lærere gikk til utdelingen uten å stå i kø. Ja, ja, og du som barneskoleelev kunne ikke fortelle dem noe. Skolen vår hadde ganske strenge retningslinjer for forholdet mellom klassene.

Derfor kom vennene mine og jeg, mens vi var nybegynnere, til kafeteriaen aller først, var i ferd med å få mat - og så dukket det opp elever eller lærere på videregående skole og rett og slett dyttet oss til side (noen, som var snillere, lot oss være i vår plass i kø). Vi måtte vente femten til tjue minutter ekstra, selv om vi kom tidligere enn alle andre.

Vi hadde en spesielt dårlig tid ved lunsjtid. I løpet av dagen hastet absolutt alle til kafeteriaen (lærere, elever, ansatte), så for oss som barneskolebarn var lunsj aldri en glede.

Felles løsninger på problemet

Men siden nykommerne ikke hadde noe valg, kom vi på to måter å redusere risikoen for å bli kastet bakerst i rekken. Den første er å komme til spisesalen veldig tidlig (det vil si bokstavelig talt før maten i det hele tatt begynner å bli servert). Den andre er å bevisst drepe tid på å spille ping-pong eller basketball og komme veldig sent (omtrent tjue minutter etter starten av lunsj).

Til en viss grad fungerte det. Men for å være ærlig var det ingen som var ivrige etter å skynde seg så fort de kunne til spisestuen bare for å kunne spise, eller for å gjøre ferdig de kalde restene etter de andre, for de var blant de siste. Vi trengte en løsning som ville gi oss beskjed når det ikke var fullt i kafeteriaen.

Det ville vært flott om en spåmann forutså fremtiden for oss og fortalte oss nøyaktig når vi skulle gå til spisestuen, slik at vi ikke måtte vente lenge. Problemet var at alt ble annerledes hver dag. Vi kunne ikke bare analysere mønstre og identifisere sweet spot. Vi hadde bare én måte å finne ut hvordan det var i spisesalen – å komme dit til fots, og stien kunne være flere hundre meter, avhengig av hvor du var. Så hvis du kommer, se på linjen, kom tilbake og fortsett i samme ånd til det blir kort, vil du kaste bort mye tid. Generelt var livet ekkelt for barneklassen, og ingenting kunne gjøres med det.

Eureka – ideen om å lage et kantineovervåkingssystem

Og plutselig, allerede i neste studieår (2017), sa jeg til meg selv: "Hva om vi lager et system som viser lengden på køen i sanntid (det vil si oppdage en trafikkork)?" Hvis jeg hadde lyktes, ville bildet vært dette: Barneskoleelever ville rett og slett kastet et blikk på telefonene sine for å få oppdaterte data om gjeldende arbeidsmengde, og ville trekke konklusjoner om hvorvidt det er fornuftig for dem å gå nå .

I hovedsak jevnet denne ordningen ut ulikhet gjennom tilgang til informasjon. Med dens hjelp kunne barneskolebarn selv velge hva som var best for dem å gjøre - gå og stå i kø (hvis det ikke var for lenge) eller bruke tid mer nyttig, og senere velge et mer passende øyeblikk. Jeg ble veldig begeistret over denne tanken.

Design av et kantineovervåkingssystem

I september 2017 måtte jeg levere et prosjekt for et objektorientert programmeringskurs, og jeg leverte dette systemet som mitt prosjekt.

Historien om en koreansk skolegutt som mottok en pris fra departementet for et køovervåkingssystem

Opprinnelig systemplan (september 2017)

Utvalg av utstyr (oktober 2017)

Historien om en koreansk skolegutt som mottok en pris fra departementet for et køovervåkingssystem

En enkel taktil bryter med opptrekksmotstand. Plan med fem skjold i tre rader for å gjenkjenne køen langs tre linjer

Jeg bestilte bare femti membranbrytere, et Wemos D1 minikort basert på ESP8266, og noen ringklemmer som jeg planla å feste de emaljerte ledningene til.

Prototyping og utvikling (oktober 2017)

Jeg startet med et brødbrett - satte sammen en krets på den og testet den. Jeg var begrenset i antall materialer, så jeg begrenset meg til et system med fem fotbrett.

For programvaren jeg skrev i C++, satte jeg følgende mål:

  1. Arbeid kontinuerlig og send data kun i perioder hvor det serveres mat (frokost, lunsj, middag, ettermiddagsmat).
  2. Gjenkjenne kø-/trafikksituasjonen i kafeteriaen ved slike frekvenser at dataene deretter kan brukes i maskinlæringsmodeller (f.eks. 10 Hz).
  3. Send data til serveren på en effektiv måte (pakkestørrelsen skal være liten) og med korte intervaller.

For å oppnå dem trengte jeg å gjøre følgende:

  1. Bruk RTC-modulen (Real Time Clock) til å kontinuerlig overvåke tiden og bestemme når maten serveres i kafeteriaen.
  2. Bruk en datakomprimeringsmetode for å registrere skjoldtilstanden i ett tegn. Ved å behandle dataene som en fem-bits binær kode, kartla jeg de forskjellige verdiene til ASCII-tegn slik at de representerte dataelementene.
  3. Bruk ThingSpeak (et IoT-verktøy for analyser og online kartlegging) ved å sende HTTP-forespørsler ved å bruke POST-metoden.

Selvfølgelig var det noen feil. For eksempel visste jeg ikke at sizeof( )-operatoren returnerer verdien 4 for et char *-objekt, og ikke lengden på strengen (fordi det ikke er en matrise, og derfor beregner ikke kompilatoren lengden) og ble veldig overrasket over hvorfor HTTP-forespørslene mine bare inneholdt fire tegn fra alle URL-er!

Jeg inkluderte heller ikke parenteser i #define-trinnet, noe som førte til uventede resultater. Vel la oss si:

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

Her skulle man forvente at A ville være lik 3 (10 / 3 = 3), men faktisk ble det beregnet annerledes: 2 (2 * 5/ 3 = 2).

Til slutt, en annen bemerkelsesverdig feil som jeg taklet var tilbakestillingen på vakthund-timeren. Jeg slet med dette problemet i veldig lang tid. Som det viste seg senere, prøvde jeg å få tilgang til lavnivåregisteret på ESP8266-brikken på feil måte (ved en feil skrev jeg inn en NULL-verdi for en peker til en struktur).

Historien om en koreansk skolegutt som mottok en pris fra departementet for et køovervåkingssystem

Et fotskjold som jeg har designet og bygget. Da bildet ble tatt, hadde han allerede overlevd fem uker med tråkking

Maskinvare (fotbrett)

For å sikre at skjoldene var i stand til å overleve de tøffe forholdene i kantinen, satte jeg følgende krav til dem:

  • Skjold må være sterke nok til å bære menneskelig vekt til enhver tid.
  • Skjoldene bør være tynne for ikke å forstyrre folk i kø.
  • Bryteren må aktiveres når den tråkkes på.
  • Skjoldene må være vanntette. Spisestuen er alltid fuktig.

For å imøtekomme disse kravene bestemte jeg meg for en to-lags design - laserkuttet akryl for bunn- og toppdeksel, og kork som et beskyttende lag.

Jeg laget skjoldoppsettet i AutoCAD; dimensjoner – 400 x 400 millimeter.

Historien om en koreansk skolegutt som mottok en pris fra departementet for et køovervåkingssystem

Til venstre er designet som gikk i produksjon. Til høyre er et alternativ med kobling av Lego-type

Forresten, jeg forlot til slutt det høyre designet fordi med et slikt fikseringssystem viste det seg at det skulle være 40 centimeter mellom skjoldene, noe som betyr at jeg ikke kunne dekke den nødvendige avstanden (mer enn ti meter).

Historien om en koreansk skolegutt som mottok en pris fra departementet for et køovervåkingssystem

Historien om en koreansk skolegutt som mottok en pris fra departementet for et køovervåkingssystem

For å koble til alle bryterne brukte jeg emalje ledninger - totalt tok de mer enn 70 meter! Jeg plasserte en membranbryter i midten av hvert skjold. To klips stakk ut fra sidesporene - til venstre og til høyre for bryteren.

Vel, for vanntetting brukte jeg elektrisk tape. Mye elektrisk tape.

Og alt fungerte!

Periode fra den femte november til den tolvte desember

Historien om en koreansk skolegutt som mottok en pris fra departementet for et køovervåkingssystem

Bilde av systemet - alle fem skjoldene er synlige her. Til venstre er elektronikken (D1-mini / Bluetooth / RTC)

XNUMX. november klokken åtte om morgenen (frokosttid) begynte systemet å samle inn aktuelle data om situasjonen i spisestuen. Jeg trodde ikke mine egne øyne. For bare to måneder siden skisserte jeg det generelle opplegget, satt hjemme i pyjamasen, og her er vi, hele systemet fungerer uten problemer... eller ikke.

Programvarefeil under testing

Selvfølgelig var det mange feil i systemet. Her er de jeg husker.

Programmet sjekket ikke for tilgjengelige Wi-Fi-punkter når det prøvde å koble klienten til ThingSpeak API. For å fikse feilen la jeg til et ekstra trinn for å sjekke tilgjengeligheten av Wi-Fi.

I oppsettfunksjonen kalte jeg gjentatte ganger "WiFi.begin" til en tilkobling dukket opp. Senere fant jeg ut at tilkoblingen er etablert av ESP8266-fastvaren, og startfunksjonen brukes kun når du setter opp Wi-Fi. Jeg korrigerte situasjonen ved å ringe funksjonen bare én gang, under oppsett.

Jeg oppdaget at kommandolinjegrensesnittet jeg opprettet (det var ment å stille inn tiden, endre nettverksinnstillinger) ikke fungerer i hvile (det vil si utenom frokost, lunsj, middag og ettermiddagste). Jeg så også at når det ikke skjer noen logging, øker den interne sløyfen for mye og seriedata leses for raskt. Derfor setter jeg en forsinkelse slik at systemet venter på at flere kommandoer kommer når de forventes.

Ode til vakthunden

Å, og en ting til om det problemet med vakthundtimeren - jeg løste det nøyaktig på teststadiet i "felt"-forhold. Uten å overdrive var dette alt jeg tenkte på i fire dager. Hver pause (som varer i ti minutter) skyndte jeg meg til kafeteriaen bare for å prøve den nye versjonen av koden. Og da distribusjonen åpnet, satt jeg på gulvet i en time og prøvde å fange feilen. Jeg tenkte ikke engang på mat! Takk for alle de gode tingene, ESP8266 Watchdog!

Hvordan jeg fant ut WDT

Historien om en koreansk skolegutt som mottok en pris fra departementet for et køovervåkingssystem

Kodebit jeg slet med

Jeg fant et program, eller rettere sagt en utvidelse for Arduino, som analyserer datastrukturen til programvaren når en Wdt-reset oppstår, og får tilgang til ELF-filen til den kompilerte koden (korrelasjoner mellom funksjoner og pekere). Da dette var gjort, viste det seg at feilen kan elimineres som følger:

Historien om en koreansk skolegutt som mottok en pris fra departementet for et køovervåkingssystem

Faen! Vel, hvem visste at det var så vanskelig å fikse feil i et sanntidssystem! Jeg fjernet imidlertid feilen, og det viste seg å være en dum feil. På grunn av min uerfarenhet skrev jeg en while-løkke der matrisen gikk over grensene. Uff! (indeks++ og ++indeks er to store forskjeller).

Historien om en koreansk skolegutt som mottok en pris fra departementet for et køovervåkingssystem

Problemer med maskinvare under testing

Selvfølgelig var utstyret, det vil si fotskjoldene, langt fra ideelt. Som du kanskje forventer, sitter en av bryterne fast.

Historien om en koreansk skolegutt som mottok en pris fra departementet for et køovervåkingssystem

Den XNUMX. november, under lunsj, satt bryteren på det tredje panelet seg fast

Ovenfor har jeg gitt et skjermbilde av et online diagram fra ThingSpeak-nettstedet. Som du kan se skjedde det noe rundt 12:25, hvoretter skjold nummer tre sviktet. Som et resultat ble kølengden bestemt til å være 3 (verdien er 3 * 100), selv når den faktisk ikke nådde det tredje skjoldet. Løsningen var at jeg la til mer polstring (ja, gaffatape) for å gi bryteren mer plass.

Noen ganger ble systemet mitt bokstavelig talt rykket opp med rot når ledningen ble fanget i døren. Vogner og pakker ble båret gjennom denne døren inn til spisestuen, slik at den bar ledningen med seg, lukket og trakk den ut av stikkontakten. I slike tilfeller la jeg merke til en uventet feil i dataflyten og gjettet at systemet var koblet fra strømkilden.

Formidling av informasjon om systemet på hele skolen

Som allerede nevnt brukte jeg ThingSpeak API, som visualiserer data på nettstedet i form av grafer, noe som er veldig praktisk. Generelt la jeg i utgangspunktet bare ut en lenke til timeplanen min i skolens Facebook-gruppe (jeg søkte etter dette innlegget i en halv time og fant det ikke - veldig rart). Men jeg fant et innlegg på bandet mitt, et skolesamfunn, datert 2017. november XNUMX:

Historien om en koreansk skolegutt som mottok en pris fra departementet for et køovervåkingssystem

Historien om en koreansk skolegutt som mottok en pris fra departementet for et køovervåkingssystem

Reaksjonen var vill!

Jeg la ut disse innleggene for å vekke interesse for prosjektet mitt. Men selv bare å se på dem er ganske underholdende i seg selv. La oss si at du tydelig kan se her at antallet personer hoppet kraftig ved 6:02 og praktisk talt falt til null med 6:10.

Historien om en koreansk skolegutt som mottok en pris fra departementet for et køovervåkingssystem Historien om en koreansk skolegutt som mottok en pris fra departementet for et køovervåkingssystem

Ovenfor har jeg lagt ved et par grafer som relaterer seg til lunsj og ettermiddagste. Det er interessant å merke seg at toppen av arbeidsbelastningen ved lunsjtid nesten alltid skjedde klokken 12:25 (køen nådde det femte skjoldet). Og for en ettermiddagsmatbit er det generelt ukarakteristisk å ha en stor folkemengde (køen er maksimalt ett brett lang).

Vet du hva som er morsomt? Dette systemet er fortsatt i live (https://thingspeak.com/channels/346781)! Jeg logget på kontoen jeg brukte før og så dette:

Historien om en koreansk skolegutt som mottok en pris fra departementet for et køovervåkingssystem

I grafen over så jeg at den tredje desember var tilstrømningen av folk betydelig mindre. Og ikke så rart – det var søndag. På denne dagen drar nesten alle et sted, for i de fleste tilfeller bare på søndag kan du forlate skolens område. Det er tydelig at du ikke vil se en levende sjel i kafeteriaen i helgen.

Hvordan jeg mottok førstepremien fra det koreanske utdanningsdepartementet for prosjektet mitt

Som du kan se selv, jobbet jeg ikke med dette prosjektet fordi jeg prøvde å tjene en slags pris eller anerkjennelse. Jeg ville bare bruke ferdighetene mine til å løse et kronisk problem jeg sto overfor på skolen.

Men ernæringsfysiologen vår, Miss O, som jeg ble veldig nær mens jeg planla og utviklet prosjektet mitt, spurte meg en dag om jeg visste om en konkurranse for kafeteriaideer. Da syntes jeg det var en merkelig idé å sammenligne ideer til spisestuen. Men jeg leste informasjonsheftet og fikk vite at prosjektet må leveres innen 24. november! Vel vel. Jeg ferdigstilte raskt konsept, data og grafikk og sendte søknaden.

Endringer i den opprinnelige ideen for konkurransen

Forresten, systemet som jeg til slutt foreslo var litt annerledes enn det som allerede var implementert. I hovedsak tilpasset jeg min opprinnelige metode (måle kølengde i sanntid) for mye større koreanske skoler. Til sammenligning: på skolen vår er det tre hundre elever, og i noen andre er det så mange mennesker i bare én klasse! Jeg måtte finne ut hvordan jeg skulle skalere systemet.

Derfor foreslo jeg et konsept som var mer basert på "manuell" kontroll. I dag har koreanske skoler allerede innført en måltidsplan for alle klasser, som er strengt overholdt, så jeg bygde et annet rammeverk av typen "signal-respons". Tanken her var at når gruppen som besøkte kafeteriaen foran deg nådde en viss grense i lengden på linjen (det vil si at linjen ble kort), ville de manuelt sende et signal til deg ved å bruke en knapp eller slå på veggen . Signalet vil bli overført til TV-skjermen eller gjennom LED-pærer.

Jeg ville egentlig bare løse et problem som dukket opp på alle skolene i landet. Jeg ble enda mer styrket i intensjonen min da jeg hørte en historie fra Miss O - jeg skal fortelle deg det nå. Det viser seg at på noen store skoler strekker linjen seg utover kafeteriaen, inn i gaten i tjue til tretti meter, selv om vinteren, fordi ingen kan organisere prosessen ordentlig. Og noen ganger hender det at det i flere minutter ikke dukker opp noen i spisestuen i det hele tatt - og dette er også ille. På skoler med store elevtall har personalet knapt tid til å betjene alle selv om ikke et eneste minutt mattid er bortkastet. Derfor har de som er de siste som kommer til utdelingen (vanligvis barneskoleelever) rett og slett ikke nok tid til å spise.

Så selv om jeg måtte sende inn søknaden min i all hast, tenkte jeg veldig nøye på hvordan jeg kunne tilpasse den for bredere bruk.

Melding om at jeg vant førstepremien!

Lang historie kort, jeg ble invitert til å komme og presentere prosjektet mitt for myndighetspersoner. Så jeg satte alle mine Power Point-talenter på jobb og kom og presenterte!

Historien om en koreansk skolegutt som mottok en pris fra departementet for et køovervåkingssystem

Begynnelsen av presentasjonen (ytterst til venstre - minister)

Это был интересный опыт – просто чего-то там придумал для столовской проблемы, и вот каким-то образом оказался в победителях конкурса. Даже стоя на сцене, я все думал: «Хмм, а что я тут вообще делаю?». Но вообще этот проект принес мне большую пользу – я многое узнал о разработке встраиваемых систем и внедрении проектов в реальную жизнь. Ну и приз получил, конечно.

Konklusjon

Det er litt ironi her: uansett hvor mye jeg deltok i alle slags konkurranser og vitenskapsmesser som jeg målrettet meldte meg på, ble det ikke noe godt ut av det. Og så fant muligheten meg og ga meg gode resultater.

Dette fikk meg til å tenke på grunnene som motiverer meg til å ta på meg prosjekter. Hvorfor begynner jeg å jobbe - for å "vinne" eller for å løse et reelt problem i verden rundt meg? Hvis det andre motivet virker i ditt tilfelle, oppfordrer jeg deg sterkt til ikke å forlate prosjektet. Med denne tilnærmingen til virksomheten kan du møte uventede muligheter underveis og vil ikke føle press fra behovet for å vinne – din viktigste motivator vil være lidenskap for virksomheten din.

Og viktigst av alt: hvis du klarer å implementere en anstendig løsning, kan du umiddelbart prøve den i den virkelige verden. I mitt tilfelle var plattformen en skole, men over tid akkumuleres erfaring, og hvem vet – kanskje vil søknaden din bli brukt av hele landet eller til og med hele verden.

Hver gang jeg tenker på denne opplevelsen, er jeg litt stolt av meg selv. Jeg kan ikke forklare hvorfor, men prosessen med å implementere prosjektet ga meg ganske enkelt stor glede, og premien var en ekstra bonus. I tillegg var jeg glad for at jeg klarte å løse for klassekameratene mine et problem som ødela livene deres hver dag. En dag kom en av elevene bort til meg og sa: "Systemet ditt er veldig praktisk." Jeg var i den syvende himmel!
Jeg tror selv uten noen utmerkelser ville jeg følt meg stolt over utviklingen min for dette alene. Kanskje det var å hjelpe andre som ga meg en slik tilfredsstillelse... generelt sett elsker jeg prosjekter.

Hva jeg håpet å oppnå med denne artikkelen

Jeg håper at ved å lese denne artikkelen til slutten, har du blitt inspirert til å gjøre noe som vil være til nytte for samfunnet ditt eller til og med bare deg selv. Jeg oppfordrer deg til å bruke ferdighetene dine (programmering er absolutt en av dem, men det finnes andre) for å endre virkeligheten rundt deg til det bedre. Jeg kan forsikre deg om at erfaringen du får i prosessen ikke kan sammenlignes med noe annet.

Det kan også åpne opp veier du ikke forventet – det var det som skjedde med meg. Så vær så snill, gjør det du elsker og sett ditt preg på verden! Ekkoet av én enkelt stemme kan ryste hele verden, så tro på deg selv.

Her er noen linker knyttet til prosjektet:

Kilde: www.habr.com

Legg til en kommentar