Controle de servomotores com Arduino e ESP8266

Controle-de-servomotores-com-Arduino-e-ESP8266-destaque

Este artigo tem por objetivo mostrar mais uma alternativa de controle de servomotores, remotamente através de uma rede Wi-Fi®, fazendo-se o uso de um navegador de internet comum (neste artigo foi utilizado o Firefox). Dentre as aplicações possíveis destacamos: brinquedos, robôs, posicionamento de câmeras, entre outros.

 

O controle para este servomotor será realizado através do Arduino Uno e a conexão com rede local será dada através do módulo ESP8266. A interface web a qual fará o controle foi projetada em HTML e jQuery.

 

 

Materiais utilizados

 

Para esse projeto os seguintes componentes são necessários:

  • Arduino Uno - placa de microcontrolador baseado no ATmega328, com 14 pinos de entrada/saída digital, 6 entradas analógicas, conexão USB (Figura 1);
  • ESP8266 ESP-01 - módulo wi-fi  capaz de realizar a interface do microcontrolador, através de comunicação serial, com uma rede 802.11b/g/n (Figura 2);
  • Servomotores SG90 (x2) - servomotor popular e bastante acessível (Figura 3);
  • Protoshield - para facilitar a montagem do protótipo (Figura 4), simplificando assim a interligação dos componentes. Uma protoboard comum também pode ser utilizada para montagem dos componentes;
  • Resistores de 1 kOhm (x2) e de 10 kOhm (x1) - para compatibilizar os níveis de tensão entre o Arduino e o ESP8266;
  • Alguns fios para conectar os componentes;
  • Um computador (para compilar e fazer o upload do código para o Arduino).

 

Não é necessária a utilização de ferramentas específicas para conceber este projeto, além disso, os materiais citados podem ser encontrados facilmente.

 

A seguir listamos algumas opções em que o Arduino Uno pode ser alimentado: conectando-o a um computador por meio de um cabo USB tipo B, através de uma fonte externa 5Vcc com conector “Jack” tipo fêmea (vide figura 1) ou bateria.

 

Arduino Uno
Figura 1 - Arduino Uno

 

ESP8266 - módulo wi-fi
Figura 2 - ESP8266 - módulo wi-fi
 Servomotor SG90
Figura 3 - Servomotor SG90

 

 

Protoshield
Figura 4 - Protoshield

 

 

As figuras abaixo ilustram a interligação entre os componentes em um diagrama esquemático e ilustração da montagem dos componentes em protoboard.

 

Conecte todos os componentes de acordo com os esquemáticos (Figuras 5 e 6). Infelizmente, não é possível conectar o módulo ESP8266 diretamente à protoboard devido ao posicionamento dos pinos. Alguns resistores são utilizados para compatibilizar os níveis de tensão entre o Arduino (5V) e o módulo wi-fi (3.3V).

 

Além disso, os conectores dos servomotores são do tipo “fêmea”, o que pode dificultar um pouco a sua conexão. Por isso, serão necessários alguns fios para concluir a conexão dos componentes.

 

Montagem dos componentes em protoboard para controle de servomotores com Arduino e ESP8266
Figura 5 - Montagem dos componentes em protoboard

 

Esquemático do circuito com Arduino e ESP8266
Figura 6 - Esquemático do circuito

 

 

Programação do Arduino

 

Instale a última versão do Arduino IDE e e insira o código abaixo. Substitua XXXXX pelo SSID do seu roteador e YYYYY pela senha da sua rede. Verifique se o baudrate do ESP8266 está configurado corretamente. Conecte o Arduino à porta USB do computador e realize o upload do código.

 

 

Nesse projeto foi utilizada a biblioteca servo.h para controle de servomotores. Para evitar conflitos entre o módulo wi-fi e a porta USB do computador durante o upload do código, foi utilizada a biblioteca softserial.h, a qual simula uma porta serial em outros dois pinos diferentes dos normalmente utilizados para comunicação serial. Nenhuma biblioteca adicional foi utilizada para comunicação entre o Arduino e o módulo ESP8266.

 

