La storia di uno scolaretto coreano che ha ricevuto un premio dal ministero per un sistema di monitoraggio delle code

Quando ero al primo anno delle scuole superiori (da marzo a dicembre 2016), ero molto infastidito dalla situazione che si era sviluppata nella nostra mensa scolastica.

Problema uno: aspettare in fila troppo a lungo

Che problema ho osservato? Come questo:

La storia di uno scolaretto coreano che ha ricevuto un premio dal ministero per un sistema di monitoraggio delle code

Molti studenti si sono radunati nell'area di distribuzione e sono dovuti rimanere in piedi a lungo (dai cinque ai dieci minuti). Naturalmente, questo è un problema comune e uno schema di servizio equo: più tardi arrivi, più tardi sarai servito. Così potevi capire perché dovevi aspettare.

Problema due: condizioni ineguali per chi aspetta

Ma ovviamente non è tutto; ho dovuto constatare anche un altro problema più serio. Così grave che alla fine ho deciso di provare a trovare una via d'uscita dalla situazione. Gli studenti delle scuole superiori (cioè tutti coloro che studiano almeno una classe superiore) e gli insegnanti si sono recati alla distribuzione senza fare la fila. Sì, sì, e tu, come studente delle scuole elementari, non potevi dire loro niente. La nostra scuola aveva una politica piuttosto rigida riguardo ai rapporti tra le classi.

Pertanto, io e i miei amici, quando eravamo principianti, siamo venuti per primi alla mensa, stavamo per prendere il cibo - e poi sono comparsi studenti o insegnanti delle scuole superiori e semplicemente ci hanno spinti da parte (alcuni, che erano più gentili, ci hanno permesso di rimanere in il nostro posto in fila). Abbiamo dovuto aspettare dai quindici ai venti minuti in più, anche se siamo arrivati ​​prima di tutti gli altri.

Abbiamo passato un momento particolarmente brutto all'ora di pranzo. Durante la giornata tutti correvano alla mensa (insegnanti, studenti, personale), quindi per noi scolari delle elementari il pranzo non era mai una gioia.

Soluzioni comuni al problema

