DIY Projects - My Automatic Irrigation System

About: Este é um canal para homemakers e DIY onde vai encontrar tutoriais úteis acerca de Electrónica, Arduíno, Robótica e Impressão 3D. Estes têm explicações simples e práticas que podem ser utilizadas para concre...

Bem vindos a mais uma apresentação de um projecto realizado no nosso canal, este projecto consiste em realizar um sistema automático de rega, cujo o objectivo é gerir e controlar um sistema de rega, que neste caso este sistema irá regar 3 espaços diferentes, que são relva, canteiros ou vasos e uma pequena horta.

Cada um destes espaços tem exigências especificas, sendo necessários diferentes tipos de rega e quantidade de água, assim resolvemos realizar um sistema de rega automático que integrasse todos num só, visto que a fonte de agua será a mesma, neste caso será um poço mas também poderá ser uma torneira lá de casa (Ver imagem acima).

Assim este sistema terá de gerir os diferentes tipos de rega consoante os diversos espaços, utilizando assim os seguintes tipos de rega (Ver imagem acima):

  • Relva - Aspersores;
  • Canteiros ou vasos - Gota-a-gota;
  • Horta - Aspersores e Gota-a-gota;

Agora como cada espaço necessita de uma quantidade de água diferente e como este sistema será maioritariamente automático os parâmetros a programáveis serão:

  • Número de regas diárias;
  • Horário das regas;
  • Tempo de cada rega.

Por fim e para que possamos à distancia e em qualquer altura saber quais as condições atmosféricas do local onde está instalado estes sistemas de rega, este projecto incluirá uma pequena e básica estação meteorológica que irá recolher dados de temperatura do ar, a humidade do ar e humidade do solo.

Placa NodeMCU ESP8266:

Para realizar esta este projecto iremos utilizar uma placa NodeMCU ESP8266 (Ver Datasheet abaixo), esta placa é muito versátil tendo as mesmas funções que um placa de Arduino, sendo uma placa indicada para prototipagem de IOT (Internet Of Things), esta é muito pequena e tem já integrado na placa um modulo ESP-12 que permite a ligação WIFI, no entanto, tem como limitações o numero de portas analógicas sendo apenas 1 e as portas digitais são apenas compatíveis com a tensão lógica de 3,3V (Ver imagens acima).

Assim a placa NodeMCU ESP8266 é constituída por :

  • 1x Ligação Micro-USB - (Permite alimentar e carregar o código);
  • 1x Módulo ESP8266 - (Permite ligar a placa por WIFI);
  • 1x Botão Flash - (Gravação do programa no ESP-12);

Nota: Não é necessário carregar no botão Flash para gravar o programa se utilizarmos o IDE do Arduino).

  • 1x Botão Reset - (Reinicia a placa NodeMCU ESP8266);
  • 4x Pinos de GND;
  • 3x Pinos de 3,3V DC - (Corrente Máx. 1A);
  • 1x Pinos de Vin (Tensão Máx. 5V DC);

Nota: Não colocar em simultâneo uma tensão de alimentação em Vin com a ligação Micro-USB.

  • 1x Pino de entrada de sinal analógico - (Pino ADC0);
  • 13x Pinos com a função digital IO e PWM - (Pinos D0 a D8, pinos RX e TX, finalmente os SD2 e SD3);

Nota: A função PWM não se encontra nos pinos SD2 e SD3.

  • 2x Portas de comunicação Serial - (Serial1 - Pinos RX e TX, Serial2 - Pinos D7 e D8);
  • 1x Porta de comunicação I2C - (Pino D1 = SCL e Pino D2 = SDA);
  • 2x Portas de comunicação SPI - (SPI1 - Pinos D5 a D8 e SPI2 - Pinos SD1, SD2, CMD e CKL);

Nota: A porta de comunicação SPI1 com os pinos D5 a D8 é uma porta HSPI, ou seja, de alta velocidade.

  • 1x Interface digital segura de comunicação directa para cartões de memória SD - (Pinos SD0 a SD3 e CMD e CLK).

Aplicação IOT - Blynk:

Outra parte muito importante deste projecto é a aplicação IOT que irá interagir com a nossa placa NodeMCU ESP8266, neste caso utilizamos a aplicação Blynk, esta plataforma pode ser instalada em qualquer Smartphones com iOS ou Android e funciona com todos os tipos de placas de Arduino, Raspberry Pi e outros tipos de equipamentos.