Alguns servomotores podem começar a tremer e fazer ruído quando sua posição fica perto dos limites do servo (0 e 180 graus). Para evitar isso, o ângulo foi limitado entre 10 e 170 graus tanto no código do Arduino quanto na interface de controle que será apresentada posteriormente.

 

Infelizmente, as bibliotecas servo.h e softserial.h utilizam o mesmo timer do microcontrolador ATmega328. Isso pode causar falha nos servos quando o Arduino tenta se comunicar com o ESP8266. Para evitar essa interferência, os servos são desconectados do Arduino (via código) após o recebimento de cada comando. Você também pode contornar esse problema conectando o módulo diretamente aos pinos de comunicação serial padrão do Arduino. Nesse último caso, não esqueça de desconectar fisicamente o ESP8266 antes de fazer qualquer upload.

 

 

Interface de controle

 

Foi projetada uma interface de controle de servomotores em HTML utilizando-se um navegador comum (Firefox por exemplo). Foram utilizados nesse tutorial dois servos, porém podem ser utilizados mais motores (esta solução foi testada com até quatro dispositivos).

 

Faça o download dos arquivos do projeto no final do artigo. Salve os arquivos Wi-servo.html e jquery.js, ambos na mesma pasta e execute o arquivo html (Figura 7).

 

Esquemático do circuito
Figura 7 - Esquemático do circuito

 

Com o Arduino conectado ao computador, abra o Serial Monitor e reinicie o microcontrolador (botão de reset). Com isso o Arduino tentará se conectar com a rede wi-fi automaticamente e, se a conexão for bem sucedida, exibirá o IP que foi atribuído pelo roteador, conforme exemplo abaixo (Figura 8).

 

Endereço IP apresentado após estabelecimento da conexão.
Figura 8 - Endereço IP apresentado após estabelecimento da conexão.

 

Um campo de texto foi colocado na interface para entrada manual desse endereço (Figura 9).

 

Após esses passos, o sistema está pronto para funcionar. Escolha o ângulo dos motores nas barras de rolagem para realizar os movimentos (Figura 10).

 

Entrada do endereço IP atribuído ao módulo ESP8266.
Figura 9 - Entrada do endereço IP atribuído ao módulo ESP8266.
Seleção da posição de cada um dos servomotores.
Figura 10 - Seleção da posição de cada um dos servomotores.

 

O vídeo abaixo apresenta o funcionamento do sistema após os passos acima descritos.

 

 

 

Downloads

 

Faça o download dos arquivos do projeto aqui.

 

 

Referências

 

Tutorial do AllAboutEE sobre acionamento de LEDs usando o ESP8266 com Arduino

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Igor Albuquerque
Engenheiro eletrônica pela Universidade Federal de Pernambuco (UFPE), engenheiro mecatrônico pela Universidade de Pernambuco (UPE), mestre em controle e automação pela Universidade Federal do Rio de Janeiro (UFRJ), especialista em instrumentação industrial pelo Instituto Brasileiro de Petróleo (IBP) e inventor nas horas vagas.

23
Deixe um comentário

avatar
 
7 Comment threads
16 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
8 Comment authors
Lorran LinoAlejandro Mesias PerezFranklin S.C. BonfimÉrick NogueMarcos Antonio Farias Costa Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Lorran Lino
Visitante
lorran

como que faço para contornar o problema de timer utilizando os pinos rx e tx no arduino? so ligandios em rx e tx e mudar a porta no codigo???

Alejandro Mesias Perez
Visitante
Alejandro Mesias

Esse módulo do 8266 é programável ? ví que usa comandos para fazer chamadas AT para configurar o módulo. Mas até onde sei tem modelos dele que vc liga no nodeMcu e programa "de boa".
Tenho interesse em usar ele para baixar dados da web para um microSd.

Igor Albuquerque
Visitante
Igor

