It ferhaal fan in Koreaansk skoaljonge dy't in priis krige fan it ministearje foar in wachtrige monitoringsysteem

Doe't ik yn myn juniorjier fan 'e middelbere skoalle siet (fan maart oant desimber 2016), hie ik my tige argewaasje fan' e situaasje dy't ûntwikkele yn ús skoalkafetaria.

Probleem ien: te lang yn de rige stean

Hokker probleem haw ik observearre? Lykas dit:

It ferhaal fan in Koreaansk skoaljonge dy't in priis krige fan it ministearje foar in wachtrige monitoringsysteem

By it ferspriedingsgebiet kamen in protte learlingen byinoar en dy moasten lang stean (fiif oant tsien minuten). Fansels is dit in mienskiplik probleem en in earlike tsjinstregeling: hoe letter jo oankomme, hoe letter jo wurde betsjinne. Sa koene jo begripe wêrom't jo wachtsje moasten.

Probleem twa: ûngelikense betingsten foar dyjingen dy't wachtsje

Mar dat is fansels net alles; ik moast ek in oar, serieuzer probleem observearje. Sa serieus dat ik úteinlik besleat om te besykjen in útwei te finen út 'e situaasje. Hegeskoallelearlingen (dat is elkenien dy't op syn minst in graad heger studearret) en learkrêften gongen nei de distribúsje sûnder yn 'e rige te wachtsjen. Ja, ja, en do koest harren as learling fan de basisskoalle neat fertelle. Us skoalle hie in aardich strang belied oangeande relaasjes tusken klassen.

Dêrom kamen myn freonen en ik, wylst wy newbies wiene, earst nei de kafeteria, wiene op it punt om iten te krijen - en doe ferskynden middelbere skoalle studinten of learkrêften en skowen ús gewoan oan 'e kant (guon, dy't freonliker wiene, lieten ús yn bliuwe ús plak yn line). Wy moasten in fyftjin oant tweintich minuten ekstra wachtsje, hoewol wy earder oankamen as alle oaren.

Wy hienen in bysûnder min tiid by lunchtime. Oerdei ried absolút elkenien nei de kafetaria (leararen, learlingen, personiel), dus foar ús, as basisskoallebern, wie it middeisiten noait in wille.

Mienskiplike oplossingen foar it probleem

Mar om't de nijkommers gjin kar hiene, kamen wy mei twa manieren om it risiko te ferminderjen dat se nei de efterkant fan de line smiten wurde. De earste is om hiel betiid nei de ytseal te kommen (dat is letterlik foardat it iten sels begjint te tsjinjen). De twadde is om mei opsetsin tiid te deadzjen by it spieljen fan ping-pong of basketbal en heul let te kommen (sawat tweintich minuten nei it begjin fan 'e lunch).

Foar in part wurke it. Mar om earlik te wêzen, gjinien hie der nocht oan om sa gau as er koe nei de ytseal te hastich allinne om ite te kinnen, of om de kâlde restjes nei de oaren ôf te meitsjen, om't se by de lêsten wiene. Wy hiene in oplossing nedich dy't ús witte soe as de kafetaria net drok wie.

It soe moai wêze as ien of oare wiersizzer de takomst foar ús foarsei en ús presys fertelde wannear't wy nei de ytseal gean moatte, sadat wy net lang hoege te wachtsjen. It probleem wie dat alles alle dagen oars útrûn. Wy koenen net gewoan patroanen analysearje en it swiete plak identifisearje. Wy hiene mar ien manier om út te finen hoe't dingen wiene yn 'e ytseal - om dêr te foet te kommen, en it paad koe ferskate hûndert meter wêze, ôfhinklik fan wêr't jo wiene. Dus as jo komme, sjoch nei de line, kom werom en trochgean yn deselde geast oant it koart wurdt, sille jo in protte tiid fergrieme. Yn it algemien wie it libben walgelijk foar de legere klasse, en der koe neat oan dien wurde.

Eureka - it idee fan it meitsjen fan in kantinemonitorsysteem

En ynienen, al yn it folgjende akademysk jier (2017), sei ik tsjin mysels: "Wat as wy in systeem meitsje dat de lingte fan 'e wachtrige yn realtime toant (dat is, in file opspoare)?" As it my slagge wie, soe it byld dit west hawwe: learlingen fan 'e basisskoalle soene gewoan nei har tillefoan sjen om aktuele gegevens te krijen oer it hjoeddeistige nivo fan wurkdruk, en soene konklúzjes lûke oer oft it sin hat dat se no geane .

Yn essinsje hat dit skema ûngelikens glêd makke troch tagong ta ynformaasje. Mei har help koene basisskoallebern sels kieze wat foar harren it bêste wie om te dwaan - yn 'e rige gean (as it net te lang wie) of tiid brûkberder trochbringe en letter in passend momint kieze. Ik wie tige optein troch dizze gedachte.

Untwerp fan in kantinemonitorsysteem

Yn septimber 2017 moast ik in projekt yntsjinje foar in kursus foar objektrjochte programmearring, en ik haw dit systeem yntsjinne as myn projekt.

It ferhaal fan in Koreaansk skoaljonge dy't in priis krige fan it ministearje foar in wachtrige monitoringsysteem

Inisjele systeemplan (septimber 2017)

Equipment seleksje (oktober 2017)

It ferhaal fan in Koreaansk skoaljonge dy't in priis krige fan it ministearje foar in wachtrige monitoringsysteem

In ienfâldige tactile switch mei in pull-up wjerstân. Skema mei fiif skylden yn trije rigen om de wachtrige te werkennen op trije rigels

Ik bestelde mar fyftich membraan switches, in Wemos D1 mini board basearre op ESP8266, en guon ring clamps dêr't ik fan plan te heakjen de enameled triedden.

Prototyping en ûntwikkeling (oktober 2017)

Ik begon mei in breadboard - sammele der in circuit op en test it. Ik wie beheind yn it oantal materialen, dus ik beheinde my ta in systeem mei fiif footboards.

Foar de software dy't ik yn C ++ skreau, stelde ik de folgjende doelen:

  1. Wurkje kontinu en ferstjoere gegevens allinich yn perioaden as iten wurdt tsjinne (moarnsiten, lunch, diner, middei snack).
  2. Erkenne de wachtrige / ferkearssituaasje yn 'e kafeteria op sokke frekwinsjes dat de gegevens dan kinne wurde brûkt yn masine-learmodellen (sizze, 10 Hz).
  3. Stjoer gegevens nei de tsjinner op in effisjinte manier (pakketgrutte moat lyts wêze) en mei koarte yntervallen.

Om se te berikken moast ik it folgjende dwaan:

  1. Brûk de module RTC (Real Time Clock) om de tiid kontinu te kontrolearjen en te bepalen wannear't iten wurdt betsjinne yn 'e kafeteria.
  2. Brûk in gegevenskompresjemetoade om de skyldstatus yn ien karakter op te nimmen. Troch de gegevens as in fiif-bit binêre koade te behanneljen, haw ik de ferskate wearden yn kaart brocht oan ASCII-karakters, sadat se de gegevenseleminten fertsjintwurdigje.
  3. Brûk ThingSpeak (in IoT-ark foar analytyk en online charting) troch HTTP-oanfragen te ferstjoeren mei de POST-metoade.

Fansels wiene der wat bugs. Bygelyks, ik wist net dat de operator sizeof( ) de wearde 4 foar in char *-objekt weromjout, en net de lingte fan 'e tekenrige (omdat it gjin array is en dêrom de kompilator de lingte net berekkent) en wie tige ferrast wêrom't myn HTTP-oanfragen mar fjouwer tekens fan alle URL's befette!

Ik haw ek gjin heakjes opnommen yn 'e #define stap, wat late ta ûnferwachte resultaten. No litte wy sizze:

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

Hjir soe men ferwachtsje dat A gelyk wêze soe oan 3 (10 / 3 = 3), mar eins waard it oars berekkene: 2 (2 * 5/ 3 = 2).

Uteinlik wie in oare opmerklike brek dy't ik behannele wie de Reset op 'e watchdog-timer. Ik wraksele mei dit probleem foar in hiel lange tiid. As it letter die bliken, besocht ik op 'e ferkearde manier tagong te krijen ta it register op leech nivo op' e ESP8266-chip (troch fersin haw ik in NULL-wearde ynfierd foar in oanwizer nei in struktuer).

It ferhaal fan in Koreaansk skoaljonge dy't in priis krige fan it ministearje foar in wachtrige monitoringsysteem

