Berättelsen om en koreansk skolpojke som fick ett pris från ministeriet för ett köövervakningssystem

När jag gick i högstadiet (från mars till december 2016) var jag väldigt irriterad över situationen som utvecklades i vår skolkafeterian.

Problem ett: att stå i kö för länge

Vilket problem såg jag? Så här:

Berättelsen om en koreansk skolpojke som fick ett pris från ministeriet för ett köövervakningssystem

Många elever samlades vid utdelningsplatsen och de fick stå länge (fem till tio minuter). Naturligtvis är detta ett vanligt problem och ett rättvist serviceschema: ju senare du kommer, desto senare kommer du att bli serverad. Så du kunde förstå varför du var tvungen att vänta.

Problem två: ojämlika villkor för de som väntar

Men det är naturligtvis inte allt, jag var också tvungen att observera ett annat, allvarligare problem. Så allvarlig att jag till slut bestämde mig för att försöka hitta en väg ut ur situationen. Gymnasieelever (det vill säga alla som läser minst ett betyg högre) och lärare gick till utdelningen utan att stå i kö. Ja, ja, och du som grundskoleelev kunde inte berätta något för dem. Vår skola hade en ganska strikt policy när det gäller relationer mellan klasser.

Därför kom jag och mina vänner, medan vi var nybörjare, till cafeterian allra först, var på väg att hämta mat - och sedan dök gymnasieelever eller lärare upp och sköt oss helt enkelt åt sidan (några, som var snällare, lät oss stanna kvar i vår plats i kö). Vi fick vänta femton till tjugo minuter extra, även om vi kom tidigare än alla andra.

Vi hade en särskilt dålig tid vid lunchtid. Under dagen rusade absolut alla till cafeterian (lärare, elever, personal), så för oss som lågstadiebarn var lunch aldrig en fröjd.

Gemensamma lösningar på problemet

Men eftersom nykomlingarna inte hade något val så kom vi på två sätt att minska risken att bli utslängd bak i raden. Det första är att komma till matsalen väldigt tidigt (det vill säga bokstavligen innan maten ens börjar serveras). Den andra är att medvetet döda tid på att spela pingis eller basket och komma mycket sent (cirka tjugo minuter efter lunchstart).

Till viss del fungerade det. Men, om jag ska vara ärlig, var det ingen som var sugen på att rusa så fort de kunde till matsalen bara för att kunna äta, eller att avsluta de kalla resterna efter de andra, för de var bland de sista. Vi behövde en lösning som skulle låta oss veta när det inte var trångt i cafeterian.

Det skulle vara bra om någon spåkvinna förutspådde framtiden för oss och berättade exakt när vi skulle gå till matsalen, så att vi inte skulle behöva vänta länge. Problemet var att allt blev annorlunda varje dag. Vi kunde inte bara analysera mönster och identifiera sweet spot. Vi hade bara ett sätt att ta reda på hur det stod till i matsalen - att ta sig dit till fots, och stigen kunde vara flera hundra meter, beroende på var man var. Så om du kommer, tittar på linjen, kommer tillbaka och fortsätter i samma anda tills det blir kort, kommer du att slösa mycket tid. I allmänhet var livet äckligt för lågstadiet, och det gick inte att göra något åt ​​det.

Eureka – idén om att skapa ett matsalsövervakningssystem

Och plötsligt, redan nästa läsår (2017), sa jag till mig själv: "Tänk om vi gör ett system som visar längden på kön i realtid (det vill säga upptäcka en trafikstockning)?" Om jag hade lyckats hade bilden varit denna: grundskoleelever skulle helt enkelt titta på sina telefoner för att få uppdaterade uppgifter om den aktuella arbetsbelastningen och skulle dra slutsatser om huruvida det är vettigt för dem att gå nu .

Detta system utjämnade i huvudsak ojämlikhet genom tillgång till information. Med dess hjälp kunde grundskolebarn själva välja vad som var bäst för dem att göra - gå och stå i kö (om det inte var för lång tid) eller spendera tid mer nyttigt och senare välja ett mer lämpligt ögonblick. Jag blev väldigt upprymd av den här tanken.

Design av ett matsalsövervakningssystem

I september 2017 var jag tvungen att lämna in ett projekt för en objektorienterad programmeringskurs, och jag lämnade in detta system som mitt projekt.

