Het verhaal van een Koreaanse schooljongen die een prijs ontving van het ministerie voor een wachtrijmonitoringsysteem

Toen ik in het eerste jaar van de middelbare school zat (van maart tot december 2016), ergerde ik me erg aan de situatie die zich in onze schoolkantine ontwikkelde.

Probleem één: te lang in de rij staan

Welk probleem heb ik waargenomen? Soortgelijk:

Het verhaal van een Koreaanse schooljongen die een prijs ontving van het ministerie voor een wachtrijmonitoringsysteem

Veel studenten verzamelden zich bij de uitdeelruimte en moesten lang staan ​​(vijf tot tien minuten). Dit is uiteraard een veel voorkomend probleem en een eerlijke serviceregeling: hoe later u arriveert, hoe later u wordt bediend. Je kon dus begrijpen waarom je moest wachten.

Probleem twee: ongelijke omstandigheden voor degenen die wachten

Maar dat is natuurlijk niet alles; ik moest ook nog een ander, ernstiger probleem constateren. Zo ernstig dat ik uiteindelijk besloot te proberen een uitweg uit de situatie te vinden. Middelbare scholieren (dat wil zeggen iedereen die minimaal een klas hoger studeert) en leraren gingen naar de distributie zonder in de rij te hoeven wachten. Ja, ja, en jij, als basisschoolleerling, kon ze niets vertellen. Onze school had een vrij strikt beleid met betrekking tot de relaties tussen klassen.

Daarom kwamen mijn vrienden en ik, toen we nog nieuw waren, als eerste naar de cafetaria, stonden op het punt eten te halen - en toen verschenen middelbare scholieren of leraren en duwden ons eenvoudigweg opzij (sommigen, die vriendelijker waren, lieten ons binnen blijven onze plaats in de rij). We moesten vijftien tot twintig minuten extra wachten, hoewel we eerder arriveerden dan alle anderen.

We hadden een bijzonder slechte tijd tijdens de lunch. Overdag haastte werkelijk iedereen zich naar de cafetaria (leraren, studenten, personeel), dus voor ons, als basisschoolkinderen, was de lunch nooit een genot.

Gemeenschappelijke oplossingen voor het probleem

Maar omdat de nieuwkomers geen keus hadden, hebben we twee manieren bedacht om het risico te verkleinen dat we achteraan in de rij worden gegooid. De eerste is om heel vroeg naar de eetkamer te komen (dat wil zeggen, letterlijk voordat het eten zelfs maar wordt geserveerd). De tweede is om opzettelijk de tijd te doden door pingpong of basketbal te spelen en erg laat aan te komen (ongeveer twintig minuten na het begin van de lunch).

Tot op zekere hoogte werkte het. Maar eerlijk gezegd had niemand er zin in om zo snel mogelijk naar de eetkamer te rennen, alleen maar om te kunnen eten, of om de koude restjes na de anderen op te eten, omdat ze tot de laatsten behoorden. We hadden een oplossing nodig die ons liet weten wanneer de cafetaria niet druk was.

Het zou geweldig zijn als een waarzegster de toekomst voor ons voorspelde en ons precies vertelde wanneer we naar de eetkamer moesten gaan, zodat we niet lang hoefden te wachten. Het probleem was dat alles elke dag anders verliep. We konden niet simpelweg patronen analyseren en de goede plek identificeren. We hadden maar één manier om erachter te komen hoe het er in de eetkamer aan toe ging: door er te voet te komen, en het pad kon enkele honderden meters lang zijn, afhankelijk van waar je was. Dus als je komt, naar de rij kijkt, terugkomt en in dezelfde geest doorgaat totdat deze kort wordt, zul je veel tijd verspillen. Over het algemeen was het leven walgelijk voor de basisschool, en er kon niets aan worden gedaan.

Eureka – het idee om een ​​kantinebewakingssysteem te creëren

En plotseling, al in het volgende academiejaar (2017), zei ik tegen mezelf: “Wat als we een systeem maken dat de lengte van de wachtrij in realtime laat zien (dat wil zeggen: een file detecteert)?” Als het mij was gelukt, zou het beeld er zo uit hebben gezien: basisschoolleerlingen zouden eenvoudigweg naar hun telefoon kijken om actuele gegevens over het huidige niveau van de werkdruk te krijgen, en dan conclusies trekken over de vraag of het voor hen zinvol is om nu te gaan .