É possível programar o ESP8266-01 utilizando a IDE do Arduino, sendo necessário um conversor UART de 3,3V para conectar o módulo a porta USB do seu computador. Dessa forma é possível utilizar o próprio microcontrolador do ESP, porém há a limitação do número de I/Os. Existem módulos baseados no ESP8266 (nodeMCU, ESP8266 Thing, etc.) que já vem com a interface USB e possuem mais pinos de entradas e saídas digitais. No exemplo apresentado nesse tutorial o módulo ESP8266 foi utilizado apenas como um "modem Wi-fi" para o Arduino Uno. Por isso foi mantido o firmware padrão desse módulo (com os… Leia mais »

Franklin S.C. Bonfim
Visitante
Franklin Bonfim

Muito bom!

Érick Nogue
Visitante
Érick

Boa tarde, meu nome é Érick e nao estou conseguindo conectar a rede, esta tudo ok com o esp8266, notei que nao se pede o nome da rede e a senha, voce pode me ajudar ?

Igor Albuquerque
Visitante
Igor

Boa tarde. Você verificou se o ESP8266 está respondendo aos comandos das linhas 43 e 44 (pelo Serial Monitor)? Você colocou o SSID e password do seu roteador no código (linhas 45)?

Érick Nogue
Visitante
Érick

Verifiquei sim, está parecendo somente caracter sem sentindo no serial monitor, já testei com todos os valores de comunicação

Igor Albuquerque
Visitante
Igor

Para verificar o módulo você pode proceder da seguinte maneira: fazer o uploado do bare-minimum.ino para o Arduino e conectar os pinos RX/TX do Arduino no TX/RX do ESP8266. Depois disso, abrir o Serial Monitor e enviar o comando "AT" e ver qual a resposta que você obtem. Caso retorne lixo, alterar o baudrate e tentar novamente. A opção "Both NL & CR" deverá ser selecionada.
Segue um tutorial que pode ser útil caso você deseje trocar o baudrate do seu ESP8266:
http://blog.filipeflop.com/wireless/esp8266-arduino-tutorial.html

Marcos Antonio Farias Costa
Visitante
Marcos Antonio Farias Costa

Bom dia Igor, você teria algum exemplo controlando leds com esp8266-01 e arduindo. Estou com um projeto do meu curso para desenvolver que consiste em controlar(acender e apagar) leds via browser usando o esp8266-01 e o Arduíno, mais mais estou conseguindo fazer. voce teria alguma postagem parecido para que eu posso ter uma ideia de como fazer?
Obrigado

Igor Albuquerque
Visitante
Igor

Olá! Eu segui o seguinte tutorial para desenvolver o meu projeto: http://allaboutee.com/2015/01/02/esp8266-arduino-led-control-from-webpage/
Nele o autor faz o controle de alguns LEDs usando o ESP8266-01, com comandos através do browser. Acredito que é exatamente o que você está precisando.

Marcos Antonio Farias Costa
Visitante
Marcos Antonio Farias Costa

Valeu Igor,

vou tentar montar a partir desse exemplo e depois te falo se deu certo.
Muito obrigado pela atenção.

Geraldo Ramos
Visitante
Geraldo Ramos

Conectei tudo certinho seguindo o esquema de forma idêntica (conferi 3x) e os dados da rede wifi também conferidos (3x).

O serial monitor mostra apenas caracteres doidos:
�)��)����)�T������������)�)�ҩ��)�R������������R�)����)�J������������

Alguma ideia? Quando reinicio o UNO, somente mostra denovo esses caracteres, mas não conecta na rede nem faz o print da parte que deveria mostrar o IP que pegou na rede. Alguma sugestão de troubleshooting? A luz do vermelha do ESP8266 fica sempre acesa e dá uns blinks na azul quando reinicia, até parar e ficar só a vermelha e dai em diante o monitor serial não retorna mais nada.

Igor Albuquerque
Visitante
Igor