Esta permite criar um interface gráfico de forma fácil, intuitiva e adequada para cada projecto, basta apenas ter acesso à Internet, através de Ethernet, WIFI ou GPRS para podermos controlar e obter informação de um dispositivo físico em qualquer altura e onde quer estejamos (Ver imagens acima).

Para utilizar esta aplicação é necessário:

Realizar o download da aplicação para Android ou IOS através do site da Blynk e instalamos o aplicativo num smartphone ou tablet;

https://www.blynk.cc/

Para conectar a aplicação e a placa NodeMCU ESP8266 necessitamos de obter uma password de autenticação, então para isso realizamos os seguintes passos através da aplicação:

No smartphone ou tablet:

  • Criar uma nova conta.
  • Criar um novo projecto.
  • Escolher o tipo de dispositivo e de conexão este irá utilizar.
  • Depois do projecto estar criado é enviada uma password de autenticação para o email.
  • Verificamos se recebemos o e-mail com essa autenticação.

Na placa NodeMCU ESP8266:

Instalar a biblioteca Blynk (VIDEO):

https://github.com/blynkkk/blynk-library

Criar o seu código através de um esboço elaborado e apropriado para cada tipo de Hardware, pode seleccionar o esboço através do seguinte site:

http://examples.blynk.cc/

Escolhemos a placa que estamos a utilizar que é a NodeMCU e depois o tipo de ligação que é a ESP8266 WIFI. Assim será compilado um código apropriado para a nossa placa, depois basta copiar esse código para o nosso programa e começarmos a programar.

Nota: Não esquecer que é necessário colocar no código a nossa autenticação, ou seja, substituir "YourAuthToken" pela password de autenticação recebido no nosso email, algo parecido com "53e4da8793764b6197fc44a673ce4e21", como também o nome da nossa rede WIFI "YourNetworkName"e a sua respectiva password "YourPassword".

#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

//Autenticação do utilizador.
//Verificar em Definições do nosso projecto.
char auth[] = "YourAuthToken";	//<<<<< Colocar aqui a password de autenticação.

//Autenticação da rede WIFI.
//Colocar "" para redes abertas.
char ssid[] = "YourNetworkName";	//<<<<< Colocar aqui o nome da rede WIFI.
char pass[] = "YourPassword";	//<<<<< Colocar aqui a password de rede WIFI.

void setup() {
	//
	Serial.begin(9600);

	Blynk.begin(auth, ssid, pass);
}

void loop() {
	//
	Blynk.run();
}

Esta aplicação IOT (Internet Of Things) e o seu respectivo código irá permitir activar e configurar todo o sistema automático de rega e caso seja necessário será também possível activar sistema rega manualmente e isoladamente para cada um dos espaços definidos tudo isto através de um painel de comandos virtual e apenas como um Smartphone.

Alem disto a aplicação irá também enviar notificações por Email, caso sejam ultrapassados limites das condições ambientais avisando o utilizador que algo não está bem, permitindo que se possa tomar acções de correcção mesmo até à distância, essa notificações serão as seguintes:

  • Temperatura excessiva e baixa humidade do ar;
  • Temperatura Baixa;
  • Falta de água;
  • Excesso de água.

Devido à possibilidade do sistema IOT poder falhar, sendo necessário ligar o sistema de rega manualmente ou se em caso de ser necessário desligar o fornecimento de agua por emergência devido à rotura de tubagens ou mesmo para efectuar manutenção, o sistema deve sempre ter sistemas de manuais de controlo permitindo a sua permanente funcionamento (Ver imagens acima).

Step 1: Montagem

Como a ideia deste projecto é desenvolver um sistema de rega IOT, iremos demonstrar apenas ao sistema IOT que irá controlar e monitorizar à distancia, de forma rápida e fácil o sistema de rega, pois como é óbvio cada sistema de rega tem de ser adaptado aos espaços que queremos regar, sendo o mais importante a reter, a forma como é controlada a agua para a rega e não como esta é distribuída.

