Cuando estaba en la escuela primaria en la escuela secundaria (de marzo a diciembre de 2016), me molestó mucho la situación que se desarrolló en la cafetería de nuestra escuela.
Problema uno: esperar demasiado tiempo en la cola¿Qué problema observé? Aquí hay uno:

Muchos estudiantes se acumularon en la distribución y tuvieron que permanecer de pie durante mucho tiempo (cinco a diez minutos). Por supuesto, este es un problema común y un esquema de servicio justo: cuanto más tarde llegue, más tarde será atendido. Entonces podrías entender por qué tienes que esperar.
Problema dos: condiciones desiguales para esperarPero, por supuesto, eso no fue todo; tuve que observar un problema más serio y más. Tan grave que al final decidí tratar de encontrar una salida a la situación. Los estudiantes de secundaria (es decir, todos los que estudian al menos un grado más alto) y los maestros fueron a la distribución sin esperar en la fila. Sí, sí, y usted, como estudiante de primaria, no podía decirles nada. Nuestra escuela tenía una política bastante estricta con respecto a las relaciones entre clases.
Por lo tanto, mis amigos y yo, cuando éramos recién llegados, fuimos al comedor por primera vez, estábamos a punto de conseguir comida, y luego aparecieron los estudiantes o maestros de secundaria y simplemente nos alejaron (algunos que fueron más amables nos permitieron permanecer en nuestro lugar en la fila). Tuvimos que esperar otros quince o veinte minutos, aunque llegamos antes que todos los demás.
Tuvimos especialmente mal almuerzo. Durante el día, absolutamente todos (maestros, estudiantes, personal) se apresuraron al comedor, por lo que nosotros, como estudiantes de secundaria, nunca habíamos tenido una alegría.
Soluciones comunesPero, dado que los recién llegados no tenían otra opción, se nos ocurrieron dos formas de reducir el riesgo de que nos arrojen al final de la línea. El primero es llegar al comedor muy temprano (es decir, literalmente antes de que se sirva la comida). El segundo es matar específicamente el tiempo en una mesa de ping-pong o baloncesto y llegar con un largo retraso (veinte minutos después del comienzo de la cena).
Hasta cierto punto, esto funcionó. Pero, francamente, nadie estaba ansioso por salir corriendo al comedor con todas sus piernas, solo para poder comer, o para comer las sobras sobrantes del resto, porque él estaba entre los últimos. Necesitábamos una solución que nos avisara cuando hay pocas personas en el comedor.
Sería genial si algún adivino nos predice el futuro y nos dice exactamente cuándo ir al comedor para que no tengamos que esperar mucho. El problema era que cada día todo resultaba diferente. No podríamos simplemente analizar los patrones e identificar el mejor momento. Solo teníamos una forma de averiguar cómo van las cosas en el comedor: llegar a pie, y el camino podría ser de varios cientos de metros, dependiendo de dónde se encuentre. Entonces, si vienes, mira la línea, regresa y continúa con el mismo espíritu hasta que se acorte, perderás mucho tiempo. En general, la clase primaria vivía de manera desagradable, y no se podía hacer nada al respecto.
Eureka: la idea de crear un Sistema de Monitoreo de CantinasY de repente, ya en el próximo año académico (2017), me dije: "¿Qué pasa si creamos un sistema que muestre la longitud de la cola en tiempo real (es decir, identifique un atasco de tráfico)?" Si pudiera tener éxito, la imagen sería así: los estudiantes de primaria solo mirarían el teléfono para obtener los últimos datos sobre el nivel actual de carga de trabajo y sacarían conclusiones si tiene sentido ir ahora.
En esencia, este esquema suavizó la desigualdad a través del acceso a la información. Con su ayuda, los jóvenes estudiantes podrían elegir lo que deberían hacer mejor: ir y alinearse (si no es demasiado largo) o pasar tiempo con mayor beneficio, y luego elegir un momento más adecuado. Estaba muy entusiasmado con este pensamiento.
Diseño de un sistema de monitoreo de comedor
En septiembre de 2017, necesitaba presentar un proyecto para un curso de programación orientado a objetos, y declaró este sistema como mi proyecto.
Plan de sistema inicial (septiembre de 2017)Selección de hardware (octubre de 2017)
Interruptor táctil simple con resistencia pull-up. Un circuito con cinco escudos en tres filas para reconocer una línea en tres líneas.Pedí solo cincuenta interruptores de membrana, una mini placa Wemos D1 basada en el ESP8266, así como varias abrazaderas de anillo, a las cuales planeé unir cables esmaltados.
Creación de prototipos y desarrollo (octubre de 2017)Comencé con la placa de prueba: armé un circuito y la probé. Estaba limitado en la cantidad de materiales, así que me limité a un sistema con cinco estribos.
Para el software que escribí en C ++, establecí estos objetivos:
- Trabaje continuamente y envíe datos solo en los períodos en que se sirve comida (desayuno, almuerzo, cena, merienda).
- Reconozca la situación con la cola / atascos en el comedor a tales frecuencias para que los datos puedan usarse en modelos de aprendizaje automático (por ejemplo, 10 Hz).
- Envíe datos al servidor de manera eficiente (el tamaño del paquete debe ser pequeño) y a intervalos cortos.
Para lograrlos, necesitaba hacer lo siguiente:
- Use el módulo RTC (Reloj de tiempo real) para controlar continuamente la hora y determinar la hora en que se sirven las comidas en el comedor.
- Use el método de compresión de datos para registrar el estado del escudo en un carácter. Tratando los datos como un código binario de cinco dígitos, vinculé varios valores a caracteres ASCII, de modo que representaran elementos de datos.
- Use ThingSpeak (herramienta IoT para análisis y gráficos en línea), enviando solicitudes HTTP utilizando el método POST.
Por supuesto, hubo algunos errores. Por ejemplo, no sabía que el operador sizeof () devuelve el valor de 4 para el objeto char *, y no la longitud de la cadena (porque no es una matriz y, en consecuencia, el compilador no calcula la longitud) y me sorprendió mucho por qué mis solicitudes HTTP contienen solo cuatro caracteres de toda la url!
Además, no puse los corchetes en la etapa #define, y esto condujo a resultados inesperados. Bueno, digamos:
#define _A 2 * 5 int a = _A / 3;
Aquí valdría la pena esperar que A fuera igual a 3 (10/3 = 3), pero de hecho se calculó de manera diferente: 2 (2 * 5/3 = 2).
Finalmente, otro error notable con el que me he ocupado es Restablecer en un perro guardián. Con este problema, sufrí durante mucho tiempo. Como resultó más tarde, intenté acceder al registro de bajo nivel en el chip ESP8266 de manera incorrecta (por error, registré un valor NULL para un puntero a una estructura).
El estribo que diseñé y ensamblé. En el momento en que se tomó la foto, ya había sobrevivido cinco semanas pisoteandoHerrajes (estribos)Para que los escudos puedan sobrevivir a las duras condiciones del comedor, establecí los siguientes requisitos para ellos:
- Los escudos deben ser lo suficientemente fuertes como para soportar constantemente el peso humano.
- Los escudos deben ser delgados para no interferir con las personas en la cola.
- El cambio siempre debe funcionar en la ofensiva.
- Los escudos deben ser impermeables. El comedor siempre está húmedo.
Para cumplir con estos requisitos, me decidí por un diseño con una estructura de dos capas: el corte con láser acrílico fue a la base y la cubierta superior, y utilicé material de corcho como capa protectora.
El diseño del escudo que hice en AutoCAD; tamaños - 400 por 400 milímetros.
A la izquierda está el diseño que se puso a trabajar. A la derecha está la opción con una conexión de legoPor cierto, finalmente rechacé el diseño correcto porque con tal sistema de fijación resultó que debería haber 40 centímetros entre los escudos, lo que significa que no podía cubrir la distancia requerida (más de diez metros).


