IoT

ESP Motor Shield: Controlando Motores via WiFi

Eletrogate 26 de abril de 2021

Introdução

Há algum tempo, mostramos aqui no blog algumas shields para controle de motor, montagem e programação de plataformas robóticas e até mesmo um controle remoto com Arduino, e hoje não vai ser diferente. Vamos te ensinar a usar a ESP Motor Shield, uma shield para o ESP8266 baseada no chip L293D e que te permite controlar seu carrinho via Wi-Fi, além de todas as possibilidades que o ESP8266 pode nos proporcionar! Mas antes, vamos às apresentações:


Descrição

Chip L293D

Já apresentamos aqui todo o funcionamento de uma ponte H baseada no chip L293D em sua versão para Arduino, mas, de forma resumida, é um CI que possui duas pontes H internas, sendo possível o controle de até 2 motores DC individuais ou um motor de passo. Suporta tensões de até 36V e corrente de 600mA.

ESP8266

O ESP 8266 também já foi apresentado diversas vezes aqui no blog, principalmente em projetos de IOT. É uma placa de desenvolvimento que traz o chip ESP-12E, contando com Wi-fi integrado e 11 portas de uso geral (GPIO). Para conhecer mais sobre essa placa, acesse nossa série de posts sobre o ESP-12 clicando aqui.

Shield

Como já dito anteriormente, a Shield é baseada no CI L293D e foi desenvolvida para o NodeMCU ESP8266 V2 (é importante salientar que o modelo NodeMCU ESP8266 V3 não é compatível com essa shield!), permitindo assim o controle de até dois motores DC individuais ou um motor de passo. Veja abaixo todos os pinos e conexões presentes na nossa shield:


Montagem e Cofiguração

Materiais necessários para o projeto Controlando Motores via WiFi

cta_cart

Montagem

A montagem do hardware é bem simples. Siga o diagrama abaixo para efetuar as ligações elétricas necessárias.

Nota: Se você quiser alimentar o ESP usando a mesma bateria dos motores (conforme indicado em amarelo no diagrama e considerando que a tensão máxima seja de 7V), coloque um Jumper ligando os pinos Vin e Vm. Caso sua configuração esteja assim e o ESP se desconectar com frequência, experimente alimentá-lo separadamente, usando o conector ESP Power.

Configuração

A configuração do nosso projeto será dividida em duas etapas: programação no Smartphone e programação do ESP. Para o Smartphone, vamos usar uma plataforma chamada Blynk, que é uma plataforma de integração entre hardware e software voltada à projetos de IOT. O serviço é baseado em um aplicativo personalizável que nos permite controlar um hardware programável, além de retornar dados ao app, de acordo com a necessidade do seu projeto. A integração é feita através de bibliotecas que devem ser importadas no seu sketch e toda a comunicação é feita via web, através do acesso à uma rede WiFi e, consequentemente, aos servidores Blynk. O download do app, tanto para Android como iOS, o download das bibliotecas e o acesso ao servidor Blynk são gratuitos. Porém, ao criar um projeto, é descontado uma determinada quantidade de Energy – uma espécie de moeda virtual do sistema – para cada componente (widget) adicionado e, ao ser excluído, o valor dele é integrado novamente à sua conta. Ao criar uma conta você recebe 2.000 Energys e esse valor é mais que suficiente desenvolvermos nossos projetos.

Vamos iniciar fazendo o download do app. Para isso, basta ir até sua loja de aplicativos e buscar por “Blynk”.

Ao iniciar o app, essa tela será exibida:

Clique em “Create New Account” para criar sua conta. É importante que você use um email ativo, pois todos os códigos de autenticação dos seus projetos serão enviados por ele.

Feito isso, vamos iniciar nosso projeto clicando em “New Project”

O próximo passo será definir um nome para o seu projeto, selecionar qual plataforma você estará utilizando e o tipo de conexão. Para o nosso tutorial, vamos utilizar o ESP8266 via WiFi. Caso deseje, você também pode alternar o tema da interface entre modo claro e escuro, na opção Theme. Ao final, Clique em Create.

Em seguida, você receberá uma mensagem dizendo que um email contendo o auth token foi enviado para o email que você cadastrou.

Guarde esse código. Você irá usá-lo no código que será carregado no ESP mais à frente!

Clique em OK e, após isso, o ambiente de criação da plataforma será exibido.

Clique em qualquer espaço vazio e uma janela chamada “Widget Box” será exibida. Através dela você pode consultar seu saldo de Energy e adicionar componentes ao projeto.

Comece adicionando um Joystick para o controle do nosso carrinho.

Clique no widget e uma janela com as configurações será exibida.

  • Em Output, mude a opção selecionada para Merge.
  • Em Pin, você pode escolher o que quiser, basta informar o selecionado no código. Para o nosso exemplo, vamos usar o V1.
  • Repare que ao lado do pino selecionado existe uma inscrição dizendo “To access values use:”. Anote esses parâmetros para também os informar no código.

Feito isso, retorne à tela anterior. O próximo passo será a programação do ESP na IDE do Arduino:

Primeiramente, verifique se a sua IDE já possui as placas ESP instaladas. Caso não tenha, siga este tutorial para fazer a instalação.

Com as placas ESP configuradas, vamos instalar as bibliotecas Blynk. Para isso, existem duas maneiras: Você pode instalar diretamente pelo gerenciador de bibliotecas do Arduino ou baixando o arquivo .zip clicando aqui.

Feito isso, cole o seguinte código na sua IDE. A explicação do funcionamento estão descritas nos comentários acima de cada bloco.

//inclusão de bibliotecas
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

//definição de funções e pinos
#define BLYNK_PRINT Serial
#define RightMotorSpeed 5
#define RightMotorDir   0 
#define LeftMotorSpeed  4
#define LeftMotorDir    2

//variáveis referentes à conexão WiFi
char auth[] = "*********************";
char nome_rede[] = "*************";
char senha[] = "*********";

//variáveis de controle dos motores
int minRange = 300;
int maxRange = 900;
int minSpeed = 450;
int maxSpeed = 1020;
int noSpeed = 0;


void movimento(int x, int y){
//mover para frente
   if(y >= maxRange && x >= minRange && x <= maxRange){
    digitalWrite(RightMotorDir,HIGH); 
    digitalWrite(LeftMotorDir,HIGH);
    analogWrite(RightMotorSpeed,maxSpeed);
    analogWrite(LeftMotorSpeed,maxSpeed);
  }

//mover para frente e para direita
  else if(x >= maxRange && y >= maxRange){
    digitalWrite(RightMotorDir,HIGH);
    digitalWrite(LeftMotorDir,HIGH);
    analogWrite(RightMotorSpeed,minSpeed);
    analogWrite(LeftMotorSpeed,maxSpeed);
  }

//mover para frente e para esquerda
  else if(x <= minRange && y >= maxRange){
    digitalWrite(RightMotorDir,HIGH);
    digitalWrite(LeftMotorDir,HIGH);
    analogWrite(RightMotorSpeed,maxSpeed);
    analogWrite(LeftMotorSpeed,minSpeed);
  }

  //zona neutra
  else if(y < maxRange && y > minRange && x < maxRange && x > minRange){
    analogWrite(RightMotorSpeed,noSpeed);
    analogWrite(LeftMotorSpeed,noSpeed);
  }

 //mover para trás
  else if(y <= minRange && x >= minRange && x <= maxRange){
    digitalWrite(RightMotorDir,LOW);
    digitalWrite(LeftMotorDir,LOW);
   analogWrite(RightMotorSpeed,maxSpeed);
    analogWrite(LeftMotorSpeed,maxSpeed);
  }

  //mover para trás e para direita
  else if(y <= minRange && x <= minRange){
    digitalWrite(RightMotorDir,LOW);
    digitalWrite(LeftMotorDir,LOW);
    analogWrite(RightMotorSpeed,minSpeed);
    analogWrite(LeftMotorSpeed,maxSpeed); 
  }

  //mover para trás e para esquerda
  else if(y <= minRange && x >= maxRange){
    digitalWrite(RightMotorDir,LOW);
    digitalWrite(LeftMotorDir,LOW);
    analogWrite(RightMotorSpeed,maxSpeed);
    analogWrite(LeftMotorSpeed,minSpeed);
  }
}