In wezen heeft dit plan de ongelijkheid gladgestreken door toegang tot informatie. Met behulp hiervan konden basisschoolkinderen zelf kiezen wat het beste voor hen was om te doen: in de rij gaan staan ​​(als het niet te lang was) of tijd nuttiger besteden, en later een geschikter moment kiezen. Ik werd erg opgewonden door deze gedachte.

Ontwerp van een kantinebewakingssysteem

In september 2017 moest ik een project indienen voor een cursus objectgeoriënteerd programmeren, en ik heb dit systeem als mijn project ingediend.

Het verhaal van een Koreaanse schooljongen die een prijs ontving van het ministerie voor een wachtrijmonitoringsysteem

Initieel systeemplan (september 2017)

Uitrustingsselectie (oktober 2017)

Het verhaal van een Koreaanse schooljongen die een prijs ontving van het ministerie voor een wachtrijmonitoringsysteem

Een eenvoudige tactiele schakelaar met een pull-up-weerstand. Schema met vijf schilden in drie rijen om de wachtrij langs drie lijnen te herkennen

Ik bestelde slechts vijftig membraanschakelaars, een Wemos D1 minibord op basis van ESP8266 en enkele ringklemmen waaraan ik de geëmailleerde draden wilde bevestigen.

Prototyping en ontwikkeling (oktober 2017)

Ik begon met een breadboard, monteerde er een circuit op en testte het. Omdat ik beperkt was in het aantal materialen, heb ik mij beperkt tot een systeem met vijf treeplanken.

Voor de software die ik in C++ heb geschreven, heb ik de volgende doelen gesteld:

  1. Werk continu en verzend gegevens alleen tijdens de perioden waarin er eten wordt geserveerd (ontbijt, lunch, diner, middagsnack).
  2. Herken de wachtrij-/verkeerssituatie in de cafetaria op zulke frequenties dat de gegevens vervolgens kunnen worden gebruikt in machine learning-modellen (bijvoorbeeld 10 Hz).
  3. Verzend gegevens op een efficiënte manier (de pakketgrootte moet klein zijn) en met korte tussenpozen naar de server.

Om ze te bereiken moest ik het volgende doen:

  1. Gebruik de RTC (Real Time Clock) module om continu de tijd in de gaten te houden en te bepalen wanneer er eten wordt geserveerd in de cafetaria.
  2. Gebruik een datacompressiemethode om de schildstatus in één teken vast te leggen. Ik behandelde de gegevens als een binaire code van vijf bits en bracht de verschillende waarden in kaart in ASCII-tekens, zodat ze de gegevenselementen vertegenwoordigden.
  3. Gebruik ThingSpeak (een IoT-tool voor analyses en online grafieken) door HTTP-verzoeken te verzenden met behulp van de POST-methode.

Natuurlijk waren er enkele bugs. Ik wist bijvoorbeeld niet dat de operator sizeof() de waarde 4 retourneert voor een char *-object, en niet de lengte van de string (omdat het geen array is en daarom berekent de compiler de lengte niet) en was zeer verrast waarom mijn HTTP-verzoeken slechts vier tekens van alle URL's bevatten!

Ik heb ook geen haakjes opgenomen in de stap #define, wat tot onverwachte resultaten leidde. Nou, laten we zeggen:

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

Hier zou je verwachten dat A gelijk zou zijn aan 3 (10 / 3 = 3), maar in werkelijkheid werd het anders berekend: 2 (2 * 5/ 3 = 2).

Ten slotte was een andere opmerkelijke bug waarmee ik te maken kreeg de reset van de watchdog-timer. Ik heb heel lang met dit probleem geworsteld. Zoals later bleek, probeerde ik op de verkeerde manier toegang te krijgen tot het low-level register op de ESP8266-chip (ik heb per ongeluk een NULL-waarde ingevoerd voor een verwijzing naar een structuur).

Het verhaal van een Koreaanse schooljongen die een prijs ontving van het ministerie voor een wachtrijmonitoringsysteem