Para conectar todos los interruptores, utilicé cables esmaltados, ¡todos tomaron más de 70 metros! En el centro de cada escudo, coloqué un interruptor de membrana. Dos clips sobresalían de las ranuras laterales hacia el exterior, a la izquierda y a la derecha del interruptor.
Bueno, para impermeabilidad, usé cinta aislante. Mucha cinta aislante.
¡Y todo funcionó!
El período del 5 de noviembre al 12 de diciembre.Foto del sistema: los cinco escudos son visibles aquí. A la izquierda está la electrónica (D1-mini / Bluetooth / RTC)El 5 de noviembre, a las ocho de la mañana (hora del desayuno), el sistema comenzó a recopilar datos actualizados sobre el entorno del comedor. No podía creer lo que veía. Hace unos dos meses, dibujé el esquema general, sentado en casa en pijama, y ahora, por favor, todo el sistema funciona sin problemas sin problemas ... o no.
Errores con el software durante las pruebasPor supuesto, había suficientes errores en el sistema. Aquí están los que recuerdo.
El programa no verificó los puntos de Wi-Fi disponibles al intentar conectar el cliente a la API ThingSpeak. Para corregir el error, agregué una verificación de disponibilidad de Wi-Fi como un paso adicional.
En la función de configuración, llamé constantemente "WiFi.begin" hasta que apareció una conexión. Más tarde, descubrí que el firmware ESP8266 instala la conexión, y la función de inicio solo se usa al configurar Wi-Fi. Corrigí la situación comenzando a llamar a la función solo una vez, durante la configuración.
Descubrí que la interfaz de línea de comando que creé (fue diseñada para establecer la hora, cambiar la configuración de red) no funciona en reposo (es decir, fuera del desayuno, almuerzo, cena y merienda). También vi que cuando no hay registro, el bucle interno se acelera excesivamente y los datos en serie se leen demasiado rápido. Por lo tanto, configuré un retraso para que el sistema espere a que lleguen comandos adicionales cuando se esperan.
Oda al perro guardiánY, y después de eso sobre el problema con el temporizador de vigilancia, lo decidí en la etapa de prueba en las condiciones de "campo". Sin exagerar, solo pensé en esto durante cuatro días. Cada descanso (que dura diez minutos) me apresuraba al comedor, solo para probar la nueva versión del código. Y cuando se abrió la distribución, me senté en el suelo durante una hora, tratando de atrapar un insecto. ¡No pensé en la comida! ¡Gracias por todo lo bueno, temporizador de vigilancia ESP8266!
Cómo traté con WDTUn fragmento de código por el que luchéEncontré un programa, o más bien, una extensión para Arduino, que analiza la estructura de datos del software cuando ocurre Wdt-reset, refiriéndose al archivo ELF del código compilado (correlación entre funciones y punteros). Cuando se hizo esto, resultó que el error se puede solucionar de la siguiente manera:

