Projetos

Robô com ESP32 Controlado por Joystick de PS3

Um robô montado com ESP32 e ponte H L298N, controlado sem fio por um joystick de PlayStation 3, usando a biblioteca PS3Controller.

Robô com ESP32 controlado por joystick de PS3

Visão geral

A ideia deste projeto é simples: usar um controle de PS3 para comandar diretamente um robô montado com ESP32, sem precisar de aplicativo nenhum no celular. O ESP32 recebe os comandos do joystick por Bluetooth e aciona os motores através de uma ponte H L298N.

Visão geral: controle PS3 conectado ao ESP32, que aciona a ponte H L298N e move o robô

Materiais necessários

Itens usados nesta montagem.

Materiais necessários: ESP32, ponte H L298N, 2 motores DC, controle de PS3, fios de conexão e bateria
  • 1 ESP32
  • 1 ponte H L298N
  • 2 motores DC
  • 1 controle de PS3 (original ou compatível)
  • Fios de conexão
  • Fonte de alimentação (bateria)

Ligações do hardware

Pinos do ESP32 para o motor direito: GPIO 16 e 17. Pinos do ESP32 para o motor esquerdo: GPIO 18 e 19. Conecte os motores à ponte H e alimente corretamente o módulo e os motores.

Instalação da biblioteca PS3Controller

  • Acesse o repositório: github.com/jvpernis/esp32-ps3
  • Clique em "Code" e depois em "Download ZIP".
  • No Arduino IDE, vá em Sketch, Incluir Biblioteca, Adicionar Biblioteca .ZIP...
  • Selecione o ZIP baixado para instalar.
Passos para instalar a biblioteca PS3Controller a partir do repositório no GitHub

Código para descobrir o MAC do ESP32

Antes de parear o controle, é preciso saber o endereço MAC do Bluetooth do seu ESP32. Carregue este código e abra o Monitor Serial em 115200 baud para ver o endereço.

#include "BluetoothSerial.h" #include "esp_bt_device.h" BluetoothSerial SerialBT; void setup() { Serial.begin(115200); SerialBT.begin("ESP32_BT"); delay(1000); const uint8_t* mac = esp_bt_dev_get_address(); char macStr[18]; sprintf(macStr, "%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); Serial.print("Endereço MAC do Bluetooth: "); Serial.println(macStr); } void loop() {}

Como usar: abra o Arduino IDE e selecione sua placa ESP32. Cole o código acima. Envie para o ESP32. Abra o Monitor Serial (115200 baud). Anote o endereço MAC que aparecer, pois ele será usado no pareamento com o controle de PS3.

Endereço MAC do Bluetooth exibido no Monitor Serial

Pareamento do controle PS3

Execute o programa SIXAXIS Pair Tool com o joystick conectado ao PC pelo cabo USB. Troque o endereço MAC do Bluetooth que estiver aparecendo pelo MAC do ESP32 que você anotou no passo anterior. Depois, carregue o código no seu ESP32 e siga para o próximo passo.

Programa SIXAXIS Pair Tool usado para trocar o MAC pareado do controle de PS3

Código de controle e movimentação

Com o controle pareado, este é o código completo que lê os botões do PS3 e movimenta o robô: X para frente, Círculo para ré, e o D-Pad ou o analógico esquerdo para virar à esquerda ou à direita. Lembre-se de trocar o MAC no Ps3.begin() pelo endereço do seu ESP32.

#include <Ps3Controller.h> // Pinos do motor direito const int motorDir1 = 16; const int motorDir2 = 17; // Pinos do motor esquerdo const int motorEsq1 = 18; const int motorEsq2 = 19; void setup() { Serial.begin(115200); pinMode(motorDir1, OUTPUT); pinMode(motorDir2, OUTPUT); pinMode(motorEsq1, OUTPUT); pinMode(motorEsq2, OUTPUT); // Inicializa controle PS3 com o MAC do ESP32 Ps3.begin("B8:D6:1A:43:84:BA"); // Aqui também é necessário TROCAR o MAC Serial.println("Aguardando controle PS3..."); } void loop() { if (Ps3.isConnected()) { // Frente com botão X if (Ps3.data.button.cross) { frente(); } // Ré com botão Círculo else if (Ps3.data.button.circle) { re(); } // Esquerda com D-Pad ou analógico esquerdo else if (Ps3.data.button.left || Ps3.data.analog.stick.lx < 100) { esquerda(); } // Direita com D-Pad ou analógico esquerdo else if (Ps3.data.button.right || Ps3.data.analog.stick.lx > 150) { direita(); } // Nenhum botão pressionado, parar else { parar(); } } } void frente() { digitalWrite(motorDir1, HIGH); digitalWrite(motorDir2, LOW); digitalWrite(motorEsq1, HIGH); digitalWrite(motorEsq2, LOW); } void re() { digitalWrite(motorDir1, LOW); digitalWrite(motorDir2, HIGH); digitalWrite(motorEsq1, LOW); digitalWrite(motorEsq2, HIGH); } void esquerda() { digitalWrite(motorDir1, HIGH); digitalWrite(motorDir2, LOW); digitalWrite(motorEsq1, LOW); digitalWrite(motorEsq2, HIGH); } void direita() { digitalWrite(motorDir1, LOW); digitalWrite(motorDir2, HIGH); digitalWrite(motorEsq1, HIGH); digitalWrite(motorEsq2, LOW); } void parar() { digitalWrite(motorDir1, LOW); digitalWrite(motorDir2, LOW); digitalWrite(motorEsq1, LOW); digitalWrite(motorEsq2, LOW); }

Pronto

Seu robô já está pronto para ser controlado pelo joystick de PS3. Divirta-se e explore novos projetos.

Robô com ESP32 finalizado, pronto para ser controlado pelo joystick de PS3

Quer montar o seu?

O Kit Primeiros Passos ESP32, com videoaula do Tio Rafa, está disponível na Mamute Eletrônica e é uma ótima base para começar este e outros projetos.