Material necessário:

  • 1x NodeMCU ESP8266;
  • 1x Módulo de 4 Relês;
  • 1x Sensor de Humidade e Temperatura do ar DHT11;
  • 1x Sensor de Humidade do solo;
  • 1x Sensor de Luminosidade LDR;
  • 1x Fonte de alimentação 5V DC 700mA;
  • 10x Terminal Block de 2;
  • 1x PCB de 10x15cm;
  • 1x PCB de 3x5cm;
  • 5x Male & Female Header Socket.
  • 2x Caixas de plástico estanque.
  • 4x Electroválvulas 230V.

Este circuito terá as ligações entre os componentes electrónicos através de uma PCB desenhada e elaborada por nós (Ver imagem acima), esta foi desenhada através de um programa de PCB Design(EasyEDA) onde podemos imprimir e alterar o circuito (Ver ficheiros abaixo), sendo também materializada através de método químico (Ver imagens acima).

Instalação da Fonte de Alimentação:

Este circuito utiliza uma Fonte de Alimentação muito compacta (Ver imagem acima), que alimenta todo o nosso circuito de controlo e comunicação. Esta fonte de alimentação é de 5V DC sendo esta a tensão máxima que o NodeMCU ESP8266 suporta na sua porta Vin e que pode fornecer cerca de 700mA o que é o suficiente para alimentar o nosso circuito.

Alem disto esta é muito fácil de encontrar no mercado, principalmente na Internet onde existem vários modelos com potência, tamanhos e tensão diferentes, tendo de ter apenas cuidado com as características de tensão e potência necessárias para os nosso projectos.

Instalação do Módulo de 4 Relês e as Electroválvulas:

Para controlar a agua do sistema de rega são utilizadas 4 electroválvulas de 230V, sendo que uma delas não será utilizada para o nosso projecto, pois estas têm um preço baixo e não necessitam de uma fonte a alimentação adicional.

Estas estão dispostas de forma a ser distribuída a agua individualmente para os 3 espaços a regar, alem disso terão também um sistema paralelo manual ou ByPass, para que em caso de falha do sistema IOT possamos ainda regar os espaços através das mesmas tubagens (Ver imagem acima).

Para controlar as electroválvulas são necessários Relês ou neste caso um Modulo de Relês (Ver datasheet abaixo), este será montado e alimentado directamente na PCB, sendo depois controlado pelo NodeMCU ESP8266 através dos pinos digitais de D0 a D3 (Ver circuitos acima). Isto torna o sistema mais versátil pois permite que possamos utilizar electroválvulas alimentadas as 230V ou qualquer outro valor de tensão ficando ao critério do utilizador.

Instalação dos Sensores do Sistema Monitorização:

O sistema de monitorização não és um sistema essencial ao projecto de sistema de rega, no entanto, como este é um sistema IOT significa que estaremos a maioria das vezes a utilizar o sistema à distância, aumentando a incerteza do que está realmente a acontecer no local de rega.

Assim com um sistema de monitorização é nos permitido configurar e optimizar a programação do sistema de rega com base em dados fornecidos pelos sensores dos sistema IOT. Os dados fornecidos serão relativos a humidade e temperatura do ar como também da humidade do solo.

Os dados são importantes para que tenhamos forma de verificar se existe necessidade de regar num determinado espaço, pois caso chova não é necessário regar, diminuindo o consumo de agua ou a a falta de agua principalmente no Verão quando a temperatura do ar está mais alta.

Sensor de Humidade e Temperatura do ar:

Um dos sensores utilizados é o DHT11, este é um pequeno dispositivo que permite medir a humidade e temperatura do ar em simultâneo. Entre as vantagens de utilizar este tipo de sensor estão a sua dimensão, pois este é muito compacto, e apenas é necessário utilizar um pino digital do Arduino ou neste caso o do nosso NodeMCU ESP8266 (Ver circuito acima).

Esta característica deve-se ao facto de este utilizar uma comunicação simplificado de um único barramento, muito idêntico ao sistema de comunicação Serial, sendo enviado para o pino digital do NodeMCU ESP8266 (Ver imagem acima). Este sistema funciona na base de pergunta e resposta entre o equipamento Master e Slave enviando dados com um formato de 8 bits em 5 pacotes de informação, o que perfaz um conjunto de 40 bits de informação.

Estes 5 pacotes de 8 bits de informação têm funções diferentes, sendo os 2 primeiros relativos à informação de humidade do ar e os 2 seguintes relativos à temperatura do ar, por fim o ultimo é o bit de paridade que verifica a integridade dos dados anteriores (Ver cálculos acima).

Sensor de Humidade do Solo:

Outro sensor utilizado neste projecto é o sensor de humidade do solo, este permite medir a quantidade de humidade existente no solo através de dispositivo que contem 2 pequenas sondas, que quando introduzidas no solo, este irá medir a condutividade eléctrica entre essa sondas (Ver imagem acima).

Como sabemos a agua é condutora de electricidade, ou seja, quanto mais agua existir no solo maior será a condutividade eléctrica entre as 2 sondas, alterando assim o sinal enviado para o NodeMCU ESP8266.

Este sensor tem 2 formas de enviar a informação, uma de forma digital através do pino D0, tendo de ser calibrada previamente através da resistência variável existente no seu circuito, uma outra forma será através do pino A0, este envia um sinal analógico podendo alterar esse sinal entre 0 e 5V o que será traduzido pela entrada analógica (A0) do NodeMCU ESP8266 por um valor entre 0 e 1023, sendo que 1023 significa 0% de humidade "Solo Seco" e 0 significa 100% de humidade "Solo com agua em excesso" (Ver imagem acima).

Sensor de Luminosidade LDR:

Finalmente o ultimo sensor do nosso projecto é o sensor de luminosidade com LDR (Light Dependent Resistor), este sensor já não é novo no nosso canal, tendo como função medir a quantidade de luz um determinado local, permitindo assim indicar-nos quando é o nascer-do-sol e pôr-do-sol e com isso escolher a melhor hora para programar o sistema de rega.

Este tem um funcionamento muito idêntico ao sensor anterior, mas agora com uma resistência que irá variar o seu valor dependendo da quantidade de luz que está a incidir nesta. Alem disto este sensor também tem 2 formas de enviar a informação, uma digital através do pino D0 e a forma analógica através do pino A0 (Ver imagem acima).

Neste projecto vamos utilizar a forma digital, sendo então necessário calibrar o sensor através da resistência variável existente neste. Caso queiram saber sobre este ou outro tipos de sensor vejam os nossos tutoriais onde são explicado pormenorizadamente.

https://www.instructables.com/id/Arduino-Tutorial-...

Para acabar a montagem devemos colocamos a PCB do controlador e dos sensores em caixas de plástico e que sejam estanques, tendo em conta que estes irão estar no exterior. No nosso caso escolhemos uma caixa de um pequeno quadro eléctrico com tampa para que se possa ter facilmente acesso ao circuito e assim realizar as ligações ou ajustes necessários.

Step 2: Configuração Da App Blynk

Vamos então agora criar a nossa aplicação, com esta poderemos controlar o sistema de rega e observando os dados dos sensores e assim monitorizar o que está a acontecer através da Internet, tudo apenas com o nosso Smartphone, para isso é preciso criar um interface gráfico adequado ao nosso sistema de rega, isto através da aplicação Blynk, escolhemos esta aplicação pois é bastante didáctica e fácil configurar (Ver imagem acima).

Criar um Novo Projecto (VIDEO):

Em primeiro lugar teremos de realizar o download da aplicação para no Smartphone e criar a respectiva conta de utilização como explicamos anteriormente, depois executamos a aplicação e entramos na nossa conta pessoal, agora estamos prontos para começar a criar a nosso projecto bastando na página inicial carregar em "+NEW PROJECT".

Para o nosso projecto iremos colocar os seguintes dados:

  • Nome do projecto;
  • Escolher o equipamento utilizado na montagem; - Seleccionar "ESP8266"
  • Escolher o tipo de ligação à rede; - Seleccionar "WIFI"
  • Seleccionar o tipo de Tema;

Após esta configuração irá aparecer uma tela com o nome do nosso projecto, será nesta tela que iremos colocar os Widget do projecto, estes são os elementos gráficos de interacção entre o utilizador e a aplicação, podendo variar em forma e funcionalidade dependendo da funcionalidade que estas têm.

Neste projecto serão utilizados os seguintes Widget:

  • 6x Button;
  • 3x Timer;
  • 3x Menu;
  • 1x RTC;
  • 1x Terminal;
  • 5x Slide
  • 1x Email.

Todos estes Widget tem uma função especifica e para isso devem ser colocados da forma mais apropriada e favorável à sua utilização, aconselho a disposição que nós colocamos (Ver imagem acima).

Nota: A aplicação Blynk é gratuita sendo-nos logo atribuído no inicio o valor de 2000 créditos ou "Energy" para consumir em Widget, no entanto, para utilizarmos todos os Widget para este projecto necessita teremos que ter no total cerca de 4400 créditos, sendo para isso necessário comprar um "Energy Pack" de 2400 no "Add Energy".

Após adquirirmos o créditos ou "Energy" necessários para o projecto iremos começar a colocar os Widget na tela do projecto, no entanto caso queiram adquirir o projecto já realizado e pronto a utilizar basta adiciona-lo através do código de barra.

Adicionar e configurar o Widget "Button":

Para adicionar o Widget "Button" ou qualquer outro Widget, basta carregar na tela e será aberto o "Widget Box" onde se encontra uma lista com todos os Widget possivel de utilizar.

Seleccionamos então o Widget "Button" que se encontra no topo desta lista e este será colocado na tela, depois carregamos no Widget "Button" para aparecer a sua página de definições podendo assim configurar as suas funcionalidades (Ver imagem acima).

Iremos em primeiro lugar nomear o botão para que seja mais facilmente identificável durante a elaboração e utilização do projecto, depois na funcionalidade "OUTPUT" iremos seleccionar o pino que que este botão irá controlar. Existem 2 tipos de pinos, os pinos digitais onde podemos seleccionar um qualquer dos pinos digitais do equipamento que estamos a utilizar, que no caso do NodeMCU ESP8266 podem ser seleccionados os pinos de GP0 a GP16, esta funcionalidade permite que o Widget "Button" possa controlar o estado do pino directamente (HIGH e LOW).

Já os pinos virtuais são uma funcionalidade que a aplicação Blynk contem permitindo que o Widget "Button" possa controlar não um pino do nosso equipamento, o que em projectos mais complexos iria ocupar muitos dos pinos digitais, mas sim pinos virtuais que podem ser considerados como variáveis do tipo BOOLEAN. A grande vantagem desta funcionalidade é permitir assim poupar os pinos digitais dos nossos equipamento, pois o numero de pinos virtuais é ilimitado.

Depois a funcionalidade "MODE" permite transformar este botão em 2 tipos e botão, ou seja, este funciona como um botão do tipo "PUSH BUTTON" que apenas muda de estado enquanto é premido caso contrário volta para o estado anterior, de outra forma este funciona como um simples "SWITCH" que ao ser premido muda de estado mantendo esse estado até que seja premido novamente. Neste projecto apenas utilizamos os Widget "Button" em modo "SWITCH".

Por fim, podem ser alterados os rótulos que o botão terá quando se encontra nos 2 estados, no caso do nosso projecto deixamos ficar os rótulos "ON" e "OFF".

Adicionar e configurar o Widget "Timer":

A função do Widget "Timer" é muito idêntica à do Widget anterior no entanto este apenas altera o seu estado enquanto está dentro de um intervalo de tempo pré-seleccionado, ou seja, como o seu nome indica um simples temporizador (Ver imagem acima).

Para o configurar carregamos no respectivo Widget e aparece a sua página de definições, assim colocamos o seu respectivo nome e na funcionalidade "OUTPUT" seleccionamos um pino digital ou virtual, no caso do nosso projecto optamos por utilizar apenas pinos virtuais em todos os Widget.

Depois na funcionalidade "TIME" seleccionamos a Hora de inicio e a Hora de paragem, sendo que é no intervalo destas duas horas o Widget irá mudar o estado da sua saída mantendo-o até à Hora de paragem e voltando depois para o seu estado anterior após a Hora de paragem.

Adicionar e configurar o Widget "RTC":

Agora termos uma pequena contrariedade, como estamos a utilizar o Widget "Timer" este necessita de uma Hora de referência alterando o estado da sua saída sempre que esta for igual às seleccionadas Hora de inicio e Hora de paragem.

Então como a Hora de referência é fornecida pelo Smartphone, se estivermos numa localização em que o fuso horário for diferente do fuso horário da localização do nosso sistema de rega o Widget "Timer" activar não na hora do local do sistema de rega mas sim na hora do Smartphone o que poderá ser prejudicial.

