RRobô Resgate
0 de 0 passos
Plano de aulas
OBR · Resgate (linha) · ESP32 + TinyML

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çãoEconômicaCompleta
Seguir linha6× TCRT5000 avulsosPololu QTR-HD-06A
Cor (verde, prata, vermelho)2× LED RGB + LDR (caseiro)2× TCS34725 + multiplexador TCA9548A
DistânciaHC-SR04 (ultrassom)VL53L0X (laser)
Ponte HDRV8833 ou L9110STB6612FNG
MotoresMotor TT amarelo + encoder óptico LM393N20 com encoder magnético
Servos1 (garra)2 (garra e braço)
Controlador, IMU, reguladorIguais: 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.

QtdItemObservaçãoR$
1ESP32 DevKit V1 (WROOM-32, 30 pinos)Reaproveitável em outros projetos35
1Kit chassi 2WD (2 motores TT, 2 rodas 65 mm, roda boba, discos de encoder, parafusos)O kit mais comum de “carrinho Arduino”45
2Sensor de velocidade LM393 (encoder óptico de garfo)Lê o disco de 20 furos do kit10
1Ponte H DRV8833 ou L9110SQualquer uma das duas serve10
6Sensor óptico TCRT5000 (componente avulso, não o módulo)+ 6 resistores de 220 Ω e 6 de 10 kΩ12
2LED RGB 5 mm anodo comum, difusoUm de cada lado3
2LDR 5 mm (GL5528)+ 2 resistores de 10 kΩ2
3Transistor BC547 (NPN)+ 3 resistores de 1 kΩ, 2 de 220 Ω, 4 de 120 Ω3
1Sensor ultrassônico HC-SR04+ resistores de 1 kΩ e 2 kΩ (divisor do eco)8
1IMU MPU6050 (módulo GY-521)Rampa e giros15
1Servo SG90Garra12
1Regulador step-down (buck) mini MP1584Ajustado para 5,0 V5
2Bateria 18650 + suporte 2S + placa de proteção (BMS) 2SVeja a seção de segurança35
—Chave liga/desliga, placa perfurada, barras de pinos, fios, capacitor 470 µF, termorretrátil15
Total estimado~210
QtdItemObservaçãoR$
1ESP32 DevKit V1 (WROOM-32, 30 pinos)35
1Array analógico de 6 sensores Pololu QTR-HD-06APrecisa ser a versão analógica (“A”)120
2Sensor de cor TCS34725 (módulo com LED branco)Mesmo endereço I2C: por isso o multiplexador70
1Multiplexador I2C TCA9548AEndereço 0x70 (A0–A2 em GND)20
1Sensor de distância VL53L0XMódulo com regulador25
1IMU MPU6050 (módulo GY-521)15
1Ponte H TB6612FNG1,2 A contínuos por canal20
2Motor N20 6 V com encoder magnético (1:50 a 1:100)110
2Rodas para eixo D de 3 mm + roda boba de metal40
2Servo MG90SGarra e braço50
1Regulador step-down 5 V, 3 A10
1Bateria 2S (18650 ou LiPo) com proteção50
—Chassi, parafusos, espaçadores, placa, fios, chave, fusível, capacitor40
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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.
  7. Monte a garra

    Centralize o servo (90°) antes de prender o braço da garra. Palitos de picolé, tampas e arame funcionam bem.

  1. 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.

  2. 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.

  3. 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.

  4. 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.
  5. 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.

Vista de cima: posição dos sensores em relação às rodas linha da pista (~1,9 cm) marcador verde 6× TCRT5000 Array QTR-HD-06A LED RGB + LDR (×2) 2× TCS34725 HC-SR04 (frente) VL53L0X (frente) MPU6050 eixo X p/ frente eixo das rodas roda boba A B C
Vista de cima, frente para o alto. Fora de escala.
CotaO que éSugestãoPor quê
ASensores de linha até o eixo das rodas60 a 80 mmMais longe antecipa as curvas, mas dificulta curvas de 90°
BSensores de cor até o eixo das rodasMeça e anoteColoque esse valor em GREEN_TO_AXLE_MM no config.h: é quanto o robô anda após ver o verde antes de girar
CDistâ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 TCRT500012 a 14 mm entre centrosOs dois do meio ficam sobre a linha quando o robô está centralizado
—Altura dos sensores de linha ao chão3 a 6 mm3 a 5 mmMais alto que isso, o contraste cai muito
—Altura dos sensores de cor ao chão5 a 10 mmSempre dentro de um capuz preto (veja abaixo)
—Altura do sensor de distância20 a 40 mm, apontado retoPrecisa 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.

Diagrama de alimentação Bateria 2S7,4 V nominal Chave+ fusível DRV8833 / L9110S TB6612FNG VM = bateria Motores Buck → 5,0 V≥ 2 A Servos + 470 µF HC-SR04, LEDs ESP32pino VIN 3V3 do ESP32 Sensores (lógica em 3,3 V) TCRT5000 (lado receptor) · LDRs · LM393 · MPU6050 QTR · TCS34725 · TCA9548A · VL53L0X · MPU6050 · TB6612 (VCC) · encoders
bateria 7,4 V 5 V (tracejado) 3,3 V
Todos os GND são ligados entre si: bateria, buck, ponte H, ESP32, servos e sensores.
  1. 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.

  2. Monte bateria → fusível → chave

    Confira a polaridade com o multímetro antes de seguir.

  3. 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).

  4. 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)