In foet skyld dat ik ûntwurpen en boud. Op it momint dat de foto makke waard, hie er al fiif wiken tramtearjen oerlibbe

Hardware (footboards)

Om derfoar te soargjen dat de skylden de hurde omstannichheden fan 'e kantine koenen oerlibje, stelde ik de folgjende easken foar har:

  • Skylden moatte sterk genôch wêze om altyd minsklik gewicht te stypjen.
  • De skylden moatte dun wêze om minsken yn 'e line net te fersteuren.
  • De skeakel moat aktivearre wurde as jo op stappe.
  • Shields moatte wetterdicht wêze. De ytseal is altyd fochtich.

Om oan dizze easken te foldwaan, haw ik my fêststeld op in twa-laach ûntwerp - laser-cut acryl foar de basis en boppekant, en kork as in beskermjende laach.

Ik makke it skyld yndieling yn AutoCAD; diminsjes - 400 by 400 millimeter.

It ferhaal fan in Koreaansk skoaljonge dy't in priis krige fan it ministearje foar in wachtrige monitoringsysteem

Links is it ûntwerp dat yn produksje gie. Oan de rjochterkant is in opsje mei in Lego-type ferbining

Trouwens, ik haw úteinlik it rjochterûntwerp ferlitten, om't mei sa'n fixaasjesysteem bliken die dat der 40 sintimeter tusken de skylden wêze moast, wat betsjuttet dat ik de fereaske ôfstân (mear as tsien meter) net koe dekke.

It ferhaal fan in Koreaansk skoaljonge dy't in priis krige fan it ministearje foar in wachtrige monitoringsysteem

It ferhaal fan in Koreaansk skoaljonge dy't in priis krige fan it ministearje foar in wachtrige monitoringsysteem

Om alle skeakels te ferbinen, brûkte ik enameldraden - yn totaal namen se mear as 70 meter! Ik pleatste in membraan switch yn it sintrum fan elk skyld. Twa klips stekke út 'e kant slots - nei lofts en rjochts fan' e switch.

No, foar wetterdichting brûkte ik elektryske tape. In protte elektryske tape.

En alles wurke!

Periode fan 'e fyfde novimber oant de tolfde desimber

It ferhaal fan in Koreaansk skoaljonge dy't in priis krige fan it ministearje foar in wachtrige monitoringsysteem

Foto fan it systeem - alle fiif skylden binne hjir sichtber. Links is de elektroanika (D1-mini / Bluetooth / RTC)

Op XNUMX novimber om acht oere moarns (moarnstiid) begon it systeem aktuele gegevens te sammeljen oer de situaasje yn 'e ytseal. Ik koe myn eagen net leauwe. Krekt twa moanne lyn sketste ik it algemiene skema, siet thús yn myn pyjama, en hjir binne wy, it hiele systeem wurket sûnder problemen ... of net.

Softwarebugs by testen

Fansels wiene d'r in protte bugs yn it systeem. Hjir binne dejingen dy't ik ûnthâlde.

It programma kontrolearre net op beskikbere Wi-Fi-punten by it besykjen om de kliïnt te ferbinen mei de ThingSpeak API. Om de flater te reparearjen, haw ik in ekstra stap tafoege om de beskikberens fan Wi-Fi te kontrolearjen.

Yn 'e opsetfunksje neamde ik meardere kearen "WiFi.begin" oant in ferbining ferskynde. Letter fûn ik út dat de ferbining is oprjochte troch de ESP8266-firmware, en de startfunksje wurdt allinich brûkt by it ynstellen fan Wi-Fi. Ik korrizjearre de situaasje troch de funksje mar ien kear te roppen, tidens de opset.

Ik ûntduts dat de kommandorigelynterface dy't ik makke haw (it wie bedoeld om de tiid yn te stellen, netwurkynstellingen te feroarjen) net wurket by rêst (dat is bûten moarnsiten, lunch, diner en middei tee). Ik seach ek dat as der gjin logging optreedt, de ynterne lus oermjittich fersnelt en de seriële gegevens te fluch wurde lêzen. Dêrom stel ik in fertraging yn, sadat it systeem wachtet op ekstra kommando's om te kommen as se wurde ferwachte.

Ode oan de wachthûn