Berättelsen om en koreansk skolpojke som fick ett pris från ministeriet för ett köövervakningssystem

Initial systemplan (september 2017)

Utrustningsval (oktober 2017)

Berättelsen om en koreansk skolpojke som fick ett pris från ministeriet för ett köövervakningssystem

En enkel taktil strömbrytare med ett pull-up motstånd. Schema med fem sköldar i tre rader för att känna igen kön längs tre rader

Jag beställde bara femtio membranomkopplare, ett Wemos D1 minikort baserat på ESP8266 och några ringklämmor som jag tänkte fästa de emaljerade ledningarna på.

Prototyper och utveckling (oktober 2017)

Jag började med en breadboard - monterade en krets på den och testade den. Jag var begränsad i antalet material, så jag begränsade mig till ett system med fem fotbrädor.

För programvaran jag skrev i C++ satte jag upp följande mål:

  1. Arbeta kontinuerligt och skicka data endast under perioder då mat serveras (frukost, lunch, middag, eftermiddagsmellanmål).
  2. Känn igen kö-/trafiksituationen i cafeterian vid sådana frekvenser att data sedan kan användas i maskininlärningsmodeller (säg 10 Hz).
  3. Skicka data till servern på ett effektivt sätt (paketstorleken ska vara liten) och med korta intervall.

För att uppnå dem behövde jag göra följande:

  1. Använd RTC-modulen (Real Time Clock) för att kontinuerligt övervaka tiden och avgöra när mat serveras i cafeterian.
  2. Använd en datakomprimeringsmetod för att registrera sköldtillståndet i ett tecken. Jag behandlade data som en fembitars binär kod och mappade de olika värdena till ASCII-tecken så att de representerade dataelementen.
  3. Använd ThingSpeak (ett IoT-verktyg för analys och kartläggning online) genom att skicka HTTP-förfrågningar med POST-metoden.

Naturligtvis fanns det några buggar. Till exempel visste jag inte att operatorn sizeof( ) returnerar värdet 4 för ett char *-objekt och inte längden på strängen (eftersom det inte är en array och därför beräknar inte kompilatorn längden) och blev mycket förvånad över varför mina HTTP-förfrågningar bara innehöll fyra tecken från alla webbadresser!

Jag inkluderade inte heller parenteser i #define-steget, vilket ledde till oväntade resultat. Tja, låt oss säga:

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

Här skulle man förvänta sig att A skulle vara lika med 3 (10 / 3 = 3), men i själva verket beräknades det annorlunda: 2 (2 * 5/ 3 = 2).

Slutligen, en annan anmärkningsvärd bugg som jag tog itu med var återställningen på watchdog-timern. Jag kämpade med det här problemet väldigt länge. Som det visade sig senare försökte jag komma åt lågnivåregistret på ESP8266-chippet på fel sätt (av misstag angav jag ett NULL-värde för en pekare till en struktur).

Berättelsen om en koreansk skolpojke som fick ett pris från ministeriet för ett köövervakningssystem

En fotsköld som jag designat och byggt. När bilden togs hade han redan överlevt fem veckors övertramp

Hårdvara (fotplattor)

För att säkerställa att sköldarna kunde överleva de svåra förhållandena i matsalen ställde jag följande krav på dem:

  • Sköldar måste alltid vara starka nog att bära mänsklig vikt.
  • Sköldarna ska vara tunna för att inte störa folk i kö.
  • Omkopplaren måste aktiveras när den trampas på.
  • Sköldar måste vara vattentäta. Matsalen är alltid fuktig.

För att uppfylla dessa krav bestämde jag mig för en tvålagersdesign - laserskuren akryl för basen och topplocket och kork som skyddande lager.

Jag gjorde sköldlayouten i AutoCAD; dimensioner – 400 x 400 millimeter.

Berättelsen om en koreansk skolpojke som fick ett pris från ministeriet för ett köövervakningssystem

Till vänster är designen som gick i produktion. Till höger finns ett alternativ med anslutning av legotyp

Förresten, jag övergav så småningom den högra designen eftersom det med ett sådant fixeringssystem visade sig att det borde vara 40 centimeter mellan sköldarna, vilket innebär att jag inte kunde täcka det erforderliga avståndet (mer än tio meter).

Berättelsen om en koreansk skolpojke som fick ett pris från ministeriet för ett köövervakningssystem