Circuito de um sensor TCRT5000 5 V 3,3 V GND 220 Ω LED infravermelho(lado azul/transparente) 10 kΩ C/E fototransistor(lado preto) saída→ GPIO do sensor
O LED infravermelho é alimentado pelo 5 V; o fototransistor, pelo 3,3 V (assim a saída nunca passa de 3,3 V). Coletor no resistor de 10 kΩ e na saída; emissor no GND. Sobre o preto, a saída sobe.

Sensor de cor caseiro (LED RGB + LDR)

Circuito dos LEDs RGB com transistores e dos LDRs 5 V GND LED RGB esq.anodo → 5 V LED RGB dir.anodo → 5 V 220120120 220120120 Q1Q2Q3 Q1 (vermelho): base ← 1 kΩ ← GPIO 23 Q2 (verde): base ← 1 kΩ ← GPIO 5 Q3 (azul): base ← 1 kΩ ← GPIO 12 BC547: coletor nos resistores dos LEDs, emissor no GND 3,3 V LDR 10 kΩ → GND GPIO 4 (esq.) o direito é igual, no GPIO 13
Os dois LEDs acendem juntos, uma cor de cada vez, pelos transistores. Cada cor de cada LED tem o próprio resistor (220 Ω no vermelho, 120 Ω no verde e no azul). Cada LDR forma um divisor com um resistor de 10 kΩ.

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 ESP32Ligado aObservação
GPIO 36 (VP)TCRT5000 1 (esquerda)Saída do fototransistor (coletor)
GPIO 39 (VN)TCRT5000 2
GPIO 34TCRT5000 3
GPIO 35TCRT5000 4
GPIO 32TCRT5000 5
GPIO 33TCRT5000 6 (direita)
GPIO 4LDR esquerdo (divisor)Entradas analógicas ADC2 (funcionam porque o Wi-Fi fica desligado)
GPIO 13LDR direito (divisor)
GPIO 23Base de Q1 (vermelho), via 1 kΩ
GPIO 5Base de Q2 (verde), via 1 kΩ
GPIO 12Base de Q3 (azul), via 1 kΩNão ligue nada que puxe esse pino para 3,3 V: o ESP32 não inicia
GPIO 17HC-SR04 TRIGDireto
GPIO 16HC-SR04 ECHOPelo divisor: ECHO → 1 kΩ → GPIO 16 → 2 kΩ → GND
GPIO 25Ponte H, motor esquerdo IN1DRV8833: IN1/IN2 · L9110S: A-IA/A-IB
GPIO 26Ponte H, motor esquerdo IN2
GPIO 27Ponte H, motor direito IN1DRV8833: IN3/IN4 · L9110S: B-IA/B-IB
GPIO 14Ponte H, motor direito IN2
GPIO 18LM393 esquerdo (D0)Alimente os LM393 em 3,3 V
GPIO 19LM393 direito (D0)
GPIO 21 / 22MPU6050 SDA / SCLMPU6050 em 3,3 V
GPIO 15Sinal do servo da garraServo no 5 V do buck
GPIO 0 / 2Botão BOOT / LED azulJá vêm na placa
VIN5 V do buck
3V3Barramento de 3,3 V

Ponte H

DRV8833L9110SLigado a
VM (VCC)VCCBateria, depois da chave
GNDGNDGND comum
OUT1 / OUT2MOTOR-AMotor esquerdo
OUT3 / OUT4MOTOR-BMotor direito
SLP / EEP—Se o módulo tiver esse pino, ligue em 3,3 V (senão a ponte fica desligada)
Barramento I2C com multiplexador ESP32SDA 21 · SCL 22 MPU60500x68 (direto) TCA9548A0x70 TCS34725 esqcanal SD0/SC0 TCS34725 dircanal SD1/SC1 VL53L0Xcanal SD2/SC2 SDA + SCL
Os dois TCS34725 têm o mesmo endereço (0x29), por isso cada um fica num canal do multiplexador. O MPU6050 fica no barramento principal.

Mapa de pinos do ESP32 Completa

Pino ESP32Ligado aObservaçã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 34Sensor de linha 3
GPIO 35Sensor de linha 4
GPIO 32Sensor de linha 5
GPIO 33Sensor de linha 6 (direita)
GPIO 21 / 22SDA / SCL (MPU6050 e TCA9548A)Os módulos já têm pull-up
GPIO 25TB6612 PWMAMotor esquerdo (A01/A02)
GPIO 26TB6612 AIN1
GPIO 27TB6612 AIN2
GPIO 13TB6612 PWMBMotor direito (B01/B02)
GPIO 14TB6612 BIN1
GPIO 4TB6612 BIN2
GPIO 23TB6612 STBYEm nível alto a ponte fica ativa
GPIO 18 / 19Encoder esquerdo A / BEncoders em 3,3 V
GPIO 16 / 17Encoder direito A / B
GPIO 5Servo da garraPinos de boot: o servo pode dar um tranco ao ligar
GPIO 15Servo do braço
GPIO 0 / 2Botão BOOT / LED azulJá vêm na placa
VIN / 3V35 V do buck / barramento de 3,3 V