Para corrigir este problema utilizamos o Widget "RTC" assim ao colocarmos este Widget no projecto poderemos escolher qual o fuso horário queremos que a aplicação tenha como referência deixando de ser o fuso horário de onde se encontra o Smartphone e sim o seleccionado (Ver imagem acima).

Adicionar e configurar o Widget "Menu":

Bem, com os Widget anteriores já é possível activar o nosso sistema de rega manualmente e automaticamente através a aplicação, ligando e desligando o sistema a uma hora pré-seleccionada e durante um determinado espaço de tempo.

Até aqui está tudo correcto, no entanto para alguns tipos de plantas, árvores ou culturas rega-los todos os dias pode ser prejudicial, o que nos levaria a activar e desactivar o temporizador apenas no dias que era necessário regar deixando de ser prático.

Para aperfeiçoar o sistema automático adicionamos ao projecto o Widget "Menu", este permite-nos criar uma lista de possíveis opções de rega que no caso do nosso projecto serão:

  • Todos os dias
  • 2 em 2 dias
  • 3 em 3 dias
  • 1x por semana

Este tipo de Widget e com estas opções, quando associado a cada um dos temporizadores do projecto permitirá controlar o numero de regas a realizar em cada um dos nossos espaço separadamente (Ver imagem acima).

Para configurar este Widget começamos por identifica-lo de forma a facilitar a sua utilização, depois na funcionalidade "OUTPUT" seleccionamos um pino virtual, pois tipo de Widget apenas permite seleccionar pinos virtuais.

De seguida na funcionalidade "HINT TEXT", podemos colocar um texto de sugestão de forma a sugerir a escolha de uma opção quando não está seleccionada nenhuma das opções listadas, na funcionalidade "MENU ITEMS" é onde colocamos a nossa lista de opções do menu sendo importante a ordem destas opções deforma a facilitar a posterior programação do respectivo código.

Por fim nas funcionalidades "FONT SIZE", "TEXT" e "ICON" podemos escolher o tamanho e a cor do texto e dos simbolos do respectivo Widget.

Adicionar e configurar o Widget "Terminal":

Com a parte do controlo do sistema terminada passamos para a parte de monitorização do nosso projecto, o sistema de monitorização é constituído por pequenos sensores que fornecem dados relativos a humidade e temperatura do ar, humidade do solo e a hora do Nascer-do-Sol e do Pôr-do-Sol.

Para conseguirmos observar esses dados vamos adicionar ao projecto o Widget "Terminal", este é constituído por uma caixa de texto onde será escrita a informação relativa aos dados dos sensores (Ver imagem acima).

Abrimos então a página de definições do Widget "Terminal", depois colocamos um nome para identificar-lo e na funcionalidade "INPUT" escolhemos um pino virtual, será este o pino que irá receber os dados de texto, neste caso o texto será idêntico a este (??? = dados sensor):

  • Hum. Amb.: ??? %;
  • Temp. Amb.: ??? ºC;
  • Hum. Solo: ??? %;
  • N 08:00:00 P 18:00:00;

A seguir podemos activar a funcionalidade "ADD NEWLINE"

A funcionalidade "INPUT LINE" se estiver activa, acrescenta no Widget uma caixa de texto que permite escrever directamente no terminal de texto, neste projecto estas funcionalidade fica desactivada, já a funcionalidade "AUTO SCROLL" permite quando activada visualizar as ultimas linhas de texto escritas no terminal, actualizando e não sendo necessário ter um terminal de texto muito grande.

Por fim, a funcionalidade "COLORS" permite alterar a cor de do texto e do fundo do terminal de texto de forma a melhorar a sua visualização.

Adicionar e configurar o Widget "Email":

Como referido anteriormente o sistema de monitorização irá enviar notificações por email sempre que algum dos valores medidos pelos sensores esteja fora dos parâmetros normais, para activar e configurar estas notificações por Email basta adicionar o Widget "Email" ao projecto. A configuração deste Widget é muito simples onde basta abrir a sua página de definições e colocar o Email onde queremos receber essas notificações (Ver imagem acima).

A funcionalidade "CONTENT TYPE" tem apenas a função de configurar a formatação de texto que pode ser apresentada nos Email de notificação o que depende também das configurações das nossas caixas de email para podermos visualizar as diferenças.