Een voetschild dat ik heb ontworpen en gebouwd. Op het moment dat de foto werd gemaakt, had hij al vijf weken vertrappen overleefd

Hardware (voetplanken)

Om ervoor te zorgen dat de schilden de barre omstandigheden in de kantine konden overleven, stelde ik er de volgende eisen aan:

  • Schilden moeten sterk genoeg zijn om te allen tijde het menselijk gewicht te kunnen dragen.
  • De schilden moeten dun zijn om mensen in de rij niet te storen.
  • Bij het betreden moet de schakelaar geactiveerd worden.
  • Schilden moeten waterdicht zijn. De eetkamer is altijd vochtig.

Om aan deze eisen te voldoen, heb ik gekozen voor een tweelaags ontwerp: lasergesneden acryl voor de basis- en bovenklep, en kurk als beschermlaag.

De schildindeling heb ik gemaakt in AutoCAD; afmetingen – 400 bij 400 millimeter.

Het verhaal van een Koreaanse schooljongen die een prijs ontving van het ministerie voor een wachtrijmonitoringsysteem

Links ziet u het ontwerp dat in productie is gegaan. Rechts staat een optie met een Lego-achtige aansluiting

Overigens ben ik uiteindelijk afgestapt van het rechtse ontwerp omdat bij zo'n bevestigingssysteem bleek dat er 40 centimeter tussen de schilden moest zitten, waardoor ik de vereiste afstand (meer dan tien meter) niet kon overbruggen.

Het verhaal van een Koreaanse schooljongen die een prijs ontving van het ministerie voor een wachtrijmonitoringsysteem

Het verhaal van een Koreaanse schooljongen die een prijs ontving van het ministerie voor een wachtrijmonitoringsysteem

Om alle schakelaars aan te sluiten gebruikte ik emaille draden - in totaal duurden ze meer dan 70 meter! Ik plaatste een membraanschakelaar in het midden van elk schild. Twee clips staken uit de zijgleuven - links en rechts van de schakelaar.

Voor het waterdicht maken heb ik elektrische tape gebruikt. Veel elektrische tape.

En alles werkte!

Periode van XNUMX november tot en met XNUMX december

Het verhaal van een Koreaanse schooljongen die een prijs ontving van het ministerie voor een wachtrijmonitoringsysteem

Foto van het systeem - alle vijf schilden zijn hier zichtbaar. Links zit de elektronica (D1-mini / Bluetooth / RTC)

Op XNUMX november om acht uur 's ochtends (ontbijttijd) begon het systeem actuele gegevens te verzamelen over de situatie in de eetkamer. Ik kon mijn ogen niet geloven. Nog maar twee maanden geleden was ik thuis in mijn pyjama het algemene schema aan het schetsen, en hier zijn we dan, het hele systeem werkt probleemloos... of niet.

Softwarefouten tijdens het testen

Natuurlijk zaten er veel bugs in het systeem. Dit zijn degenen die ik me herinner.

Het programma controleerde niet op beschikbare Wi-Fi-punten bij een poging om de client te verbinden met de ThingSpeak API. Om de fout op te lossen, heb ik een extra stap toegevoegd om de beschikbaarheid van wifi te controleren.

In de setup-functie heb ik herhaaldelijk “WiFi.begin” gebeld totdat er een verbinding verscheen. Later kwam ik erachter dat de verbinding tot stand wordt gebracht door de ESP8266-firmware en dat de startfunctie alleen wordt gebruikt bij het instellen van Wi-Fi. Ik heb de situatie gecorrigeerd door de functie slechts één keer aan te roepen tijdens de installatie.

Ik ontdekte dat de opdrachtregelinterface die ik heb gemaakt (bedoeld om de tijd in te stellen en netwerkinstellingen te wijzigen) niet werkt in rust (dat wil zeggen, buiten ontbijt, lunch, diner en afternoon tea). Ik zag ook dat als er geen registratie plaatsvindt, de interne lus te snel versnelt en de seriële gegevens te snel worden gelezen. Daarom heb ik een vertraging ingesteld, zodat het systeem wacht tot er aanvullende opdrachten binnenkomen wanneer deze worden verwacht.

