Projeto de aula

Carrinho Controlado por Luva

Um projeto para estudar comunicação sem fio entre ESP32, leitura de joystick, controle de motores e montagem de circuito com driver.

Imagens do projeto montadogaleria
Código do transmissorluva
Código do receptorcarrinho
Circuito eletrônicopinagem
Explicação e complementosaula
Imagens do projeto

Visão ilustrada da montagem

As imagens abaixo são representações de apoio, não fotografias nem diagramas técnicos. Use o mapa de ligações e confira a pinagem dos componentes antes de montar.

Visualização dos códigos

Transmissor e receptor

Os painéis mostram os trechos centrais do transmissor e do receptor. Baixe os arquivos completos para compilar e adaptar o projeto.

transmissor-luva.ino

Baixar arquivo
#include <WiFi.h>
#include <esp_now.h>

const int PIN_EIXO_X = 34;
const int PIN_EIXO_Y = 35;
const int PIN_BOTAO = 23;

uint8_t macDoCarrinho[] = {0x24, 0x6F, 0x28, 0xAA, 0xBB, 0xCC};

struct PacoteControle {
  int16_t eixoX;
  int16_t eixoY;
  bool botaoPressionado;
};

void loop() {
  PacoteControle pacote;
  pacote.eixoX = map(analogRead(PIN_EIXO_X), 0, 4095, -100, 100);
  pacote.eixoY = map(analogRead(PIN_EIXO_Y), 0, 4095, -100, 100);
  pacote.botaoPressionado = digitalRead(PIN_BOTAO) == LOW;

  esp_now_send(macDoCarrinho, (uint8_t *)&pacote, sizeof(pacote));
  delay(80);
}

receptor-carrinho.ino

Baixar arquivo
#include <WiFi.h>
#include <esp_now.h>

struct PacoteControle {
  int16_t eixoX;
  int16_t eixoY;
  bool botaoPressionado;
};

PacoteControle ultimoComando = {0, 0, false};

void moverCarrinho(int eixoX, int eixoY) {
  int velocidadeBase = map(abs(eixoY), 0, 100, 0, 255);
  int ajusteCurva = map(eixoX, -100, 100, -120, 120);

  int esquerda = velocidadeBase - ajusteCurva;
  int direita = velocidadeBase + ajusteCurva;

  if (eixoY < 0) {
    esquerda *= -1;
    direita *= -1;
  }

  controlarMotor(MOTOR_ESQ_IN1, MOTOR_ESQ_IN2, MOTOR_ESQ_PWM, esquerda);
  controlarMotor(MOTOR_DIR_IN1, MOTOR_DIR_IN2, MOTOR_DIR_PWM, direita);
}
Download dos códigos

Pacote ZIP do projeto

Inclui transmissor-luva.ino, receptor-carrinho.ino e um README com passos antes de gravar nas placas.

Baixar ZIP
Circuito eletrônico

Mapa simplificado das ligações

Use este mapa para entender os módulos do sistema. Antes de energizar, confira a pinagem do seu ESP32, o modelo do driver, a polaridade e a alimentação dos motores.

LuvaJoystick X/Y + botão
JoystickX: GPIO34 · Y: GPIO35
ESP32 transmissorEnvia por ESP-NOW
ESP32 receptorRecebe comandos
Driver L298NIN1, IN2, ENA/PWM
Motor esquerdoRoda esquerda
Motor direitoRoda direita
Funcionamento

Como o projeto funciona

O objetivo é transformar o movimento da mão em comandos de direção para o carrinho.

1

A luva lê o joystick

O ESP32 transmissor mede os eixos X e Y e transforma os valores em uma escala simples de -100 a 100.
2

Os dados viajam por ESP-NOW

O pacote de controle é enviado diretamente para o ESP32 do carrinho, sem depender de roteador Wi-Fi.
3

O carrinho calcula o movimento

O eixo Y define frente ou ré. O eixo X ajusta a diferença de velocidade entre os motores para fazer curvas.
Materiais complementares

Para continuar estudando

Conceitos trabalhados

  • Entrada analógica
  • Comunicação sem fio
  • PWM e controle de velocidade
  • GND comum e alimentação separada

Desafios para alunos

  • Adicionar buzzer de ré.
  • Criar modo lento e modo rápido.
  • Mostrar status em LEDs coloridos.
  • Trocar joystick por sensor de inclinação.

Componentes usados

2 ESP32, joystick, botão, driver de motor, 2 motores DC, chassi, rodas, bateria e fios jumper.

Cuidados importantes

Confira a polaridade da bateria, mantenha GND comum e nunca alimente motores diretamente pelos pinos do ESP32.