Adicionar e configurar o Widget "Slide":

Para que possamos definir e alterar sempre que desejamos os limites mínimos e máximo das condições ambientais medidas pelos sensores que promovem o envio das notificações adicionamos o Widget "Slide". Este permite seleccionar um valor especifico dentro de uma determinada gama de valores bastando apenas desligar o selector ao longo da sua barra (Ver imagem acima).

Para configura este Widget abrimos a página de definições, nomeamos cada um dos Widget "Slide" e atribuimos uma cor para cada tipo de informação/condição, neste projecto utilizamos 5 Widget "Slide" sendo que cada um terá um limite para cada parâmetro a ser monitorizado.

Depois na funcionalidade "OUTPUT" seleccionamos para cada um o seu respectivo pino virtual, ao lado temos 2 caixa onde podemos atribuir a gama de valores que o selector terá ao longo da sua barra, deixo aqui quais os valores para cada um dos Widget "Slide" adicionados ao projecto:

  • Humidade Amb. Min. (%) - Valor entre 0 - 100;
  • Temperatura Amb. Max. (ºC) - Valor entre 0 - 40;
  • Temperatura Amb. Min. (ºC) - Valor entre 0 - 0-20;
  • Humidade Solo Min. (%) - Valor entre 0 - 100%;
  • Humidade Solo Max. (%) - Valor entre 0 - 100%;

A funcionalidade "DECIMALS" permite-nos definir se os valores seleccionados podem ou não ter valores decimais o que no nosso projecto foram utilizados valores decimais para os Widget relativos às temperaturas, no caso dos Widget relativos às humidades colocamos apenas numeros inteiros pois estes serão em percentagens.

Por fim, a funcionalidade "SEND VALUES ON RELEASE ONLY" quando activada apenas atribui os valor seleccionado após alteração apenas quando deixamos de premir o selector e a funcionalidade "SHOW VALUE" quando activa permite visualizar no próprio Widget quall o valor selecionado facilitanto assim alteração/ajuste do valor.

Após adicionar e configurar correctamente todos o Widget necessários para o nosso projecto basta agora carregamos no botão Play e verificarmos se a aplicação está a funcionar correctamente.

Step 3: Código

Agora apenas falta programar o nosso controlador de rega, para isso ligamos o cabo Micro USB a este e carregamos o respectivo código no NodeMCU ESP8266 (Ver ficheiro abaixo).

Mas antes, vamos explicar resumidamente o nosso código, dando especial atenção ao código para funcionar com a aplicação Blynk. Como explicado anteriormente em primeiro lugar copiamos o código base para o programa de Arduino IDE onde teremos de preencher os dados em falta com a nossa autenticação "YourAuthToken" do projecto e como também o nome e a respectiva password da rede WIFI que o equipamento estará ligado.

Depois disto são colocadas as bibliotecas e variáveis especificas e essenciais ao funcionamento dos sensores e os Widget utilizados na nossa aplicação IOT. Duas das bibliotecas necessárias para este projecto são as bibliotecas "Adafruit_Sensor.h" e "DHT.h", estas permitem com apenas 3 linhas de código configurar o processo de comunicação entre ele e o nosso equipamento, pois como foi explicado anteriormente,este tipo de sensor tem um processo de comunicação próprio.

Para realizar as leituras de humidade e temperatura do ar neste sensor, requisitar esse dados através das suas respectivas funções.

#include <Adafruit_Sensor.h>
#include <DHT.h>

#define DHTPIN 13	//Colocar o pino ligado ao sensor DHT11.
#define DHTTYPE DHT11	//Colocar o tipo de sensor utilizado.
DHT dht(DHTPIN, DHTTYPE);

//Correr a função SETUP apenas uma vez após ser pressionado Reset:
void setup() {
	//Inicia a leitura do sensor DHT11.
	dht.begin();
}

//A rotina de LOOP e executada repetidamente:
void loop() {
	//Leitura dos valores de Humidade do ar através do sensor DHT11:
	Sensor_Humidade_Amb = dht.readHumidity();

	//Leitura dos valores de Temperatura do ar através do sensor DHT11:
	Sensor_Temperatura_Amb = dht.readTemperature();//Para valores em Celcius (ºC).
	ou
	Sensor_Temperatura_Amb = dht.readTemperature(true);// Para valores em  Fahrenheit (ºF).
}

Outra não menos importante biblioteca é a "WidgetRTC.h", esta é responsável pela selecção do fuso horário do local onde se encontra o sistema de rega, deixando assim o sistema de estar dependente da localização do Smartphone.

#include <WidgetRTC.h>

WidgetRTC rtc;

BLYNK_CONNECTED() {
	//Inicia a sincronização de fuso horário.
	rtc.begin();
}

Alem desta também colocaremos a biblioteca e "TimeLib.h" que permite trabalhar com funções e variáveis de Data e Tempo podendo assim activar apenas o sistema de rega nos dias escolhidos.

//Estas funções fornecem dados relativos a Data e Hora desse exacto momento:

hour();		//Hora em (0-23)<br>minute();	//Minutos em (0-59)
second();	//Segundos em (0-59)
day();		//Dia em (1-31)
weekday();	//Dia de Semana em (1-7), sendo o Domingo o dia (1)
month();	//Mês em (1-12)
year();		//Ano em (2009, 2010 etc)

Agora para utilizar os Widget através dos pinos virtuais na aplicação Blynk teremos que declarar o pinos virtuais através da função "BLINK_WRITE" e depois igualar as variáveis criadas para cada uma dessas funções ao valor do respectivo pino virtual atribuído na aplicação.

//Variáveis para atribuição dos valores dos pino virtuais da aplicação:
int Variavel_A;	//Variável de atribuição de valores do pino virtual.
int Variavel_B;	//Variável de atribuição de valores do pino virtual.

BLYNK_WRITE (V0) {	//Colocar pino virtual utilizado.
	Variavel_A = param.asInt();
}
BLYNK_WRITE (V1) {	//Colocar pino virtual utilizado.
	Variavel_B  = param.asInt();
}

Para utilizar-mos o Widget "Menu" é apenas necessário ter em atenção à ordem que colocamos que colocamos os Items da lista criada, isto porque este Widget funciona com a função "switch...case", ou seja o 1º Item da lista que criamos será o "case 1" da função "switch" e assim sucessivamente. No nosso projecto é apenas utilizado 4 Items logo são necessários apenas 4 "case".

//Função para a selecção dos Items da lista:
switch (Variavel_A) {<br>  case 1:
    //Restante código...
    break;	//Finalização de selecção do Item.
  case 2:
    //Restante código...
    break;	//Finalização de selecção do Item.
  default:
    //Restante código...
    break;	//Finalização de selecção do Item.
}

Para escrever no Widget "Terminal " teremos de chamar a função "BLYNK_PRINT Serial" e depois no decorrer do código utilizamos a função "Blynk.virtualWrite" permitindo escrever através do código no terminal de texto.

#define BLYNK_PRINT Serial	//Activa a função de escrita no Terminal de texto.

//Correr a função SETUP apenas uma vez após ser pressionado Reset:
void setup() {
	//Iniciar a Communication Serial a 9600b/s:
	Serial.begin(9600);
}
//A rotina de LOOP e executada repetidamente:
void loop() {
	//Escreve no terminal de texto:
	Blynk.virtualWrite(V12, "Texto", Variavel_A);
}

Por fim, para enviar as notificações por Email através do Widget "Email" basta utilizar a função "Blynk.email" onde depois colocamos o texto e valores que queremos que o Email indique e avise, esta função é útil para nos ajudar a vigiar e ajustar caso algo aconteça.

//Condição para o envio da notificação por Email:<br>if (Variavel_A < Variavel_B) {
	//Envia um email para notificação de alerta.
	Blynk.email("Email_Test@gmail.com", "Titulo Email", "Texto Email");
}

Como este artigo já vai um pouco longo, podem encontrar e realizar o download do ficheiro com o código completo e carregar no vosso NodeMCU ESP8266 (Ver ficheiro abaixo).

Procurem os nossos outros projectos e tutoriais acerca do Arduino, onde explicamos diversas montagens e o funcionamento dos seus componentes, já agora visitem o nosso canal no Youtube, Instagram, Facebook ou Twitter.

Abraço e até ao próximo projecto.

Share

    Recommendations

    • Classroom Science Contest

      Classroom Science Contest
    • IoT Challenge

      IoT Challenge
    • Arduino Contest 2019

      Arduino Contest 2019

    Discussions