Acionando motor DC por meio do pino “Touch” do ESP-32

, ,

Neste projeto, vamos explorar uma aplicação ainda mais dinâmica e interativa dos pinos touch do ESP-32, desta vez para controlar um motor DC. Vamos aprender a manipular a direção e o movimento do motor usando apenas o toque: um toque no primeiro pino fará o motor girar no sentido horário, um toque no segundo pino o fará girar no sentido anti-horário, e tocando ambos os pinos simultaneamente, o motor será parado. Este projeto não só aprofunda nosso entendimento sobre os pinos touch do ESP-32, mas também nos introduz ao controle prático de dispositivos mecânicos, abrindo um leque de possibilidades para aplicações em automação e robótica.

MATERIAIS UTILIZADOS:

Todos os itens vocês encontram na WJ Componentes.

Para o controle do motor DC Iremos utilizar o Driver motor L298N.

  Esse módulo é normalmente utilizado para controlar cargas indutivas, como motores. Ele possui duas ponte-H sendo possível trabalhar com dois motores e, além de controlar o sentido de rotação deles, pode também controlar a velocidade dos mesmos por meio dos pinos PWM (Pulse Width Modulation-Modulação por largura de pulso).

            Ele possui três pinos de alimentação:

  • GND;
  • 12V – Para alimentação externa;
  • 5v – A placa possui também um regulador de tensão que, quando estamos operando com mais de 6V ele disponibiliza 5V para uso externo. Pode atuar com alimentação vinda do microcontrolador quando estamos trabalhando com um motor que opere nessa tensão;

No nosso caso, os pinos do regulador estão jumpeados e o motor opera com 6V.

Possui 4 saídas para os motores (OUT1 – OUT2 para o motor 1 e OUT3 – OUT4 para o motor 2). E 4 entradas sendo IN1 e IN2 para o motor 1, e IN3 e IN4 para o motor 2, responsáveis por sua rotação. Há também na placa o ENA e ENB que são ligados no PWM e responsáveis pela velocidade do motor – não é utilizado no projeto.

Dinâmica de ativação:

MONTAGEM DO PROJETO

Agora, podemos colocar os componentes na placa protoboard.

Pinos utilizados:

→ D25 – IN1

→ D26 – IN2

→ D14 – GPIO14, pino touch;

→ D27 – GPIO 27, pino Touch

            Os pinos touch estão conectados apenas a jumpers, para assim podermos tocá-los.

CÓDIGO FONTE

int IN1 = 26; 
int IN2 = 25; 
int touch1;
int touch2;

void setup() 
  {
      	Serial.begin(9600);
      	pinMode(IN1, OUTPUT);
      	pinMode(IN2, OUTPUT);
  }

void loop() 
  {
      	touch1 = touchRead (14); //Realiza a leitura do pino touch1
      	touch2 = touchRead (27); //Realiza a leitura do pino touch2
        Serial.println (touch1); //Mostra o valor serial dos pinos touch - Valor1:15.
        Serial.println (touch2); //Mostra o valor serial dos pinos touch - Valor2:15.

      	
  
      	if(touch1<=15 && touch2>15)//motor sentido horário
        	 {
          		digitalWrite(IN1, HIGH);
          		digitalWrite(IN2, LOW);
        	 }
      	else if(touch1<=15 && touch2<=15)//motor freio
        	 {
          		digitalWrite(IN1, HIGH);
          		digitalWrite(IN2, HIGH);
		delay(500);
        	 }
      	else if(touch2<=15 && touch1>15)//motor sentido anti-horário
        	 {
          		digitalWrite(IN1, LOW);
          		digitalWrite(IN2, HIGH);
        	 }
}

Olhando o código mais de perto:

-> Declaração das variáveis:

int IN1 = 26; 
int IN2 = 25; 
int touch1;
int touch2

Declaramos os pinos digitais que vão comandar a direção do motor e os pinos touch.

-> Função setup:

void setup() 
  {
      	Serial.begin(9600);
      	pinMode(IN1, OUTPUT);
      	pinMode(IN2, OUTPUT);
  }

Na função Setup realizamos a inicialização a Serial e também declaramos nossos pinos digitais como saídas.

-> Função loop:

void loop() 
  {
      	touch1 = touchRead (14); //Realiza a leitura do pino touch1
      	touch2 = touchRead (27); //Realiza a leitura do pino touch2
        //Serial.println (touch1); //Mostra o valor serial dos pinos touch - Valor1:15.
        //Serial.println (touch2); //Mostra o valor serial dos pinos touch - Valor2:15.

      	
  
      	if(touch1<=15 && touch2>15)//motor sentido horário
        	 {
          		digitalWrite(IN1, HIGH);
          		digitalWrite(IN2, LOW);
        	 }
      	else if(touch1<=15 && touch2<=15)//motor freio
        	 {
          		digitalWrite(IN1, HIGH);
          		digitalWrite(IN2, HIGH);
		delay(500);
        	 }
      	else if(touch2<=15 && touch1>15)//motor sentido anti-horário
        	 {
          		digitalWrite(IN1, LOW);
          		digitalWrite(IN2, HIGH);
        	 }
}

Aqui realizamos os comandos para controle do sentido horário, anti-horário e freio do motor, que funciona da seguinte forma:

Quando tocamos o pino touch1 o motor gira para o sentido horário, ao tocarmos o Touch2 ele gira no sentido Anti-horário. E ao tocar os dois ao mesmo tempo o motor para.

O comando que mostra o valor serial está como comentário, é um comando opcional q pode ser acionado para conferir os valores dos pinos touch.

O delay no freio foi necessário devido a leitura dos Touch’s serem muito rápidas o que pode dar interferência no comando.

Este projeto demonstra como os pinos touch do ESP-32 podem ser utilizados de maneira criativa e eficaz para controlar um motor DC, oferecendo uma nova perspectiva no controle de dispositivos mecânicos. Esperamos que esta exploração prática tenha inspirado você a considerar as inúmeras possibilidades que o ESP32 pode oferecer

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *