L'histoire d'un écolier coréen qui a reçu un prix du ministère pour un système de surveillance des files d'attente

Lorsque j'étais en première année de lycée (de mars à décembre 2016), j'étais très agacé par la situation qui se développait dans la cantine de notre école.

Premier problème : faire la queue trop longtemps

Quel problème ai-je observé ? Comme ça:

L'histoire d'un écolier coréen qui a reçu un prix du ministère pour un système de surveillance des files d'attente

De nombreux étudiants se sont rassemblés près de l'aire de distribution et ont dû rester debout longtemps (cinq à dix minutes). Bien entendu, il s’agit d’un problème courant et d’un système de service équitable : plus vous arrivez tard, plus vous serez servi tard. Vous comprendrez donc pourquoi vous devez attendre.

Deuxième problème : des conditions inégales pour ceux qui attendent

Mais bien sûr, ce n’est pas tout ; j’ai également dû constater un autre problème, plus grave. Tellement grave que j'ai finalement décidé d'essayer de trouver une issue à la situation. Les lycéens (c'est-à-dire tous ceux qui étudient au moins une année supérieure) et les enseignants se sont rendus à la distribution sans faire la queue. Oui, oui, et vous, en tant qu'élève du primaire, ne pouviez rien leur dire. Notre école avait une politique assez stricte concernant les relations entre les classes.

Par conséquent, mes amis et moi, alors que nous étions débutants, sommes arrivés à la cafétéria tout d'abord, étions sur le point d'aller chercher de la nourriture - puis des lycéens ou des professeurs sont apparus et nous ont simplement repoussés (certains, plus gentils, nous ont permis de rester dans notre place dans la file d'attente). Nous avons dû attendre quinze à vingt minutes supplémentaires, même si nous sommes arrivés plus tôt que tout le monde.

Nous avons passé un moment particulièrement mauvais à l'heure du déjeuner. Pendant la journée, absolument tout le monde se précipitait à la cafétéria (enseignants, élèves, personnel), donc pour nous, en tant qu'écoliers du primaire, le déjeuner n'a jamais été une joie.

Solutions courantes au problème

Mais comme les nouveaux arrivants n’avaient pas le choix, nous avons imaginé deux manières de réduire le risque d’être relégués en queue de peloton. La première consiste à arriver à la salle à manger très tôt (c’est-à-dire littéralement avant même que la nourriture ne commence à être servie). La seconde est de tuer délibérément le temps en jouant au ping-pong ou au basket et d'arriver très tard (une vingtaine de minutes après le début du déjeuner).

Dans une certaine mesure, cela a fonctionné. Mais, à vrai dire, personne n'avait envie de se précipiter le plus vite possible dans la salle à manger juste pour pouvoir manger, ou pour finir les restes froids après les autres, car ils étaient parmi les derniers. Nous avions besoin d'une solution qui nous permettrait de savoir quand la cafétéria n'était pas bondée.

Ce serait formidable si une voyante de bonne aventure nous prédisait l’avenir et nous disait exactement quand aller à la salle à manger, afin que nous n’ayons pas à attendre longtemps. Le problème était que chaque jour, tout se passait différemment. Nous ne pouvions pas simplement analyser les modèles et identifier le point idéal. Nous n'avions qu'un seul moyen de savoir comment ça se passait dans la salle à manger : y arriver à pied, et le chemin pouvait faire plusieurs centaines de mètres, selon l'endroit où l'on se trouvait. Alors si vous venez, regardez la file, revenez et continuez dans le même esprit jusqu'à ce qu'elle devienne courte, vous perdrez beaucoup de temps. En général, la vie était dégoûtante pour la classe élémentaire et on ne pouvait rien y faire.

Eureka – l'idée de​​créer un système de surveillance des cantines

Et soudain, dès la prochaine année universitaire (2017), je me suis dit : « Et si nous créions un système qui montrerait la longueur de la file d'attente en temps réel (c'est-à-dire détecterait un embouteillage) ? Si j'avais réussi, le tableau aurait été le suivant : les élèves du primaire auraient simplement jeté un coup d'œil sur leur téléphone pour obtenir des données à jour sur le niveau actuel de charge de travail et tireraient des conclusions sur l'opportunité pour eux d'y aller maintenant. .

Essentiellement, ce système a atténué les inégalités grâce à l’accès à l’information. Avec son aide, les écoliers du primaire pouvaient choisir eux-mêmes ce qui leur convenait le mieux : faire la queue (si ce n'était pas trop long) ou passer du temps plus utilement, et ensuite choisir un moment plus approprié. J'étais très excité par cette pensée.

Conception d'un système de surveillance de cantine

En septembre 2017, j'ai dû soumettre un projet pour un cours de programmation orientée objet, et j'ai soumis ce système comme projet.

L'histoire d'un écolier coréen qui a reçu un prix du ministère pour un système de surveillance des files d'attente

Plan système initial (septembre 2017)

Sélection des équipements (octobre 2017)

L'histoire d'un écolier coréen qui a reçu un prix du ministère pour un système de surveillance des files d'attente

Un simple interrupteur tactile avec une résistance de rappel. Schéma avec cinq boucliers sur trois rangées pour reconnaître la file d'attente le long de trois lignes

Je n'ai commandé qu'une cinquantaine d'interrupteurs à membrane, une mini carte Wemos D1 basée sur ESP8266, et quelques colliers de serrage à anneau sur lesquels j'avais prévu de fixer les fils émaillés.

Prototypage et développement (octobre 2017)

J'ai commencé avec une maquette, j'ai assemblé un circuit dessus et je l'ai testé. J'étais limité dans le nombre de matériaux, je me suis donc limité à un système à cinq marchepieds.

Pour le logiciel que j'ai écrit en C++, je me suis fixé les objectifs suivants :

  1. Travaillez en continu et envoyez des données uniquement pendant les périodes où la nourriture est servie (petit-déjeuner, déjeuner, dîner, collation de l'après-midi).
  2. Reconnaissez la situation de la file d'attente/du trafic dans la cafétéria à des fréquences telles que les données puissent ensuite être utilisées dans des modèles d'apprentissage automatique (par exemple, 10 Hz).
  3. Envoyez les données au serveur de manière efficace (la taille des paquets doit être petite) et à intervalles courts.

Pour les réaliser, je devais faire ce qui suit :

  1. Utilisez le module RTC (Real Time Clock) pour surveiller en permanence l'heure et déterminer quand la nourriture est servie à la cafétéria.
  2. Utilisez une méthode de compression de données pour enregistrer l'état du bouclier en un seul caractère. En traitant les données comme un code binaire à cinq bits, j'ai mappé les différentes valeurs sur des caractères ASCII afin qu'elles représentent les éléments de données.
  3. Utilisez ThingSpeak (un outil IoT pour l'analyse et la création de graphiques en ligne) en envoyant des requêtes HTTP à l'aide de la méthode POST.

Bien sûr, il y a eu quelques bugs. Par exemple, je ne savais pas que l'opérateur sizeof() renvoie la valeur 4 pour un objet char *, et non la longueur de la chaîne (car ce n'est pas un tableau et, par conséquent, le compilateur ne calcule pas la longueur) et j'ai été très surpris de savoir pourquoi mes requêtes HTTP ne contenaient que quatre caractères provenant de toutes les URL !

Je n'ai pas non plus inclus de parenthèses dans l'étape #define, ce qui a conduit à des résultats inattendus. Eh bien, disons :

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

Ici, on s'attendrait à ce que A soit égal à 3 (10 / 3 = 3), mais en fait il a été calculé différemment : 2 (2 * 5/ 3 = 2).

Enfin, un autre bug notable que j'ai traité était la réinitialisation du minuteur de surveillance. J'ai lutté contre ce problème pendant très longtemps. Comme il s'est avéré plus tard, j'essayais d'accéder au registre de bas niveau sur la puce ESP8266 de la mauvaise manière (par erreur, j'ai entré une valeur NULL pour un pointeur vers une structure).

L'histoire d'un écolier coréen qui a reçu un prix du ministère pour un système de surveillance des files d'attente

Un protège-pied que j'ai conçu et construit. Au moment où la photo a été prise, il avait déjà survécu à cinq semaines de piétinement.

Quincaillerie (pieds de lit)

Pour m'assurer que les boucliers puissent survivre aux conditions difficiles de la cantine, je leur ai fixé les exigences suivantes :

  • Les boucliers doivent être suffisamment solides pour supporter le poids humain à tout moment.
  • Les boucliers doivent être minces afin de ne pas déranger les personnes faisant la queue.
  • L'interrupteur doit être activé lorsqu'on marche dessus.
  • Les boucliers doivent être étanches. La salle à manger est toujours humide.

Pour répondre à ces exigences, j'ai opté pour une conception à deux couches : de l'acrylique découpé au laser pour la base et le couvercle supérieur, et du liège comme couche protectrice.

J'ai réalisé la disposition du bouclier dans AutoCAD ; dimensions – 400 sur 400 millimètres.

L'histoire d'un écolier coréen qui a reçu un prix du ministère pour un système de surveillance des files d'attente

Sur la gauche se trouve le modèle entré en production. A droite, une option avec une connexion de type Lego

D'ailleurs, j'ai finalement abandonné la conception de droite car avec un tel système de fixation, il s'est avéré qu'il devait y avoir 40 centimètres entre les boucliers, ce qui signifie que je ne pouvais pas parcourir la distance requise (plus de dix mètres).

L'histoire d'un écolier coréen qui a reçu un prix du ministère pour un système de surveillance des files d'attente

L'histoire d'un écolier coréen qui a reçu un prix du ministère pour un système de surveillance des files d'attente

Pour connecter tous les interrupteurs, j'ai utilisé des fils émaillés - au total, ils ont pris plus de 70 mètres ! J'ai placé un interrupteur à membrane au centre de chaque bouclier. Deux clips dépassaient des fentes latérales - à gauche et à droite de l'interrupteur.

Eh bien, pour l'imperméabilisation, j'ai utilisé du ruban isolant. Beaucoup de ruban isolant.

Et tout a fonctionné !

Période du XNUMX novembre au XNUMX décembre

L'histoire d'un écolier coréen qui a reçu un prix du ministère pour un système de surveillance des files d'attente

Photo du système - les cinq boucliers sont visibles ici. A gauche se trouve l'électronique (D1-mini / Bluetooth / RTC)

Le XNUMX novembre à huit heures du matin (heure du petit-déjeuner), le système a commencé à collecter des données actuelles sur la situation dans la salle à manger. Je n'en croyais pas mes yeux. Il y a à peine deux mois, j'ébauchais le schéma général, assis chez moi en pyjama, et voilà, tout le système fonctionne sans accroc... ou pas.

Bugs logiciels lors des tests

Bien entendu, le système comportait de nombreux bugs. Voici ceux dont je me souviens.

Le programme n'a pas vérifié les points Wi-Fi disponibles lors de la tentative de connexion du client à l'API ThingSpeak. Pour corriger l'erreur, j'ai ajouté une étape supplémentaire pour vérifier la disponibilité du Wi-Fi.

Dans la fonction de configuration, j'ai appelé à plusieurs reprises « WiFi.begin » jusqu'à ce qu'une connexion apparaisse. Plus tard, j'ai découvert que la connexion est établie par le micrologiciel ESP8266 et que la fonction de démarrage n'est utilisée que lors de la configuration du Wi-Fi. J'ai corrigé la situation en appelant la fonction une seule fois, lors de l'installation.

J'ai découvert que l'interface de ligne de commande que j'ai créée (elle était destinée à régler l'heure, modifier les paramètres réseau) ne fonctionnait pas au repos (c'est-à-dire en dehors du petit-déjeuner, du déjeuner, du dîner et du thé de l'après-midi). J'ai également constaté que lorsqu'aucune journalisation ne se produit, la boucle interne accélère excessivement et les données série sont lues trop rapidement. Par conséquent, j'ai défini un délai pour que le système attende que des commandes supplémentaires arrivent lorsqu'elles sont attendues.

Ode au chien de garde

Oh, et encore une chose à propos de ce problème avec la minuterie de surveillance - je l'ai résolu précisément au stade des tests dans des conditions de « terrain ». Sans exagération, c’est tout ce à quoi j’ai pensé pendant quatre jours. À chaque pause (d'une durée de dix minutes), je me précipitais à la cafétéria juste pour essayer la nouvelle version du code. Et quand la distribution a commencé, je suis resté assis par terre pendant une heure, essayant d'attraper le virus. Je n'ai même pas pensé à la nourriture ! Merci pour toutes les bonnes choses, ESP8266 Watchdog !

