A história de um estudante coreano que recebeu um prêmio do ministério por um sistema de monitoramento de filas

Quando eu estava no primeiro ano do ensino médio (de março a dezembro de 2016), fiquei muito irritado com a situação que se desenvolveu no refeitório da nossa escola.

Problema um: esperar muito tempo na fila

Que problema observei? Assim:

A história de um estudante coreano que recebeu um prêmio do ministério por um sistema de monitoramento de filas

Muitos alunos se reuniram na área de distribuição e tiveram que ficar muito tempo em pé (cinco a dez minutos). Claro que este é um problema comum e um esquema de atendimento justo: quanto mais tarde você chegar, mais tarde será atendido. Então você poderia entender por que você tem que esperar.

Problema dois: condições desiguais para quem espera

Mas, claro, isso não é tudo; também tive que observar outro problema, mais sério. Tão sério que finalmente decidi tentar encontrar uma saída para a situação. Alunos do ensino médio (ou seja, todos que estudam pelo menos uma série superior) e professores foram para a distribuição sem esperar na fila. Sim, sim, e você, como estudante do ensino fundamental, não poderia contar nada a eles. Nossa escola tinha uma política bastante rígida em relação ao relacionamento entre as turmas.

Portanto, meus amigos e eu, quando éramos novatos, chegamos primeiro ao refeitório, íamos pegar comida - e então apareceram alunos do ensino médio ou professores e simplesmente nos afastaram (alguns, que eram mais gentis, nos deixaram ficar em nosso lugar na fila). Tivemos que esperar mais quinze a vinte minutos, embora tenhamos chegado mais cedo do que todos os outros.

Tivemos um momento particularmente ruim na hora do almoço. Durante o dia, absolutamente todo mundo corria para o refeitório (professores, alunos, funcionários), então para nós, alunos do ensino fundamental, o almoço nunca foi uma alegria.

Soluções comuns para o problema

Mas como os recém-chegados não tinham escolha, arranjámos duas formas de reduzir o risco de serem atirados para o fim da fila. A primeira é chegar bem cedo à sala de jantar (ou seja, literalmente antes mesmo de a comida começar a ser servida). A segunda é matar deliberadamente o tempo jogando pingue-pongue ou basquete e chegar muito tarde (cerca de vinte minutos após o início do almoço).

Até certo ponto funcionou. Mas, para ser sincero, ninguém tinha vontade de correr o mais rápido possível para a sala de jantar só para poder comer, ou para acabar com as sobras frias depois dos outros, porque estavam entre os últimos. Precisávamos de uma solução que nos avisasse quando o refeitório não estivesse lotado.

Seria ótimo se alguma cartomante previsse o futuro para nós e nos dissesse exatamente quando ir para a sala de jantar, para que não tivéssemos que esperar muito. O problema é que a cada dia tudo acontecia de maneira diferente. Não podíamos simplesmente analisar padrões e identificar o ponto ideal. Só tínhamos uma maneira de saber como estavam as coisas na sala de jantar - chegar lá a pé, e o caminho poderia ter várias centenas de metros, dependendo de onde você estivesse. Então se você vier, olhar a fila, voltar e continuar com o mesmo espírito até ficar curta, você vai perder muito tempo. Em geral, a vida era nojenta para a classe primária e nada podia ser feito a respeito.

Eureka – a ideia de criar um Sistema de Monitoramento de Cantinas

E de repente, já no próximo ano letivo (2017), pensei comigo mesmo: “E se fizermos um sistema que mostre a extensão da fila em tempo real (ou seja, detecte um engarrafamento)?” Se eu tivesse conseguido, a imagem teria sido esta: os alunos do ensino fundamental simplesmente olhariam para seus telefones para obter dados atualizados sobre o nível atual de carga de trabalho e tirariam conclusões sobre se faria sentido para eles irem agora. .

Essencialmente, este esquema suavizou a desigualdade através do acesso à informação. Com a sua ajuda, os alunos do ensino básico puderam escolher por si próprios o que era melhor para eles fazerem - entrar na fila (se não fosse muito longa) ou passar o tempo de forma mais útil, e depois escolher um momento mais apropriado. Fiquei muito animado com esse pensamento.

Projeto de um Sistema de Monitoramento de Cantina

Em setembro de 2017, tive que apresentar um projeto para um curso de programação orientada a objetos e apresentei esse sistema como meu projeto.

A história de um estudante coreano que recebeu um prêmio do ministério por um sistema de monitoramento de filas

Plano inicial do sistema (setembro de 2017)

Seleção de equipamentos (outubro de 2017)

A história de um estudante coreano que recebeu um prêmio do ministério por um sistema de monitoramento de filas

Um interruptor tátil simples com um resistor pull-up. Esquema com cinco escudos em três linhas para reconhecimento da fila em três linhas

Encomendei apenas cinquenta interruptores de membrana, uma miniplaca Wemos D1 baseada em ESP8266 e alguns grampos de anel nos quais planejei prender os fios esmaltados.

Prototipagem e desenvolvimento (outubro de 2017)

Comecei com uma placa de ensaio - montei um circuito nela e testei. Eu estava limitado na quantidade de materiais, então me limitei a um sistema com cinco estribos.

Para o software que escrevi em C++, defini os seguintes objetivos:

  1. Trabalhe continuamente e envie dados apenas nos períodos de serviço de alimentação (café da manhã, almoço, jantar, lanche da tarde).
  2. Reconheça a situação da fila/tráfego no refeitório em frequências tais que os dados possam ser usados ​​em modelos de aprendizado de máquina (digamos, 10 Hz).
  3. Envie dados ao servidor de maneira eficiente (o tamanho do pacote deve ser pequeno) e em intervalos curtos.

Para alcançá-los eu precisava fazer o seguinte:

  1. Utilize o módulo RTC (Real Time Clock) para monitorar continuamente a hora e determinar quando a comida é servida no refeitório.
  2. Use um método de compactação de dados para registrar o estado da blindagem em um caractere. Tratando os dados como um código binário de cinco bits, mapeei os vários valores para caracteres ASCII para que representassem os elementos dos dados.
  3. Use o ThingSpeak (uma ferramenta IoT para análises e gráficos on-line) enviando solicitações HTTP usando o método POST.

Claro, houve alguns bugs. Por exemplo, eu não sabia que o operador sizeof() retorna o valor 4 para um objeto char *, e não o comprimento da string (porque não é um array e, portanto, o compilador não calcula o comprimento) e fiquei muito surpreso porque minhas solicitações HTTP continham apenas quatro caracteres de todos os URLs!

Também não incluí parênteses na etapa #define, o que levou a resultados inesperados. Bem, digamos:

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

Aqui seria de se esperar que A fosse igual a 3 (10/3 = 3), mas na verdade foi calculado de forma diferente: 2 (2 * 5/3 = 2).

Finalmente, outro bug digno de nota com o qual resolvi foi o Reset do cronômetro de watchdog. Lutei com esse problema por muito tempo. Como descobri mais tarde, eu estava tentando acessar o registro de baixo nível no chip ESP8266 de maneira errada (por engano, inseri um valor NULL para um ponteiro para uma estrutura).

A história de um estudante coreano que recebeu um prêmio do ministério por um sistema de monitoramento de filas

Um protetor para os pés que projetei e construí. No momento em que a foto foi tirada, ele já havia sobrevivido a cinco semanas de atropelamento

Hardware (pés)

Para garantir que os escudos pudessem sobreviver às duras condições da cantina, estabeleci os seguintes requisitos para eles:

  • Os escudos devem ser fortes o suficiente para suportar o peso humano em todos os momentos.
  • Os escudos devem ser finos para não atrapalhar as pessoas na fila.
  • O interruptor deve ser ativado quando pisado.
  • Os escudos devem ser à prova d'água. A sala de jantar está sempre úmida.

Para atender a esses requisitos, optei por um design de duas camadas - acrílico cortado a laser para a base e tampa superior e cortiça como camada protetora.

Fiz o layout do escudo no AutoCAD; dimensões – 400 por 400 milímetros.

A história de um estudante coreano que recebeu um prêmio do ministério por um sistema de monitoramento de filas

À esquerda está o design que entrou em produção. À direita está uma opção com conexão tipo Lego

Aliás, acabei abandonando o desenho certo porque com esse sistema de fixação descobriu-se que deveria haver 40 centímetros entre os escudos, o que significa que não consegui percorrer a distância necessária (mais de dez metros).

A história de um estudante coreano que recebeu um prêmio do ministério por um sistema de monitoramento de filas

A história de um estudante coreano que recebeu um prêmio do ministério por um sistema de monitoramento de filas

Para conectar todos os interruptores usei fios esmaltados - no total foram necessários mais de 70 metros! Coloquei um interruptor de membrana no centro de cada escudo. Dois clipes se projetavam dos slots laterais - à esquerda e à direita do switch.

Bom, para impermeabilização usei fita isolante. Muita fita isolante.

E tudo funcionou!

Período de cinco de novembro a doze de dezembro

A história de um estudante coreano que recebeu um prêmio do ministério por um sistema de monitoramento de filas

Foto do sistema - todos os cinco escudos são visíveis aqui. À esquerda está a eletrônica (D1-mini/Bluetooth/RTC)

No dia XNUMX de novembro, às oito da manhã (horário do café da manhã), o sistema começou a coletar dados atuais sobre a situação do refeitório. Eu não conseguia acreditar no que via. Há apenas dois meses eu estava esboçando o esquema geral, sentado em casa de pijama, e aqui estamos, todo o sistema funcionando sem problemas... ou não.

Bugs de software durante o teste

Claro, havia muitos bugs no sistema. Aqui estão os que me lembro.

O programa não verificou pontos de Wi-Fi disponíveis ao tentar conectar o cliente à API ThingSpeak. Para corrigir o erro, adicionei uma etapa adicional para verificar a disponibilidade do Wi-Fi.

Na função de configuração, chamei repetidamente “WiFi.begin” até que uma conexão aparecesse. Mais tarde descobri que a conexão é estabelecida pelo firmware ESP8266, e a função de início só é usada na configuração do Wi-Fi. Corrigi a situação chamando a função apenas uma vez, durante a configuração.

Descobri que a interface de linha de comando que criei (destinada a acertar a hora, alterar as configurações de rede) não funciona em repouso (ou seja, fora do café da manhã, almoço, jantar e chá da tarde). Também vi que quando não ocorre nenhum registro, o loop interno acelera excessivamente e os dados seriais são lidos muito rapidamente. Portanto, defino um atraso para que o sistema aguarde a chegada de comandos adicionais quando esperados.

Ode ao cão de guarda

Ah, e mais uma coisa sobre esse problema com o cronômetro de vigilância - resolvi-o precisamente na fase de testes em condições de “campo”. Sem exagero, foi só nisso que pensei durante quatro dias. A cada intervalo (com duração de dez minutos) eu corria para o refeitório só para testar a nova versão do código. E quando a distribuição abriu, fiquei sentado no chão por uma hora, tentando pegar o bug. Nem pensei em comida! Obrigado por todas as coisas boas, ESP8266 Watchdog!

Como descobri o WDT

A história de um estudante coreano que recebeu um prêmio do ministério por um sistema de monitoramento de filas

Trecho de código com o qual eu estava lutando

Encontrei um programa, ou melhor, uma extensão para Arduino, que analisa a estrutura de dados do software quando ocorre um Wdt-reset, acessando o arquivo ELF do código compilado (correlações entre funções e ponteiros). Feito isso, descobriu-se que o erro pode ser eliminado da seguinte forma:

A história de um estudante coreano que recebeu um prêmio do ministério por um sistema de monitoramento de filas

Caramba! Bem, quem diria que consertar bugs em um sistema em tempo real seria tão difícil! No entanto, removi o bug e acabou sendo um bug estúpido. Devido à minha inexperiência, escrevi um loop while no qual o array ultrapassou os limites. Eca! (index++ e ++index são duas grandes diferenças).

A história de um estudante coreano que recebeu um prêmio do ministério por um sistema de monitoramento de filas

Problemas com hardware durante o teste

É claro que o equipamento, ou seja, as proteções para os pés, estava longe do ideal. Como você poderia esperar, um dos interruptores está travado.

A história de um estudante coreano que recebeu um prêmio do ministério por um sistema de monitoramento de filas

No dia XNUMX de novembro, durante o almoço, o interruptor do terceiro painel travou

Acima forneci uma captura de tela de um gráfico online do site ThingSpeak. Como você pode ver, algo aconteceu por volta das 12h25, após o qual o escudo número três falhou. Como resultado, o comprimento da fila foi determinado como 3 (o valor é 3 * 100), mesmo quando na verdade não atingiu a terceira blindagem. A solução foi adicionar mais preenchimento (sim, fita adesiva) para dar mais espaço ao switch.