Berättelsen om en koreansk skolpojke som fick ett pris från ministeriet för ett köövervakningssystem

För att koppla ihop alla strömbrytare använde jag emaljtrådar - totalt tog de mer än 70 meter! Jag placerade en membranomkopplare i mitten av varje sköld. Två klämmor stack ut från sidospåren - till vänster och till höger om strömbrytaren.

Tja, för vattentätning använde jag eltejp. Mycket eltejp.

Och allt fungerade!

Period från den femte november till den tolfte december

Berättelsen om en koreansk skolpojke som fick ett pris från ministeriet för ett köövervakningssystem

Bild på systemet - alla fem sköldarna är synliga här. Till vänster finns elektroniken (D1-mini / Bluetooth / RTC)

Den XNUMX november klockan åtta på morgonen (frukosttid) började systemet samla in aktuell data om situationen i matsalen. Jag trodde inte mina ögon. För bara två månader sedan skissade jag på det allmänna upplägget, satt hemma i min pyjamas, och här är vi, hela systemet fungerar utan problem... eller inte.

Programvarubuggar under testning

Naturligtvis fanns det gott om buggar i systemet. Här är de jag minns.

Programmet letade inte efter tillgängliga Wi-Fi-punkter när det försökte ansluta klienten till ThingSpeak API. För att åtgärda felet lade jag till ytterligare ett steg för att kontrollera Wi-Fi-tillgänglighet.

I inställningsfunktionen kallade jag upprepade gånger "WiFi.begin" tills en anslutning dök upp. Senare fick jag reda på att anslutningen upprättas av ESP8266 firmware, och startfunktionen används bara när du ställer in Wi-Fi. Jag rättade till situationen genom att bara anropa funktionen en gång under installationen.

Jag upptäckte att kommandoradsgränssnittet jag skapade (det var tänkt att ställa in tiden, ändra nätverksinställningar) inte fungerar i vila (det vill säga utanför frukost, lunch, middag och eftermiddagste). Jag såg också att när ingen loggning sker, snabbar den interna slingan upp för mycket och seriedata läses för snabbt. Därför ställer jag in en fördröjning så att systemet väntar på att ytterligare kommandon ska komma när de förväntas.

Ode till vakthunden

Åh, och en sak till om det problemet med vakthundstimern - jag löste det exakt på teststadiet i "fält"-förhållanden. Utan att överdriva var detta allt jag tänkte på i fyra dagar. Varje rast (som varade i tio minuter) rusade jag till cafeterian bara för att testa den nya versionen av koden. Och när distributionen öppnade satt jag på golvet i en timme och försökte fånga felet. Jag tänkte inte ens på mat! Tack för alla bra saker, ESP8266 Watchdog!

Hur jag kom på WDT

Berättelsen om en koreansk skolpojke som fick ett pris från ministeriet för ett köövervakningssystem

Kodsnutt jag kämpade med

Jag hittade ett program, eller snarare ett tillägg för Arduino, som analyserar datastrukturen i programvaran när en Wdt-återställning inträffar, och som kommer åt ELF-filen för den kompilerade koden (korrelationer mellan funktioner och pekare). När detta var gjort visade det sig att felet kan elimineras enligt följande:

Berättelsen om en koreansk skolpojke som fick ett pris från ministeriet för ett köövervakningssystem

Helvete! Tja, vem visste att det var så svårt att fixa buggar i ett realtidssystem! Men jag tog bort felet, och det visade sig vara ett dumt fel. På grund av min oerfarenhet skrev jag en while-loop där arrayen gick över gränserna. usch! (index++ och ++index är två stora skillnader).

Berättelsen om en koreansk skolpojke som fick ett pris från ministeriet för ett köövervakningssystem

Problem med hårdvara under testning

Naturligtvis var utrustningen, det vill säga fotsköldarna, långt ifrån idealisk. Som du kanske förväntar dig har en av switcharna fastnat.

Berättelsen om en koreansk skolpojke som fick ett pris från ministeriet för ett köövervakningssystem

Den XNUMX november, under lunchen, fastnade strömbrytaren på den tredje panelen

