Monitoramento de temperatura e umidade por meio de robô em movimento

Os robôs são projetados para facilitar e automatizar o trabalho dos humanos. Eles são úteis para serem implantados em locais de difícil acesso. Neste tutorial, é projetado um rover de monitoramento de umidade e temperatura baseado na aplicação robótica da IoT. A umidade e a temperatura são os ambientes físicos mais comuns que precisam ser monitorados. O robô de quatro rodas projetado neste projeto pode ser operado em um alcance de 30 metros e suportar temperaturas de até 150 graus Celsius.
O robô pode ser controlado através de um telefone celular que terá um aplicativo personalizado instalado. O celular se conectará ao robô via Bluetooth. Para conectividade Bluetooth, o circuito eletrônico que controla o robô possui o módulo Bluetooth HC-05 conectado a ele. Para controlar o robô, será necessário qualquer smartphone Android para emparelhar com o módulo Bluetooth HC-05 e iniciar o aplicativo personalizado projetado para este projeto. O aplicativo pode ser baixado deste tutorial.
O circuito eletrônico também possui módulo Wi-Fi ESP8266 conectado a ele. O módulo Wi-Fi é usado para conectar-se a qualquer hotspot de Internet disponível e transferir dados de temperatura e umidade para um servidor remoto. Uma plataforma IoT é utilizada para receber e registrar dados. A mesma plataforma é usada para monitorar dados em tempo real. Para registrar informações de temperatura e umidade, a umidade DHT-11 e o sensor de temperatura são usados ​​no circuito.
Protótipo de robô ThingSpeak IoT baseado em Arduino para monitoramento de temperatura e umidade
Figura 1: Protótipo do robô ThingSpeak IoT baseado em Arduino para monitoramento de temperatura e umidade
O circuito de controle do robô é construído em torno do Arduino Pro Mini. A placa Arduino é a preferida porque é a placa controladora mais popular e tem grande suporte da comunidade. O Pro Mini é utilizado no circuito devido aos seus ricos recursos embalados em um tamanho compacto. Além disso, é útil instalar uma placa controladora tão pequena em qualquer corpo robótico. O robô é acionado por motores DC engrenados que são controlados através do IC do driver do motor L293D. O esboço do Arduino executado no circuito de controle é escrito e compilado no Arduino IDE, enquanto o aplicativo personalizado usado para enviar comandos de controle é construído usando o MIT App Inventor 2. A plataforma IoT usada para monitorar os dados do sensor é o ThingSpeak.

Componentes necessários –

Lista de componentes necessários para o robô ThingSpeak IoT baseado em Arduino usado para monitoramento de temperatura e umidade
Fig. 2: Lista de componentes necessários para o robô ThingSpeak IoT baseado em Arduino usado para monitoramento de temperatura e umidade

Diagrama de bloco –

Diagrama de blocos do robô ThingSpeak IoT baseado em Arduino para monitoramento de temperatura e umidade
Fig. 3: Diagrama de blocos do robô ThingSpeak IoT baseado em Arduino para monitoramento de temperatura e umidade

Conexões de Circuito

O circuito de controle do robô é construído em torno do Arduino Pro Mini.
Imagem do circuito IoT ThingSpeak baseado em Arduino conectado ao corpo do robô
Fig. 4: Imagem do circuito ThingSpeak IoT baseado em Arduino conectado ao corpo do robô
O circuito é construído integrando as seguintes seções –
Fonte de energia – No circuito, Arduino Pro Mini, módulo Bluetooth e módulo Wi-Fi precisam de 5V DC regulado para sua operação, enquanto o IC do driver do motor precisa de 12V DC. Uma bateria NIMH de 12V é usada como fonte primária de energia. A alimentação da bateria é regulada para 5V e 12V usando CIs 7805 e 7812. O pino 1 de ambos os CIs reguladores de tensão está conectado ao ânodo da bateria e o pino 2 de ambos os CIs está conectado ao terra. As respectivas saídas de tensão são extraídas do pino 3 dos respectivos CIs reguladores de tensão. Um LED junto com um resistor pull-up de 10K Ω também é conectado entre o terra comum e o pino de saída para obter uma dica visual da continuidade da alimentação. Apesar de usar bateria de 12 V, o 7812 é usado para fornecer uma alimentação regulada e estável ao IC do driver do motor.
Arduino ProMini – Arduino Pro Mini é uma placa microcontroladora baseada em Atmega 168. Possui 14 pinos GPIO, 6 entradas analógicas, 6 pinos PWM, 2 interrupções externas e UART, SPI e I2C integrados. A placa tem apenas 1,3 polegada por 0,7 polegada de tamanho, seis vezes menor que o Arduino UNO. Com esses recursos embalados em tamanho pequeno, esta placa é ideal para qualquer projeto robótico. Neste projeto, 4 pinos de entrada e saída do Pro Mini são utilizados para interface com o IC do driver do motor e o módulo Bluetooth faz interface com os pinos RX e TX disponíveis para comunicação serial via UART. Um dos pinos é utilizado para fazer a interface do sensor DHT-11 e dois pinos GPIO são usados ​​para fazer a interface do módulo Wi-Fi ESP8266.
Módulo Bluetooth HC-05 – O módulo Bluetooth HC-05 é um módulo de protocolo de porta serial. Opera na banda ISM 2,4 GHz com V2.0+EDR (data de dados aprimorada). Pode funcionar nos modos Master e Slave. O módulo Bluetooth possui seis pinos – Enable, VCC, Ground, Transmit Data (TxD), Receive Data (RxD) e State. Os pinos Enable e State não são utilizados e, portanto, não estão conectados ao circuito. Os pinos VCC e Terra são conectados ao VCC e Terra comuns. Os pinos TxD e RxD do módulo são conectados aos pinos RX e TX do Arduino Pro Mini respectivamente. Essas conexões estão resumidas na tabela abaixo –
Tabela listando a configuração dos pinos do módulo Wi-Fi ESP8266 ESP-12
Fig. 5: Tabela listando a configuração dos pinos do módulo Wi-Fi ESP8266 ESP-12
Módulo Wi-Fi ESP8266 – O módulo Wi-Fi ESP8266 é usado para conectar-se a qualquer hotspot de Internet disponível e transferir dados do sensor para a plataforma ThingSpeak via Wi-Fi. O Módulo Wi-Fi ESP8266 é um SOC independente com pilha de protocolo TCP/IP integrada que pode fornecer a qualquer microcontrolador acesso a uma rede Wi-Fi. O ESP8266 é capaz de hospedar um aplicativo ou descarregar todas as funções de rede Wi-Fi de outro processador de aplicativo.
Cada módulo ESP8266 vem pré-programado com um firmware de conjunto de comandos AT. Portanto, pode-se simplesmente conectá-lo a um dispositivo Arduino. Aqui ele carrega os dados de monitoramento para a nuvem. O módulo está disponível em dois modelos – ESP-01 e ESP-12. O ESP-12 possui 16 pinos disponíveis para interface, enquanto o ESP-01 possui apenas 8 pinos disponíveis para uso. O ESP-12 possui a seguinte configuração de pinos –
Tabela listando a configuração dos pinos do IC do driver do motor L293D
Fig. 6: Tabela listando a configuração dos pinos do módulo Wi-Fi ESP8266 ESP-12
O modelo ESP-12 é utilizado no projeto. Os pinos Reset e VCC do módulo são conectados ao 5V DC enquanto o pino Ground está conectado ao aterramento comum. Os pinos Tx e Rx do módulo estão conectados aos pinos 11 e 10 do Arduino Pro Mini. Os pinos 11 e 10 do Arduino são configurados para receptor e transmissor serial por meio da função serial do software.
Sensor de temperatura e umidade DHT-11 – O sensor DHT -11 lê a temperatura e umidade ambiente e retransmite os dados para o microcontrolador como dados digitais. O pino de dados do sensor de temperatura e umidade DHT11 está conectado ao pino 12 do Arduino Pro Mini. O VCC e o aterramento estão conectados ao VCC e ao aterramento comuns.
IC do driver do motor CC L293D – O L293D é um circuito integrado (IC) de driver de motor com ponte H dupla. Os drivers do motor atuam como amplificadores de corrente, pois recebem um sinal de controle de baixa corrente e fornecem um sinal de corrente mais alta. Este sinal de corrente mais alto é usado para acionar os motores. Possui 16 pinos com a seguinte configuração de pinos:
Tabela listando a configuração dos pinos do IC do driver do motor L293D
Fig. 7: Tabela listando a configuração dos pinos do IC do driver do motor L293D
Existem dois motores DC usados ​​para fazer o carro robótico. Os motores DC fazem interface entre os pinos 3 e 6 e os pinos 14 e 11 do IC do driver do motor.
O IC L293D controla os motores DC de acordo com as seguintes tabelas verdade:
Captura de tela da interface do usuário da plataforma ThingSpeak
Fig. 8: Tabela verdade do IC do driver do motor L293D
Tabela verdade do IC do driver do motor L293D
Fig. 9: Captura de tela da interface do usuário da plataforma ThingSpeak
Os pinos 4, 5, 13 e 12 do L293D são aterrados enquanto os pinos 1, 16 e 9 estão conectados a 5 Vcc e o pino 8 está conectado a 12 Vcc. Os pinos 15, 2, 7 e 10 do IC do driver do motor estão conectados aos pinos 8, 2, 3 e 7 da placa Arduino. O motor DC conectado à roda direita está conectado aos pinos 11 e 14, enquanto o motor conectado à roda esquerda está conectado aos pinos 3 e 6 do IC do driver do motor.
Motores DC com engrenagens – Neste robô, motores DC com engrenagens de 12 V são acoplados às rodas. Os motores DC com engrenagens estão disponíveis com uma ampla faixa de RPM e Torque, o que permite que um robô se mova com base no sinal de controle que recebe do IC do driver do motor.

Como funciona o circuito –

Após a montagem do robô, ele pode ser utilizado anexando bateria no circuito. À medida que o robô é ligado, ele começa a buscar dados do sensor de temperatura e umidade DHT-11 e procura qualquer ponto de acesso de Internet disponível para se conectar à plataforma ThingSpeak. ThingSpeak é um serviço de plataforma analítica IoT que permite agregar, visualizar e analisar fluxos de dados ao vivo na nuvem. ThingSpeak fornece visualizações instantâneas de dados postados pelos dispositivos IoT no servidor ThingSpeak. Com a capacidade de executar código MATLAB no ThingSpeak, é possível realizar análise e processamento on-line dos dados à medida que eles chegam.
O DHT11 detecta vapor de água medindo a resistência elétrica entre dois eletrodos. O componente sensor de umidade é um substrato que retém a umidade com eletrodos aplicados na superfície. Quando o vapor de água é absorvido pelo substrato, os íons são liberados pelo substrato, o que aumenta a condutividade entre os eletrodos. A mudança na resistência entre os dois eletrodos é proporcional à umidade relativa.
Uma umidade relativa mais alta diminui a resistência entre os eletrodos, enquanto uma umidade relativa mais baixa aumenta a resistência entre os eletrodos. O DHT11 mede a temperatura com um sensor de temperatura NTC montado na superfície (termistor) embutido na unidade. A umidade e a temperatura medidas pelo sensor são monitoradas e registradas através da plataforma ThingSpeak IoT através do módulo Wi-Fi que está conectado ao controlador que fornece a comunicação serial para transferência dos dados. Os dados registrados ficam visíveis na UI da plataforma.
Captura de tela da interface do usuário da plataforma ThingSpeak
Fig. 10: Captura de tela da interface do usuário da plataforma ThingSpeak
O robô pode ser movido passando comandos de um aplicativo Android personalizado instalado em qualquer smartphone. O aplicativo Android personalizado foi projetado usando o MIT App Inventor 2. Confira o guia de programação para saber como o aplicativo foi projetado usando o MIT App Inventor. O aplicativo personalizado possui botões para mover o robô para frente, para trás, para a esquerda, para a direita e para pará-lo. O usuário basta tocar nos botões de direção para transferir os comandos. Os comandos são passados ​​pelo aplicativo para o módulo Bluetooth conectado ao circuito de controle na forma de sequências de caracteres únicos. As seguintes strings são passadas para transferir os comandos de controle –
Comandos de string de listagem de tabelas usados ​​pelo IoT Robot
Fig. 11: Tabela listando comandos de string usados ​​pelo IoT Robot
Essas strings de comando são interpretadas no esboço do Arduino para controlar os motores DC. O robô pode ser movido para frente, para trás, para a esquerda ou para a direita implementando a seguinte lógica de entrada nos pinos do driver do motor –
Tabela verdade do IC do driver do motor L293D
Fig. 12: Tabela lógica do IC do driver do motor L293D para robô IoT
Ao receber os comandos de string, o esboço do Arduino apenas altera a saída digital nos pinos de entrada do IC do driver do motor para controlar o movimento do robô.
Imagem mostrando o robô ThingSpeak IoT baseado em Arduino
Fig. 13: Imagem mostrando o robô ThingSpeak IoT baseado em Arduino

Guia de programação –

O aplicativo personalizado usado para controlar o movimento do robô é construído usando o MIT App Inventor. Existem também muitos aplicativos Bluetooth para Android disponíveis na Play Store que podem ser usados. Se algum aplicativo disponível na Play Store for usado, o esboço do Arduino precisará ser modificado ou alterado de acordo. O MIT App Inventor 2 é usado para construir o aplicativo.
Captura de tela do aplicativo personalizado projetado usando o MIT App Inventor
Fig. 14: Captura de tela do aplicativo personalizado projetado usando o MIT App Inventor
O aplicativo MIT Inventor é uma plataforma fácil para criar um aplicativo Android. A plataforma usa blocos lógicos para criar um aplicativo. Um guia para usar o MIT app inventor 2 é fornecido no site oficial da plataforma. Existem também muitos tutoriais no YouTube disponíveis para referência. O aplicativo de controle do robô criado neste projeto possui as seguintes lógicas que são formadas com ajuda de blocos –
Captura de tela dos blocos lógicos do aplicativo personalizado projetado usando o MIT App Inventor
Fig. 15: Captura de tela dos blocos lógicos do aplicativo personalizado projetado usando o MIT App Inventor
Captura de tela dos blocos lógicos do aplicativo personalizado projetado usando o MIT App Inventor
Fig. 16: Captura de tela dos blocos lógicos do aplicativo personalizado projetado usando o MIT App Inventor
Ainda mais recursos podem ser adicionados ao aplicativo incluindo blocos lógicos adicionais.
No circuito de controle do robô, o esboço do Arduino rodando no Pro Mini controla o mecanismo do robô. O esboço do Arduino começa com a importação dos arquivos de cabeçalho. Os seguintes arquivos de cabeçalho estão incluídos no código do sensor DHT-11 e na funcionalidade serial do software –
#include
#incluir
As seguintes diretivas #define são usadas para determinar os pinos do Arduino que devem ser conectados ao IC do driver do motor.
#define LM1 2
#define LM23
#define RM17
#define RM2 8
O bloco de código a seguir define os protótipos de função que são usados ​​para determinar as tarefas do motor.
dados de caracteres = 0;
void avançar ;
void retroceder ;
void virar à esquerda ;
void virar à direita ;
void robostop ;
O bloco de código a seguir define a chave API fornecida pelo ThingSpeak ao criar o canal onde os dados devem ser gravados. Esta chave de API deve ser substituída pela chave de API atribuída a uma pela plataforma ThingSpeak.
String apiKey = “9W6L82SPOZKQ1A1W”;
O código a seguir define os pinos seriais do software usados ​​para comunicação Wi-Fi.
SoftwareSerial ser(11,10); //RX,TX
O seguinte bloco de código é a função setup onde é usada para determinar se os pinos conectados são usados ​​como entrada ou saída e habilitar a comunicação serial. Aqui Serial.begin(9600) é usado para estabelecer uma comunicação serial entre o bluetooth e o arduino e Serial.begin(115200) é usado para uma comunicação serial entre o Wi-Fi e o arduino. Ressalta-se que a nova versão do módulo Wi-Fi poderá funcionar com taxa de transmissão de 9600.
configuração nula
{
Serial.begin(9600);
pinMode(LM1, SAÍDA);
pinMode(LM2, SAÍDA);
pinMode(RM1, SAÍDA);
pinMode(RM2, SAÍDA);
ser.begin(115200);
Para aprender sobre os comandos AT, consulte ESP8266 – Referência de comandos AT.
O Arduino Sketch completo para o Rover de monitoramento de umidade e temperatura baseado em IoT pode ser encontrado na guia do código-fonte.
Observação: Encontre o arquivo do aplicativo controlado por Bluetooth abaixo.

Código-fonte do projeto

###

//Program to 

#include 

#include    // include dht sensor library


dht DHT;


float t=0;

float h=0;


#define LM1 2

#define LM2 3

#define RM1 7

#define RM2 8

#define DHT11_PIN 12


char data = 0;

void moveforward ;

void movebackward ;

void turnleft ;

void turnright ;

void robostop ;


// replace with your channel's thingspeak API key

String apiKey = "9W6L82SPOZKQ1A1W";


// connect 10 to TX of Serial USB

// connect 11 to RX of serial USB

SoftwareSerial ser(11,10); // RX, TX


// this runs once

void setup  

{                

  // enable debug serial

 // Serial.begin(115200); 

  Serial.begin(9600);

  pinMode(LM1, OUTPUT);

  pinMode(LM2, OUTPUT);

  pinMode(RM1, OUTPUT);

  pinMode(RM2, OUTPUT);

  // enable software serial

  ser.begin(115200);

  

  // reset ESP8266 WiFi connection AT+CIPMUX=1 AT+CWJAP

  ser.println("AT");

  delay(1000);

  ser.println("AT+GMR");

  delay(1000);

  ser.println("AT+CWMODE=3");

  delay(1000);

  ser.println("AT+RST");

  delay(5000);

  ser.println("AT+CIPMUX=1");

  delay(1000);

  String cmd="AT+CWJAP="Gokul","22031994"";

  ser.println(cmd);

  delay(1000);

  ser.println("AT+CIFSR");

  delay(1000);

 }



// the loop 

void loop 

{

  if(Serial.available >0)

  {

    data = Serial.read ;

    Serial.print(data);

    Serial.print("n");

    if(data == 'F')

    {

      Serial.println("Forward");

      moveforward ;

    }

    else if(data == 'B')

    {

      Serial.println("Backward");

      movebackward ;

    }

    else if(data == 'L')

    {

      Serial.println("Left");

      turnleft ;

    }

    else if(data == 'R')

    {

      Serial.println("Right");

      turnright ;

    }

    else if(data == 'S')

    {

      Serial.println("Stop");

      robostop ;

    }

  }

  delay(1000);

  int chk = DHT.read11(DHT11_PIN);

  Serial.print("Temperature = ");

  t = DHT.temperature;

  Serial.println

  Serial.print("Humidity = ");

  h = DHT.humidity;

  Serial.println(h);

  esp_8266 ;


}


void esp_8266 

{

   // TCP connection AT+CIPSTART=4,"TCP","184.106.153.149",80 

    String cmd = "AT+CIPSTART=4,"TCP","";

    cmd += "184.106.153.149"; // api.thingspeak.com

    cmd += "",80";

    ser.println(cmd);

    Serial.println(cmd); 

    if(ser.find("Error"))

    {

      Serial.println("AT+CIPSTART error");

      return;

    }

  

  // prepare GET string GET 

  String getStr = "GET /update?api_key=";

  getStr += apiKey;

  getStr +="&field1=";

  getStr +=String(h);

  getStr +="&field2=";

  getStr +=String

  getStr += "rnrn";

  // send data length

  cmd = "AT+CIPSEND=4,";

  cmd += String(getStr.length );

  ser.println(cmd);

  Serial.println(cmd);

  delay(1000);

  ser.print(getStr);

  Serial.println(getStr);
     

  delay(10000);  

}


void moveforward 

{

  digitalWrite(LM1, HIGH);

  digitalWrite(LM2, LOW);

  digitalWrite(RM1, HIGH);

  digitalWrite(RM2, LOW);

}


void movebackward 

{

  digitalWrite(LM1, LOW);

  digitalWrite(LM2, HIGH);

  digitalWrite(RM1, LOW);

  digitalWrite(RM2, HIGH);

}


void turnleft 

{

  digitalWrite(LM1, HIGH);

  digitalWrite(LM2, LOW);

  digitalWrite(RM1, LOW);

  digitalWrite(RM2, LOW);

}


void turnright 

{

  digitalWrite(LM1, LOW);

  digitalWrite(LM2, LOW);

  digitalWrite(RM1, HIGH);

  digitalWrite(RM2, LOW);

}


void robostop 

{

  digitalWrite(LM1, LOW);

  digitalWrite(LM2, LOW);

  digitalWrite(RM1, LOW);

  digitalWrite(RM2, LOW);

}

###

Diagramas de circuito

Diagrama de Circuito-Arduino-ThingSpeak-IoT-Robot-Temperatura-Umidade-Monitoramento

Ficha Técnica do Projeto

https://www.engineersgarage.com/wp-content/uploads/2019/10/ROBOT_CONTROL.apk_.zip



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.