Pelo que você falou, pode ser um problema relacionado ao baudrate do seu módulo ESP8266. No meu caso (como está no código), o ESP8266 se comunica à 19200 com o Arduino, e o Arduino em 9600 com o Serial Monitor. Pode ser que o seu módulo esteja com um baudrate diferente. Para testar você pode fazer o upload do "BareMinimum.ino" para o seu Arduino, conectar o RX/TX do ESP8266 no TX/RX do Arduino, abrir o Serial Monitor e enviar alguns comandos AT (ex.: AT, AT+RST ou AT+CWMODE=1) para ver qual a resposta. Se vier apenas lixo você pode alterar a… Leia mais »

Geraldo Ramos
Visitante
Geraldo Ramos

funfou mudando pra 115200. Valeu mestre 🙂

Igor Albuquerque
Visitante
Igor

Boa! Agora é só diversão!

Geraldo Ramos
Visitante
Geraldo Ramos

Valeu velho. Agora ta rolando um outro problema, não sei se acontece com voce, mas nem todo comando get que é feito, é processado. As vezes só vai depois de tentar algumas vezes. E também não tem resposta nenhuma do servidor. Quando tentei fazer o get usando Node, fica eternamente esperando resposta ( e as vezes processa o comando e as vezes não). Exemplo via jquery (ignorando return results) http://d.pr/v/ZXKD/3NR5ZflX , note que nem sempre o comando chega. E aqui um exemplo usando node: http://d.pr/v/19a4b/5IwivnIi (note que depois de rodar, nunca vem nenhum response, é necessário matar a aplicação e… Leia mais »

Igor Albuquerque
Visitante
Igor

Faz um testr: coloca um Serial.println(msg); entre as linhas 64 e 65 para a gente ver o que está chegando.
Pode ser que a mensagem que o Arduino esteja recebendo esteja meio corrompida e por isso aparece aquele lixo que a gente no finalzinho do primeiro vídeo.
Se for isso mesmo, uma possibilidade seria tentar mudar o baudrate do ESP 8266 para diminuir a chance da mensagem ser corrompida.

Geraldo Ramos
Visitante
Geraldo Ramos

eu acho que é isso. Esse baud rate pode tá afetando geral. Aqui ta o teste que vc pediu: http://d.pr/i/15th1/3WvquXHi (adicionei o print entre a linha 64/65 e mandei vários comandos pra mudar o angle do sr1). Como de costume, alguns rolaram, outros não e deu pra ver lixos chegando. Acho que é uma questão de consistência na comunicação. Tentei investigar como mudar o baud rate de 115200 pra 9600 (e vi que tem mta gnt fazendo isso e teoricamente ja sei uma forma certa de fazer), mas, não sei como me comunicar com o ESP8266, já que não tem… Leia mais »

Geraldo Ramos
Visitante
Geraldo Ramos

só agora percebi que esse ESP8266MOD que tenho é um board completo hehehehe (n00b). Terminei conseguindo fazer funcionar tudo com ele, sem usar o arduino UNO. O bom é que o projeto ficou mais compacto. De todo jeito, queria arrumar uma solução pro baud rate, pois pretendo usar o ESP8266(wifi only) com o UNO pra outro projeto. Suspeito que preciso pegar um FTDI pra poder comunicar direto com o ESP8266 e fazer a mudança. Acho que temos praticamente certeza agora que o problema na instabilidade na comunicação é devido ao baud rate alto (se conseguir mudar pra 9600 acredito que… Leia mais »

Igor Albuquerque
Visitante
Igor

Eu troquei o baudrate do meu módulo de acordo com as instruções desse blog e deu certo: http://blog.filipeflop.com/wireless/esp8266-arduino-tutorial.html

Geraldo Ramos
Visitante
Geraldo Ramos

vou tentar! Valeu brother 🙂

Nicholas Eduardo
Visitante
Nicholas Eduardo

Muito bom o artigo, parabéns pelo trabalho no robô da alegria.

Igor Albuquerque
Visitante
Igor

Obrigado! 😀