Ovan har jag tillhandahållit en skärmdump av ett onlinediagram från ThingSpeak-webbplatsen. Som ni ser hände något runt 12:25, varefter sköld nummer tre havererade. Som ett resultat bestämdes kölängden till 3 (värdet är 3 * 100), även när den i själva verket inte nådde den tredje skölden. Fixningen var att jag lade till mer stoppning (ja, tejp) för att ge strömbrytaren mer utrymme.

Ibland rycktes mitt system upp med rötterna när tråden fastnade i dörren. Vagnar och paket bars genom denna dörr in i matsalen, så att den bar tråden med sig, stängde och drog ut den ur uttaget. I sådana fall märkte jag ett oväntat fel i dataflödet och gissade att systemet var bortkopplat från strömkällan.

Spridning av information om systemet i hela skolan

Som redan nämnts använde jag ThingSpeak API, som visualiserar data på sajten i form av grafer, vilket är väldigt bekvämt. I allmänhet har jag i princip bara lagt upp en länk till mitt schema i skolans Facebook-grupp (jag sökte efter det här inlägget i en halvtimme och kunde inte hitta det - mycket konstigt). Men jag hittade ett inlägg på mitt Band, en skolgemenskap, daterat den 2017 november XNUMX:

Berättelsen om en koreansk skolpojke som fick ett pris från ministeriet för ett köövervakningssystem

Berättelsen om en koreansk skolpojke som fick ett pris från ministeriet för ett köövervakningssystem

Reaktionen var vild!

Jag postade dessa inlägg för att väcka intresse för mitt projekt. Men att bara titta på dem är ganska underhållande i sig. Låt oss säga att du tydligt kan se här att antalet personer hoppade kraftigt vid 6:02 och praktiskt taget sjönk till noll med 6:10.

Berättelsen om en koreansk skolpojke som fick ett pris från ministeriet för ett köövervakningssystem Berättelsen om en koreansk skolpojke som fick ett pris från ministeriet för ett köövervakningssystem

Ovan har jag bifogat ett par grafer som relaterar till lunch och afternoon tea. Det är intressant att notera att toppen av arbetsbelastningen vid lunchtid nästan alltid inträffade vid 12:25 (kön nådde den femte skölden). Och för ett eftermiddagssnack är det generellt sett okaraktäristiskt att ha en stor skara människor (kön är högst en bräda lång).

