Manual de montagem do robô de resgate
Da caixa de peças ao primeiro movimento. Escolha a versão abaixo: o manual inteiro se ajusta a ela. Marque cada passo ao concluir; o progresso fica salvo neste navegador.
Professor: há um plano de aulas em 14 encontros que acompanha este manual.
01 Materiais e custo
As duas versões usam o mesmo ESP32, o mesmo código e o mesmo método de TinyML. A diferença está nos sensores, nos motores e na ponte H.
O que muda entre as versões
| Função | Econômica | Completa |
|---|---|---|
| Seguir linha | 6× TCRT5000 avulsos | Pololu QTR-HD-06A |
| Cor (verde, prata, vermelho) | 2× LED RGB + LDR (caseiro) | 2× TCS34725 + multiplexador TCA9548A |
| Distância | HC-SR04 (ultrassom) | VL53L0X (laser) |
| Ponte H | DRV8833 ou L9110S | TB6612FNG |
| Motores | Motor TT amarelo + encoder óptico LM393 | N20 com encoder magnético |
| Servos | 1 (garra) | 2 (garra e braço) |
| Controlador, IMU, regulador | Iguais: ESP32 DevKit V1, MPU6050, buck 5 V | |
Por que a versão barata funciona? Sensores caseiros são mais ruidosos e cada robô fica um pouco diferente do outro. Por isso o TinyML é útil aqui: o modelo é treinado com os dados daquele robô e aprende o jeito dele, sem limiares fixos.
Lista de compras EconômicaCompleta
Preços aproximados em reais, de varejo online no Brasil (out/2026). Variam muito por região e fornecedor; comprar em lote para a turma costuma sair bem mais barato.
| Qtd | Item | Observação | R$ |
|---|---|---|---|
| 1 | ESP32 DevKit V1 (WROOM-32, 30 pinos) | Reaproveitável em outros projetos | 35 |
| 1 | Kit chassi 2WD (2 motores TT, 2 rodas 65 mm, roda boba, discos de encoder, parafusos) | O kit mais comum de “carrinho Arduino” | 45 |
| 2 | Sensor de velocidade LM393 (encoder óptico de garfo) | Lê o disco de 20 furos do kit | 10 |
| 1 | Ponte H DRV8833 ou L9110S | Qualquer uma das duas serve | 10 |
| 6 | Sensor óptico TCRT5000 (componente avulso, não o módulo) | + 6 resistores de 220 Ω e 6 de 10 kΩ | 12 |
| 2 | LED RGB 5 mm anodo comum, difuso | Um de cada lado | 3 |
| 2 | LDR 5 mm (GL5528) | + 2 resistores de 10 kΩ | 2 |
| 3 | Transistor BC547 (NPN) | + 3 resistores de 1 kΩ, 2 de 220 Ω, 4 de 120 Ω | 3 |
| 1 | Sensor ultrassônico HC-SR04 | + resistores de 1 kΩ e 2 kΩ (divisor do eco) | 8 |
| 1 | IMU MPU6050 (módulo GY-521) | Rampa e giros | 15 |
| 1 | Servo SG90 | Garra | 12 |
| 1 | Regulador step-down (buck) mini MP1584 | Ajustado para 5,0 V | 5 |
| 2 | Bateria 18650 + suporte 2S + placa de proteção (BMS) 2S | Veja a seção de segurança | 35 |
| — | Chave liga/desliga, placa perfurada, barras de pinos, fios, capacitor 470 µF, termorretrátil | 15 | |
| Total estimado | ~210 |
| Qtd | Item | Observação | R$ |
|---|---|---|---|
| 1 | ESP32 DevKit V1 (WROOM-32, 30 pinos) | 35 | |
| 1 | Array analógico de 6 sensores Pololu QTR-HD-06A | Precisa ser a versão analógica (“A”) | 120 |
| 2 | Sensor de cor TCS34725 (módulo com LED branco) | Mesmo endereço I2C: por isso o multiplexador | 70 |
| 1 | Multiplexador I2C TCA9548A | Endereço 0x70 (A0–A2 em GND) | 20 |
| 1 | Sensor de distância VL53L0X | Módulo com regulador | 25 |
| 1 | IMU MPU6050 (módulo GY-521) | 15 | |
| 1 | Ponte H TB6612FNG | 1,2 A contínuos por canal | 20 |
| 2 | Motor N20 6 V com encoder magnético (1:50 a 1:100) | 110 | |
| 2 | Rodas para eixo D de 3 mm + roda boba de metal | 40 | |
| 2 | Servo MG90S | Garra e braço | 50 |
| 1 | Regulador step-down 5 V, 3 A | 10 | |
| 1 | Bateria 2S (18650 ou LiPo) com proteção | 50 | |
| — | Chassi, parafusos, espaçadores, placa, fios, chave, fusível, capacitor | 40 | |
| Total estimado | ~600 |
Ferramentas
Essenciais (uma por bancada basta)
- Ferro de solda e estanho
- Multímetro (o mais simples já serve)
- Alicate de corte e desencapador
- Chaves Phillips pequenas
Úteis
- Termorretrátil (ou fita isolante)
- Régua ou paquímetro
- Pista de treino: papel branco, fita isolante preta e fita verde (ou papel verde)
- Um computador com Python para treinar o TinyML
02 Segurança
Baterias de lítio podem pegar fogo se forem curto-circuitadas, furadas ou descarregadas demais. Use sempre placa de proteção (BMS), carregador próprio para lítio e nunca carregue sem um adulto por perto.
Baterias 18650 reaproveitadas (de baterias velhas de notebook) são uma boa economia, mas só com o professor: descarte qualquer célula estufada, amassada, que esquente ao carregar ou que esteja abaixo de 2,5 V. Use duas células de mesma origem e mesma tensão.
Nunca ligue a bateria e o USB ao mesmo tempo antes de conferir as ligações do regulador 5 V. Um erro ali pode queimar o ESP32 e a porta USB do computador.
Os pinos do ESP32 trabalham em 3,3 V e não toleram 5 V. Todo sinal que vem de um componente alimentado em 5 V (como o eco do HC-SR04) precisa passar por um divisor de tensão.
03 Chassi e motores
Tração diferencial: duas rodas motorizadas e uma roda boba.
Solde os fios nos motores TT
Solde dois fios em cada motor antes de montar (depois fica difícil). Teste cada motor encostando os fios na bateria por um instante.
Coloque os discos de encoder
O motor TT tem eixo dos dois lados: encaixe a roda de um lado e o disco de 20 furos do outro.
Fixe os motores no chassi
Use as peças em “T” do kit. Os dois eixos precisam ficar alinhados: desalinhamento faz o robô puxar para um lado.
Monte os sensores LM393 no garfo do disco
O disco deve passar no meio do garfo sem raspar. Prenda com parafuso ou cola quente, sem forçar o disco.
Monte as rodas e a roda boba
O chassi deve ficar nivelado; se a roda boba ficar mais alta ou mais baixa, compense com espaçadores ou porcas.
Reserve os espaços
- Bateria baixa e centralizada (ajuda na rampa).
- ESP32 com acesso ao USB e ao botão BOOT.
- Frente livre para o HC-SR04 e a garra.
- Parte de baixo da frente livre para os sensores de linha e de cor.
Monte a garra
Centralize o servo (90°) antes de prender o braço da garra. Palitos de picolé, tampas e arame funcionam bem.
Solde os fios nos motores antes de prendê-los
Use fio flexível e termorretrátil. Nos motores com encoder, confira a ordem dos 6 fios: M1, M2 (motor), VCC, GND, A, B (encoder). Teste cada motor com 3 V antes de montar.
Fixe os motores no chassi
Os dois eixos precisam ficar alinhados e paralelos. Meça a distância entre as rodas; você vai usá-la para conferir os giros.
Monte as rodas e a roda boba
O chassi deve ficar nivelado. Se a roda boba for mais alta que as rodas, o array de linha fica torto; compense com espaçadores.
Reserve os espaços
- Bateria baixa e centralizada.
- ESP32 com acesso ao USB e ao botão BOOT.
- Chave liga/desliga acessível.
- Frente livre para a garra e o sensor de distância.
Monte a garra e o braço
Centralize os servos antes de prender os braços (o firmware inicia em garra 90° e braço 0°).
Confira o tamanho máximo do robô no regulamento vigente da OBR antes de cortar o chassi.
Sem kit? Veja alternativas de chassi em Como baratear mais. Confira o tamanho máximo do robô no regulamento vigente da OBR.
04 Posição dos sensores
A posição dos sensores em relação às rodas muda o comportamento do robô. As medidas abaixo são um bom ponto de partida.
| Cota | O que é | Sugestão | Por quê |
|---|---|---|---|
| A | Sensores de linha até o eixo das rodas | 60 a 80 mm | Mais longe antecipa as curvas, mas dificulta curvas de 90° |
| B | Sensores de cor até o eixo das rodas | Meça e anote | Coloque esse valor em GREEN_TO_AXLE_MM no config.h: é quanto o robô anda após ver o verde antes de girar |
| C | Distância entre os sensores de cor | ~45 mm (22 mm de cada lado da linha) | Cada sensor fica sobre a área do marcador verde |
| — | Espaço entre os TCRT5000 | 12 a 14 mm entre centros | Os dois do meio ficam sobre a linha quando o robô está centralizado |
| — | Altura dos sensores de linha ao chão | 3 a 6 mm3 a 5 mm | Mais alto que isso, o contraste cai muito |
| — | Altura dos sensores de cor ao chão | 5 a 10 mm | Sempre dentro de um capuz preto (veja abaixo) |
| — | Altura do sensor de distância | 20 a 40 mm, apontado reto | Precisa ver o obstáculo sem enxergar o chão |
A ordem dos sensores de linha no firmware é da esquerda para a direita, olhando o robô por cima com a frente para longe de você.
Montando o sensor de cor caseiro
Capuz
Cada par LED + LDR fica dentro de um tubo preto apontado para o chão: tampa de caneta, pedaço de canudo grosso, rolo de papel pintado de preto ou EVA preto enrolado.
Separação
Coloque uma divisória (EVA ou papelão preto) entre o LED e o LDR, para que a luz do LED chegue ao LDR só depois de refletir no chão.
Mesma altura
Os dois sensores (esquerdo e direito) devem ficar na mesma altura e iguais entre si. Diferenças são compensadas pela calibração e pelo treino, mas quanto mais iguais, melhor.
Os sensores de cor são sensíveis à luz ambiente. Uma saia de EVA ou borracha preta em volta deles resolve boa parte do problema.
05 Alimentação
Três trilhos de tensão: a bateria (7,4 V) vai direto para a ponte H; o regulador buck gera 5 V; e o regulador da placa do ESP32 fornece 3,3 V para os sensores.
Ajuste o buck para 5,0 V antes de ligar qualquer coisa nele
Alimente o buck só com a bateria, meça a saída com o multímetro e gire o trimpot até 5,0 V. Reguladores ajustáveis costumam vir de fábrica numa tensão alta.
Monte bateria → fusível → chave
Confira a polaridade com o multímetro antes de seguir.
Crie os barramentos de GND, 5 V e 3,3 V
Na placa perfurada, faça uma trilha para cada tensão e um GND comum largo. Solde o capacitor de 470 µF entre 5 V e GND, perto do servo (lado listrado do capacitor no GND).
Teste sem o ESP32 conectado
Ligue a chave e meça: entrada da ponte H ≈ 7,4–8,4 V e saída do buck ≈ 5,0 V. Só então conecte o ESP32 ao VIN.
06 Ligações
Ligações iguais às do arquivo include/config.h do firmware (perfil econômico) (perfil completo). Se mudar algum pino na montagem, mude também no código.
Sensor de linha TCRT5000 (repetir 6 vezes)
Sensor de cor caseiro (LED RGB + LDR)
O LED tem que ser de anodo comum (a perna mais longa vai no 5 V). Com LED de catodo comum, este circuito não funciona.
Os LEDs verde e azul precisam de ~3 V e acendem fraco direto no 3,3 V do ESP32. Por isso usamos transistores e o 5 V.
Mapa de pinos do ESP32 Econômica
| Pino ESP32 | Ligado a | Observação |
|---|---|---|
| GPIO 36 (VP) | TCRT5000 1 (esquerda) | Saída do fototransistor (coletor) |
| GPIO 39 (VN) | TCRT5000 2 | |
| GPIO 34 | TCRT5000 3 | |
| GPIO 35 | TCRT5000 4 | |
| GPIO 32 | TCRT5000 5 | |
| GPIO 33 | TCRT5000 6 (direita) | |
| GPIO 4 | LDR esquerdo (divisor) | Entradas analógicas ADC2 (funcionam porque o Wi-Fi fica desligado) |
| GPIO 13 | LDR direito (divisor) | |
| GPIO 23 | Base de Q1 (vermelho), via 1 kΩ | |
| GPIO 5 | Base de Q2 (verde), via 1 kΩ | |
| GPIO 12 | Base de Q3 (azul), via 1 kΩ | Não ligue nada que puxe esse pino para 3,3 V: o ESP32 não inicia |
| GPIO 17 | HC-SR04 TRIG | Direto |
| GPIO 16 | HC-SR04 ECHO | Pelo divisor: ECHO → 1 kΩ → GPIO 16 → 2 kΩ → GND |
| GPIO 25 | Ponte H, motor esquerdo IN1 | DRV8833: IN1/IN2 · L9110S: A-IA/A-IB |
| GPIO 26 | Ponte H, motor esquerdo IN2 | |
| GPIO 27 | Ponte H, motor direito IN1 | DRV8833: IN3/IN4 · L9110S: B-IA/B-IB |
| GPIO 14 | Ponte H, motor direito IN2 | |
| GPIO 18 | LM393 esquerdo (D0) | Alimente os LM393 em 3,3 V |
| GPIO 19 | LM393 direito (D0) | |
| GPIO 21 / 22 | MPU6050 SDA / SCL | MPU6050 em 3,3 V |
| GPIO 15 | Sinal do servo da garra | Servo no 5 V do buck |
| GPIO 0 / 2 | Botão BOOT / LED azul | Já vêm na placa |
| VIN | 5 V do buck | |
| 3V3 | Barramento de 3,3 V |
Ponte H
| DRV8833 | L9110S | Ligado a |
|---|---|---|
| VM (VCC) | VCC | Bateria, depois da chave |
| GND | GND | GND comum |
| OUT1 / OUT2 | MOTOR-A | Motor esquerdo |
| OUT3 / OUT4 | MOTOR-B | Motor direito |
| SLP / EEP | — | Se o módulo tiver esse pino, ligue em 3,3 V (senão a ponte fica desligada) |
Mapa de pinos do ESP32 Completa
| Pino ESP32 | Ligado a | Observação |
|---|---|---|
| GPIO 36 (VP) | Sensor de linha 1 (esquerda) | Só entradas ADC1. Alimente o array em 3,3 V. |
| GPIO 39 (VN) | Sensor de linha 2 | |
| GPIO 34 | Sensor de linha 3 | |
| GPIO 35 | Sensor de linha 4 | |
| GPIO 32 | Sensor de linha 5 | |
| GPIO 33 | Sensor de linha 6 (direita) | |
| GPIO 21 / 22 | SDA / SCL (MPU6050 e TCA9548A) | Os módulos já têm pull-up |
| GPIO 25 | TB6612 PWMA | Motor esquerdo (A01/A02) |
| GPIO 26 | TB6612 AIN1 | |
| GPIO 27 | TB6612 AIN2 | |
| GPIO 13 | TB6612 PWMB | Motor direito (B01/B02) |
| GPIO 14 | TB6612 BIN1 | |
| GPIO 4 | TB6612 BIN2 | |
| GPIO 23 | TB6612 STBY | Em nível alto a ponte fica ativa |
| GPIO 18 / 19 | Encoder esquerdo A / B | Encoders em 3,3 V |
| GPIO 16 / 17 | Encoder direito A / B | |
| GPIO 5 | Servo da garra | Pinos de boot: o servo pode dar um tranco ao ligar |
| GPIO 15 | Servo do braço | |
| GPIO 0 / 2 | Botão BOOT / LED azul | Já vêm na placa |
| VIN / 3V3 | 5 V do buck / barramento de 3,3 V |
TB6612FNG e TCA9548A
| Pino | Ligado a |
|---|---|
| TB6612 VM | Bateria (depois da chave) |
| TB6612 VCC | 3,3 V |
| TB6612 A01/A02 · B01/B02 | Motor esquerdo · motor direito |
| TCA9548A VIN · A0–A2 | 3,3 V · GND (endereço 0x70) |
| TCA9548A SD0/SC0 | TCS34725 esquerdo |
| TCA9548A SD1/SC1 | TCS34725 direito |
| TCA9548A SD2/SC2 | VL53L0X |
Sequência de montagem
Solde barras de pinos fêmea para o ESP32
Assim a placa sai sem dessoldar e pode ser usada de novo no próximo ano.
Monte a placa dos TCRT5000
Numa tira de placa perfurada, solde os 6 sensores em linha, com 12–14 mm entre centros, todos virados para o mesmo lado. Depois os resistores de 220 Ω (LEDs) e 10 kΩ (fototransistores).
Monte o sensor de cor
Os 3 transistores e os resistores na placa principal; os LEDs e LDRs nos capuzes, ligados por fios. Teste: com tudo ligado, cada cor deve acender nos dois LEDs ao mesmo tempo.
Ligue a ponte H e os motores
Não se preocupe com o sentido dos motores agora; isso se corrige no teste.
Ligue os encoders LM393 e o MPU6050
Todos em 3,3 V. Encoder esquerdo no GPIO 18, direito no GPIO 19.
Ligue o HC-SR04 com o divisor no ECHO
VCC no 5 V, TRIG direto no GPIO 17, ECHO pelo divisor de 1 kΩ / 2 kΩ até o GPIO 16. Sem o divisor, o pino do ESP32 recebe 5 V.
Ligue o servo
Vermelho no 5 V do buck, marrom no GND, laranja no GPIO 15.
Revise com o multímetro (sem energia)
Teste continuidade entre 5 V e GND, 3,3 V e GND, e bateria e GND: não pode haver curto. Confira cada fio de sinal contra a tabela.
Solde barras de pinos fêmea para o ESP32
Assim a placa sai sem dessoldar, se precisar trocar.
Ligue a ponte H e os motores
Siga a tabela do TB6612. O sentido dos motores se corrige no teste.
Ligue os encoders
VCC em 3,3 V, GND, e os canais A e B nos pinos da tabela.
Ligue o array de linha
VCC em 3,3 V e as 6 saídas na ordem esquerda → direita (GPIO 36, 39, 34, 35, 32, 33).
Monte o barramento I2C
MPU6050 e TCA9548A em paralelo no SDA/SCL; depois cada sensor no seu canal. Fios curtos (até ~20 cm).
Ligue os servos
Vermelho no 5 V do buck, marrom no GND, sinal nos GPIO 5 e 15. Não alimente servos pelo 3,3 V ou pelo USB.
Revise com o multímetro (sem energia)
Continuidade entre 5 V e GND, 3,3 V e GND, VM e GND: não pode haver curto.
07 Firmware
O mesmo código serve para as duas versões; muda só o perfil escolhido na hora de gravar. Use o VS Code com a extensão PlatformIO, ou só a linha de comando.
Instale o PlatformIO
pip install platformioSem internet na escola? Faça a instalação e a primeira compilação num lugar com internet: o PlatformIO guarda o que baixou e depois funciona offline nesse computador.
Conecte o ESP32 pelo USB (bateria desligada)
No Linux, a placa aparece como
/dev/ttyUSB0; no Windows, como uma porta COM. Se não aparecer, instale o driver CP210x ou CH340, conforme o chip USB da placa. Teste outro cabo: muitos cabos só carregam.Compile, grave e abra o monitor
pio run -e economico -t upload pio device monitorpio run -e completo -t upload pio device monitorSe a gravação travar em “Connecting…”, segure o botão BOOT até ela começar.
Confira a mensagem de inicialização
=== Robo OBR Resgate === perfil: economico cor: ok distancia: ok imu: ok classificador: heuristica=== Robo OBR Resgate === perfil: completo cor: ok distancia: ok imu: ok classificador: heuristicaNa versão econômica, “cor” e “distancia” sempre aparecem como ok (esses sensores não têm como responder ao ESP32); confira-os nos testes.
imu: FALHOUindica problema de ligação. Veja Problemas comuns.
08 Testes
Faça os testes com o robô suspenso (rodas sem tocar a mesa) até ter certeza do sentido dos motores. Ligue a bateria e envie d no monitor para ver os sensores ao vivo.
Cada linha do stream de debug tem o formato:
P,<6 sensores de linha>,<cor esq: r,g,b,brilho>,<cor dir: r,g,b,brilho>,CLASSE,confiança,dist=…,pitch=…,yaw=…,enc=esq/dir
Sensores de linha
Passe uma fita preta sob cada sensor, da esquerda para a direita. Os 6 primeiros valores devem reagir nessa ordem. Se a ordem estiver trocada, corrija os fios ou a lista
LINE_PINS. Se o valor diminuir no preto, useLINE_INVERT = true. Antes da calibração os valores ficam em 0 ou 1; isso é normal.Sensores de cor
Primeiro envie w com os dois sensores sobre o branco. Depois coloque o sensor esquerdo sobre o verde: no bloco esquerdo, o 2º valor (g) deve ficar maior que o 1º (r). Repita com o direito. Se não mudar nada, confira o LDR e o divisor; se esquerdo e direito estiverem trocados, troque os fios dos GPIO 4 e 13.
Coloque o sensor esquerdo sobre o verde: o 2º valor do bloco esquerdo (g) deve subir. Repita com o direito. Se estiverem trocados, troque os canais SD0 e SD1 no multiplexador.
Sensor de distância
Aproxime a mão da frente:
dist=deve cair para menos de 100 mm. Sem obstáculo, o valor fica alto (até 8190).IMU
- Levante a frente do robô:
pitchdeve ficar positivo. - Gire o robô para a esquerda (anti-horário):
yawdeve aumentar.
Se algum sinal estiver invertido, gire o módulo na montagem ou ajuste o sinal em
imu::update().- Levante a frente do robô:
Sentido dos motores
Envie c com o robô suspenso: na calibração, ele gira de um lado para o outro e as rodas devem girar em sentidos opostos, alternando. Para testar a “frente”, coloque-o na pista, envie r e fique pronto para enviar s. Se um motor andar para trás, inverta os dois fios dele na ponte H.
Encoders
Gire cada roda com a mão: o valor de
enc=daquele lado deve mudar. Se não mudar, ajuste a posição do LM393 no disco (o LED do módulo pisca a cada furo). O sentido é deduzido do comando do motor, por isso girar com a mão sempre soma.Com o robô andando para a frente, as duas contagens de
enc=devem aumentar. Se uma diminuir, troque os fios A e B daquele encoder.
09 Calibração e primeiro movimento
Distância por pulso do encoder
O disco do kit tem 20 furos e a roda tem 65 mm. Então cada pulso vale π × 65 ÷ 20 ≈ 10,2 mm, que já é o valor de MM_PER_TICK no perfil econômico. Se a sua roda ou o seu disco forem diferentes, refaça a conta.
O firmware conta só a borda de subida do canal A:
pulsos por volta da roda = pulsos do encoder por volta do motor × redução
MM_PER_TICK = π × diâmetro da roda (mm) ÷ pulsos por volta da roda
Exemplo: encoder de 7 pulsos, redução 1:50 e roda de 43 mm → 350 pulsos por volta → MM_PER_TICK ≈ 0,386.
Confira na prática: marque 1 m no chão, faça o robô andar e compare com a distância medida.
Ajuste
MM_PER_TICKeGREEN_TO_AXLE_MMOs dois ficam em
include/config.h. Grave de novo depois de mudar.Calibre a linha
Coloque o robô com os sensores sobre a linha e envie c. Ele gira para os dois lados por 3 segundos, lendo o branco e o preto.
Calibre o branco dos sensores de cor
Coloque os dois sensores de cor sobre o branco e envie w.
Primeira volta
Numa reta, envie r ou aperte o botão BOOT. Se o robô oscilar demais, diminua
KP; se demorar a corrigir nas curvas, aumente.KDamortece a oscilação. Na versão econômica, comece devagar: o sensor de cor caseiro faz ~20 leituras por segundo, e em alta velocidade o robô pode passar pelo verde sem ver.Treine o classificador (TinyML)
Com tudo calibrado, colete exemplos de cada classe e treine o modelo no computador:
pip install -r ml/requirements.txt python ml/collect.py --port /dev/ttyUSB0 python ml/train.py pio run -e economicocompleto -t uploadNa inicialização, a mensagem passa a ser
classificador: rede neural (TinyML). Cada robô deve ter o próprio modelo, treinado com os dados dele.
Recalibre (c e w) sempre que mudar de pista ou de iluminação, principalmente na arena da competição.
10 Problemas comuns
| Sintoma | Causa provável | Solução |
|---|---|---|
imu: FALHOU | MPU6050 com AD0 em nível alto (endereço 0x69) ou SDA/SCL trocados | Ligue AD0 ao GND e confira os pinos 21 e 22 |
cor: FALHOU | Multiplexador sem alimentação, endereço diferente de 0x70 ou sensor no canal errado | Confira A0–A2 em GND e os canais 0 e 1 |
distancia: FALHOU | VL53L0X fora do canal 2, ou XSHUT em nível baixo | Deixe XSHUT desconectado |
| ESP32 não liga ou não grava depois de montar o sensor de cor | GPIO 12 puxado para 3,3 V no boot | Confira o resistor de 1 kΩ até a base de Q3 e se não há nada ligando o GPIO 12 ao 3,3 V |
| Valores de cor sempre 0 ou não mudam | LDR ou divisor mal ligado, LED de catodo comum, transistor invertido | Meça a tensão no GPIO 4/13 cobrindo e descobrindo o LDR: ela deve variar |
| Verde e branco parecem iguais | Luz do LED indo direto para o LDR ou luz ambiente entrando | Melhore o capuz e a divisória; recalibre com w |
dist=8190 sempre | HC-SR04 sem 5 V, ou ECHO e TRIG trocados | Confira a alimentação e o divisor no ECHO |
| Motores TT fracos ou sem força para girar no lugar | Bateria fraca ou velocidade baixa demais | Carregue a bateria; aumente TURN_SPEED (até MOTOR_PWM_LIMIT) |
| ESP32 reinicia quando os motores ou servos se movem | Queda de tensão no 5 V | Capacitor de 470 µF perto do servo, bateria carregada, fios de alimentação mais grossos |
| Não grava (“Failed to connect”) | Cabo só de carga, ou um periférico segurando um pino de boot | Segure BOOT durante a gravação; teste outro cabo; desconecte o servo |
| Sensores de linha sempre em 0 ou 1 | Sem calibração, ou sensores longe do chão | Envie c; aproxime os sensores do chão |
| Robô gira para o lado errado no verde | Sensores de cor trocados ou sinal do yaw invertido | Refaça os testes de cor e de IMU da seção 08 |
| Gira demais ou de menos nas manobras | O robô se mexeu durante a calibração do gyro | Deixe o robô parado nos primeiros segundos após ligar |
| Vê verde onde não tem | Luz ambiente ou limiares da heurística | Melhore o capuz dos sensores de cor e treine o modelo TinyML |
11 Como baratear ainda mais
Ideias para escolas com pouco recurso, especialmente em zona rural, onde comprar peças é caro e demorado.
Compre em lote para a turma
Componentes avulsos (TCRT5000, LEDs, LDRs, resistores, transistores) custam muito menos em pacotes de 50 ou 100. Um único pedido para a escola toda também divide o frete.
Um robô por grupo
Grupos de 3 ou 4 alunos, com papéis que mudam: mecânica, eletrônica, programação e dados (coleta e treino do TinyML).
Chassi de material reciclado
Tampa de pote plástico, placa de propaganda de plástico corrugado, MDF de sobra de marcenaria ou até CD velho. Só precisa ser rígido e plano.
Reaproveite
- Células 18650 de baterias de notebook (com o professor; veja a seção de segurança).
- Fios de cabos de rede velhos.
- Carregador de celular de 5 V para alimentar o ESP32 na bancada.
Peças que duram anos
ESP32, ponte H, MPU6050 e motores voltam para a caixa no fim do projeto. Montando com barras de pinos em vez de soldar direto, quase tudo é reaproveitado na turma seguinte.
Pista barata
Papel branco (ou o verso de cartazes), fita isolante preta e papel verde colado. Para a rampa, uma tábua com um livro embaixo.
Um computador basta
O treino do TinyML leva segundos e roda em qualquer computador com Python. A turma toda pode usar a mesma máquina, revezando os robôs.
Onde não economizar
Proteção da bateria (BMS), carregador adequado e um multímetro. São itens de segurança e evitam queimar as outras peças.