Que demonios Bueno, ¡quién sabía que corregir errores en un sistema en tiempo real es tan difícil! Sin embargo, eliminé el error, y resultó ser un error tonto. Por inexperiencia, escribí un ciclo while en el que la matriz iba más allá de los límites de la matriz. Uf! (index ++ y ++ index son dos grandes diferencias).
Problemas de hardware bajo pruebaPor supuesto, el equipo, es decir, los estribos, estaba lejos de ser ideal. Como se esperaba, uno de los interruptores se atascó.
El 7 de noviembre, durante el almuerzo, el interruptor del tercer escudo se atascóArriba, hice una captura de pantalla de un gráfico en línea del sitio web ThingSpeak. Como puede ver, algo sucedió alrededor de las 12:25, después de lo cual el escudo número tres salió de servicio. Como resultado, la longitud de la cola se definió como 3 (el valor es 3 * 100), incluso cuando en realidad no alcanzó el tercer escudo. La solución fue que agregué más revestimiento (sí, cinta aislante) para hacer el interruptor más espacioso.
A veces, mi sistema fue literalmente desarraigado cuando un cable se aferró a una puerta. Se llevaron carros a través de esta puerta hasta el comedor y se trajeron paquetes, así que ella llevó el cable detrás de ella, cerrándolo, y lo sacó de la ranura. En tales casos, noté una falla inesperada en la recepción de datos y supuse que el sistema estaba desconectado de la fuente de alimentación.
Difusión del sistema escolar.Como ya se mencionó, utilicé la API ThingSpeak, que visualiza los datos en el sitio en forma de gráficos, lo cual es muy conveniente. En general, de hecho, simplemente lancé el enlace a mi agenda al grupo escolar en Facebook (busqué esta publicación durante media hora y no la encontré, es muy extraño). Pero luego encontré una publicación en mi banda, la comunidad escolar, fechada el 5 de noviembre de 2017:
¡La reacción fue tormentosa!Publiqué estas publicaciones para alimentar el interés en mi proyecto. Sin embargo, incluso solo mirarlos en sí mismo es bastante entretenido. Digamos que es claramente visible aquí que el número de personas saltó bruscamente a las 6:02 y casi cayó a cero a las 6:10.