Ode aan de waakhond

Oh, en nog iets over dat probleem met de watchdog-timer: ik heb het precies opgelost tijdens de testfase onder "veld"-omstandigheden. Zonder overdrijving was dit het enige waar ik vier dagen aan dacht. Elke pauze (die tien minuten duurde) haastte ik me naar de cafetaria om de nieuwe versie van de code uit te proberen. En toen de distributie openging, zat ik een uur op de grond om de bug te vangen. Ik dacht niet eens aan eten! Bedankt voor al het goede, ESP8266 Watchdog!

Hoe ik WDT ontdekte

Het verhaal van een Koreaanse schooljongen die een prijs ontving van het ministerie voor een wachtrijmonitoringsysteem

Codefragment waarmee ik worstelde

Ik heb een programma gevonden, of beter gezegd een extensie voor Arduino, dat de datastructuur van de software analyseert wanneer een Wdt-reset plaatsvindt, waarbij toegang wordt verkregen tot het ELF-bestand van de gecompileerde code (correlaties tussen functies en pointers). Toen dit gebeurde, bleek dat de fout als volgt kan worden geëlimineerd:

Het verhaal van een Koreaanse schooljongen die een prijs ontving van het ministerie voor een wachtrijmonitoringsysteem

Verdorie! Nou, wie had gedacht dat het oplossen van bugs in een realtime systeem zo moeilijk was! Ik heb de bug echter verwijderd en het bleek een stomme bug te zijn. Vanwege mijn onervarenheid heb ik een while-lus geschreven waarin de array de grenzen overschreed. Ugh! (index++ en ++index zijn twee grote verschillen).

Het verhaal van een Koreaanse schooljongen die een prijs ontving van het ministerie voor een wachtrijmonitoringsysteem

Problemen met hardware tijdens het testen

Natuurlijk was de uitrusting, dat wil zeggen de voetschilden, verre van ideaal. Zoals je zou verwachten, zit een van de schakelaars vast.

Het verhaal van een Koreaanse schooljongen die een prijs ontving van het ministerie voor een wachtrijmonitoringsysteem

Op XNUMX november, tijdens de lunch, bleef de schakelaar op het derde paneel hangen

Hierboven heb ik een screenshot gegeven van een online grafiek van de ThingSpeak-website. Zoals je kunt zien gebeurde er rond 12:25 iets, waarna schild nummer drie het begaf. Als gevolg hiervan werd vastgesteld dat de wachtrijlengte 3 was (de waarde is 3 * 100), zelfs als deze in feite het derde schild niet bereikte. De oplossing was dat ik meer opvulling (ja, ducttape) heb toegevoegd om de schakelaar meer ruimte te geven.

Soms werd mijn systeem letterlijk ontworteld toen de draad tussen de deur bleef hangen. Karren en pakjes werden door deze deur naar de eetkamer gedragen, zodat deze de draad met zich meevoerde, sloot en uit het stopcontact trok. In dergelijke gevallen merkte ik een onverwachte storing in de gegevensstroom op en vermoedde dat het systeem was losgekoppeld van de stroombron.

Verspreiding van informatie over het systeem door de hele school

Zoals eerder vermeld, heb ik de ThingSpeak API gebruikt, die gegevens op de site visualiseert in de vorm van grafieken, wat erg handig is. Over het algemeen plaatste ik gewoon een link naar mijn rooster in de Facebook-groep van de school (ik heb een half uur naar dit bericht gezocht en kon het niet vinden - heel vreemd). Maar ik vond een bericht op mijn Band, een schoolgemeenschap, gedateerd 2017 november XNUMX:

Het verhaal van een Koreaanse schooljongen die een prijs ontving van het ministerie voor een wachtrijmonitoringsysteem

Het verhaal van een Koreaanse schooljongen die een prijs ontving van het ministerie voor een wachtrijmonitoringsysteem

De reactie was wild!

Ik heb deze berichten geplaatst om interesse in mijn project te wekken. Maar alleen al het kijken ernaar is op zichzelf al heel vermakelijk. Laten we zeggen dat je hier duidelijk kunt zien dat het aantal mensen om 6 uur scherp is gestegen en om 02 uur praktisch tot nul is gedaald.

