🧭 Robô autônomo
O rover da Trilha 1 ganha controle pelo celular, sentidos de posição e um cérebro de controle de verdade. Você liga Wi-Fi e BLE, mede giro e distância com IMU e encoders, domina o PID, roda várias tarefas ao mesmo tempo, registra tudo em gráficos e termina com um seguidor de linha com PID que você ajusta olhando os dados.
Como ler: os três primeiros passos (azul) dão ao robô controle remoto, noção de onde está e a capacidade de chegar a um alvo sem oscilar. Os dois seguintes (ciano) organizam o código e mostram o que acontece por dentro. O último, com brilho, junta tudo no seguidor de linha. Já sabe Wi-Fi? Comece no 2.2.
🏁 O que você monta nesta trilha
O mesmo rover da Trilha 1, agora com encoders nas rodas, IMU e uma barra de sensores de linha embaixo. Pelo caminho ficam prontos: um controle por joystick no navegador do celular, um medidor de inclinação, a posição do robô em x, y e θ, duas rodas que andam na mesma velocidade, um registro de dados em cartão microSD e um painel ao vivo. No fim, o robô segue uma linha preta em curvas fechadas e cruzamentos, contra o cronômetro.
- ✓Código ESP32 completo na API 3.x
- ✓PID testável num motor simulado
- ✓Parada segura quando o sinal cai
- ✓Base direta para micro-ROS na Trilha 4
💡 Antes de começar
Você precisa do rover da 1.6 andando e de saber usar o Serial Monitor. O PID (2.3) e o código sem bloqueio (2.4) rodam no Wokwi; IMU e encoders pedem as peças do kit abaixo.
Mapa da trilha
📱 Controle pelo celular: Wi-Fi e BLE
Joystick no navegador, parada se o sinal cair
🧭 IMU e encoders: saber onde está
Quanto girou, quanto andou, onde está
🎯 Controle PID na prática
Chegar ao alvo e ficar lá
🧵 Várias tarefas ao mesmo tempo
Adeus delay(), olá FreeRTOS
📈 Telemetria e registro de dados
Ver por dentro do robô em movimento
🏁 Projeto: seguidor de linha com PID
Curvas fechadas contra o relógio
Conteúdo detalhado
📱 Controle pelo celular: Wi-Fi e BLE
Wi-Fi em modo estação e ponto de acesso, página com botões, WebSocket sem atraso, BLE com app genérico, watchdog de comando e um joystick no navegador para dirigir o rover.
Os dois jeitos de o ESP32 usar o Wi-Fi: entrar na rede da casa ou criar a própria rede, com um sketch que tenta um e cai no outro.
Todo controle sem fio e toda telemetria começam aqui; o modo certo evita o robô que não conecta na feira.
STA · AP · endereço IP · 2,4 GHz.
A biblioteca WebServer da 3.x servindo uma página com cinco botões que mandam comandos ao robô.
Qualquer celular vira controle, sem instalar app, e o mesmo servidor depois ajusta parâmetros.
Rota · pedido GET · handleClient · fetch.
Um canal que fica aberto entre o navegador e o ESP32, levando comandos curtos nos dois sentidos.
Joystick e telemetria contínua precisam de pouco atraso; HTTP abre e fecha conexão a cada comando.
Latência · canal aberto · mão dupla · biblioteca WebSockets.
Bluetooth de baixo consumo com a biblioteca BLE embutida no pacote esp32: um serviço, uma característica e um app genérico.
Funciona sem rede nenhuma e é o mesmo padrão de controles e sensores sem fio.
Serviço · característica · UUID · advertising.
Senha na rede do robô e watchdog de comando: sem mensagem nova por 300 ms, o robô para sozinho.
Sinal cai; robô que continua no último "frente" bate. Falha segura é regra de todo robô real.
Watchdog · timeout · falha segura · velocidade máxima no robô.
Sketch completo: ponto de acesso, página com joystick, WebSocket, mistura diferencial e watchdog, dirigindo o rover real.
É o modo manual que todo robô autônomo precisa para testes e resgates.
Mistura diferencial · pointer events · string crua · 10 envios por segundo.
🧭 IMU e encoders: saber onde está
Acelerômetro e giroscópio, a MPU-6050 lida direto pelos registradores, o filtro complementar, encoders em quadratura e a odometria em x, y e θ, com os erros que se acumulam.
O chip que sente gravidade e giro em três eixos, e o ponto forte e o fraco de cada sensor.
Girar 90° certinho, sentir rampa e detectar tombo dependem dela.
g · °/s · integrar · deriva · MPU-6050 x ICM-20948.
Quatro fios e um sketch que acorda o sensor e lê 14 bytes de aceleração e giro, sem biblioteca extra.
O mesmo roteiro serve para quase todo sensor I2C que você usar depois.
Registrador · endereço 0x68 · leitura em rajada · conversão de unidade.
Juntar giroscópio (rápido, deriva) e acelerômetro (lento, ruidoso) numa inclinação estável, com três curvas no Serial Plotter.
É a fusão de sensores mais simples e a porta de entrada para o filtro de Kalman.
atan2 · offset do giroscópio · α = 0,98 · dt fixo.
Disco ou ímã que vira pulsos; dois canais em quadratura dão o sentido; interrupção conta sem perder nenhum.
Velocidade real da roda é a entrada do PID e a base da odometria.
Pulsos por volta · quadratura · ISR com IRAM_ATTR · volatile.
Cinco linhas de conta que somam o quanto cada roda andou e transformam isso em posição e direção.
Voltar à base e andar até um ponto exigem saber onde se está; é o que o micro-ROS publica na Trilha 4.
Pose · metros por pulso · distância entre rodas · radiano.
Por que a posição estimada se afasta da real e a calibração em quatro passos que reduz o erro.
Mostra quando a odometria basta e quando o robô precisa de linha, câmera ou LiDAR para se corrigir.
Erro acumulado · erro sistemático · escorregamento · referência externa.
🎯 Controle PID na prática
Por que liga/desliga oscila, o papel de P, I e D, um PID completo testado num motor simulado, sintonia com método, anti-windup e duas rodas na mesma velocidade.
O vaivém de quem só conhece "tudo ou nada" e a ideia de corrigir proporcionalmente ao erro.
É o problema que o PID resolve em carros, drones, impressoras 3D e braços.
Alvo · medida · erro · malha fechada.
Volante proporcional, correção do vento constante e freio antes de passar: as três letras com uma analogia e três curvas.
Com o papel de cada ganho claro, você sintoniza lendo o gráfico, não no chute.
Kp · Ki · Kd · overshoot · erro em regime.
Um PID completo a 100 Hz contra um motor simulado, com ganhos ajustáveis pelo Serial Monitor, rodando no Wokwi.
É a estrutura que você reaproveita no seguidor de linha e em todo controle depois.
Período fixo · micros() · planta simulada · Serial Plotter.
A ordem P → I → D para ajustar na mão e a tabela de Ziegler-Nichols a partir do ganho crítico.
PID mal sintonizado oscila e esquenta motor; com método, poucos testes bastam.
Ku · Tu · um ganho por vez · teste no chão.
As três armadilhas do PID real e as quatro linhas de código que as resolvem.
É a diferença entre o PID que funciona na simulação e o que funciona no robô.
Saturação · anti-windup · derivada da medida · passa-baixa.
Um PI por roda, mesmo alvo em RPM, cada um lendo o próprio encoder: o rover anda reto.
Base estável para o seguidor de linha e para o /cmd_vel do ROS 2.
Um PID por roda · RPM medido · PI basta · zerar a integral ao parar.
🧵 Várias tarefas ao mesmo tempo
Por que delay() trava o robô, tarefas sem bloqueio com millis(), máquina de estados, FreeRTOS com tarefas nos dois núcleos, filas e semáforos e código organizado em arquivos e classes.
O que acontece com sensores, PID e comunicação enquanto o programa está parado num delay().
Robô "cego" por meio segundo bate antes de perceber o obstáculo.
Código bloqueante · tempo de resposta · laço principal.
Cada tarefa com o próprio relógio: ler sensor a cada 20 ms, piscar LED a cada 500 ms, mandar telemetria a cada 100 ms.
É o jeito mais simples de fazer várias coisas "ao mesmo tempo" num só laço.
Tarefa periódica · estouro do millis() · agendador cooperativo.
Estados, eventos e transições desenhados antes do código, com ações de entrada e saída.
Comportamento complexo sem ninho de if; fácil de testar e de mudar.
Estado · evento · transição · enum class.
O sistema de tempo real que já roda dentro do ESP32: criar tarefas com prioridade e escolher o núcleo de cada uma.
O controle dos motores fica em dia mesmo com Wi-Fi e telemetria ocupando o processador.
Tarefa · prioridade · núcleo · vTaskDelayUntil.
Como uma tarefa passa dados para outra com segurança, sem duas mexerem na mesma variável ao mesmo tempo.
Evita os erros mais difíceis de achar: valores corrompidos que aparecem uma vez por hora.
Fila · mutex · semáforo · condição de corrida.
Separar motores, sensores e controle em abas .h/.cpp e classes pequenas dentro do sketch.
O seguidor do 2.6 e o robô da Trilha 3 crescem sem virar um arquivo de mil linhas.
Classe · cabeçalho .h · responsabilidade única · reaproveitamento.
📈 Telemetria e registro de dados
O que medir e com que frequência, gráfico ao vivo no Serial Plotter, log em CSV no cartão microSD, MQTT pela rede, painel no navegador ou no Node-RED/Grafana e análise em Python.
Escolher as variáveis que explicam o comportamento do robô e a taxa certa para cada uma.
Medir tudo afoga o processador; medir pouco não explica a falha.
Taxa de amostragem · carimbo de tempo · variável de estado.
O formato "nome:valor" que a Arduino IDE 2 transforma em curvas, com várias variáveis juntas.
É a ferramenta mais rápida para sintonizar PID e achar ruído.
Rótulo · escala · janela de tempo.
Registrar os dados num arquivo de texto separado por vírgulas, sem cabo, com o robô andando de verdade.
O robô longe do computador também precisa contar o que aconteceu.
SPI · arquivo CSV · flush · cartão FAT32.
O protocolo leve de publicar e assinar mensagens por tópicos, com um broker no PC ou no Raspberry Pi.
Vários robôs e painéis conversam pelo mesmo canal; é a ideia que o ROS 2 amplia.
Broker · tópico · publicar · assinar.
Ver a telemetria em tempo real: página servida pelo próprio ESP32 ou painel montado no Node-RED ou no Grafana.
Mostrar o robô "por dentro" ajuda a depurar e a apresentar o projeto.
Painel · série temporal · WebSocket · indicador.
Abrir o CSV no computador, calcular médias e erros e desenhar o gráfico de antes e depois.
Decidir com números se o ajuste melhorou o robô, não pela impressão.
pandas · DataFrame · matplotlib · comparação antes/depois.
🏁 Projeto: seguidor de linha com PID
Pista e barra de sensores, erro da linha por média ponderada, PID de direção sobre a velocidade base, calibração automática, ajuste por telemetria e desafios contra o cronômetro.
Montar uma pista com fita isolante preta e posicionar a barra de 5 sensores IR na altura certa.
Altura e espaçamento dos sensores decidem metade do desempenho do seguidor.
TCRT5000 / QTR · altura do sensor · contraste da pista.
Transformar cinco leituras num único número: a posição da linha em relação ao centro do robô.
Erro contínuo, e não "esquerda/direita", é o que permite um PID suave.
Média ponderada · posição da linha · linha perdida.
A correção do PID somada a uma roda e subtraída da outra, sobre uma velocidade base.
É a arquitetura de quase todo seguidor de competição.
Velocidade base · correção · saturação por roda.
O robô gira sobre a linha nos primeiros segundos e aprende o mínimo e o máximo de cada sensor.
Luz ambiente e pista mudam de lugar para lugar; calibrar na hora evita refazer o código.
Mínimo e máximo · normalização · EEPROM/Preferences.
Gravar o erro da linha numa volta, mudar um ganho, gravar de novo e comparar os gráficos.
Transforma "parece melhor" em "o erro médio caiu pela metade".
Erro médio · tempo de volta · um ajuste por vez.
Pistas mais difíceis, como reconhecer cruzamento e linha perdida, e cronometrar a volta.
Prepara para competições como a OBR e para o robô com visão da Trilha 3.
Velocidade adaptativa · memória do último erro · volta cronometrada.
📌 Mapa de pinos da trilha
Toda a Trilha 2 usa o mesmo mapa. Ele muda um pouco em relação ao rover da Trilha 1: o motor direito sai dos pinos 33/32/4 e vai para 14/16/17, e o STBY do driver passa a ficar ligado direto no 3V3. Assim sobram pinos do ADC1 para os sensores de linha e os pinos 18/19 para os encoders ou para o microSD.
| Peça | Pino do ESP32 | Módulos |
|---|---|---|
| Motor esquerdo (TB6612FNG) | PWMA 25, AIN1 26, AIN2 27 | 2.1, 2.3, 2.4, 2.6 |
| Motor direito | PWMB 14, BIN1 16, BIN2 17 | 2.1, 2.3, 2.4, 2.6 |
| STBY do driver | 3V3 | todos |
| Encoders | esquerdo 18/19, direito 34/35 | 2.2, 2.3 |
| HC-SR04 | TRIG 13, ECHO 4 (divisor para 3,3 V) | 2.4 |
| microSD | CS 5, SCK 18, MISO 19, MOSI 23 | 2.5, 2.6 |
| Sensores de linha | 36, 39, 34, 35, 32 (só ADC1) | 2.6 |
✗ O que não liga junto
Encoders e microSD disputam os pinos 18 e 19, e o encoder direito usa 34/35, que também são sensores de linha. Por isso cada projeto liga só o que usa: o PID do 2.3 usa encoders sem microSD; o seguidor do 2.6 usa sensores e microSD sem encoders.
🧰 Kit da trilha
Peças a somar ao rover da Trilha 1. Faixa aproximada de R$ 150 a R$ 350 pelo conjunto extra (out/2026, confira antes de comprar: varia por loja, frete e câmbio).
Módulo MPU-6050 (GY-521), o mais barato e documentado. Alternativa com bússola: ICM-20948 (9 eixos), mais caro.
Par de motores N20 com encoder magnético (dois canais) e rodas, ou os motores TT da T1 com disco de encoder e sensor óptico.
Barra de 5 sensores infravermelhos (TCRT5000) ou barra QTR, com saída analógica, para o seguidor do 2.6.
Módulo leitor de cartão microSD (SPI, 3,3 V) e um cartão de 8 a 32 GB formatado em FAT32.
Display OLED SSD1306 (I2C, 0,96") para mostrar estado, ganhos e tempo de volta no próprio robô.
Fita isolante preta de 19 mm sobre cartolina branca, MDF claro ou piso liso.
✓ Vale a pena
Encoders de dois canais (dão o sentido do giro) e rodas de borracha firme, que escorregam menos e deixam a odometria mais confiável.
✗ Não compre para esta trilha
Sensores de linha digitais de um só bit (só dizem "linha sim/não") e módulos de IMU de 5 V sem regulador.