Oh, en noch ien ding oer dat probleem mei de watchdog-timer - ik haw it krekt oplost op it teststadium yn "fjild" omstannichheden. Sûnder oerdriuwing wie dit alles wêr't ik fjouwer dagen oer tocht. Elke pauze (duorje tsien minuten) raasde ik nei de kafeteria krekt om de nije ferzje fan de koade út te probearjen. En doe't de distribúsje iepene, siet ik in oere op 'e flier, besykje de brek te fangen. Ik tocht net iens oan iten! Tank foar alle goede dingen, ESP8266 Watchdog!

Hoe't ik útfûn WDT

It ferhaal fan in Koreaansk skoaljonge dy't in priis krige fan it ministearje foar in wachtrige monitoringsysteem

Koade snippet ik hie muoite mei

Ik fûn in programma, of leaver in tafoeging foar Arduino, dat analysearret de gegevensstruktuer fan 'e software as in Wdt-reset optreedt, tagong ta it ELF-bestân fan' e kompilearre koade (korrelaasjes tusken funksjes en oanwizers). Doe't dit dien wie, die bliken dat de flater kin wurde eliminearre as folget:

It ferhaal fan in Koreaansk skoaljonge dy't in priis krige fan it ministearje foar in wachtrige monitoringsysteem

Blinder! No, wa wist dat it reparearjen fan bugs yn in real-time systeem sa lestich wie! Ik haw lykwols de brek fuorthelle, en it die bliken in domme bug te wêzen. Troch myn ûnerfarenheid skreau ik in while-lus wêryn't de array oer de grinzen gie. Ugh! (yndeks ++ en ++ yndeks binne twa grutte ferskillen).

It ferhaal fan in Koreaansk skoaljonge dy't in priis krige fan it ministearje foar in wachtrige monitoringsysteem

Problemen mei hardware tidens testen

Fansels, de apparatuer, dat is de foet skylden, wie fier fan ideaal. Lykas jo miskien ferwachtsje, is ien fan 'e skeakels fêst.

It ferhaal fan in Koreaansk skoaljonge dy't in priis krige fan it ministearje foar in wachtrige monitoringsysteem

Op XNUMX novimber stie ûnder de middei de skeakel op it tredde paniel fêst

Hjirboppe haw ik in skermôfbylding levere fan in online chart fan 'e ThingSpeak-webside. Sa't jo sjen kinne, barde der wat om 12 oere hinne, wêrnei't skyld nûmer trije mislearre. As gefolch, de wachtrige lingte waard bepaald te wêzen 25 (de wearde is 3 * 3), sels as it feitlik net berikke de tredde skyld. De fix wie dat ik mear padding tafoege (ja, duct tape) om de skeakel mear romte te jaan.

Soms waard myn systeem letterlik ûntwoartele doe't de draad yn 'e doar kaam. Karren en pakketten waarden troch dizze doar yn 'e ytseal brocht, sadat it de tried mei him brocht, ticht en út 'e socket helle. Yn sokke gefallen haw ik in ûnferwachte mislearring yn 'e gegevensstream opmurken en tocht dat it systeem loskeppele wie fan' e krêftboarne.

Fersprieding fan ynformaasje oer it systeem troch de hiele skoalle

Lykas al neamd, haw ik de ThingSpeak API brûkt, dy't gegevens op 'e side visualisearret yn' e foarm fan grafiken, wat heul handich is. Yn 't algemien pleatste ik gewoan in keppeling nei myn skema yn' e Facebook-groep fan 'e skoalle (ik socht in healoere nei dizze post en koe it net fine - heul frjemd). Mar ik fûn in post op myn Band, in skoallemienskip, datearre 2017 novimber XNUMX:

It ferhaal fan in Koreaansk skoaljonge dy't in priis krige fan it ministearje foar in wachtrige monitoringsysteem

It ferhaal fan in Koreaansk skoaljonge dy't in priis krige fan it ministearje foar in wachtrige monitoringsysteem

De reaksje wie wyld!

Ik pleatste dizze berjochten om belangstelling foar myn projekt te wekken. Lykwols, sels gewoan nei har sjen is op himsels frij fermaaklik. Litte wy sizze dat jo hjir dúdlik kinne sjen dat it oantal minsken om 6:02 skerp sprong en praktysk om 6:10 nei nul sakke.

