2WD ESP-32 RC CAR + BLUETOOTH
ESP-32:
1 Placa ESP-32 WROOM
1 Ponte H-L298n
2 motor 3V-6V
2 jumpers macho x fêmea
4 jumpers fêmea x fêmea
OBS: Nos 2 projetos não contei os terminais da bateria e dos motores.
Porque os motores podem ser comprados com terminais soldados e existem baterias que são vendidas com um adaptador de terminais.
OBS: In the 2 types i don't count the terminals of the battery and the motors.
Because the motors can be bought with soldered terminals and there are much batteries sold with a terminals adapter
Código/Code
Para enviar o código para a sua placa você vai precisar do app Arduino IDE e de 1 PC ou Nootebook para eviar o código conectando a sua máquina com a sua placa através de um cabo USB.
To send the code to your board you will need the app Arduino IDE and 1 PC or Nootebook, connecting your machine with your board via a USB cable.
Código sem controle de velocidade / Code without speed control
ESP-32
#include "BluetoothSerial.h"
const int pin1 = 26;
const int pin2 = 25;
const int pin3 = 33;
const int pin4 = 32;
BluetoothSerial SerialBT;
char comando;
void setup() {
Serial.begin(9600);
//btSerial.begin(9600);
SerialBT.begin("CarrinhoESP32"); // Isso faz com que o bluetooth tenha o nome em() This makes the bluetooth has the name inside()
pinMode(pin1, OUTPUT);
pinMode(pin2, OUTPUT);
pinMode(pin3, OUTPUT);
pinMode(pin4, OUTPUT);
Serial.println("Fim Setup");
delay(2000); }
void loop() {
if (SerialBT.available()) {
comando = SerialBT.read();
}
switch (comando) {
case 'F': {
digitalWrite(pin1, HIGH);
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
digitalWrite(pin4, HIGH);
break;
}
case 'R': {
digitalWrite(pin1, HIGH);
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
digitalWrite(pin4, LOW);
break;
}
case 'L': {
digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
digitalWrite(pin4, HIGH);
break;
}
case 'B': {
digitalWrite(pin1, LOW);
digitalWrite(pin2, HIGH);
digitalWrite(pin3, HIGH);
digitalWrite(pin4, LOW);
break;
}
default: {
digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
digitalWrite(pin4, LOW);
break;
}
}
}
Código com controle de velocidade pelos pinos enable / Code with speed control by enable pins
ESP-32
#include "BluetoothSerial.h"
const int pin1 = 26;
const int pin2 = 25;
const int pin3 = 33;
const int pin4 = 32;
const int ena1 = 27;
const int ena2 = 18;
int vel1 = 200;
int vel2 = 200;
int vel3 = 200;
BluetoothSerial SerialBT;
char comando;
void setup() {
Serial.begin(9600);
//btSerial.begin(9600);
SerialBT.begin("CarrinhoESP32pwm");
pinMode(pin1, OUTPUT);
pinMode(pin2, OUTPUT);
pinMode(pin3, OUTPUT);
pinMode(pin4, OUTPUT);
pinMode(ena1, OUTPUT);
pinMode(ena2, OUTPUT);
ledcSetup(0, 5000, 8);
ledcSetup(1, 5000, 8);
ledcAttachPin(ena1, 1);
ledcAttachPin(ena2, 2);
Serial.println("Fim Setup");
delay(2000); }
void loop() {
if (SerialBT.available()) {
comando = SerialBT.read();
}
switch (comando) {
case '0': {
vel1 = 100;
vel2 = 75;
vel3 = 0;
break;
}
case '4': {
vel1 = 110;
vel2 = 95;
vel3 = 0;
break;
}
case '6': {
vel1 = 125;
vel2 = 100;
vel3 = 0;
break;
}
case '7': {
vel1 = 155;
vel2 = 125;
vel3 = 0;
break;
}
case '8': {
vel1 = 180;
vel2 = 155;
vel3 = 0;
break;
}
case '9': {
vel1 = 200;
vel2 = 180;
vel3 = 0;
break;
}
case 'q': {
vel1 = 255;
vel2 = 200;
vel3 = 0;
break;
}
case 'F': { //move frente
digitalWrite(pin1, HIGH);
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
digitalWrite(pin4, HIGH);
ledcWrite(1, vel1);
ledcWrite(2, vel1);
break;
}
case 'I': {//frente direita
digitalWrite(pin1, HIGH);
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
digitalWrite(pin4, HIGH);
ledcWrite(1, vel1);
ledcWrite(2, vel2);
break;
}
case 'G': {//frente esquerda
digitalWrite(pin1, HIGH);
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
digitalWrite(pin4, HIGH);
ledcWrite(1, vel2);
ledcWrite(2, vel1);
break;
}
case 'R': {//direita
digitalWrite(pin1, HIGH);
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
digitalWrite(pin4, LOW);
ledcWrite(1, vel1);
ledcWrite(2, vel3);
break;
}
case 'L': {//esquerda
digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
digitalWrite(pin4, HIGH);
ledcWrite(1, vel3);
ledcWrite(2, vel1);
break;
}
case 'B': {// ré
digitalWrite(pin1, LOW);
digitalWrite(pin2, HIGH);
digitalWrite(pin3, HIGH);
digitalWrite(pin4, LOW);
ledcWrite(1, vel1);
ledcWrite(2, vel1);
break;
}
case 'H': {// ré esquerda
digitalWrite(pin1, LOW);
digitalWrite(pin2, HIGH);
digitalWrite(pin3, HIGH);
digitalWrite(pin4, LOW);
ledcWrite(1, vel2);
ledcWrite(2, vel1);
break;
}
case 'J': {//ré direita
digitalWrite(pin1, LOW);
digitalWrite(pin2, HIGH);
digitalWrite(pin3, HIGH);
digitalWrite(pin4, LOW);
ledcWrite(1, vel1);
ledcWrite(2, vel2);
break;
}
default: {
digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
digitalWrite(pin4, LOW);
ledcWrite(1, vel1);
ledcWrite(2, vel1);
break;
}
}
}
Código com controle de velocidade sem pinos enable / Code with speed control without enable pins
ESP-32
PWM com pinos enable / PWM with enable pins
#include "BluetoothSerial.h"
const int pin1 = 26;
const int pin2 = 25;
const int pin3 = 33;
const int pin4 = 32;
int vel1 = 0;
int vel2 = 0;
int vel3 = 0; // variavel necessária porque serve para entender que aquele pino só esta em repouso
BluetoothSerial SerialBT;
char comando;
void setup() {
Serial.begin(9600);
//btSerial.begin(9600);
SerialBT.begin("TANK_ESP32");
pinMode(pin1, OUTPUT);
pinMode(pin2, OUTPUT);
pinMode(pin3, OUTPUT);
pinMode(pin4, OUTPUT);
//Para Configurar o PWM do ESP32 você pode fazer de 2 maneiras: uma é a tradicional criando variaveis para defini-las e a outra é a fazendo de maneira direta
//pois esses valores já estão dentro dos dados da placa, dessa maneira fica: ledcSetup(Canal de 0-15,Frequência que será utilizada,Bits que serão utilizados);
ledcSetup(1, 5000, 8); //troquei o canal 0 para 1 porque fica mais facil de reconhecer
ledcSetup(2, 5000, 8);
ledcSetup(3, 5000, 8);
ledcSetup(4, 5000, 8);
ledcAttachPin(pin1, 1);
ledcAttachPin(pin2, 2);
ledcAttachPin(pin3, 3);
ledcAttachPin(pin4, 4);
Serial.println("Fim Setup");
delay(2000); }
void loop() {
if (SerialBT.available()) {
comando = SerialBT.read();
}
switch (comando) {
case '0': {
vel1 = 100;
vel2 = 75;
vel3 = 0;
break;
}
case '4': {
vel1 = 110;
vel2 = 95;
vel3 = 0;
break;
}
case '6': {
vel1 = 125;
vel2 = 100;
vel3 = 0;
break;
}
case '7': {
vel1 = 155;
vel2 = 125;
vel3 = 0;
break;
}
case '8': {
vel1 = 180;
vel2 = 155;
vel3 = 0;
break;
}
case '9': {
vel1 = 200;
vel2 = 180;
vel3 = 0;
break;
}
case 'q': {
vel1 = 255;
vel2 = 200;
vel3 = 0;
break;
}
case 'F': { //move frente
ledcWrite(1, vel1);
ledcWrite(2, vel3);
ledcWrite(3, vel3);
ledcWrite(4, vel1);
break;
}
case 'I': {//frente direita
ledcWrite(1, vel1);
ledcWrite(2, vel3);
ledcWrite(3, vel3);
ledcWrite(4, vel2);
break;
}
case 'G': {//frente esquerda
ledcWrite(1, vel2);
ledcWrite(2, vel3);
ledcWrite(3, vel3);
ledcWrite(4, vel1);
break;
}
case 'R': {//direita
ledcWrite(1, vel1);
ledcWrite(2, vel3);
ledcWrite(3, vel3);
ledcWrite(4, vel3);
break;
}
case 'L': {//esquerda
ledcWrite(1, vel3);
ledcWrite(2, vel3);
ledcWrite(3, vel3);
ledcWrite(4, vel1);
break;
}
case 'B': {// ré
ledcWrite(1, vel3);
ledcWrite(2, vel1);
ledcWrite(3, vel1);
ledcWrite(4, vel3);
break;
}
case 'H': {// ré esquerda
ledcWrite(1, vel3);
ledcWrite(2, vel2);
ledcWrite(3, vel1);
ledcWrite(4, vel3);
break;
}
case 'J': {//ré direita
ledcWrite(1, vel3);
ledcWrite(2, vel1);
ledcWrite(3, vel2);
ledcWrite(4, vel3);
break;
}
default: {
ledcWrite(1, vel3);
ledcWrite(2, vel3);
ledcWrite(3, vel3);
ledcWrite(4, vel3);
break;
}
}
}