Sistema de monitoramento de jardim IoT baseado em Arduino

Sistema de monitoramento de jardim IoT baseado em Arduino

Jardinar é um hobby comum para os amantes da natureza. As plantas precisam de cuidados contínuos e monitorados de perto. Às vezes, isso se transforma em um passivo. Tal como quando o cuidador de uma horta precisa de se ausentar por algum tempo, a horta pode permanecer sem vigilância durante algum tempo ou mesmo muito tempo. A Internet das Coisas pode oferecer uma solução viável para isso. O jardim pode ser modernizado com tecnologia eletrônica que monitora continuamente as condições das plantas e do solo, para que as plantas possam receber rega e sombra conforme necessário. Tudo isso pode ser controlado e monitorado online com a aplicação de IoT.
Neste projeto, é projetado um sistema simples de monitoramento de jardins baseado em Internet das Coisas. Um dispositivo IoT construído em Arduino UNO e equipado com sensores como sensor de temperatura e umidade DHT-11, sensor de umidade e sensor LDR foi projetado para enviar dados ambientais para a plataforma ThingSpeak IoT conectando-se a um ponto de acesso Wi-Fi. O ESP8266 O modem Wi-Fi faz interface com o Arduino para conectar-se a um ponto de acesso Wi-Fi. O dispositivo também tem interface com uma bomba de água controlada pelo driver do motor L293D IC. A bomba de água é controlada automaticamente com base nos valores dos diversos fatores ambientais. Os diversos fatores ambientais como temperatura, umidade, umidade do solo e intensidade da luz podem ser monitorados no painel do Freeboard.io.
Na verdade, muitos desses dispositivos podem ser instalados para vigiar um grande jardim. O Arduino Sketch executado no dispositivo implementa as diversas funcionalidades do projeto, como ler dados do sensor, convertê-los em strings, passá-los para a plataforma IoT, receber comandos da plataforma IoT para controlar a bomba d'água e controlar a bomba d'água para regar as plantas em tempo hábil. . O Sketch é escrito, compilado e carregado usando o ArduinoIDE. A plataforma IoT utilizada é ThingSpeak e o Freeboard.io é usado para construir o IoT Dashboard.
Protótipo de sistema de monitoramento IoT Garden baseado em Arduino
Figura 1: Protótipo de sistema de monitoramento IoT Garden baseado em Arduino
Componentes necessários –
Lista de componentes necessários para o sistema de monitoramento IoT Garden baseado em Arduino
Fig. 2: Lista de componentes necessários para o sistema de monitoramento IoT Garden baseado em Arduino
Diagrama de bloco –
Diagrama de blocos do sistema de monitoramento IoT Garden baseado em Arduino
Fig. 3: Diagrama de blocos do sistema de monitoramento IoT Garden baseado em Arduino
Conexões de Circuito –
O dispositivo de monitoramento de jardim é construído no Arduino UNO. Portanto, o leitor deve ter conhecimento de Como começar com Arduino. O Arduino UNO é uma das placas de prototipagem mais populares, comumente usada até mesmo em projetos de IoT. Vários sensores como DHT-11, sensor de umidade e LDR, o modem Wi-Fi ESP8266 e o ​​driver de motor L293D IC fazem interface com o Arduino.
Imagem mostrando conexões de circuito do sistema de monitoramento IoT Garden baseado em Arduino
Fig. 4: Imagem mostrando conexões de circuito do sistema de monitoramento IoT Garden baseado em Arduino
O dispositivo IoT baseado em Arduino possui as seguintes conexões de circuito –
Arduino UNO – O Arduino UNO é uma placa microcontroladora baseada em ATmega328. É uma das placas de prototipagem mais populares. A placa vem com carregador de inicialização Arduino integrado. Possui 14 pinos GPIO, 6 pinos PWM, 6 entradas analógicas e interfaces UART, SPI e TWI integradas, um ressonador integrado, um botão de reset e orifícios para montagem de cabeçalhos de pinos. Durante a programação da placa, ela pode ser conectada ao PC usando a porta USB e a placa pode funcionar com alimentação USB. O Arduino UNO possui memória Flash de 32 Kb, EEPROM de 1 Kb e SRAM de 2 Kb. A placa pode ser conectada a diferentes Arduino Shields para conectividade com rede Ethernet, Bluetooth, Wi-Fi, Zigbee ou celular e pode ser conectada à maioria das plataformas IoT. O controlador ATmega328 possui a seguinte configuração de pinos –
Tabela de listagem de configuração de pinos do Arduino Uno
Fig. 5: Tabela de listagem de configuração de pinos do Arduino Uno
Neste projeto, os dois pinos de entrada analógica da placa são usados ​​para fazer a interface do LDR e do sensor de umidade, um GPIO é usado para fazer a interface do sensor DHT-11, dois GPIO são usados ​​para fazer a interface do módulo ESP8266 onde os pinos são configurados. usando software serial e 2 pinos GPIO são usados ​​para fazer interface com o IC do driver do motor L293D.
Sensor DHT-11 – DHT-11 é um sensor de temperatura e umidade. O sensor DHT11 consiste em dois componentes principais – um é o componente de detecção de umidade e o outro é o sensor de temperatura NTC (ou termistor). O termistor é na verdade um resistor variável que muda sua resistência com a mudança de temperatura. Ambos detectam a temperatura e a umidade da área e fornecem saída para o IC (que é colocado na parte traseira do sensor). O sensor possui quatro pinos – VCC, Terra, saída de dados e NC. Os pinos VCC e Terra são conectados ao VCC e Terra comuns, respectivamente. O pino Data Out do sensor está conectado ao pino 3 da placa Arduino.
Sensor LDR – O LDR é usado para detectar a intensidade da luz. O sensor está conectado ao pino A1 da placa Arduino. O sensor está conectado em um circuito divisor de potencial. O LDR fornece uma tensão analógica que é convertida em leitura digital pelo ADC integrado.
Sensor de umidade – Um sensor de umidade do solo compatível com Arduino é usado no projeto. O sensor mede o conteúdo volumétrico de água do solo com a ajuda de uma sonda sensora que deve ser colocada no solo. O módulo sensor opera entre uma tensão de 3,3 V a 5V. Possui um comparador LM393 integrado. O módulo possui quatro terminais – VCC, Terra, Saída de dados e Saída analógica. Os pinos VCC e Terra são conectados ao VCC e Terra comuns, respectivamente. O pino de saída analógica do sensor está conectado ao pino A0 da placa Arduino.
Módulo ESP8266 – O Módulo Wi-Fi ESP8266 é um SOC independente com pilha de protocolo TCP/IP integrada que pode acessar 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. 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 de listagem de configuração de pinos do modem ESP8266 ESP-12
Fig. 6: Tabela de configuração de pinos de listagem do modem ESP8266 ESP-12
O modelo ESP-01 é utilizado no projeto. O modelo ESP-01 possui a seguinte configuração de pinos –
Tabela de listagem de configuração de pinos do modem ESP8266 ESP-01
Fig. 7: Tabela de configuração de pinos de listagem do modem ESP8266 ESP-01
Os pinos RESET e VCC do módulo são conectados a 3,3 V DC enquanto o pino Terra está conectado ao aterramento comum. Os pinos Tx e Rx do módulo estão conectados aos pinos 10 e 11 do Arduino UNO.
IC do driver do motor DC L293D – O L293D é o IC do driver de controle do motor. Possui 16 pinos com a seguinte configuração de pinos:
Tabela de listagem de configuração de pinos do IC do driver do motor L293D
Fig. 8: Tabela listando a configuração dos pinos do IC do driver do motor L293D
Uma bomba d'água é controlada no circuito usando L293D que é conectado entre os pinos 3 e 6 do IC.
O IC L293D controla qualquer Motores DC de acordo com as seguintes tabelas verdade:
Tabela verdade do IC do driver do motor L293D
Fig. 9: Tabela verdade do IC do driver do motor L293D
Os pinos 2 e 7 do L293D estão conectados aos pinos 6 e 7 da placa Arduino e permitem controlar a rotação da bomba. Os pinos 1 e 16 (VSS) estão conectados a 5 Vcc e o pino 8 (VS) está conectado à alimentação de 12 Vcc. Os pinos 4 e 5 estão aterrados. Os pinos 12 e 13 do IC do driver do motor também estão aterrados.
Fonte de alimentação – O circuito requer 5 Vcc para sua operação, enquanto o IC do driver do motor também precisa de 12 Vcc. A rede elétrica CA é usada como fonte primária de energia. A alimentação da rede elétrica é reduzida por um transformador e retificada por um retificador de ponte completa. A saída retificada é 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.
Como funciona o circuito –
Este dispositivo IoT baseado em Arduino pode ser instalado em qualquer lugar do jardim. Depois de devidamente instalado e ligado, ele se conecta à internet via modem Wi-Fi e inicia a leitura dos dados dos sensores interfaceados – sensor de temperatura e umidade DHT-11, sensor de umidade e sensor LDR.
O Sensor de Temperatura e Umidade DHT11 é um sensor digital com sensor de umidade capacitivo embutido e termistor. Ele transmite uma leitura de temperatura e umidade em tempo real a cada 2 segundos. O sensor opera com alimentação de 3,5 a 5,5 V e pode ler temperatura entre 0° C e 50° C e umidade relativa entre 20% e 95%.
O sensor não pode ser conectado diretamente a um pino digital da placa, pois opera no protocolo de 1 fio que deve ser implementado apenas no firmware. Primeiro, o pino de dados é configurado para entrada e um sinal de início é enviado a ele. O sinal de início compreende um BAIXO por 18 milissegundos seguido por um ALTO por 20 a 40 microssegundos seguido por um BAIXO novamente por 80 microssegundos e um ALTO por 80 microssegundos. Depois de enviar o sinal de início, o pino é configurado para saída digital e os dados de 40 bits compostos pela leitura de temperatura e umidade são bloqueados. Dos dados de 5 bytes, os dois primeiros bytes são a parte inteira e decimal da leitura da umidade relativa, respectivamente, o terceiro e o quarto bytes são a parte inteira e decimal da leitura da temperatura e o último é o byte da soma de verificação.
Para Arduino, a biblioteca padrão para sensor DHT-11 já está disponível. Os dados do sensor podem ser facilmente preparados chamando o método read11 da classe DHT.
O sensor LDR é conectado a um circuito divisor de potencial e insere uma tensão no pino de entrada analógica do controlador. A tensão é lida e digitalizada usando o canal ADC integrado.
O sensor de umidade também possui uma saída analógica que é detectada no pino A0 do Arduino UNO e é convertida para um valor calibrado usando ADC integrado. O sensor de umidade emite uma tensão analógica na faixa de 0 a 4,2 V. O Arduino possui canal ADC de 10 bits, portanto a tensão detectada é convertida para um valor na faixa de 0 a 1024. Quanto mais seco o solo, maior é a tensão saída do sensor. A umidade pode ser expressa em porcentagem calibrando a saída de tensão do sensor em solo seco e úmido.
O Arduino coleta dados de todos os sensores e converte os valores em strings. O módulo Wi-Fi ESP8266 conectado ao Arduino carrega os dados para o ThingSpeak Server. Para exibir e monitorar os dados carregados no servidor ThingSpeak, é necessário um painel digital ou um corretor de dados. Neste projeto, um painel digital chamado Freeboard.io é usado para monitorar visualmente os dados do sensor online. O Freeboard.io usa o arquivo JASON para visualizar os dados do ThingSpeak. Ele oferece três elementos para construir um painel –
1) Fontes de dados – As fontes de dados obtêm os dados de fontes externas. Essas fontes externas podem ser serviços de corretagem de dados, aplicativos JavaScript ou arquivos JSON que recebem conteúdo de um servidor HTTP. Neste projeto, a fonte de dados é um arquivo JSON que recebe dados do servidor ThingSpeak.
2) Widgets – Os Widgets ajudam a exibir dados em forma textual ou gráfica. Existem muitos widgets disponíveis no Freeboard.io, como texto, gráfico, medidor, etc.
3) Painéis – Eles são usados ​​para organizar widgets.
Freeboard.io requer inscrição e widgets pós-sinal podem ser criados.
Captura de tela da página de inscrição do Freeboard
Fig. 10: Captura de tela da página de inscrição do Freeboard
Cadastre-se no Freeboard.io
Existem quatro widgets do tipo medidor criados para monitorar temperatura, umidade, intensidade da luz e umidade do solo.
O painel no Freeboard.io pode ser criado da seguinte forma –
1. Acesse o site freeboard.io e cadastre-se com uma nova conta.
2. Digite o nome e clique no botão criar, após entrar na nova janela, clique em criar fonte de dados e selecione tipo como JASON.
Captura de tela dos widgets de tipo de medidor na API Freeboard
Fig. 11: Captura de tela dos widgets de tipo de medidor na API Freeboard
Seleção da fonte de dados do Freeboard.io
3. Em seguida preencha os campos para indicar a plataforma IoT. Na aba URL, altere o número 392797 com o respectivo id do canal.
4. Após criar a fonte de dados, clique em adicionar painel e selecione como Medidor.
Captura de tela da criação de fonte de dados na API Freeboard
Fig. 12: Captura de tela da criação de fonte de dados na API Freeboard
Criação de widget Freeboard.io
5. No painel, após selecionar o Medidor, selecione o seguinte conforme mostrado abaixo e crie os widgets.
Captura de tela de como fazer a seleção da fonte de dados na API Freeboard
Figura 13: Captura de tela de como fazer a seleção da fonte de dados na API Freeboard