It ferhaal fan in Koreaansk skoaljonge dy't in priis krige fan it ministearje foar in wachtrige monitoringsysteem It ferhaal fan in Koreaansk skoaljonge dy't in priis krige fan it ministearje foar in wachtrige monitoringsysteem

Hjirboppe haw ik in pear grafiken taheakke dy't relatearje oan lunch en middei tee. It is nijsgjirrich om te notearjen dat de peak fan wurkdruk by lunchtime hast altyd barde om 12:25 (de wachtrige berikte it fyfde skyld). En foar in middei hapke is it oer it algemien net karakteristyk om in grutte mannichte minsken te hawwen (de wachtrige is op syn heechst ien boerd lang).

Witte jo wat grappich is? Dit systeem libbet noch (https://thingspeak.com/channels/346781)! Ik haw my oanmeld by it akkount dat ik earder brûkte en seach dit:

It ferhaal fan in Koreaansk skoaljonge dy't in priis krige fan it ministearje foar in wachtrige monitoringsysteem

Yn de boppesteande grafyk seach ik dat op tredde desimber de ynstream fan minsken flink minder wie. En gjin wûnder - it wie snein. Op dizze dei giet hast elkenien earne, want yn de measte gefallen kinst allinnich op snein it skoalplein ferlitte. It is dúdlik dat jo yn it wykein gjin libbene siel sille sjen yn 'e kafetaria.

Hoe't ik de earste priis fan it Koreaanske Ministearje fan Underwiis krige foar myn projekt

Sa't jo sels kinne sjen, haw ik net oan dit projekt wurke, om't ik besocht in soarte fan priis of erkenning te fertsjinjen. Ik woe gewoan myn feardichheden brûke om in groanysk probleem op te lossen dat ik op skoalle tsjinkaam.

Us fiedingsdeskundige fan 'e skoalle, juffer O, mei wa't ik heul tichtby kaam by it plannen en ûntwikkeljen fan myn projekt, frege my op in dei oft ik wist fan in konkurrinsje foar kafeteria-ideeën. Doe tocht ik dat it in soarte fan nuver idee wie om ideeën foar de ytseal te fergelykjen. Mar ik haw it ynformaasjeboekje lêzen en leard dat it projekt foar 24 novimber yntsjinne wêze moat! No goed. Ik ha it konsept, gegevens en grafiken fluch ôfsletten en de applikaasje stjoerd.

Feroarings oan it orizjinele idee foar de kompetysje

Trouwens, it systeem dat ik úteinlik foarstelde wie wat oars as it al ymplementearre. Yn essinsje haw ik myn orizjinele metoade oanpast (mjitten fan wachtrige yn echte tiid) foar folle gruttere Koreaanske skoallen. Ter fergeliking: op ús skoalle sitte trijehûndert learlingen, en yn guon oaren binne der safolle minsken yn mar ien klasse! Ik moast útfine hoe't ik it systeem skaalje moast.

Dêrom stelde ik in konsept foar dat mear basearre wie op "hânlieding". Tsjintwurdich hawwe Koreaanske skoallen al in mielplan yntrodusearre foar alle klassen, dêr't strikt oan wurdt folge, dus boude ik in oar ramt fan 'sinjaal-antwurd' type. It idee hjir wie dat as de groep dy't de kafetaria foar jo besocht in bepaalde limyt yn 'e lingte fan 'e line berikte (dat is, de line waard koart), se jo manuell in sinjaal stjoere mei in knop of oerskeakelje op 'e muorre . It sinjaal sil wurde oerbrocht nei it TV-skerm as fia LED-bollen.

Ik woe gewoan in probleem oplosse dat op alle skoallen yn it lân ûntstie. Ik wie noch sterker yn myn bedoeling doe't ik in ferhaal fan juffer O hearde - ik sil it jo no fertelle. It docht bliken dat op guon grutte skoallen de line foarby de kafetaria rint, tweintich oant tritich meter de strjitte yn, ek winters, om't nimmen it proses goed organisearje kin. En soms bart it dat in pear minuten gjinien yn 'e ytseal ferskynt - en dit is ek min. Op skoallen mei in grut tal learlingen hat it personiel amper tiid om elkenien te tsjinjen, ek al wurdt der gjin minút oan mieltiid fergriemd. Dêrom hawwe dejingen dy't as lêste binne by de útdieling (meast basisskoallelearlingen) gewoan net genôch tiid om te iten.

Dus, ek al moast ik myn oanfraach yn 'e haast yntsjinje, ik ha der wol goed neitocht hoe't ik dy foar breder gebrûk oanpasse koe.

Berjocht dat ik de earste priis wûn!

Lang ferhaal koart, ik waard útnoege om te kommen en presintearje myn projekt oan oerheid amtners. Dus ik sette al myn Power Point talinten oan it wurk en kaam en presintearre!

It ferhaal fan in Koreaansk skoaljonge dy't in priis krige fan it ministearje foar in wachtrige monitoringsysteem

Begjin fan 'e presintaasje (fier links - minister)

It wie in nijsgjirrige ûnderfining - ik kaam krekt mei wat foar it kafeteriaprobleem, en einige op ien of oare manier ûnder de winners fan 'e kompetysje. Sels as ik op it poadium stie, tocht ik hieltyd: "Hmm, wat doch ik hjir sels?" Mar yn 't algemien brocht dit projekt my in protte foardielen - ik learde in protte oer de ûntwikkeling fan ynbêde systemen en de ymplemintaasje fan projekten yn it echte libben. No, ik krige fansels in priis.

konklúzje

Der sit hjir wat irony: hoefolle ik ek meidien haw oan allerhande wedstriden en wittenskipsbeurzen dêr't ik my doelbewust foar ynskreaun haw, der kaam neat goeds fan. En doe fûn de kâns my gewoan en joech my goede resultaten.

Dit liet my tinke oer de redenen dy't my motivearje om projekten oan te nimmen. Wêrom begjin ik oan it wurk - om te "winne" of in echte probleem op te lossen yn 'e wrâld om my hinne? As it twadde motyf yn jo gefal oan it wurk is, moedigje ik jo sterk oan om it projekt net te ferlitten. Mei dizze oanpak fan saken kinne jo ûnderweis unferwachte kânsen moetsje en sille jo gjin druk fiele fan 'e needsaak om te winnen - jo wichtichste motivator sil passy wêze foar jo bedriuw.

En it wichtichste: as jo it slagje om in fatsoenlike oplossing te realisearjen, kinne jo it fuortendaliks besykje yn 'e echte wrâld. Yn myn gefal wie it platfoarm in skoalle, mar yn 'e rin fan' e tiid sammelet ûnderfining op, en wa wit - miskien sil jo applikaasje brûkt wurde troch it heule lân of sels de heule wrâld.

Elke kear as ik oan dizze ûnderfining tink, bin ik wat grutsk op mysels. Ik kin net útlizze wêrom, mar it proses fan it útfieren fan it projekt brocht my gewoan in protte wille, en de priis wie in ekstra bonus. Derneist wie ik bliid dat ik in probleem foar myn klasgenoaten oplosse koe dat har libben alle dagen ferniele. Op in dei kaam ien fan 'e studinten nei my ta en sei: "Jo systeem is heul handich." Ik wie yn 'e sânde himel!
Ik tink dat ik sels sûnder prizen grutsk wêze soe op myn ûntwikkeling foar dit allinich. Miskien wie it it helpen fan oaren dat my sa'n foldwaning brocht ... yn 't algemien hâld ik fan projekten.

Wat ik hope te berikken mei dit artikel

Ik hoopje dat jo troch dit artikel oant it ein te lêzen binne ynspirearre om iets te dwaan dat jo mienskip of sels gewoan josels profitearje sil. Ik moedigje jo oan om jo feardichheden te brûken (programmearring is wis ien fan har, mar d'r binne oaren) om de realiteit om jo hinne foar it better te feroarjen. Ik kin jo fersekerje dat de ûnderfining dy't jo sille ophelje yn it proses kin net wurde fergelike mei wat oars.

It kin ek paden iepenje dy't jo net ferwachte hawwe - dat is my oerkommen. Dat asjebleaft, doch wat jo leafde en meitsje jo mark op 'e wrâld! De echo fan ien inkelde stim kin de hiele wrâld skodzje, dus leau yn josels.

Hjir binne wat keppelings yn ferbân mei it projekt:

Boarne: www.habr.com

Add a comment