Arriba, adjunté un par de horarios relacionados con la hora del almuerzo y el té de la tarde. Es interesante notar que la congestión máxima a la hora del almuerzo casi siempre cayó a las 12:25 (la cola alcanzó el quinto escudo). Y para una merienda, una gran congestión de personas generalmente no es característica (la cola tiene un máximo de un escudo de largo).
¿Sabes lo que es gracioso? ¡Este sistema todavía está vivo (https://thingspeak.com/channels/346781)! Ingresé a la cuenta que usé antes y vi esto:
En el gráfico anterior, vi que el 3 de diciembre, la afluencia de personas es significativamente menor. Y no es de extrañar: era domingo. En este día, casi todos van a algún lado, porque en la mayoría de los casos es solo el domingo que puedes salir de la escuela. Está claro que el fin de semana en el comedor no verá un alma viviente.
Cómo recibí para mi proyecto el primer premio del Ministerio de Educación de Corea
Como puede ver, no trabajé en este proyecto porque estaba tratando de ganar algún tipo de premio o reconocimiento. Solo quería aplicar mis habilidades para resolver el problema crónico que encontré en la escuela.
Sin embargo, nuestra nutricionista escolar, la señorita O, con quien me hice muy cercana mientras planificaba y desarrollaba mi proyecto, una vez me preguntó si conocía un concurso de ideas para el comedor. Entonces pensé que era una especie de idea extraña: medir ideas para el comedor. ¡Pero leí el folleto informativo y descubrí que el proyecto debe presentarse antes del 24 de noviembre! Bien bien Rápidamente recordé el concepto, los datos y los gráficos y envié una solicitud.
Cambios en la idea original de la competencia.Por cierto, el sistema que propuse al final era ligeramente diferente del ya implementado. De hecho, adapté mi método original (medir la longitud de la cola en tiempo real) para escuelas coreanas significativamente más grandes. A modo de comparación: en nuestra escuela hay trescientos estudiantes, y en algunos otros ¡tanta gente estudia en una sola clase! Necesitaba entender cómo escalar el sistema.
Por lo tanto, propuse un concepto basado más en el control manual. Hoy en día, las escuelas coreanas ya han introducido el orden de comer para todas las clases, que se cumple estrictamente, por lo que construí otro marco del tipo "señal-respuesta". Se supuso que cuando el grupo que visita el comedor frente a usted alcanza un cierto límite en la longitud de la cola (es decir, la cola se acorta), le enviarán una señal manualmente usando el botón o el interruptor en la pared. La señal se transmitirá a la pantalla del televisor o mediante bombillas LED.
Realmente quería resolver el problema que surgió en todas las escuelas del país. Me volví aún más fuerte en mi intención cuando escuché de la señorita O una historia. Te contaré ahora. Resulta que en algunas escuelas grandes la línea va más allá de la cafetería, hacia la calle de veinte a treinta metros, incluso en invierno, porque nadie puede construir el proceso adecuadamente. Y a veces sucede que durante unos minutos no aparece nadie en el comedor, y esto también es malo. En las escuelas con una gran cantidad de alumnos, el personal apenas logra servir a todos, incluso si no desaparece ni un minuto del tiempo asignado para la comida. Por lo tanto, aquellos que se acercan a la distribución al final (generalmente son estudiantes de primaria) simplemente no tienen suficiente tiempo para comer.
Entonces, a pesar de que tuve que enviar mi solicitud a toda prisa, seguí considerando cuidadosamente cómo adaptarla para un uso más amplio.
¡El mensaje de que gané el primer premio!En resumen, me invitaron a presentar mi proyecto a los funcionarios del gobierno. ¡Así que forcé todos mis talentos en el campo de Power Point, vine y lo presenté!
Inicio de la presentación (a la izquierda - Ministro)Fue una experiencia interesante: se me ocurrió algo para el problema de Stolov y de alguna manera terminé en los ganadores de la competencia. Incluso parado en el escenario, seguía pensando: "Hmm, ¿qué estoy haciendo aquí?" Pero en general, este proyecto me trajo un gran beneficio: aprendí mucho sobre el desarrollo de sistemas integrados y la implementación de proyectos en la vida real. Bueno, obtuve el premio, por supuesto.
Conclusión
Aquí hay algo de ironía: no importa cuánto participé en concursos y ferias científicas, en las que me registré a propósito, no salió nada bueno. Y aquí la oportunidad me acaba de encontrar y dio buenos resultados.
Me hizo pensar en los motivos que me impulsan a emprender proyectos. ¿Por qué estoy empezando a trabajar para "ganar" o resolver un problema que realmente existe en el mundo que nos rodea? Si el segundo motivo se aplica en su caso, le insto a que no abandone el proyecto. Con este enfoque de negocios, puede encontrar oportunidades inesperadas en el camino y no sentirá la presión de la necesidad de ganar: su principal motivador será la dedicación a su trabajo.
Y lo más importante: si logra implementar una solución decente, puede probarla de inmediato en el mundo real. En mi caso, la escuela se convirtió en la plataforma, pero la experiencia se acumula con el tiempo, y quién sabe, tal vez todo su país o incluso el mundo entero usarán su aplicación.
Cada vez, recordando esta experiencia, incluso me siento orgulloso de mí mismo. No puedo explicar por qué, pero el proceso de implementación del proyecto simplemente me dio un gran placer, y el premio fue un bono adicional. Además, me complació poder resolver para mis compañeros un problema que arruinaba sus vidas todos los días. Una vez, uno de los estudiantes se me acercó y me dijo: "Es muy conveniente con su sistema". ¡Estaba en el séptimo cielo!
Creo que incluso sin ningún premio estaría orgulloso de este desarrollo solo por esto. Tal vez esta ayuda a otros me trajo tanta satisfacción ... en general, me encantan los proyectos.
Lo que esperaba lograr con este artículoEspero que después de leer mi artículo hasta el final, se sienta inspirado a hacer algo que beneficie a su comunidad o incluso solo a usted. Le insto a que use sus habilidades (la programación, por supuesto, se aplica a ellas, pero hay otras) para cambiar la realidad circundante para mejor. Les puedo asegurar que la experiencia que obtendrán en el proceso no se puede comparar con nada.
También puede abrir ante ti caminos que no esperabas en absoluto: me pasó a mí. Así que te pregunto, haz lo que quieras y deja tu huella en el mundo. Los ecos de una sola voz pueden conmocionar al mundo entero, así que cree en ti mismo.
Aquí hay algunos enlaces relacionados con el proyecto: