O problema
Quem joga vôlei de praia conhece a cena: sai um ponto bonito, todo mundo comemora, e ninguém estava filmando. Quando alguém lembra de pegar o celular, a jogada já acabou.
Muitas quadras já têm câmera. O que falta é um jeito simples de transformar aquele lance em um vídeo que dá para postar — sem pedir para o dono da quadra procurar o horário no gravador, cortar e mandar pelo WhatsApp.
A ideia: um botão que olha para trás
Um botão fica perto da arquibancada. Qualquer pessoa aperta quando acontece algo que vale guardar. O sistema pega o minuto anterior ao aperto, monta o vídeo no formato vertical e deixa pronto para baixar.
No primeiro desenho, o vídeo pegava 30 segundos antes e 30 depois do aperto, e o jogador escolhia o trecho numa linha do tempo. Funcionava, mas tinha um erro de raciocínio que só ficou claro quando pensei na pessoa usando:
Se a pessoa fez um bom lance e clicou, a jogada já passou.
Ninguém aperta o botão antes do ponto. Então tirei a prévia, a escolha de trecho e os outros formatos. Ficou uma coisa só: apertou, saiu o clipe 9:16 dos últimos 60 segundos. Menos opções, menos telas, menos coisa para dar errado.
Como funciona por dentro
- BotãoUm ESP32 com um botão manda um aviso pelo Wi-Fi da quadra.
- Computador da quadraGrava a câmera sem parar, em trechos de 10 s, e guarda 7 dias.
- ServidorRecebe o aperto e cria a tarefa: “clipe 9:16 do minuto anterior”.
- CelularO jogador lê o QR code, digita o código do dia e baixa o vídeo.
Algumas decisões que valem explicar:
- O botão não precisa saber a hora. O horário do lance é o momento em que o computador da quadra recebe o aviso. Um ESP32 não tem relógio confiável, e assim ele nem precisa ter.
- O servidor nunca entra na rede da quadra. É o computador da quadra que puxa as tarefas e sobe os vídeos. Ninguém precisa abrir porta no roteador nem expor a câmera para a internet.
- Esperar 12 segundos de propósito. A gravação é feita em trechos de 10 segundos, e o trecho em que o aperto caiu ainda está sendo gravado. O sistema espera esse trecho fechar, mais 2 segundos de folga, antes de cortar.
- Vertical sem cortar a quadra. A câmera grava deitado (16:9). Em vez de recortar o meio e perder a jogada, o vídeo inteiro fica centralizado sobre um fundo desfocado da própria imagem.
- Sem internet, nada se perde. Se a internet da quadra cair, os apertos ficam numa fila no computador e sobem quando ela voltar. O vídeo continua guardado por 7 dias.
- Botão público, uso honesto. Apertos repetidos em menos de 3 segundos contam como um só, e o botão só é aceito se mandar a chave certa.
Por baixo: o firmware do botão é C++ no Arduino, o computador da quadra roda Python com ffmpeg, e o servidor é FastAPI com SQLite. Nada exótico — escolhi ferramentas chatas de propósito, para gastar energia no problema e não na tecnologia.
O que já funciona
Até aqui, tudo foi testado no meu notebook, com uma imagem de teste gerada pelo próprio ffmpeg no lugar da câmera:
O site do jogador também já existe: código do dia com teclado numérico, lista de lances com selos de “Pronto”, “Preparando” e “Indisponível”, e a página do lance com o vídeo e o botão Baixar vídeo. Ganhou uma identidade própria, chamada “Areia”, pensada para vôlei de praia e com modo noturno automático.
O firmware do botão compila e ocupa 76% da memória de programa do ESP32. Mas compilar não é o mesmo que funcionar — e isso me leva à parte honesta do post.
O que ainda não foi testado
A bancada, que fecha o MVP
- Gravar o firmware numa placa de verdade e apertar um botão físico.
- Trocar a imagem de teste por uma webcam real.
- Deixar tudo rodando 24 horas sem mexer, com a limpeza dos vídeos antigos funcionando.
- Desligar o servidor no meio e confirmar que nenhum aperto se perde.
- Postar um clipe no Instagram e mandar no WhatsApp para ver se os dois aceitam.
Já apareceu o primeiro tropeço antes mesmo de ligar a placa: o Wi-Fi aqui de casa é 5 GHz, e o ESP32 só conversa em 2,4 GHz. Problema pequeno, mas é exatamente o tipo de coisa que só aparece quando você sai do código e vai para a mesa.
Depois da bancada vêm as perguntas de instalação: qual gravador a quadra usa e se ele entrega o vídeo pela rede, que computador aguenta a codificação (a conversão para vertical com desfoque é a parte mais pesada), uma caixa que resista a bolada e a criança curiosa, e a placa avisando que há gravação. Uso de imagem tem regra, e uma revisão jurídica é obrigatória antes de oferecer isso a qualquer quadra.
O que aprendi até aqui
- Pense na hora do clique. A mudança mais importante do projeto não foi técnica: foi perceber em que momento a pessoa aperta o botão.
- Tirar opções também é construir. Cortar a prévia e a escolha de trecho deixou o sistema mais simples para usar e para manter.
- Teste sem hardware primeiro. Com uma câmera falsa e testes automáticos, deu para resolver quase tudo antes de soldar um fio. Quando a placa chegar à mesa, o que der errado vai ser problema de hardware, não de lógica.
O próximo post deste projeto vai ser a bancada: placa gravada, webcam ligada e os números de verdade. Quer receber quando sair?
Acompanhe a bancada →