TB6612FNG e TCA9548A

PinoLigado a
TB6612 VMBateria (depois da chave)
TB6612 VCC3,3 V
TB6612 A01/A02 · B01/B02Motor esquerdo · motor direito
TCA9548A VIN · A0–A23,3 V · GND (endereço 0x70)
TCA9548A SD0/SC0TCS34725 esquerdo
TCA9548A SD1/SC1TCS34725 direito
TCA9548A SD2/SC2VL53L0X

Sequência de montagem

  1. 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.

  2. 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).

  3. 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.

  4. Ligue a ponte H e os motores

    Não se preocupe com o sentido dos motores agora; isso se corrige no teste.

  5. Ligue os encoders LM393 e o MPU6050

    Todos em 3,3 V. Encoder esquerdo no GPIO 18, direito no GPIO 19.

  6. 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.

  7. Ligue o servo

    Vermelho no 5 V do buck, marrom no GND, laranja no GPIO 15.

  8. 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.

  1. Solde barras de pinos fêmea para o ESP32

    Assim a placa sai sem dessoldar, se precisar trocar.

  2. Ligue a ponte H e os motores

    Siga a tabela do TB6612. O sentido dos motores se corrige no teste.

  3. Ligue os encoders

    VCC em 3,3 V, GND, e os canais A e B nos pinos da tabela.

  4. 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).

  5. Monte o barramento I2C

    MPU6050 e TCA9548A em paralelo no SDA/SCL; depois cada sensor no seu canal. Fios curtos (até ~20 cm).

  6. 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.

  7. 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.

  1. Instale o PlatformIO

    pip install platformio

    Sem 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.

  2. 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.

  3. Compile, grave e abra o monitor

    pio run -e economico -t upload
    pio device monitor
    pio run -e completo -t upload
    pio device monitor

    Se a gravação travar em “Connecting…”, segure o botão BOOT até ela começar.

  4. 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: heuristica

    Na 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: FALHOU indica 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
  1. 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, use LINE_INVERT = true. Antes da calibração os valores ficam em 0 ou 1; isso é normal.

  2. 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.

  3. 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).

  4. IMU

    • Levante a frente do robô: pitch deve ficar positivo.
    • Gire o robô para a esquerda (anti-horário): yaw deve aumentar.

    Se algum sinal estiver invertido, gire o módulo na montagem ou ajuste o sinal em imu::update().

  5. 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.

  6. 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.

  1. Ajuste MM_PER_TICK e GREEN_TO_AXLE_MM

    Os dois ficam em include/config.h. Grave de novo depois de mudar.

  2. 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.

  3. Calibre o branco dos sensores de cor

    Coloque os dois sensores de cor sobre o branco e envie w.

  4. 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. KD amortece 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.

  5. 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 upload

    Na 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

SintomaCausa provávelSolução
imu: FALHOUMPU6050 com AD0 em nível alto (endereço 0x69) ou SDA/SCL trocadosLigue AD0 ao GND e confira os pinos 21 e 22
cor: FALHOUMultiplexador sem alimentação, endereço diferente de 0x70 ou sensor no canal erradoConfira A0–A2 em GND e os canais 0 e 1
distancia: FALHOUVL53L0X fora do canal 2, ou XSHUT em nível baixoDeixe XSHUT desconectado
ESP32 não liga ou não grava depois de montar o sensor de corGPIO 12 puxado para 3,3 V no bootConfira 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 mudamLDR ou divisor mal ligado, LED de catodo comum, transistor invertidoMeça a tensão no GPIO 4/13 cobrindo e descobrindo o LDR: ela deve variar
Verde e branco parecem iguaisLuz do LED indo direto para o LDR ou luz ambiente entrandoMelhore o capuz e a divisória; recalibre com w
dist=8190 sempreHC-SR04 sem 5 V, ou ECHO e TRIG trocadosConfira a alimentação e o divisor no ECHO
Motores TT fracos ou sem força para girar no lugarBateria fraca ou velocidade baixa demaisCarregue a bateria; aumente TURN_SPEED (até MOTOR_PWM_LIMIT)
ESP32 reinicia quando os motores ou servos se movemQueda de tensão no 5 VCapacitor 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 bootSegure BOOT durante a gravação; teste outro cabo; desconecte o servo
Sensores de linha sempre em 0 ou 1Sem calibração, ou sensores longe do chãoEnvie c; aproxime os sensores do chão
Robô gira para o lado errado no verdeSensores de cor trocados ou sinal do yaw invertidoRefaça os testes de cor e de IMU da seção 08
Gira demais ou de menos nas manobrasO robô se mexeu durante a calibração do gyroDeixe o robô parado nos primeiros segundos após ligar
Vê verde onde não temLuz ambiente ou limiares da heurísticaMelhore 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.