Het verhaal van een Koreaanse schooljongen die een prijs ontving van het ministerie voor een wachtrijmonitoringsysteem Het verhaal van een Koreaanse schooljongen die een prijs ontving van het ministerie voor een wachtrijmonitoringsysteem

Hierboven heb ik een aantal grafieken bijgevoegd die betrekking hebben op lunch en afternoon tea. Het is interessant om op te merken dat de piek van de werkdruk tijdens de lunch bijna altijd om 12 uur plaatsvond (de wachtrij bereikte het vijfde schild). En voor een middagsnack is het over het algemeen ongebruikelijk om een ​​grote menigte mensen te hebben (de wachtrij is maximaal één bord lang).

Weet je wat grappig is? Dit systeem leeft nog steeds (https://thingspeak.com/channel/346781)! Ik logde in op het account dat ik eerder gebruikte en zag dit:

Het verhaal van een Koreaanse schooljongen die een prijs ontving van het ministerie voor een wachtrijmonitoringsysteem

In de grafiek hierboven zag ik dat op XNUMX december de toestroom van mensen aanzienlijk minder was. En geen wonder: het was zondag. Op deze dag gaat vrijwel iedereen ergens heen, want in de meeste gevallen kun je alleen op zondag het schoolterrein verlaten. Het is duidelijk dat je in het weekend geen levende ziel in de cafetaria zult zien.

Hoe ik voor mijn project de eerste prijs ontving van het Koreaanse ministerie van Onderwijs

Zoals je zelf kunt zien, heb ik niet aan dit project gewerkt omdat ik probeerde een prijs of erkenning te verdienen. Ik wilde gewoon mijn vaardigheden gebruiken om een ​​chronisch probleem op te lossen waarmee ik op school werd geconfronteerd.

Maar onze voedingsdeskundige op school, mevrouw O, met wie ik een goede band kreeg tijdens het plannen en ontwikkelen van mijn project, vroeg me op een dag of ik op de hoogte was van een wedstrijd voor cafetaria-ideeën. Toen vond ik het een vreemd idee om ideeën voor de eetkamer te vergelijken. Maar ik las het informatieboekje en hoorde dat het project uiterlijk 24 november ingediend moest zijn! Nou nou. Ik heb snel het concept, de data en de graphics afgerond en de aanvraag verzonden.

Wijzigingen ten opzichte van het oorspronkelijke idee voor de wedstrijd

Trouwens, het systeem dat ik uiteindelijk voorstelde, verschilde enigszins van het systeem dat al was geïmplementeerd. In wezen heb ik mijn oorspronkelijke methode (het in realtime meten van de wachtrijlengte) aangepast voor veel grotere Koreaanse scholen. Ter vergelijking: op onze school zitten driehonderd leerlingen, en op sommige andere zitten zoveel mensen in één klas! Ik moest uitzoeken hoe ik het systeem kon schalen.

Daarom stelde ik een concept voor dat meer gebaseerd was op “handmatige” controle. Tegenwoordig hebben Koreaanse scholen al een maaltijdplan voor alle klassen geïntroduceerd, waar strikt aan wordt voldaan, dus heb ik een ander raamwerk van het type ‘signaal-respons’ gebouwd. Het idee hier was dat wanneer de groep die voor je de cafetaria bezocht een bepaalde limiet in de lengte van de rij bereikte (dat wil zeggen, de rij werd kort), ze handmatig een signaal naar je zouden sturen met behulp van een knop of schakelaar op de muur. . Het signaal wordt verzonden naar het tv-scherm of via LED-lampen.

Ik wilde gewoon heel graag een probleem oplossen dat zich op alle scholen in het land voordeed. Ik werd nog sterker in mijn bedoeling toen ik een verhaal hoorde van Miss O – ik zal het je nu vertellen. Het blijkt dat in sommige grote scholen de rij tot voorbij de cafetaria twintig tot dertig meter de straat in reikt, zelfs in de winter, omdat niemand het proces goed kan organiseren. En soms gebeurt het dat er gedurende enkele minuten helemaal niemand in de eetkamer verschijnt - en dit is ook slecht. Op scholen met grote aantallen leerlingen heeft het personeel nauwelijks tijd om iedereen te bedienen, ook al gaat er geen minuut maaltijdtijd verloren. Daarom hebben degenen die als laatste bij de verdeling arriveren (meestal basisschoolleerlingen) simpelweg niet genoeg tijd om te eten.

Dus ook al moest ik mijn aanvraag snel indienen, ik heb er goed over nagedacht hoe ik deze kon aanpassen voor breder gebruik.

Bericht dat ik de eerste prijs heb gewonnen!

Om een ​​lang verhaal kort te maken: ik werd uitgenodigd om mijn project aan overheidsfunctionarissen te komen presenteren. Dus zette ik al mijn Power Point talenten aan het werk en kwam presenteren!

Het verhaal van een Koreaanse schooljongen die een prijs ontving van het ministerie voor een wachtrijmonitoringsysteem

Begin van de presentatie (uiterst links - minister)

Het was een interessante ervaring - ik bedacht gewoon iets voor het cafetariaprobleem en belandde op de een of andere manier bij de winnaars van de wedstrijd. Zelfs toen ik op het podium stond, dacht ik steeds: “Hmm, wat doe ik hier eigenlijk?” Maar over het algemeen heeft dit project mij veel voordeel opgeleverd: ik heb veel geleerd over de ontwikkeling van embedded systemen en de implementatie van projecten in het echte leven. Nou, ik kreeg natuurlijk een prijs.

Conclusie

Er schuilt enige ironie in: hoe vaak ik ook meedeed aan allerlei wedstrijden en wetenschapsbeurzen waar ik me doelbewust voor had aangemeld, er kwam niets goeds uit. En toen vond de kans mij gewoon en leverde mij goede resultaten op.

Dit zette mij aan het denken over de redenen die mij motiveren om projecten aan te pakken. Waarom begin ik met werken - om te ‘winnen’ of om een ​​echt probleem in de wereld om me heen op te lossen? Als het tweede motief in uw geval een rol speelt, raad ik u ten zeerste aan het project niet op te geven. Met deze benadering van zakendoen kunt u onderweg onverwachte kansen tegenkomen en zult u geen druk voelen van de noodzaak om te winnen - uw belangrijkste motivator zal de passie voor uw bedrijf zijn.

En het allerbelangrijkste: als het je lukt om een ​​goede oplossing te implementeren, kun je deze meteen in de echte wereld uitproberen. In mijn geval was het platform een ​​school, maar na verloop van tijd stapelt de ervaring zich op, en wie weet wordt jouw applicatie misschien door het hele land of zelfs door de hele wereld gebruikt.

Elke keer als ik aan deze ervaring denk, ben ik best wel trots op mezelf. Ik kan niet uitleggen waarom, maar het implementatieproces van het project bracht me gewoon veel plezier, en de prijs was een extra bonus. Bovendien was ik blij dat ik voor mijn klasgenoten een probleem kon oplossen dat elke dag hun leven verpestte. Op een dag kwam een ​​van de studenten naar mij toe en zei: “Jullie systeem is erg handig.” Ik was in de zevende hemel!
Ik denk dat ik zelfs zonder prijzen alleen al hierdoor trots zou zijn op mijn ontwikkeling. Misschien bracht het helpen van anderen mij zoveel voldoening... Over het algemeen houd ik van projecten.

Wat ik hoopte te bereiken met dit artikel

Ik hoop dat je, door dit artikel tot het einde te lezen, geïnspireerd bent om iets te doen waar jouw gemeenschap, of zelfs jezelf, baat bij zal hebben. Ik moedig je aan om je vaardigheden (programmeren is daar zeker een van, maar er zijn er nog meer) te gebruiken om de realiteit om je heen ten goede te veranderen. Ik kan je verzekeren dat de ervaring die je tijdens het traject opdoet met niets anders te vergelijken is.

Het kan ook wegen openen die je niet had verwacht; dat is wat mij overkwam. Dus alsjeblieft, doe waar je van houdt en druk je stempel op de wereld! De echo van één enkele stem kan de hele wereld doen schudden, dus geloof in jezelf.

Hier zijn enkele links met betrekking tot het project:

Bron: www.habr.com

Voeg een reactie