Vet du vad som är roligt? Detta system lever fortfarande (https://thingspeak.com/channels/346781)! Jag loggade in på kontot jag använde tidigare och såg detta:

Berättelsen om en koreansk skolpojke som fick ett pris från ministeriet för ett köövervakningssystem

I grafen ovan såg jag att den tredje december var tillströmningen av människor betydligt mindre. Och inte konstigt - det var söndag. Den här dagen åker nästan alla någonstans, eftersom man i de flesta fall bara på söndagar kan lämna skolans område. Det är klart att du inte kommer att se en levande själ i cafeterian på helgen.

Hur jag fick första priset från det koreanska utbildningsministeriet för mitt projekt

Som du själv kan se arbetade jag inte med det här projektet eftersom jag försökte få någon form av pris eller erkännande. Jag ville bara använda mina kunskaper för att lösa ett kroniskt problem som jag stod inför i skolan.

Men vår skolnutritionist, Miss O, som jag blev väldigt nära när jag planerade och utvecklade mitt projekt, frågade mig en dag om jag kände till en tävling för cafeteriaidéer. Då tyckte jag att det var någon sorts konstig idé att jämföra idéer för matsalen. Men jag läste informationshäftet och fick reda på att projektet måste lämnas in senast den 24 november! Men, men. Jag färdigställde snabbt koncept, data och grafik och skickade ansökan.

Ändringar av den ursprungliga idén för tävlingen

Förresten, det system som jag till slut föreslog var något annorlunda än det som redan implementerats. I huvudsak anpassade jag min ursprungliga metod (mätning av kölängd i realtid) för mycket större koreanska skolor. Som jämförelse: i vår skola finns det trehundra elever, och i vissa andra är det så många människor i bara en klass! Jag behövde ta reda på hur jag skulle skala systemet.

Därför föreslog jag ett koncept som var mer baserat på "manuell" kontroll. Nuförtiden har koreanska skolor redan infört en måltidsplan för alla klasser, som följs strikt, så jag byggde ett annat ramverk av typen "signal-svar". Tanken här var att när gruppen som besökte kafeterian framför dig nådde en viss gräns i kölängden (det vill säga linjen blev kort), skulle de manuellt skicka en signal till dig med en knapp eller slå på väggen . Signalen kommer att överföras till TV-skärmen eller genom LED-lampor.

Jag ville bara verkligen lösa ett problem som uppstod i alla skolor i landet. Jag blev ännu mer stärkt i min avsikt när jag hörde en berättelse från Miss O - I'll tell you now. Det visar sig att i vissa stora skolor sträcker sig linjen bortom cafeterian, in på gatan i tjugo till trettio meter, även på vintern, eftersom ingen kan organisera processen ordentligt. Och ibland händer det att det i flera minuter inte dyker upp någon i matsalen alls - och detta är också dåligt. I skolor med stort antal elever hinner personalen knappt serva alla även om inte en enda minuts mattid går till spillo. Därför har de som är de sista som kommer till utdelningen (oftast grundskoleelever) helt enkelt inte tillräckligt med tid att äta.

Så även om jag var tvungen att skicka in min ansökan i all hast funderade jag väldigt noga på hur jag kunde anpassa den för bredare användning.

Meddelande om att jag vann första priset!

Lång historia kort, jag blev inbjuden att komma och presentera mitt projekt för regeringstjänstemän. Så jag satte alla mina Power Point-talanger i arbete och kom och presenterade!

Berättelsen om en koreansk skolpojke som fick ett pris från ministeriet för ett köövervakningssystem

Början av presentationen (längst till vänster - minister)

Det var en intressant upplevelse - jag kom precis på något för cafeterianproblemet och hamnade på något sätt bland vinnarna i tävlingen. Till och med när jag stod på scenen tänkte jag: "Hmm, vad gör jag ens här?" Men generellt sett gav detta projekt mig stor nytta - jag lärde mig mycket om utvecklingen av inbyggda system och implementeringen av projekt i verkligheten. Jo, jag fick ett pris såklart.

Slutsats

Det finns en viss ironi här: hur mycket jag än deltog i alla möjliga tävlingar och vetenskapsmässor som jag målmedvetet anmält mig till, blev det inget bra av det. Och då hittade tillfället mig bara och gav mig bra resultat.

Detta fick mig att fundera på varför jag motiverade mig att ta mig an projekt. Varför börjar jag jobba - för att "vinna" eller för att lösa ett verkligt problem i världen omkring mig? Om det andra motivet fungerar i ditt fall, uppmuntrar jag dig starkt att inte överge projektet. Med detta förhållningssätt till affärer kan du möta oväntade möjligheter längs vägen och kommer inte att känna press från behovet att vinna - din främsta motivator kommer att vara passion för ditt företag.

Och viktigast av allt: om du lyckas implementera en anständig lösning kan du genast prova den i den verkliga världen. I mitt fall var plattformen en skola, men med tiden ackumuleras erfarenhet, och vem vet – kanske kommer din applikation att användas av hela landet eller till och med hela världen.

Varje gång jag tänker på den här upplevelsen är jag lite stolt över mig själv. Jag kan inte förklara varför, men processen att implementera projektet gav mig helt enkelt ett stort nöje, och priset var en extra bonus. Dessutom var jag glad att jag kunde lösa ett problem för mina klasskamrater som förstörde deras liv varje dag. En dag kom en av eleverna fram till mig och sa: "Ditt system är väldigt bekvämt." Jag var i sjunde himlen!
Jag tror att även utan några utmärkelser skulle jag känna mig stolt över min utveckling bara för detta. Kanske var det att hjälpa andra som gav mig sådan tillfredsställelse... i allmänhet älskar jag projekt.

Vad jag hoppades uppnå med den här artikeln

Jag hoppas att genom att läsa den här artikeln till slutet har du blivit inspirerad att göra något som kommer att gynna ditt samhälle eller till och med bara dig själv. Jag uppmuntrar dig att använda dina färdigheter (programmering är förvisso en av dem, men det finns andra) för att förändra verkligheten runt dig till det bättre. Jag kan försäkra dig om att den erfarenhet du får i processen inte går att jämföra med något annat.

Det kan också öppna upp vägar man inte förväntade sig – det var vad som hände mig. Så snälla, gör det du älskar och sätt din prägel på världen! Ekot av en enda röst kan skaka hela världen, så tro på dig själv.

Här är några länkar relaterade till projektet:

Källa: will.com

Lägg en kommentar