void setup(){
//iniciando a comunicação serial para verificação da conexão WiFi  
  Serial.begin(9600);
  Blynk.begin(auth, nome_rede, senha);
 
//setando os pinos referentes aos motores
  pinMode(RightMotorSpeed, OUTPUT);
  pinMode(LeftMotorSpeed, OUTPUT);
  pinMode(RightMotorDir, OUTPUT);
  pinMode(LeftMotorDir, OUTPUT);
  
//iniciando o carrinho com os motores desligados e sentido de rotação à frente
  digitalWrite(RightMotorSpeed, LOW);
  digitalWrite(LeftMotorSpeed, LOW);
  digitalWrite(RightMotorDir, HIGH);
  digitalWrite(LeftMotorDir,HIGH);
}

void loop(){
//comando para execução do código
   Blynk.run();
}

//inserção dos parâmetros informados pelo app
BLYNK_WRITE(V1){               //pino virtual selecionado no joystick
  int x = param[0].asInt();
  int y = param[1].asInt();
  movimento(x,y);
}

As alterações básicas que você deve fazer no código se resumem a informar o código de autenticação que lhe foi enviado por email, nome da sua rede WiFi e senha, diferenciando letras maiúsculas e minúsculas, nas variáveis referentes à conexão WiFi:

//variáveis referentes à conexão WiFi
char auth[] = "*********************"; 
char nome_rede[] = "*************"; 
char senha[] = "*********";

Feito isso, basta carregar o código no seu ESP e, ao final, verificar se o mesmo está conectado à rede. Para isso, pressione o botão Reset do seu ESP, em seguida abra o Monitor Serial da IDE do Arduino e verifique se a seguinte mensagem foi printada na tela:

Com a conexão WiFi efetuada, basta conectar seu ESP à shield, energizar o carrinho e fazer a conexão com o aplicativo, clicando no botão Play:

Com tudo conectado, basta movimentar o joystick e se divertir com seu carrinho conectado à sua rede WiFi. Veja abaixo um gif de como ficou o nosso projetinho:


Conclusão

Concluímos aqui a montagem de mais uma plataforma robótica, dessa vez controlado através da rede WiFi. A ESP Motor Shield é uma plaquinha extremamente versátil que nos abre um novo leque de possibilidades nesse segmento de robôs e, uma sugestão que deixamos a você, leitor, é: aperfeiçoe o código, implemente outras funções como controle de velocidade, sensores e outras funcionalidades capazes de automatizar ainda mais o seu robô. Fazendo isso você estará praticando e evoluindo ao máximo seus conhecimentos adquiridos até aqui!

Um forte abraço e até a próxima.

 


Se interessou por esse projeto? Não deixe de conferir nossa loja e os produtos para evoluir ainda mais o seu projeto. Fez o carrinho? Poste o resultado e nos marque no Instagram @Eletrogate. Estamos ansiosos para ver o seu resultado!

Tenha a Metodologia Eletrogate na sua Escola! Conheça nosso Programa de Robótica Educacional.


Sobre o Autor


Samuel Martins
@samuel.martins192

Cursando Eletroeletrônica no SENAI CETEL. Fanático por eletrônica, automação, impressão 3D e afins, dedico meu tempo livre a pesquisas e projetos ligados às principais áreas de interesse, pratico aeromodelismo e sou curioso por astrofotografia.


Eletrogate

26 de abril de 2021

A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.

Tenha a Metodologia Eletrogate dentro da sua Escola! Conheça nosso Programa de Robótica nas Escolas!

Eletrogate Robô

Cadastre-se e fique por
dentro de novidades!