Comment j'ai découvert WDT

L'histoire d'un écolier coréen qui a reçu un prix du ministère pour un système de surveillance des files d'attente

Extrait de code avec lequel j'avais du mal

J'ai trouvé un programme, ou plutôt une extension pour Arduino, qui analyse la structure des données du logiciel lors d'une réinitialisation Wdt, en accédant au fichier ELF du code compilé (corrélations entre fonctions et pointeurs). Une fois cela fait, il s'est avéré que l'erreur peut être éliminée comme suit :

L'histoire d'un écolier coréen qui a reçu un prix du ministère pour un système de surveillance des files d'attente

Bon sang! Eh bien, qui aurait cru que corriger les bugs dans un système en temps réel était si difficile ! Cependant, j'ai supprimé le bug et il s'est avéré que c'était un bug stupide. En raison de mon inexpérience, j'ai écrit une boucle while dans laquelle le tableau dépassait les limites. Pouah! (index++ et ++index sont deux grandes différences).

L'histoire d'un écolier coréen qui a reçu un prix du ministère pour un système de surveillance des files d'attente

Problèmes avec le matériel pendant les tests

Bien entendu, l’équipement, c’est-à-dire les protège-pieds, était loin d’être idéal. Comme on pouvait s'y attendre, l'un des commutateurs est bloqué.

L'histoire d'un écolier coréen qui a reçu un prix du ministère pour un système de surveillance des files d'attente

Le XNUMX novembre, pendant le déjeuner, l'interrupteur du troisième panneau s'est bloqué

Ci-dessus, j'ai fourni une capture d'écran d'un graphique en ligne du site Web ThingSpeak. Comme vous pouvez le voir, quelque chose s'est produit vers 12h25, après quoi le bouclier numéro trois est tombé en panne. En conséquence, la longueur de la file d'attente a été déterminée à 3 (la valeur est 3 * 100), même si en fait elle n'a pas atteint le troisième bouclier. La solution était que j'ajoutais plus de rembourrage (oui, du ruban adhésif) pour donner plus de place au commutateur.

Parfois, mon système était littéralement déraciné lorsque le fil restait coincé dans la porte. Les chariots et les paquets étaient transportés par cette porte dans la salle à manger, de sorte qu'elle emportait le fil avec elle, le fermait et le retirait de la prise. Dans de tels cas, j'ai remarqué une défaillance inattendue dans le flux de données et j'ai deviné que le système était déconnecté de la source d'alimentation.

Diffusion d'informations sur le système dans toute l'école

Comme déjà mentionné, j'ai utilisé l'API ThingSpeak, qui visualise les données sur le site sous forme de graphiques, ce qui est très pratique. En général, je me contentais de publier un lien vers mon emploi du temps dans le groupe Facebook de l'école (j'ai cherché ce message pendant une demi-heure et je ne l'ai pas trouvé - très étrange). Mais j'ai trouvé un post sur mon Band, une communauté scolaire, daté du 2017 novembre XNUMX :

L'histoire d'un écolier coréen qui a reçu un prix du ministère pour un système de surveillance des files d'attente

L'histoire d'un écolier coréen qui a reçu un prix du ministère pour un système de surveillance des files d'attente

La réaction a été sauvage !

J'ai publié ces articles pour susciter l'intérêt pour mon projet. Cependant, le simple fait de les regarder est assez amusant en soi. Disons que vous voyez clairement ici que le nombre de personnes a fortement augmenté à 6h02 et est pratiquement tombé à zéro à 6h10.

L'histoire d'un écolier coréen qui a reçu un prix du ministère pour un système de surveillance des files d'attente L'histoire d'un écolier coréen qui a reçu un prix du ministère pour un système de surveillance des files d'attente

Ci-dessus, j'ai joint quelques graphiques relatifs au déjeuner et au thé de l'après-midi. Il est intéressant de noter que le pic de charge de travail à l'heure du déjeuner se produisait presque toujours à 12h25 (la file d'attente atteignait le cinquième bouclier). Et pour un goûter l'après-midi, il n'est généralement pas habituel d'avoir une grande foule (la file d'attente fait au plus une planche).

Tu sais ce qui est drôle ? Ce système est toujours vivant (https://thingspeak.com/channels/346781) ! Je me suis connecté au compte que j'utilisais auparavant et j'ai vu ceci :

L'histoire d'un écolier coréen qui a reçu un prix du ministère pour un système de surveillance des files d'attente

Dans le graphique ci-dessus, j’ai vu que le XNUMX décembre, l’afflux de personnes était nettement moindre. Et ce n’est pas étonnant : c’était dimanche. Ce jour-là, presque tout le monde va quelque part, car dans la plupart des cas, vous ne pouvez quitter l'enceinte de l'école que le dimanche. Il est clair que vous ne verrez personne à la cafétéria le week-end.

Comment j'ai reçu le premier prix du ministère coréen de l'Éducation pour mon projet

Comme vous pouvez le constater par vous-même, je n'ai pas travaillé sur ce projet parce que j'essayais de gagner une sorte de prix ou de reconnaissance. Je voulais juste utiliser mes compétences pour résoudre un problème chronique auquel je faisais face à l'école.

Cependant, la nutritionniste de notre école, Miss O, avec qui je suis devenue très proche lors de la planification et de l'élaboration de mon projet, m'a demandé un jour si j'étais au courant d'un concours d'idées de cafétéria. Ensuite, j’ai pensé que c’était une idée étrange de comparer des idées pour la salle à manger. Mais j'ai lu le livret d'information et appris que le projet doit être déposé avant le 24 novembre ! Bien bien. J'ai rapidement finalisé le concept, les données et les graphiques et envoyé la candidature.

Modifications de l'idée originale du concours

D’ailleurs, le système que j’ai finalement proposé était légèrement différent de celui déjà mis en place. Essentiellement, j’ai adapté ma méthode originale (mesurer la longueur de la file d’attente en temps réel) pour des écoles coréennes beaucoup plus grandes. A titre de comparaison : dans notre école, il y a trois cents élèves, et dans d'autres, il y a tellement de monde dans une seule classe ! J'avais besoin de comprendre comment faire évoluer le système.

J’ai donc proposé un concept davantage basé sur un contrôle « manuel ». De nos jours, les écoles coréennes ont déjà introduit un plan de repas pour toutes les classes, qui est strictement respecté, j'ai donc construit un cadre différent de type « signal-réponse ». L'idée ici était que lorsque le groupe visitant la cafétéria devant vous atteignait une certaine limite dans la longueur de la file d'attente (c'est-à-dire que la file d'attente devenait courte), il vous enverrait manuellement un signal à l'aide d'un bouton ou d'un interrupteur mural. . Le signal sera transmis à l'écran du téléviseur ou via des ampoules LED.

Je voulais juste vraiment résoudre un problème qui se posait dans toutes les écoles du pays. J'ai été encore plus renforcé dans mon intention lorsque j'ai entendu une histoire de Miss O - je vais vous la raconter maintenant. Il s'avère que dans certaines grandes écoles, la file d'attente s'étend au-delà de la cafétéria, dans la rue sur vingt à trente mètres, même en hiver, car personne ne peut organiser correctement le processus. Et parfois, il arrive que pendant plusieurs minutes personne n'apparaisse dans la salle à manger - et c'est aussi mauvais. Dans les écoles comptant un grand nombre d’élèves, le personnel a à peine le temps de servir tout le monde, même si aucune minute de repas n’est perdue. Par conséquent, ceux qui arrivent les derniers à la distribution (généralement des élèves du primaire) n’ont tout simplement pas assez de temps pour manger.

Ainsi, même si j’ai dû soumettre ma candidature dans l’urgence, j’ai réfléchi très attentivement à la manière dont je pourrais l’adapter à une utilisation plus large.

Message indiquant que j'ai gagné le premier prix !

Pour faire court, j'ai été invité à venir présenter mon projet aux représentants du gouvernement. J’ai donc mis tous mes talents Power Point à profit et je suis venu présenter !

L'histoire d'un écolier coréen qui a reçu un prix du ministère pour un système de surveillance des files d'attente

Début de la présentation (extrême gauche - ministre)

Ce fut une expérience intéressante - je viens de trouver quelque chose pour le problème de la cafétéria et je me suis retrouvé d'une manière ou d'une autre parmi les gagnants du concours. Même debout sur scène, je n’arrêtais pas de penser : « Hmm, qu’est-ce que je fais ici ? Mais en général, ce projet m'a apporté de grands bénéfices : j'ai beaucoup appris sur le développement de systèmes embarqués et la mise en œuvre de projets dans la vie réelle. Eh bien, j'ai reçu un prix, bien sûr.

Conclusion

Il y a une certaine ironie ici : peu importe à quel point j'ai participé à toutes sortes de concours et d'expo-sciences auxquels je me suis volontairement inscrit, rien de bon n'en est sorti. Et puis l’opportunité m’est venue et m’a donné de bons résultats.

Cela m'a fait réfléchir aux raisons qui me motivent à me lancer dans des projets. Pourquoi est-ce que je commence à travailler - pour « gagner » ou pour résoudre un problème réel dans le monde qui m'entoure ? Si le deuxième motif est à l’œuvre dans votre cas, je vous encourage fortement à ne pas abandonner le projet. Avec cette approche des affaires, vous pourrez rencontrer des opportunités inattendues en cours de route et ne ressentirez pas la pression du besoin de gagner - votre principal facteur de motivation sera la passion pour votre entreprise.

Et le plus important : si vous parvenez à mettre en œuvre une solution décente, vous pouvez immédiatement l'essayer dans le monde réel. Dans mon cas, la plateforme était une école, mais avec le temps, l'expérience s'accumule, et qui sait, peut-être que votre application sera utilisée par tout le pays ou même le monde entier.

Chaque fois que je pense à cette expérience, je suis un peu fier de moi. Je ne peux pas expliquer pourquoi, mais le processus de mise en œuvre du projet m'a tout simplement apporté un grand plaisir et le prix était un bonus supplémentaire. De plus, j'étais heureux d'avoir pu résoudre pour mes camarades de classe un problème qui ruinait leur vie chaque jour. Un jour, un des étudiants est venu vers moi et m'a dit : « Votre système est très pratique. » J'étais au septième paradis!
Je pense que même sans aucune récompense, je serais fier de mon développement rien que pour cela. C'est peut-être le fait d'aider les autres qui m'a apporté une telle satisfaction... en général, j'aime les projets.

Ce que j'espérais réaliser avec cet article

J'espère qu'en lisant cet article jusqu'à la fin, vous avez été inspiré à faire quelque chose qui profitera à votre communauté ou même à vous-même. Je vous encourage à utiliser vos compétences (la programmation en fait certainement partie, mais il y en a d'autres) pour changer pour le mieux la réalité qui vous entoure. Je peux vous assurer que l’expérience que vous acquerrez au cours du processus ne peut être comparée à rien d’autre.

Cela peut aussi ouvrir des voies auxquelles on ne s’attendait pas – c’est ce qui m’est arrivé. Alors s'il vous plaît, faites ce que vous aimez et laissez votre marque sur le monde ! L’écho d’une seule voix peut ébranler le monde entier, alors croyez en vous.

Voici quelques liens liés au projet :

Source: habr.com

Ajouter un commentaire