Ma poiché i nuovi arrivati ​​non avevano scelta, abbiamo escogitato due modi per ridurre il rischio di essere gettati in fondo alla fila. Il primo è presentarsi in sala da pranzo molto presto (cioè letteralmente prima ancora che il cibo inizi a essere servito). Il secondo è ingannare volutamente il tempo giocando a ping-pong o a basket e arrivare molto tardi (una ventina di minuti dopo l'inizio del pranzo).

In una certa misura ha funzionato. Ma, a dire il vero, nessuno aveva voglia di correre il più velocemente possibile in sala da pranzo solo per poter mangiare, o per finire gli avanzi freddi dopo gli altri, perché erano tra gli ultimi. Avevamo bisogno di una soluzione che ci informasse quando la mensa non era affollata.

Sarebbe fantastico se qualche indovino ci predisse il futuro e ci dicesse esattamente quando andare in sala da pranzo, in modo da non dover aspettare a lungo. Il problema era che ogni giorno tutto andava diversamente. Non potevamo semplicemente analizzare i modelli e identificare il punto debole. Avevamo un solo modo per sapere come stavano le cose nella sala da pranzo: arrivarci a piedi, e il percorso poteva essere di diverse centinaia di metri, a seconda di dove ci si trovava. Quindi se vieni, guardi la fila, torni indietro e continui con lo stesso spirito finché non diventa breve, perderai molto tempo. In generale, la vita era disgustosa per la classe elementare e non si poteva farci nulla.

Eureka – l’idea di creare un Sistema di Monitoraggio delle Mense

E all'improvviso, già nel prossimo anno accademico (2017), mi sono detto: "E se realizzassimo un sistema che mostri la lunghezza della coda in tempo reale (cioè rilevi un ingorgo)?" Se ci fossi riuscito, il quadro sarebbe stato questo: gli studenti delle scuole elementari avrebbero semplicemente dato un’occhiata ai loro telefoni per ottenere dati aggiornati sull’attuale livello di carico di lavoro e avrebbero tratto conclusioni sull’opportunità per loro di andare adesso. .

In sostanza, questo schema ha attenuato la disuguaglianza attraverso l’accesso alle informazioni. Con il suo aiuto, gli scolari della scuola primaria potevano scegliere da soli cosa era meglio fare per loro: andare a fare la fila (se non era troppo lunga) o trascorrere del tempo in modo più utile, e poi scegliere il momento più appropriato. Ero molto emozionato da questo pensiero.

Progettazione di un sistema di monitoraggio delle mense

A settembre 2017 ho dovuto presentare un progetto per un corso di programmazione a oggetti e ho presentato questo sistema come mio progetto.

La storia di uno scolaretto coreano che ha ricevuto un premio dal ministero per un sistema di monitoraggio delle code

Piano iniziale del sistema (settembre 2017)

Scelta dell'attrezzatura (ottobre 2017)

La storia di uno scolaretto coreano che ha ricevuto un premio dal ministero per un sistema di monitoraggio delle code

Un semplice interruttore tattile con resistenza pull-up. Schema con cinque scudi su tre file per riconoscere la coda lungo tre linee

Ho ordinato solo cinquanta interruttori a membrana, una mini scheda Wemos D1 basata su ESP8266 e alcuni morsetti ad anello ai quali avevo intenzione di collegare i fili smaltati.

Prototipazione e sviluppo (ottobre 2017)

Ho iniziato con una breadboard, ci ho assemblato un circuito e l'ho testato. Ero limitato nel numero di materiali, quindi mi sono limitato a un sistema con cinque pedane.

Per il software che ho scritto in C++, ho fissato i seguenti obiettivi:

  1. Lavora ininterrottamente e invia i dati solo nei periodi in cui viene servito il cibo (colazione, pranzo, cena, merenda).
  2. Riconoscere la situazione della coda/traffico nella caffetteria a frequenze tali che i dati possano quindi essere utilizzati in modelli di apprendimento automatico (ad esempio, 10 Hz).
  3. Invia i dati al server in modo efficiente (la dimensione del pacchetto deve essere piccola) e a brevi intervalli.

Per realizzarli dovevo fare quanto segue:

  1. Utilizza il modulo RTC (Real Time Clock) per monitorare continuamente l'ora e determinare quando viene servito il cibo nella caffetteria.
  2. Utilizzare un metodo di compressione dei dati per registrare lo stato della protezione in un carattere. Trattando i dati come un codice binario a cinque bit, ho mappato i vari valori in caratteri ASCII in modo che rappresentassero gli elementi dei dati.
  3. Utilizza ThingSpeak (uno strumento IoT per analisi e grafici online) inviando richieste HTTP utilizzando il metodo POST.

Naturalmente c'erano alcuni bug. Ad esempio, non sapevo che l'operatore sizeof() restituisce il valore 4 per un oggetto char *, e non la lunghezza della stringa (perché non è un array e quindi il compilatore non calcola la lunghezza) e sono rimasto molto sorpreso dal fatto che le mie richieste HTTP contenessero solo quattro caratteri da tutti gli URL!

Inoltre non ho incluso le parentesi nel passaggio #define, il che ha portato a risultati inaspettati. Beh diciamo:

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

Qui ci si aspetterebbe che A sia uguale a 3 (10 / 3 = 3), ma in realtà è stato calcolato diversamente: 2 (2 * 5/ 3 = 2).

Infine, un altro bug degno di nota di cui mi sono occupato è stato il ripristino del timer del watchdog. Ho lottato con questo problema per molto tempo. Come si è scoperto in seguito, stavo tentando di accedere al registro di basso livello sul chip ESP8266 nel modo sbagliato (per errore ho inserito un valore NULL per un puntatore a una struttura).

La storia di uno scolaretto coreano che ha ricevuto un premio dal ministero per un sistema di monitoraggio delle code

Uno scudo per i piedi che ho progettato e realizzato. Al momento dello scatto della foto era già sopravvissuto a cinque settimane di calpestio

Ferramenta (pedane)

Per garantire che gli scudi fossero in grado di sopravvivere alle dure condizioni della mensa, ho stabilito per loro i seguenti requisiti:

  • Gli scudi devono essere sufficientemente robusti da sostenere in ogni momento il peso umano.
  • Gli scudi dovrebbero essere sottili per non disturbare le persone in fila.
  • L'interruttore deve essere attivato quando viene calpestato.
  • Gli scudi devono essere impermeabili. La sala da pranzo è sempre umida.

Per soddisfare questi requisiti, ho optato per un design a due strati: acrilico tagliato al laser per la base e la copertura superiore e sughero come strato protettivo.

Ho realizzato il layout dello scudo in AutoCAD; dimensioni – 400 per 400 millimetri.

La storia di uno scolaretto coreano che ha ricevuto un premio dal ministero per un sistema di monitoraggio delle code

A sinistra c'è il progetto entrato in produzione. A destra c'è un'opzione con una connessione di tipo Lego

A proposito, alla fine ho abbandonato il design della mano destra perché con un tale sistema di fissaggio si è scoperto che dovrebbero esserci 40 centimetri tra gli scudi, il che significa che non potevo coprire la distanza richiesta (più di dieci metri).

La storia di uno scolaretto coreano che ha ricevuto un premio dal ministero per un sistema di monitoraggio delle code

La storia di uno scolaretto coreano che ha ricevuto un premio dal ministero per un sistema di monitoraggio delle code

Per collegare tutti gli interruttori ho utilizzato cavi smaltati: in totale ci sono voluti più di 70 metri! Ho posizionato un interruttore a membrana al centro di ogni scudo. Due clip sporgevano dalle fessure laterali: a sinistra e a destra dell'interruttore.

Bene, per l'impermeabilizzazione ho usato del nastro isolante. Un sacco di nastro isolante.

E tutto ha funzionato!

Periodo dal XNUMX novembre al XNUMX dicembre

La storia di uno scolaretto coreano che ha ricevuto un premio dal ministero per un sistema di monitoraggio delle code

Foto del sistema: qui sono visibili tutti e cinque gli scudi. A sinistra c'è l'elettronica (D1-mini / Bluetooth / RTC)

Il XNUMX novembre alle otto del mattino (ora della colazione), il sistema ha iniziato a raccogliere i dati attuali sulla situazione in sala da pranzo. Non potevo credere ai miei occhi. Solo due mesi fa stavo abbozzando lo schema generale, seduto a casa in pigiama, ed eccoci qui, l'intero sistema funziona senza intoppi... oppure no.

Bug del software durante i test

Naturalmente c'erano molti bug nel sistema. Ecco quelli che ricordo.

Il programma non ha verificato la disponibilità di punti Wi-Fi durante il tentativo di connettere il client all'API ThingSpeak. Per correggere l'errore, ho aggiunto un ulteriore passaggio per verificare la disponibilità del Wi-Fi.

Nella funzione di configurazione, ho chiamato ripetutamente "WiFi.begin" finché non è apparsa una connessione. Successivamente ho scoperto che la connessione viene stabilita dal firmware ESP8266 e la funzione di inizio viene utilizzata solo durante la configurazione del Wi-Fi. Ho corretto la situazione chiamando la funzione una sola volta, durante la configurazione.

Ho scoperto che l'interfaccia a riga di comando che ho creato (doveva impostare l'ora, modificare le impostazioni di rete) non funziona a riposo (cioè al di fuori della colazione, del pranzo, della cena e del tè pomeridiano). Ho anche visto che quando non avviene alcuna registrazione, il loop interno accelera eccessivamente e i dati seriali vengono letti troppo velocemente. Pertanto, ho impostato un ritardo in modo che il sistema attenda l'arrivo di comandi aggiuntivi quando previsto.

Inno al cane da guardia

Oh, e ancora una cosa riguardo al problema con il timer del watchdog: l'ho risolto proprio durante la fase di test in condizioni "sul campo". Senza esagerare, questo è stato tutto ciò a cui ho pensato per quattro giorni. Ad ogni pausa (della durata di dieci minuti) correvo in mensa solo per provare la nuova versione del codice. E quando la distribuzione è stata aperta, sono rimasto seduto sul pavimento per un'ora, cercando di catturare l'insetto. Non pensavo nemmeno al cibo! Grazie per tutte le cose belle, Watchdog ESP8266!

Come ho capito WDT

La storia di uno scolaretto coreano che ha ricevuto un premio dal ministero per un sistema di monitoraggio delle code

Snippet di codice con cui stavo lottando

Ho trovato un programma, o meglio un'estensione per Arduino, che analizza la struttura dati del software quando avviene un Wdt-reset, accedendo al file ELF del codice compilato (correlazioni tra funzioni e puntatori). Fatto ciò, si è scoperto che l'errore può essere eliminato come segue:

La storia di uno scolaretto coreano che ha ricevuto un premio dal ministero per un sistema di monitoraggio delle code

Accidenti! Bene, chi avrebbe mai immaginato che correggere i bug in un sistema in tempo reale fosse così difficile! Tuttavia, ho rimosso il bug e si è rivelato un bug stupido. A causa della mia inesperienza, ho scritto un ciclo while in cui l'array andava oltre i limiti. Uffa! (index++ e ++index sono due grandi differenze).

La storia di uno scolaretto coreano che ha ricevuto un premio dal ministero per un sistema di monitoraggio delle code

Problemi con l'hardware durante i test

Naturalmente l'attrezzatura, ovvero le protezioni per i piedi, era tutt'altro che ideale. Come ci si potrebbe aspettare, uno degli interruttori è bloccato.

La storia di uno scolaretto coreano che ha ricevuto un premio dal ministero per un sistema di monitoraggio delle code

Il XNUMX novembre, durante il pranzo, si è bloccato l'interruttore del terzo pannello

Sopra ho fornito uno screenshot di un grafico online dal sito web ThingSpeak. Come potete vedere, è successo qualcosa intorno alle 12:25, dopodiché lo scudo numero tre ha ceduto. Di conseguenza, la lunghezza della coda è stata determinata pari a 3 (il valore è 3 * 100), anche se in realtà non raggiungeva il terzo scudo. La soluzione è stata l'aggiunta di più imbottitura (sì, nastro adesivo) per dare più spazio all'interruttore.

A volte il mio sistema veniva letteralmente sradicato quando il filo rimaneva intrappolato nella porta. Carrelli e pacchi venivano trasportati attraverso questa porta nella sala da pranzo, in modo che portasse con sé il filo, chiudendolo ed estraendolo dalla presa. In questi casi, ho notato un guasto inaspettato nel flusso di dati e ho intuito che il sistema fosse disconnesso dalla fonte di alimentazione.

Diffusione delle informazioni sul sistema in tutta la scuola

Come già accennato, ho utilizzato l'API ThingSpeak, che visualizza i dati sul sito sotto forma di grafici, il che è molto comodo. In generale, ho semplicemente pubblicato un collegamento al mio programma nel gruppo Facebook della scuola (ho cercato questo post per mezz'ora e non sono riuscito a trovarlo, molto strano). Ma ho trovato un post sulla mia Band, una comunità scolastica, datato 2017 novembre XNUMX:

La storia di uno scolaretto coreano che ha ricevuto un premio dal ministero per un sistema di monitoraggio delle code

La storia di uno scolaretto coreano che ha ricevuto un premio dal ministero per un sistema di monitoraggio delle code

La reazione è stata selvaggia!

Ho pubblicato questi post per suscitare interesse nel mio progetto. Tuttavia, anche solo guardarli è di per sé piuttosto divertente. Diciamo che qui potete vedere chiaramente che il numero di persone è aumentato bruscamente alle 6:02 ed è praticamente sceso a zero alle 6:10.

La storia di uno scolaretto coreano che ha ricevuto un premio dal ministero per un sistema di monitoraggio delle code La storia di uno scolaretto coreano che ha ricevuto un premio dal ministero per un sistema di monitoraggio delle code

Sopra ho allegato un paio di grafici relativi al pranzo e al tè pomeridiano. È interessante notare che il picco di carico di lavoro all'ora di pranzo si è verificato quasi sempre alle 12:25 (la coda ha raggiunto il quinto scudo). E per uno spuntino pomeridiano in genere è insolito avere una grande folla di persone (la coda è lunga al massimo un tavolo).

Sai cosa è divertente? Questo sistema è ancora vivo (https://thingspeak.com/channels/346781)! Ho effettuato l'accesso all'account che usavo prima e ho visto questo:

La storia di uno scolaretto coreano che ha ricevuto un premio dal ministero per un sistema di monitoraggio delle code

Nel grafico sopra ho visto che il XNUMX dicembre l'afflusso di persone è stato decisamente inferiore. E non c'è da stupirsi: era domenica. In questo giorno quasi tutti vanno da qualche parte, perché nella maggior parte dei casi solo la domenica puoi lasciare il cortile della scuola. È chiaro che nel fine settimana non vedrai anima viva nella mensa.

Come ho ricevuto il primo premio dal Ministero dell'Istruzione coreano per il mio progetto

Come puoi vedere tu stesso, non ho lavorato a questo progetto perché stavo cercando di guadagnare qualche tipo di premio o riconoscimento. Volevo solo usare le mie capacità per risolvere un problema cronico che stavo affrontando a scuola.

Tuttavia, la nutrizionista della nostra scuola, Miss O, con la quale sono diventato molto amico durante la pianificazione e lo sviluppo del mio progetto, un giorno mi ha chiesto se sapevo di un concorso di idee per la mensa. Poi ho pensato che fosse una strana idea confrontare le idee per la sala da pranzo. Ma ho letto il libretto informativo e ho saputo che il progetto deve essere presentato entro il 24 novembre! Bene bene. Ho finalizzato rapidamente il concept, i dati e la grafica e ho inviato la candidatura.

Modifiche all'idea originale del concorso

A proposito, il sistema che alla fine ho proposto era leggermente diverso da quello già implementato. In sostanza, ho adattato il mio metodo originale (misurazione della lunghezza della coda in tempo reale) per scuole coreane molto più grandi. Per fare un confronto: nella nostra scuola ci sono trecento studenti, in altre ci sono così tante persone in una sola classe! Avevo bisogno di capire come scalare il sistema.

Pertanto, ho proposto un concetto più basato sul controllo “manuale”. Al giorno d’oggi, le scuole coreane hanno già introdotto un piano alimentare per tutte le classi, che viene rispettato rigorosamente, quindi ho costruito una struttura diversa di tipo “segnale-risposta”. L'idea era che quando il gruppo in visita alla mensa davanti a te avesse raggiunto un certo limite nella lunghezza della linea (cioè la linea si fosse accorciata), ti avrebbero inviato manualmente un segnale utilizzando un pulsante o accendendo il muro. . Il segnale verrà trasmesso allo schermo TV o tramite lampadine LED.

Volevo solo risolvere un problema sorto in tutte le scuole del paese. La mia intenzione si è rafforzata ancora di più quando ho sentito una storia dalla signorina O: te lo racconterò adesso. Si scopre che in alcune grandi scuole la fila si estende oltre la mensa, fino alla strada, per venti o trenta metri, anche in inverno, perché nessuno riesce a organizzare adeguatamente il processo. E a volte capita che per diversi minuti nessuno compaia nella sala da pranzo - e anche questo è un male. Nelle scuole con un gran numero di studenti, il personale ha a malapena il tempo di servire tutti, anche se non viene sprecato un solo minuto del tempo dedicato ai pasti. Pertanto, coloro che arrivano per ultimi alla distribuzione (di solito gli studenti delle scuole elementari) semplicemente non hanno abbastanza tempo per mangiare.

Quindi, anche se ho dovuto presentare la mia candidatura in fretta, ho pensato molto attentamente a come avrei potuto adattarla per un uso più ampio.

Messaggio che ho vinto il primo premio!

Per farla breve, sono stato invitato a venire a presentare il mio progetto ai funzionari governativi. Quindi ho messo all'opera tutto il mio talento in Power Point e sono venuto a presentarmi!

La storia di uno scolaretto coreano che ha ricevuto un premio dal ministero per un sistema di monitoraggio delle code

Inizio della presentazione (estrema sinistra - ministro)

È stata un'esperienza interessante: ho appena inventato qualcosa per il problema della mensa e in qualche modo sono finito tra i vincitori del concorso. Anche stando sul palco, continuavo a pensare: “Hmm, cosa ci faccio qui?” Ma in generale, questo progetto mi ha portato grandi benefici: ho imparato molto sullo sviluppo di sistemi integrati e sull'implementazione di progetti nella vita reale. Beh, ho ricevuto un premio, ovviamente.

conclusione

C'è una certa ironia qui: non importa quanto ho partecipato a tutti i tipi di concorsi e fiere scientifiche a cui mi sono iscritto di proposito, non ne è venuto fuori nulla di buono. E poi l'opportunità mi ha trovato e mi ha dato buoni risultati.

Questo mi ha fatto riflettere sulle ragioni che mi spingono ad intraprendere progetti. Perché inizio a lavorare: per "vincere" o per risolvere un problema reale nel mondo che mi circonda? Se nel tuo caso entra in gioco il secondo motivo, ti incoraggio vivamente a non abbandonare il progetto. Con questo approccio al business, puoi incontrare opportunità inaspettate lungo il percorso e non sentirai la pressione della necessità di vincere: la tua motivazione principale sarà la passione per la tua attività.

E, cosa più importante: se riesci a implementare una soluzione decente, puoi provarla immediatamente nel mondo reale. Nel mio caso la piattaforma era una scuola, ma col tempo l'esperienza si accumula e chissà, forse la tua applicazione verrà utilizzata dall'intero paese o addirittura dal mondo intero.

Ogni volta che penso a questa esperienza, sono un po’ orgoglioso di me stesso. Non so spiegare perché, ma il processo di realizzazione del progetto mi ha semplicemente fatto molto piacere e il premio è stato un ulteriore vantaggio. Inoltre, mi ha fatto piacere poter risolvere per i miei compagni di classe un problema che rovinava loro la vita ogni giorno. Un giorno uno studente venne da me e mi disse: “Il tuo sistema è molto conveniente”. Ero al settimo cielo!
Penso che anche senza alcun premio mi sentirei orgoglioso del mio sviluppo solo per questo. Forse è stato proprio aiutare gli altri a darmi tanta soddisfazione... in generale amo i progetti.

Quello che speravo di ottenere con questo articolo

Spero che leggendo questo articolo fino alla fine tu sia stato ispirato a fare qualcosa che andrà a beneficio della tua comunità o anche solo di te stesso. Ti incoraggio a utilizzare le tue capacità (la programmazione è sicuramente una di queste, ma ce ne sono altre) per cambiare in meglio la realtà che ti circonda. Posso assicurarti che l'esperienza che acquisirai durante il processo non può essere paragonata a nient'altro.

Può anche aprire strade che non ti aspettavi: è quello che è successo a me. Quindi, per favore, fai ciò che ami e lascia il segno nel mondo! L'eco di una sola voce può scuotere il mondo intero, quindi credi in te stesso.

Ecco alcuni link relativi al progetto:

Fonte: habr.com

Aggiungi un commento