Às vezes, meu sistema era literalmente arrancado quando o fio ficava preso na porta. Carrinhos e pacotes eram transportados por essa porta para a sala de jantar, de modo que ela carregasse o fio junto, fechando-o e puxando-o para fora da tomada. Nesses casos, notei uma falha inesperada no fluxo de dados e imaginei que o sistema estava desconectado da fonte de alimentação.

Divulgação de informações sobre o sistema em toda a escola

Como já mencionei, utilizei a API ThingSpeak, que visualiza os dados do site em forma de gráficos, o que é muito prático. Em geral, basicamente postei um link para minha agenda no grupo da escola no Facebook (procurei esse post por meia hora e não consegui encontrar - muito estranho). Mas encontrei uma postagem na minha Band, uma comunidade escolar, datada de 2017 de novembro de XNUMX:

A história de um estudante coreano que recebeu um prêmio do ministério por um sistema de monitoramento de filas

A história de um estudante coreano que recebeu um prêmio do ministério por um sistema de monitoramento de filas

A reação foi selvagem!

Publiquei essas postagens para despertar o interesse em meu projeto. No entanto, apenas olhar para eles já é bastante divertido. Digamos que você possa ver claramente aqui que o número de pessoas aumentou acentuadamente às 6h02 e praticamente caiu para zero às 6h10.

A história de um estudante coreano que recebeu um prêmio do ministério por um sistema de monitoramento de filas A história de um estudante coreano que recebeu um prêmio do ministério por um sistema de monitoramento de filas

Acima, anexei alguns gráficos relacionados ao almoço e ao chá da tarde. É interessante notar que o pico de carga horária no horário do almoço ocorria quase sempre às 12h25 (a fila chegava à quinta blindagem). E para o lanche da tarde geralmente não é característico ter muita gente (a fila tem no máximo uma prancha).

Você sabe o que é engraçado? Este sistema ainda está vivo (https://thingspeak.com/channels/346781)! Entrei na conta que usei antes e vi isto:

A história de um estudante coreano que recebeu um prêmio do ministério por um sistema de monitoramento de filas

No gráfico acima, vi que no dia três de dezembro o fluxo de pessoas foi significativamente menor. E não é de admirar - era domingo. Neste dia quase todo mundo vai a algum lugar, pois na maioria dos casos só no domingo é possível sair da escola. É claro que você não verá vivalma no refeitório no fim de semana.

Como recebi o primeiro prêmio do Ministério da Educação Coreano pelo meu projeto

Como você pode ver, não trabalhei neste projeto porque estava tentando ganhar algum tipo de prêmio ou reconhecimento. Eu só queria usar minhas habilidades para resolver um problema crônico que enfrentava na escola.

Porém, a nossa nutricionista escolar, Miss O, de quem me tornei muito próxima no planeamento e desenvolvimento do meu projeto, um dia perguntou-me se eu sabia da existência de um concurso de ideias para cafetarias. Então pensei que era uma ideia estranha comparar ideias para a sala de jantar. Mas li o folheto informativo e fiquei sabendo que o projeto deve ser entregue até o dia 24 de novembro! Bem bem. Finalizei rapidamente o conceito, os dados e os gráficos e enviei a inscrição.

Mudanças na ideia original do concurso

A propósito, o sistema que acabei por propor era ligeiramente diferente daquele já implementado. Essencialmente, adaptei meu método original (medindo o comprimento da fila em tempo real) para escolas coreanas muito maiores. Para efeito de comparação: na nossa escola tem trezentos alunos, e em algumas outras tem tanta gente em uma só turma! Eu precisava descobrir como dimensionar o sistema.

Portanto, propus um conceito mais baseado no controle “manual”. Hoje em dia, as escolas coreanas já introduziram um plano de alimentação para todas as aulas, que é rigorosamente respeitado, por isso construí uma estrutura diferente do tipo “sinal-resposta”. A ideia aqui era que quando o grupo que visitava o refeitório à sua frente atingisse um determinado limite no comprimento da fila (ou seja, a fila ficasse curta), eles enviassem manualmente um sinal para você usando um botão ou interruptor na parede . O sinal será transmitido para a tela da TV ou através de lâmpadas LED.

Eu só queria muito resolver um problema que surgia em todas as escolas do país. Fiquei ainda mais fortalecido em minha intenção quando ouvi uma história da senhorita O - vou contar agora. Acontece que em algumas escolas grandes a fila se estende além do refeitório, chegando à rua por vinte a trinta metros, mesmo no inverno, porque ninguém consegue organizar o processo adequadamente. E às vezes acontece que durante vários minutos ninguém aparece na sala de jantar - e isso também é ruim. Nas escolas com grande número de alunos, os funcionários mal têm tempo para servir a todos, mesmo que não seja desperdiçado um único minuto de refeição. Portanto, aqueles que chegam por último à distribuição (geralmente alunos do ensino fundamental) simplesmente não têm tempo para comer.

Assim, embora tivesse de apresentar a minha candidatura às pressas, pensei muito cuidadosamente sobre como poderia adaptá-la para uma utilização mais ampla.

Mensagem que ganhei o primeiro prêmio!

Para encurtar a história, fui convidado a apresentar meu projeto a autoridades governamentais. Então coloquei todos os meus talentos em Power Point para trabalhar e vim apresentar!

A história de um estudante coreano que recebeu um prêmio do ministério por um sistema de monitoramento de filas

Início da apresentação (extrema esquerda – ministro)

Foi uma experiência interessante - acabei de inventar algo para o problema do refeitório e de alguma forma acabei entre os vencedores do concurso. Mesmo estando no palco, fiquei pensando: “Hmm, o que estou fazendo aqui?” Mas no geral esse projeto me trouxe grandes benefícios - aprendi muito sobre o desenvolvimento de sistemas embarcados e a implementação de projetos na vida real. Bem, recebi um prêmio, é claro.

Conclusão

Há alguma ironia aqui: por mais que eu participasse de todos os tipos de competições e feiras de ciências nas quais me inscrevi propositalmente, nada de bom resultou disso. E então a oportunidade me encontrou e me deu bons resultados.

Isso me fez pensar nos motivos que me motivam a assumir projetos. Por que começo a trabalhar - para “ganhar” ou para resolver um problema real no mundo ao meu redor? Se o segundo motivo estiver em ação no seu caso, recomendo fortemente que você não abandone o projeto. Com essa abordagem de negócios, você poderá encontrar oportunidades inesperadas ao longo do caminho e não sentirá a pressão da necessidade de vencer - seu principal motivador será a paixão pelo seu negócio.

E o mais importante: se você conseguir implementar uma solução decente, poderá experimentá-la imediatamente no mundo real. No meu caso, a plataforma era uma escola, mas com o tempo a experiência se acumula, e quem sabe - talvez seu aplicativo seja utilizado por todo o país ou até mesmo pelo mundo inteiro.

Cada vez que penso nessa experiência, fico orgulhoso de mim mesmo. Não sei explicar porquê, mas o processo de implementação do projecto trouxe-me simplesmente um grande prazer e o prémio foi um bónus adicional. Além disso, fiquei satisfeito por ter conseguido resolver para meus colegas um problema que arruinava suas vidas todos os dias. Um dia, um dos alunos veio até mim e disse: “Seu sistema é muito prático”. Eu estava no sétimo céu!
Acho que mesmo sem nenhum prêmio eu ficaria orgulhoso do meu desenvolvimento apenas por isso. Talvez tenha sido ajudar os outros que me trouxe tanta satisfação... em geral, adoro projetos.

O que eu esperava alcançar com este artigo

Espero que, ao ler este artigo até o fim, você tenha se inspirado a fazer algo que beneficiará sua comunidade ou até mesmo a si mesmo. Encorajo você a usar suas habilidades (a programação é certamente uma delas, mas existem outras) para mudar para melhor a realidade ao seu redor. Posso garantir que a experiência que você ganhará no processo não pode ser comparada a mais nada.

Também pode abrir caminhos que você não esperava – foi o que aconteceu comigo. Então, por favor, faça o que você ama e deixe sua marca no mundo! O eco de uma única voz pode abalar o mundo inteiro, então acredite em você.

Aqui estão alguns links relacionados ao projeto:

Fonte: habr.com

Adicionar um comentário