Criação de widget de medidor Freeboard.io

Desta forma, os dados do sensor podem ser carregados no servidor ThingSpeak e visualizados online no painel do Freeboard.io. O painel pode ser acessado de qualquer dispositivo como smartphone, laptop ou PC com conectividade à Internet.
A bomba d'água é controlada automaticamente dependendo dos valores dos fatores ambientais detectados pelo Arduino. Se o nível de umidade estiver abaixo de 80%, a bomba é ligada e continua funcionando até que o nível de umidade seja retido.
A placa Arduino precisa se conectar a um ponto de acesso Wi-Fi para se conectar à Internet. O nome e a senha do ponto de acesso Wi-Fi estão codificados no esboço do Arduino. A inicialização da conexão Wi-Fi é feita dentro da função setup do Arduino Sketch que é executada assim que a placa é ligada.
A configuração da conexão Wi-Fi é executada passando comandos AT para o modem Wi-Fi ESP8266. O modem é conectado aos pinos GPIO do Arduino que são configurados como pinos transmissor e receptor UART usando a biblioteca serial de software. O Wi-Fi é inicializado passando os seguintes comandos AT para o módulo ESP –
NO : Este comando é passado para verificar se o modem está funcionando corretamente.
AT+GMR: Este comando é passado para imprimir a versão do firmware.
AT+CWMODE=3 : Este comando é passado para definir o modo Wi-Fi tanto para o modo AP quanto para o modo Estação.
AT+RST: Este comando é passado para reiniciar o modem.
Após a reinicialização, o modem verifica os endereços IP dos pontos de acesso disponíveis. O modem ESP pode se conectar ao ponto de acesso cujo SSID e senha estão codificados no Arduino Sketch. O seguinte comando AT é passado para conectar-se ao ponto de acesso –
AT+CWJAP
Assim que o modem estiver conectado a um ponto de acesso, ele obtém o endereço IP executando o seguinte comando –
AT+CIFSR: Este comando é usado para obter o endereço IP do módulo ESP como cliente.
O endereço IP é armazenado em uma string e confirmado na placa Arduino. Depois que os dados do sensor são coletados, os seguintes comandos AT são passados ​​para o módulo ESP para enviá-los para a nuvem:
AT+CIPSTART=4,”TCP”,”184.106.153.149″,80: Este comando é passado para iniciar uma conexão TCP com o endereço IP fornecido na porta especificada (80).
AT+CIPSEND=4, String(getStr.comprimento ): Este comando é passado para enviar dados no endereço IP mencionado anteriormente com o número de conexões de transmissão definido como 4 e o comprimento dos dados (que pode ter no máximo 2.048 bytes) especificado.
Assim, o Arduino se conecta ao servidor via modem ESP e os dados enviados podem ser observados graficamente no Freeboard.io.
Guia de programação –
O esboço do Arduino consegue coletar dados do DHT-11, sensor de umidade e sensor LDR, converter valores do sensor em string, controlar a bomba de água via L293D IC e passar dados para o servidor ThingSpeak. Primeiro, a biblioteca padrão de código aberto do Arduino para interface com o DHT11 é importada e a biblioteca serial do software para comunicação serial com o módulo Wi-Fi é importada. As variáveis ​​que representam conexões de pinos para ler os dados do sensor são inicializadas.
Captura de tela da inicialização do código Arduino para o sistema de monitoramento IoT Garden
Fig. 14: Captura de tela da inicialização do código Arduino para o sistema de monitoramento IoT Garden
Inicialização no Arduino Sketch para sistema de monitoramento IoT Garden
A função setup é chamada na qual a taxa de transmissão da comunicação serial para comunicação com o modem Wi-Fi é definida como 9600. O modo Wi-Fi e a conectividade de rede são estabelecidos usando os comandos AT com alguns atrasos. O atraso deve ser dado de acordo com o tempo que leva para se conectar à rede.
Captura de tela da função de configuração no código Arduino para sistema de monitoramento IoT Garden
Fig. 15: Captura de tela da função de configuração no código Arduino para sistema de monitoramento IoT Garden
Função de configuração no Arduino Sketch para monitoramento de IoT Garden
A função loop é chamada na qual os dados do sensor são buscados e armazenados nas variáveis ​​inicializadas. A bomba de água é controlada passando a lógica digital apropriada nos pinos de entrada do IC do driver do motor L293D. A função esp8266 é chamada para transmitir dados para a nuvem.
Captura de tela da função Loop no código Arduino para sistema de monitoramento IoT Garden
Fig. 16: Captura de tela da função Loop no código Arduino para sistema de monitoramento IoT Garden
Função Loop no Arduino Sketch para sistema de monitoramento IoT Garden
Na função esp8266 , são passados ​​​​os comandos AT para estabelecer a conexão TCP e, em seguida, é fornecida a chave API do ThingSpeak para transmitir os dados para o canal registrado. A cada 16 segundos, os dados são atualizados para o canal ThingSpeak.
Captura de tela da função de gerenciamento de comunicação IoT no Arduino Sketch para sistema de monitoramento IoT Garden
Fig. 17: Captura de tela da função de gerenciamento de comunicação IoT no Arduino Sketch para IoT Garden Monitoring System
Função Gerenciando comunicação IoT no Arduino Sketch para IoT Garden Monitoring System
Isso completa o esboço do Arduino para o sistema de monitoramento de jardim baseado em IOT. Confira o Arduino Sketch na seção de código para experimentá-lo.
Este projeto é fácil de construir e pode ser instalado em qualquer lugar do jardim. Permite a manutenção automática do jardim e monitoramento remoto com ajuda de IoT.

Código-fonte do projeto

###

//Program to 


/*=========================================================================*/

/*Standard Library                                                         */

/*=========================================================================*/

#include 

#include


/*=========================================================================*/

/*Variable Initialization for Senor pins                                   */

/*=========================================================================*/

dht DHT;

#define DHT11_PIN 3

#define RM_1 6

#define RM_2 7


float t=0;

float h=0;


int sen_val = 0;

int lig_val = 0;


char data = 0;


#define MOS_SEN A0

#define LDR_SEN A1

/*=========================================================================*/

/*API key for thingspeak and change with your API                          */

/*=========================================================================*/


String apiKey = "CAM10KIK7YH2HAO0";


/*=========================================================================*/

/*Serial pins for connecting WiFi module                                   */

/*=========================================================================*/

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


/*=========================================================================*/

/*Setup  function that runs first                                         */

/*=========================================================================*/

void setup 

{

 Serial.begin(9600);

 pinMode(MOS_SEN, INPUT);

 pinMode(LDR_SEN, INPUT);

 pinMode(RM_1, OUTPUT);

 pinMode(RM_2, OUTPUT);

   

 ser.begin(9600);

  

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

/*========================================================================*/

/*AT commands for establishing WiFi connection                            */

/*========================================================================*/

  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="EngineersGarage","egP@$$w0rd?"";

  ser.println(cmd);

  delay(1000);

  ser.println("AT+CIFSR");

  delay(1000);

}


/*========================================================================*/

/*Loop functions that runs infinitely that collects sensor data           */

/*========================================================================*/

void loop  

{

  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);

  lig_val = analogRead(LDR_SEN);

  int mos_val = read_mos ;

  

  if(mos_val > 80)

  {

    Serial.println("Start");

    digitalWrite(RM_1, HIGH);

    digitalWrite(RM_2, LOW);

  }

   else if(read_mos  < 80)

  {

      Serial.println("Stop");

      digitalWrite(RM_1, LOW);

      digitalWrite(RM_2, LOW);

  }

  Serial.println(sen_val);

  delay(500);

  Serial.print("Light Intensity = ");

  Serial.println(lig_val);

  delay(500);


  esp_8266 ;

}


/*========================================================================*/

/*esp8266 funtion that uploads data to web                                */

/*========================================================================*/

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 +="&field3=";

  getStr +=String(sen_val);

  getStr +="&field4=";

  getStr +=String(lig_val);

  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);

 //thingspeak needs 15 sec delay between updates

  delay(15000);

}


int read_mos 

{

    sen_val = analogRead(MOS_SEN);

    Serial.print("Moisture = ");

    sen_val = map(sen_val,0,1023,0,255);

    return sen_val;

}

###

Diagramas de circuito

Diagrama de circuito baseado em Arduino-IoT-Garden-Monitoring-System-

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.