Controle de carro robótico por WiFi

Este tutorial irá ensiná-lo a controlar um carro Robo usando qualquer dispositivo habilitado para Wifi.

Componentes necessários:

1. Módulo Wi-Fi ESP 8266
2. Arduino UNO (ou equivalente) 3. Motorista L293D 4. Chassi 5. Motorredutores 12V DC X 2 6. Rodas X 2 7. Roda giratória 8. Fios 9. Tábua de ensaio 10. PCB pequeno 11. Cabeçalhos masculinos 12. Cabeçalhos femininos

Sobre ESP8266

ESP 8266 é a última novidade na internet. É um módulo Wifi um pouco maior que uma moeda de 1 Re. Bem, não é por isso que é famoso. O que o tornou muito popular entre os entusiastas da eletrônica é seu custo inacreditavelmente baixo. Comprei por apenas US $ 5 (~ 300 Rs). Um Arduino junto com um escudo Wifi custaria 10 vezes o custo deste módulo.

Imagem mostrando módulos Wi-Fi ESP8266

Figo. 1: Imagem mostrando módulos Wi-Fi ESP8266

Pode ser interligado com qualquer microcontrolador através da comunicação USART, o que implica que necessita apenas dos pinos RX e TX. Outra pena ao chapéu foi adicionada recentemente. O desenvolvedor lançou os arquivos SDK do módulo e, portanto, até mesmo o módulo pode ser reprogramado e seus pinos GPIO podem ser usados ​​de forma independente, sem qualquer microcontrolador adicional. Mas isso está além do escopo deste tutorial. Estaríamos usando o módulo junto com o Arduino UNO.

Fazendo um adaptador Breadboard para o módulo ESP8266:

O problema com o recurso físico do módulo é que você não pode conectá-lo diretamente a uma placa de ensaio. Então decidi fazer um adaptador que será usado para conectar o módulo a uma placa de ensaio. Estas são as peças que você precisaria para fazer o adaptador:

Imagem mostrando os componentes necessários para fazer o adaptador breadboard do modem ESP8266

Figura 2: Imagem mostrando os componentes necessários para fazer o adaptador breadboard do modem ESP8266

Comece soldando o conector fêmea na PCB. Solde os pinos dos cantos primeiro para que o cabeçalho se encaixe corretamente na placa de circuito impresso. Em seguida, solde os 4 pinos restantes.

Imagem mostrando PCB do adaptador de placa de ensaio soldada para caber no cabeçalho fêmea do modem ESP8266

Fig. 3: Imagem mostrando PCB do adaptador de placa de ensaio soldada para caber no cabeçalho fêmea do modem ESP8266

Em seguida, coloque os conectores macho no lado oposto da PCB e solde-os cuidadosamente na PCB.

Imagem mostrando o cabeçalho macho colocado no adaptador da placa de ensaio do modem ESP8266

Figura 4: Imagem mostrando o cabeçalho macho colocado no adaptador da placa de ensaio do modem ESP8266

Após a soldagem, você pode remover a peça de plástico preta presa ao conector macho e começar a soldar cada pino macho ao pino fêmea correspondente. No final você teria algo assim:

Imagem mostrando o cabeçalho macho soldado no adaptador da placa de ensaio do modem ESP8266

Fig. 5: Imagem mostrando o conector macho soldado no adaptador da placa de ensaio do modem ESP8266

Depois de fazer isso, você pode encaixá-lo em uma placa de ensaio e conectar o módulo ESP 8266 a ele facilmente.

Aqui está um tutorial em vídeo detalhado mostrando o processo: (Opcional)

Imagem mostrando o adaptador de placa de ensaio do modem ESP8266 colocado em uma placa de ensaio

Figura 6: Imagem mostrando o adaptador de placa de ensaio do modem ESP8266 colocado em uma placa de ensaio

Imagem mostrando o módulo Wi-Fi ESP8266 colocado sobre a placa de ensaio

Figura 7: Imagem mostrando o módulo Wi-Fi ESP8266 colocado sobre a placa de ensaio

Comandos AT para ESP 8266:

Comando

Descrição

AT+GMR

Para saber a versão do firmware

AT+RST

Para redefinir o módulo

AT+CWMODE

Para definir o modo de operação, ou seja, como ponto de acesso ou modo de estação ou ambos.

AT+CWLAP

Para ver a lista de APs disponíveis

AT+CIPSERVER

Para definir como servidor

AT+CIPMUX

Para escolher entre conexões simples ou múltiplas

AT+CIPSEND

Para definir o número do canal, comprimento dos dados e enviar dados por WiFi

AT+CIPCLOSE

Para fechar a conexão

Servidor em ESP 8266:

Estaremos enviando uma interface web (uma página HTML) para qualquer dispositivo (digamos, um telefone celular habilitado para Wifi) conectado ao módulo Wifi. O código da página HTML seria fornecido pelo Arduino. E também, o Arduino decodificaria a solicitação do dispositivo e controlaria os motores de acordo. Como o módulo Wifi também pode funcionar como ponto de acesso, não precisamos de um roteador wireless extra para o projeto. Se você não tem ideia sobre páginas HTML, vá para meu projeto “Controlling Appliances over Wifi and Ethernet” e conheça o básico. Aqui está o algoritmo a ser seguido para configurar um servidor no ESP 8266:

Algoritmo:

– Módulo de teste usando o comando “AT” – Defina o modo de operação usando o comando “AT+CWMODE=” – Defina o número de conexões usando o comando “AT+CIPMUX=” – Defina-o como servidor usando o comando “AT+CIPSERVER=,” – Se a solicitação GET for recebida de um navegador, use o comando “AT+CIPSEND=, ” seguido dos dados HTML que você deseja enviar. – Após a conclusão feche a conexão usando o comando “AT+CIPCLOSE”.

Configuração de hardware:

Reúna todas as peças mostradas na imagem.

Imagem mostrando os componentes necessários para fazer o robô

Figura 8: Imagem mostrando os componentes necessários para fazer o robô

Fixe os motores ao chassi e depois as rodas ao eixo.

Imagem mostrando a estrutura metálica do robô conectada ao motor DC

Figura 9: Imagem mostrando a estrutura metálica do robô conectada ao motor DC

Use alguns parafusos e porcas para fixar a roda giratória

Imagem mostrando rodas conectadas aos motores DC no Robot

Figura 10: Imagem mostrando rodas conectadas aos motores DC no Robot

Imagem da roda giratória fixada na parte frontal do Robot Car

Figura 11: Imagem da roda giratória fixada na parte frontal do Robot Car

Imagem do carro robótico totalmente montado

Figura 12:

Explicação do código:

– Definir os pinos 8, 9, 10 e 11 como pinos de saída e comunicação serial com taxa de transmissão de 9600 bps. – Envie o comando “AT” para o módulo. – Defina o modo de operação como estação e ponto de acesso usando o comando “AT+CWMODE=3” – Defina o modo de conexão para múltiplas conexões enviando “AT+CIPMUX=1” – Coloque o módulo em modo Servidor e utilize a porta padrão enviando “AT+CIPSERVER=1, 80” – Entre no loop infinito e verifique se há solicitações recebidas por Wifi – Se uma solicitação foi feita, leia a solicitação e armazene o número do canal de onde a solicitação foi originada – Envie o código da página HTML para o número do canal armazenado usando os comandos “AT+CIPSEND=, ” seguido dos dados do código HTML. – Feche a conexão utilizando “AT+CIPCLOSE=” e aguarde a próxima solicitação feita pelo navegador. – Se a solicitação for recebida, leia-a e decodifique a instrução da solicitação. Tome as medidas correspondentes nos motores. (Por exemplo, se você clicar em “Avançar” na página web, o Arduino ouvirá a solicitação, mudará para a direção do robô para encaminhar)

Instruções de configuração

-Conecte tudo de acordo com o diagrama de circuito e ligue todo o sistema.

Protótipo de carro robótico simples

Fig. 13: Protótipo de carro robótico simples

– Aguarde alguns segundos para que o Wifi e o Arduino inicializem. Após cerca de 30 segundos, ative o Wifi no seu dispositivo (celular, tablet ou laptop) e você verá algumas redes disponíveis.

– Você pode se conectar à sua rede doméstica (que é “Robôs recarregados” no meu caso e é a isso que vou me conectar) ou ao próprio ponto de acesso (que é “ESP_9F0F14” No meu caso. O SSID do módulo nada mais é do que seu nome seguido dos últimos 6 caracteres de seu endereço MAC)

Protótipo de circuito de controle baseado em Arduino montado em carro robótico

Figura 14: Protótipo de circuito de controle baseado em Arduino montado em carro robótico

– Em seguida, abra seu navegador e digite o endereço IP

1. Do módulo na rede doméstica caso você esteja conectado à rede doméstica (como eu e no meu caso é 192.168.0.101 ou 192.168.0.102) Ou 2. 192.168.1.4 caso você se conecte ao ponto de acesso denominado “ESP_<últimos 6 caracteres do endereço MAC>” Daqui a pouco você deverá ver uma página como esta em seu navegador: Agora clique nos links e você verá o motor começar a se mover. Caso estejam se movendo na direção errada, verifique as conexões e troque-as se necessário.

Captura de tela de conexões Wi-Fi no telefone Android mostrando o ponto de acesso do módulo ESP

Figura 15: Captura de tela de conexões Wi-Fi no telefone Android mostrando o ponto de acesso do módulo ESP

– Você pode se conectar à sua rede doméstica (que é “Robots Reloaded” no meu caso e é a ela que vou me conectar) ou ao próprio Ponto de Acesso (que é “ESP_9F0F14” no meu caso. O SSID do módulo nada mais é do que seu nome seguido pelos últimos 6 caracteres de seu endereço MAC)

Código fonte do projeto

#define esp Serial
 #define in1 8#define in2 9#define in3 10#define in4 11#define BUFFER_SIZE 1000char buffer(BUFFER_SIZE); void send_at(String x){  esp.println(x);} void setup {  pinMode(in1, OUTPUT);pinMode(in2, OUTPUT);pinMode(in3, OUTPUT);pinMode(in4, OUTPUT);delay(2000);esp.begin(9600);esp.println("AT");delay(1000);esp.println("AT+CWMODE=3");delay(1000);esp.println("AT+CIPMUX=1");delay(1000);esp.println("AT+CIPSERVER=1,80");delay(1000);esp.println("AT+CIFSR");delay(1000);} bool read_till_eol {  static int i=0;  if(esp.available ) {    char c=esp.read ;    buffer(i++)=c;    if(i==BUFFER_SIZE)  i=0;    if(i>1 && buffer(i-2)==13 && buffer(i-1)==10) {      buffer(i)=0;      i=0;      return true;    }  }  return false;} void loop {  int ch_id, packet_len;  char *pb;    if(read_till_eol ) {    if(strncmp(buffer, "+IPD,", 5)==0) {      // request format: +IPD,ch,len:data      sscanf(buffer+5, "%d,%d", &ch_id, &packet_len);      if (packet_len > 0) {        pb = buffer+5;        while(*pb!=':') pb++;        pb++;        if (strncmp(pb, "GET / ", 6) == 0) {         serve_homepage(ch_id,0);          }          else if (strncmp(pb, "GET /?fwd", 9) == 0){               forward ;               serve_homepage(ch_id,1);            }          else if (strncmp(pb, "GET /?rev", 9) == 0){               reverse ;               serve_homepage(ch_id,2);            }          else if (strncmp(pb, "GET /?rgt", 9) == 0){               right ;               serve_homepage(ch_id,3);            }          else if (strncmp(pb, "GET /?lft", 9) == 0){               left ;               serve_homepage(ch_id,4);            }          else if (strncmp(pb, "GET /?stp", 9) == 0){               stop_bot ;               serve_homepage(ch_id,0);            }    }  }}} void serve_homepage(int ch_id, byte state){                    delay(1000);          esp.print(F("AT+CIPSEND="));          esp.print(ch_id);          esp.print(",");                    esp.println("512");          delay(500);           esp.print("HTTP/1.1 200 OKrnContent-Type:text/htmlrnrnROBOT CONTROLLER
WELCOME TO THE WEB INTERFACE OF ROBOT CONTROLLER OVER WIFI

");           esp.print("

FORWARD

LEFT    STOP    ");
          esp.print("RIGHT

REVERSE


Created by GANESH SELVARAJ for EngineersGarage.com


");          delay(5000);           esp.print(F("AT+CIPCLOSE="));          esp.println(ch_id);} void forward {  digitalWrite(in1,HIGH);  digitalWrite(in2,LOW);  digitalWrite(in3,HIGH);  digitalWrite(in4,LOW);}void reverse {  digitalWrite(in1,LOW);  digitalWrite(in2,HIGH);  digitalWrite(in3,LOW);  digitalWrite(in4,HIGH);}void right {  digitalWrite(in1,HIGH);  digitalWrite(in2,LOW);  digitalWrite(in3,LOW);  digitalWrite(in4,LOW);}void left {  digitalWrite(in1,LOW);  digitalWrite(in2,LOW);  digitalWrite(in3,HIGH);  digitalWrite(in4,LOW);}void stop_bot {  digitalWrite(in1,LOW);  digitalWrite(in2,LOW);  digitalWrite(in3,LOW);  digitalWrite(in4,LOW);}

Diagramas de circuito

Diagrama de circuito-Arduino-ESP8266-Módulo-ased-Wi-Fi-Controlled-Robotic-Car

Vídeo do projeto

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.