Você está na página 1de 32

0

CENTRO ESTADUAL DE EDUCAÇÃO TECNOLÓGICA PAULA SOUZA

FACULDADE DE TECNOLOGIA DE INDAIATUBA

DR. ARCHIMEDES LAMMOGLIA

GUSTAVO FERNANDES FEITOSA

HENRIQUE DUARTE MOLLER

MATEUS SCOMPARIN DE CAMARGO

RAFAEL VIEIRA ARAUJO

DigiChuva – Automação Em Irrigação

Indaiatuba/SP

2021
1

CENTRO ESTADUAL DE EDUCAÇÃO TECNOLÓGICA PAULA SOUZA

FACULDADE DE TECNOLOGIA DE INDAIATUBA

DR. ARCHIMEDES LAMMOGLIA

GUSTAVO FERNANDES FEITOSA

HENRIQUE DUARTE MOLLER

MATEUS SCOMPARIN DE CAMARGO

RAFAEL VIEIRA ARAUJO

DigiChuva – Automação Em Irrigação


Atividade apresentado em grupo para a
disciplina Projeto de Redes de Computadores
do Curso Superior de Tecnologia em Redes de
Computadores, da Faculdade de Tecnologia de
Indaiatuba, elaborado sob a orientação do Prof.
Me. Alex Rodrigo Moises Costa Wanderley.

Indaiatuba/SP

2021
2

SUMÁRIO

INTRODUÇÃO.............................................................................................................3

PMCANVAS.................................................................................................................4

1 ARQUITETURA........................................................................................................5
1.1 Esquema Lógico.................................................................................................5
1.2 Código Fonte......................................................................................................6

2 CRONOGRAMA..................................................................................................... 14

3 VERSÃO 2.0...........................................................................................................15
3.1 Esquema Lógico...............................................................................................16
3.2 Código Fonte....................................................................................................17

4 LISTA FINAL DE MATERIAIS................................................................................25


4.1 Arduino UNO.................................................................................................... 25
4.2 Protoboard........................................................................................................25
4.3 Jumpers............................................................................................................25
4.6 Sensor DHT11..................................................................................................26
4.7 Sensor de Umidade do Solo Higrômetro..........................................................26
4.8 Real Time Clock RTC DS3231.........................................................................27
4.9 Display LCD 20x4 I2C......................................................................................27
4.10 LED.................................................................................................................27
4.11 Válvula Solenoide...........................................................................................28
4.12 Módulo Relé 5V 2 Canais...............................................................................28

5 IMAGENS DO PROJETO.......................................................................................29
3

INTRODUÇÃO

Em determinados períodos do ano, existem as grandes secas em áreas


isoladas, o projeto visa ajudar a monitorar o solo e regar caso seja necessário.

Com o objetivo de ajudar as empresas em épocas difíceis, a automação em


irrigação - DigiChuva – vem para tentar suprir esse déficit no setor agropecuário,
tanto em baixa quanto em alta escala, utilizando a plataforma de prototipagem
eletrônica Arduino e seus respectivos módulos.
4

PMCANVAS
5

1 ARQUITETURA

1.1 Esquema Lógico


Utilizando o software Fritzing foi elaborado o esquema lógico para melhor
entendimento.
6

1.2 Código Fonte

Este é o código do projeto na sua primeira versão. A ideia é trabalhar com o


que já temos e aprimorá-lo.

#include "Wire.h"
#include <LiquidCrystal_I2C.h>
#include <DS1307.h>

#define DS1307_ADDRESS 0x68


#define pinoAnalog A0
#define pinoRele 8
#define pino5V 7
#define LED_VM 3
#define LED_VD 4
#define LED_AM 5
#define sensor A0
#define H1 = 12
#define H2 = 18
#define atual = 0

DS1307 rtc(A4, A5);


// Modulo RTC no endereco 0x68

// Modulo I2C display no endereco 0x27


LiquidCrystal_I2C lcd(0x27,16,2);

byte zero = 0x00;


int sinal;
int ValAnalogIn; // Introduz o valor analógico ao código
int i;

//bateria vazia
byte batlow[8] = {
B11111,
B10001,
B10001,
B10001,
B10001,
B10001,
B10001,
B11111
};

//bateria media
byte batmed[8] = {
B11111,
B10001,
7

B10001,
B10001,
B11111,
B11111,
B11111,
B11111
};

//batceria cheia
byte batfull[8] = {
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111
};

void setup()
{
Wire.begin();
Serial.begin(9600);
lcd.begin (16,2);
pinMode(pinoRele, OUTPUT); // Declara o pinoRele como Saída
pinMode(pino5V, OUTPUT); // Declara o pino5V como Saída
pinMode(sensor, INPUT);
pinMode(LED_VM, OUTPUT);
pinMode(LED_VD, OUTPUT);
pinMode(LED_AM, OUTPUT);
digitalWrite(pinoRele, HIGH);
digitalWrite(pino5V, HIGH); // Põem o pino5V em estado Alto = 5V

// vai criar novo caracter bateria vazia


lcd.createChar(0, batlow);
// vai criar novo caracter bateria media
lcd.createChar(1, batmed);
// vai criar novo caracter bateria cheia
lcd.createChar(2, batfull);
// vai criar novo caracter bateria cheia

lcd.setBacklight(HIGH);
lcd.setCursor(4,0);
lcd.print("DIGICHUVA");
lcd.setCursor(2,1);
lcd.print("... carregando");
for(int i=0; i<3; i++){
lcd.setCursor(0, 1); //aponta para coluna 0, linha 0
lcd.write(i); //escreve lcd.write(1); lcd.write(2); lcd.write(3);
8

delay(800);
}
delay(2000);
lcd.clear();
}

//A linha abaixo pode ser retirada apos setar a data e hora
//SelecionaDataeHora();

void loop()
{
// Le os valores (data e hora) do modulo DS1307
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero);
Wire.endTransmission();
Wire.requestFrom(DS1307_ADDRESS, 7);
int segundos = ConverteparaDecimal(Wire.read());
int minutos = ConverteparaDecimal(Wire.read());
int horas = ConverteparaDecimal(Wire.read() & 0b111111);
int diadasemana = ConverteparaDecimal(Wire.read());
int diadomes = ConverteparaDecimal(Wire.read());
int mes = ConverteparaDecimal(Wire.read());
int ano = ConverteparaDecimal(Wire.read());

ValAnalogIn = analogRead(pinoAnalog); // Relaciona o valor analógico com o


recebido do sensor
int Porcento = map(ValAnalogIn, 1023, 0, 0, 100); // Relaciona o valor analógico à
porcentagem

lcd.setBacklight(HIGH);
lcd.setCursor(1,0);
lcd.print("Umidade em "); // Imprime o símbolo junto ao valor encontrado
lcd.print(Porcento); // Imprime o símbolo junto ao valor encontrado
lcd.println("% "); // Imprime o símbolo junto ao valor encontrado

if (horas == 12 && minutos <=10 && Porcento >= 60)


{
lcd.setBacklight(HIGH);
lcd.setCursor(3,1);
lcd.print("Hora: ");

if (horas <10) // Acrescenta o 0 (zero) se a hora for menor do que 10


lcd.print("0");
lcd.print(horas);
lcd.print(":");

if (minutos < 10) // Acrescenta o 0 (zero) se minutos for menor do que 10


lcd.print("0");
lcd.print(minutos);
9

digitalWrite(LED_VD, HIGH);
delay(5000);

lcd.clear();
lcd.setCursor(2,1);
lcd.setCursor(0,0);
lcd.print("Umidade do solo");
lcd.setCursor(0,1);
lcd.print("dentro do normal");
delay(400);
lcd.noDisplay();
delay(400);
lcd.display();
delay(400);
lcd.noDisplay();
delay(400);
lcd.display();
delay(400);
lcd.display();
delay(400);
}

else if (horas == 12 && minutos <=10 && Porcento <= 40)


{
lcd.setBacklight(HIGH);
lcd.setCursor(3,1);
lcd.print("Hora: ");

if (horas <10) // Acrescenta o 0 (zero) se a hora for menor do que 10


lcd.print("0");
lcd.print(horas);
lcd.print(":");

if (minutos < 10) // Acrescenta o 0 (zero) se minutos for menor do que 10


lcd.print("0");
lcd.print(minutos);
digitalWrite(LED_AM, HIGH);
delay(5000);

lcd.clear();
lcd.setCursor(2,1);
lcd.setCursor(0,0);
lcd.print("Umidade do solo");
lcd.setCursor(0,1);
lcd.print("abaixo do normal");
delay(3000);

lcd.clear();
lcd.setCursor(2,0);
lcd.print("Iniciando a");
10

lcd.setCursor(3,1);
lcd.print("irrigacao");
delay(400);
lcd.noDisplay();
delay(400);
lcd.display();
delay(400);
lcd.noDisplay();
delay(400);
lcd.display();
delay(400);
lcd.display();
delay(400);
digitalWrite(pinoRele, LOW);
delay(10000);
}

if (horas == 18 && minutos <=10 && Porcento >= 60)


{
lcd.setBacklight(HIGH);
lcd.setCursor(3,1);
lcd.print("Hora: ");

if (horas <10) // Acrescenta o 0 (zero) se a hora for menor do que 10


lcd.print("0");
lcd.print(horas);
lcd.print(":");

if (minutos < 10) // Acrescenta o 0 (zero) se minutos for menor do que 10


lcd.print("0");
lcd.print(minutos);
digitalWrite(LED_VD, HIGH);
delay(5000);

lcd.clear();
lcd.setCursor(2,1);
lcd.setCursor(0,0);
lcd.print("Umidade do solo");
lcd.setCursor(0,1);
lcd.print("dentro do normal");
delay(400);
lcd.noDisplay();
delay(400);
lcd.display();
delay(400);
lcd.noDisplay();
delay(400);
lcd.display();
delay(400);
lcd.display();
11

delay(400);
}

else if (horas == 18 && minutos <=10 && Porcento <= 40)


{
lcd.setBacklight(HIGH);
lcd.setCursor(3,1);
lcd.print("Hora: ");

if (horas <10) // Acrescenta o 0 (zero) se a hora for menor do que 10


lcd.print("0");
lcd.print(horas);
lcd.print(":");

if (minutos < 10) // Acrescenta o 0 (zero) se minutos for menor do que 10


lcd.print("0");
lcd.print(minutos);
digitalWrite(LED_AM, HIGH);
delay(5000);

lcd.clear();
lcd.setCursor(2,1);
lcd.setCursor(0,0);
lcd.print("Umidade do solo");
lcd.setCursor(0,1);
lcd.print("abaixo do normal");
delay(3000);

lcd.clear();
lcd.setCursor(2,0);
lcd.print("Iniciando a");
lcd.setCursor(3,1);
lcd.print("irrigacao");
delay(400);
lcd.noDisplay();
delay(400);
lcd.display();
delay(400);
lcd.noDisplay();
delay(400);
lcd.display();
delay(400);
lcd.display();
delay(400);
digitalWrite(pinoRele, LOW);
delay(10000);
}

lcd.clear();
apagar();
12

if (Porcento >= 61)


{
digitalWrite(LED_VD, HIGH);
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Umidade em ");
lcd.print(Porcento);
lcd.println("% ");
lcd.setCursor(3,1);
lcd.print("DIGICHUVA");
}
else if (Porcento >= 31 && Porcento <= 60)
{
digitalWrite(LED_AM, HIGH);
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Umidade em ");
lcd.print(Porcento);
lcd.println("% ");
lcd.setCursor(3,1);
lcd.print("DIGICHUVA");
}
else if (Porcento <= 30)
{
digitalWrite(LED_VM, HIGH);
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Umidade em ");
lcd.print(Porcento);
lcd.println("% ");
lcd.setCursor(3,1);
lcd.print("DIGICHUVA");
}

delay(300000); //5 minutos


lcd.clear();
apagar();

void apagar()
{
digitalWrite(LED_VM, LOW);
digitalWrite(LED_VD, LOW);
digitalWrite(LED_AM, LOW);
digitalWrite(pinoRele, HIGH);
}

void SelecionaDataeHora() //Seta a data e a hora do DS1307


13

{
byte segundos = 0; //Valores de 0 a 59
byte minutos = 47; //Valores de 0 a 59
byte horas = 17; //Valores de 0 a 23
byte diadasemana = 6; //Valores de 0 a 6 - 0=Domingo, 1 = Segunda, etc.
byte diadomes = 31; //Valores de 1 a 31
byte mes = 10; //Valores de 1 a 12
byte ano = 20; //Valores de 0 a 99
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero); //Stop no CI para que o mesmo possa receber os dados

//As linhas abaixo escrevem no CI os valores de


//data e hora que foram colocados nas variaveis acima
Wire.write(ConverteParaBCD(segundos));
Wire.write(ConverteParaBCD(minutos));
Wire.write(ConverteParaBCD(horas));
Wire.write(ConverteParaBCD(diadasemana));
Wire.write(ConverteParaBCD(diadomes));
Wire.write(ConverteParaBCD(mes));
Wire.write(ConverteParaBCD(ano));
Wire.write(zero);
Wire.endTransmission();
}

byte ConverteParaBCD(byte val)


{
//Converte o número de decimal para BCD
return ( (val/10*16) + (val%10) );
}

byte ConverteparaDecimal(byte val)


{
//Converte de BCD para decimal
return ( (val/16*10) + (val%16) );
}
14

2 CRONOGRAMA

 Investigação
o Avaliar o que será mantido do projeto original e reunir ideias para o
aprimoramento do protótipo;
o Identificar possíveis melhorias.
 Pesquisa
o Orçar tudo o que será necessário para esta nova etapa do projeto;
o Comprar tudo o que for necessário.
 Desenvolvimento
o Instalar os novos módulos;
o Testar as novas implementações.
 Entrega
o Analisar se tudo está de acordo com o esperado;
o Realizar a entrega final.
15

3 VERSÃO 2.0

Foi implementado um Sensor de Umidade e Temperatura (DHT11)


juntamente com uma página web coletando e analisando todos os dados dos
sensores a partir do módulo WiFi ESP8266 NodeMcu ESP-12.
16

3.1 Esquema Lógico


17

3.2 Código Fonte

#include "Wire.h"
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include "DHT.h"

#define DS1307_ADDRESS 0x68


#define pinoAnalog A0
#define pinoRele 8
#define pino5V 7
#define LED_VM 3
#define LED_VD 4
#define LED_AM 5
#define sensor A0
#define DHTPIN A1 // pino que estamos conectando
#define DHTTYPE DHT11 // DHT 11

// Modulo I2C display no endereco 0x27


LiquidCrystal_I2C lcd(0x27,20,4);
RTC_DS1307 rtc;
DHT dht(DHTPIN, DHTTYPE);

int ValAnalogIn; // Introduz o valor analógico ao código


int Hor; // Inicia a variável Hor
int Min; // Inicia a variável Min
int Seg; // Inicia a variável Seg

//bateria esquerda vazia


byte esq_v[8] =
{
B01111, B10000, B10000, B10000, B10000, B10000, B10000, B01111
};

//bateria esquerda cheia


byte esq_c[8] =
{
B01111, B10000, B10111, B10111, B10111, B10111, B10000, B01111
};

//bateria meio vazia


byte mei_v[8] =
{
B11111, B00000, B00000, B00000, B00000, B00000, B00000, B11111
};

//bateria meio cheia


byte mei_c[8] =
18

{
B11111, B00000, B11111, B11111, B11111, B11111, B00000, B11111
};

//bateria meio cheia


byte dir_v[8] =
{
B11110, B00001, B00001, B00001, B00001, B00001, B00001, B11110
};

//bateria meio cheia


byte dir_c[8] =
{
B11110, B00001, B11101, B11101, B11101, B11101, B00001, B11110
};

//gota
byte gota[8] =
{
B00100, B00100, B01010, B01010, B10001, B10001, B10001, B01110
};

//termometro
byte term[8] =
{
B00100, B01010, B01010, B01110, B01110, B11111, B11111, B01110
};

void apagar()
{
digitalWrite(LED_VM, LOW);
digitalWrite(LED_VD, LOW);
digitalWrite(LED_AM, LOW);
digitalWrite(pinoRele, HIGH);
}

void setup()
{
rtc.begin();
dht.begin();
Wire.begin();
Serial.begin(9600);

//rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Ajuste Automático da hora


e data
//rtc.adjust(DateTime(2019, 11, 29, 10, 23, 00)); // Ajuste Manual (Ano, Mês, Dia,
Hora, Min, Seg)

lcd.init();
lcd.backlight();
19

lcd.begin (16,2);
pinMode(pinoRele, OUTPUT);
pinMode(pino5V, OUTPUT);
pinMode(sensor, INPUT);
pinMode(LED_VM, OUTPUT);
pinMode(LED_VD, OUTPUT);
pinMode(LED_AM, OUTPUT);
digitalWrite(pinoRele, HIGH);
digitalWrite(pino5V, HIGH); // Põem o pino5V em estado Alto = 5V

lcd.createChar(0, esq_v);
lcd.createChar(1, esq_c);
lcd.createChar(2, dir_v);
lcd.createChar(3, dir_c);
lcd.createChar(4, mei_v);
lcd.createChar(5, mei_c);
lcd.createChar(6, gota);
lcd.createChar(7, term);

lcd.setBacklight(HIGH);
lcd.setCursor(5,1);
lcd.print("DIGICHUVA");
lcd.setCursor(3,2);
lc
d.write(byte(0));lcd.write(byte(4));lcd.write(byte(4));lcd.write(byte(4));lcd.write(byte(4))
;lcd.write(byte(4));lcd.write(byte(4));lcd.write(byte(4));lcd.write(byte(4));lcd.write(byte(
4));lcd.write(byte(4));lcd.write(byte(2));
lcd.setCursor(16,2);
lcd.print(" 0%");
delay(200);
lcd.setCursor(3,2);
lc
d.write(byte(1));lcd.write(byte(4));lcd.write(byte(4));lcd.write(byte(4));lcd.write(byte(4))
;lcd.write(byte(4));lcd.write(byte(4));lcd.write(byte(4));lcd.write(byte(4));lcd.write(byte(
4));lcd.write(byte(4));lcd.write(byte(2));
lcd.setCursor(16,2);
lcd.print(" 5%");
delay(200);
lcd.setCursor(3,2);
lc
d.write(byte(1));lcd.write(byte(5));lcd.write(byte(4));lcd.write(byte(4));lcd.write(byte(4))
;lcd.write(byte(4));lcd.write(byte(4));lcd.write(byte(4));lcd.write(byte(4));lcd.write(byte(
4));lcd.write(byte(4));lcd.write(byte(2));
lcd.setCursor(16,2);
lcd.print(" 10%");
delay(200);
lcd.setCursor(3,2);
lc
d.write(byte(1));lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(4));lcd.write(byte(4))
20

;lcd.write(byte(4));lcd.write(byte(4));lcd.write(byte(4));lcd.write(byte(4));lcd.write(byte(
4));lcd.write(byte(4));lcd.write(byte(2));
lcd.setCursor(16,2);
lcd.print(" 20%");
delay(200);
lcd.setCursor(3,2);
lc
d.write(byte(1));lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(4))
;lcd.write(byte(4));lcd.write(byte(4));lcd.write(byte(4));lcd.write(byte(4));lcd.write(byte(
4));lcd.write(byte(4));lcd.write(byte(2));
lcd.setCursor(16,2);
lcd.print(" 30%");
delay(200);
lcd.setCursor(3,2);
lc
d.write(byte(1));lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(5))
;lcd.write(byte(4));lcd.write(byte(4));lcd.write(byte(4));lcd.write(byte(4));lcd.write(byte(
4));lcd.write(byte(4));lcd.write(byte(2));
lcd.setCursor(16,2);
lcd.print(" 30%");
delay(200);
lcd.setCursor(3,2);
lc
d.write(byte(1));lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(5))
;lcd.write(byte(4));lcd.write(byte(4));lcd.write(byte(4));lcd.write(byte(4));lcd.write(byte(
4));lcd.write(byte(4));lcd.write(byte(2));
lcd.setCursor(16,2);
lcd.print(" 40%");
delay(200);
lcd.setCursor(3,2);
lc
d.write(byte(1));lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(5))
;lcd.write(byte(5));lcd.write(byte(4));lcd.write(byte(4));lcd.write(byte(4));lcd.write(byte(
4));lcd.write(byte(4));lcd.write(byte(2));
lcd.setCursor(16,2);
lcd.print(" 50%");
delay(200);
lcd.setCursor(3,2);
lc
d.write(byte(1));lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(5))
;lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(4));lcd.write(byte(4));lcd.write(byte(
4));lcd.write(byte(4));lcd.write(byte(2));
lcd.setCursor(16,2);
lcd.print(" 60%");
delay(200);
lcd.setCursor(3,2);
lc
d.write(byte(1));lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(5))
;lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(4));lcd.write(byte(
4));lcd.write(byte(4));lcd.write(byte(2));
21

lcd.setCursor(16,2);
lcd.print(" 70%");
delay(200);
lcd.setCursor(3,2);
lc
d.write(byte(1));lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(5))
;lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(
4));lcd.write(byte(4));lcd.write(byte(2));
lcd.setCursor(16,2);
lcd.print(" 80%");
delay(200);
lcd.setCursor(3,2);
lc
d.write(byte(1));lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(5))
;lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(
5));lcd.write(byte(4));lcd.write(byte(2));
lcd.setCursor(16,2);
lcd.print(" 90%");
delay(200);
lcd.setCursor(3,2);
lc
d.write(byte(1));lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(5))
;lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(5));lcd.write(byte(
5));lcd.write(byte(5));lcd.write(byte(3));
lcd.setCursor(16,2);
lcd.print("100%");
delay(400);

lcd.clear();
}

//A linha abaixo pode ser retirada apos setar a data e hora
//SelecionaDataeHora();

void loop()
{
DateTime now = rtc.now();
Hor = rtc.now().hour(); // Chama o horário de Hor
Min = rtc.now().minute(); // Chama o minuto de Min
Seg = rtc.now().second(); // Chama os segundos de Seg

ValAnalogIn = analogRead(pinoAnalog); // Relaciona o valor analógico com o


recebido do sensor
int Porcento = map(ValAnalogIn, 1023, 0, 0, 100); // Relaciona o valor analógico à
porcentagem

float h = dht.readHumidity();
float t = dht.readTemperature();
22

lcd.setCursor(0,0);
lcd.print(Hor); lcd.print(":"); lcd.print(Min);
lcd.setCursor(12,0);
lcd.print("Ver. 2.0");

if (Hor == 12 && Min <= 5 || Hor == 18 && Min <= 5 && Porcento <= 40)
{
lcd.setCursor(0,2);
lcd.write(byte(6));
lcd.print("SOIL MOISTURE:");
lcd.setCursor(16,2);
lcd.print(Porcento);
lcd.setCursor(19,2);
lcd.print("%");
lcd.setCursor(0,3);
lcd.write(byte(6));
lcd.print("AIR HUMIDITY:");
lcd.setCursor(16,3);
lcd.print(h);
lcd.setCursor(1,1);
lcd.print("%");
digitalWrite(LED_AM, HIGH);
delay(5000);
lcd.clear();

lcd.setCursor(1,1);
lcd.print("SOIL HUMIDITY BELOW");
lcd.setCursor(6,2);
lcd.print("EXPECTED");
delay(5000);
lcd.clear();

lcd.setCursor(6,1);
lcd.print("STARTING");
lcd.setCursor(5,2);
lcd.print("IRRIGATION");
digitalWrite(pinoRele, HIGH);
delay(1000);
}

else if (Hor == 12 && Min <= 5 || Hor == 18 && Min <= 5 && Porcento >= 60)
{
lcd.setCursor(0,2);
lcd.write(byte(6));
lcd.print("SOIL MOISTURE:");
lcd.setCursor(16,2);
lcd.print(Porcento);
lcd.setCursor(19,2);
lcd.print("%");
lcd.setCursor(0,3);
23

lcd.write(byte(6));
lcd.print("AIR HUMIDITY:");
lcd.setCursor(16,3);
lcd.print(h);
lcd.setCursor(1,1);
lcd.print("%");
digitalWrite(LED_VD, HIGH);
delay(5000);
lcd.clear();

lcd.setCursor(1,1);
lcd.print("SOIL HUMIDITY WITHIN");
lcd.setCursor(4,2);
lcd.print("THE EXPECTED");
delay(2000);
}

lcd.clear();
apagar();

if (Porcento >= 60)


{
lcd.setCursor(0,0);
lcd.print(Hor); lcd.print(":"); lcd.print(Min);
lcd.setCursor(12,0);
lcd.print("Ver. 2.0");

lcd.setCursor(0,2);
lcd.write(byte(6));
lcd.print("Hum.");
lcd.setCursor(6,2);
lcd.print(h);
lcd.print("%");
lcd.setCursor(11,2);
lcd.write(byte(6));
lcd.print("Soil");
lcd.print(Porcento);
lcd.print("%");
lcd.setCursor(0,3);
lcd.write(byte(7));
lcd.print("Temp:");
lcd.print(t);
lcd.print("*C");
digitalWrite(LED_VD, HIGH);
}
else if (Porcento <40)
{
lcd.setCursor(0,0);
lcd.print(Hor); lcd.print(":"); lcd.print(Min);
lcd.setCursor(12,0);
24

lcd.print("Ver. 2.0");

lcd.setCursor(0,0);
lcd.print(Hor); lcd.print(":"); lcd.print(Min);
lcd.setCursor(12,0);
lcd.print("Ver. 2.0");

lcd.setCursor(0,2);
lcd.write(byte(6));
lcd.print("Hum.");
lcd.setCursor(6,2);
lcd.print(h);
lcd.print("%");
lcd.setCursor(11,2);
lcd.write(byte(6));
lcd.print("Soil");
lcd.print(Porcento);
lcd.print("%");
lcd.setCursor(0,3);
lcd.write(byte(7));
lcd.print("Temp:");
lcd.print(t);
lcd.print("*C");
digitalWrite(LED_AM, HIGH);
}
else if (Porcento >= 41 && Porcento<= 59)
{
lcd.setCursor(0,0);
lcd.print(Hor); lcd.print(":"); lcd.print(Min);
lcd.setCursor(12,0);
lcd.print("Ver. 2.0");

lcd.setCursor(0,0);
lcd.print(Hor); lcd.print(":"); lcd.print(Min);
lcd.setCursor(12,0);
lcd.print("Ver. 2.0");

lcd.setCursor(0,2);
lcd.write(byte(6));
lcd.print("Hum.");
lcd.setCursor(6,2);
lcd.print(h);
lcd.print("%");
lcd.setCursor(11,2);
lcd.write(byte(6));
lcd.print("Soil");
lcd.print(Porcento);
lcd.print("%");
lcd.setCursor(0,3);
lcd.write(byte(7));
25

lcd.print("Temp:");
lcd.print(t);
lcd.print("*C");
digitalWrite(LED_VM, HIGH);
}

delay(15000); //15 SEGUNDOS


lcd.clear();
apagar();
}

4 LISTA FINAL DE MATERIAIS

4.1 Arduino UNO

O Arduino é um conjunto de ferramentas de


prototipagem eletrônica open source que visa tornar
mais fácil a criação de aparelhos eletrônicos. Basta ligar
a placa ao computador e já é possível escrever códigos
para o Arduino no ambiente de desenvolvimento do
software (através da linguagem C/C++).

4.2 Protoboard

Basicamente protoboard é uma matriz de contato,


ou placa de ensaio (ou em inglês breadboard) é uma placa
com furos de conexões condutoras para montagem
circuitos elétricos experimentais.

4.3 Jumpers
26

Os jumpers são chaves elétricas utilizadas em


placas e alguns dispositivos, como discos rígidos para
ativar, regular ou desativar funções específicas do
sistema que não são acessíveis via software. Entenda
como podem ser usados a seu favor.

4.5 Módulo WiFi ESP8266 NodeMcu ESP-12

O módulo Wifi ESP8266 NodeMCU é uma placa


de desenvolvimento que combina o chip ESP8266, uma
interface usb-serial e um regulador de tensão 3.3V. A
programação pode ser feita usando LUA ou a IDE do
Arduino, utilizando a comunicação via cabo micro-usb.

4.6 Sensor DHT11

O DHT11 é um sensor digital básico de temperatura e


umidade de baixo custo. Ele usa um sensor de umidade capacitivo e
um termistor para medir o ar circundante e emite um sinal digital no
pino de dados (não são necessários pinos de entrada analógica). É
bastante simples de usar, mas requer um tempo cuidadoso para
obter os dados.

4.7 Sensor de Umidade do Solo Higrômetro


27

Um Sensor de Umidade do Solo é um


módulo detector da resistividade da terra, ou seja, são
sensores que medem as variações de umidade da terra.
O higrômetro é um sensor para medição da umidade do
solo ou do ar. O Sensor de Umidade no Solo deve ser
enterrado no solo para medição da umidade da terra.

4.8 Real Time Clock RTC DS3231

O Real Time Clock (RTC) DS3231 é um


relógio de tempo real de alta precisão e baixo
consumo de energia. Em sua placa vêm embutido
um sensor de temperatura e um cristal oscilador para
melhorar sua exatidão.

Este módulo DS3231 é capaz de fornecer informações como segundo,


minutos, dia, data, mês e ano. Correções como meses com menos de 31 dias e
anos bissextos são corrigidos automaticamente e pode operar tanto no formato 12
horas como 24 horas.

4.9 Display LCD 20x4 I2C

Display LCD 20×4 I2C tem um módulo de


comunicação I2C incorporado ao conjunto,
facilitando a conexão do display aos mais variados
equipamentos.
28

Com esse display, você faz a conexão entre o microcontrolador e o display


utilizando os pinos SDA e SCL, deixando as outras portas livres para o
desenvolvimento do seu projeto!

4.10 LED

Os leds TX e RX, são usados para indicar o


funcionamento do barramento serial, e o led ON
permanece ligado enquanto houver alimentação na
placa do Arduino. Estes leds tem funcionamento
independente, ou seja, não é possível controlá-los
diretamente, apenas o led L pode ser acendido e apagado através do software.

4.11 Válvula Solenoide

Válvula solenóide é um dispositivo eletromecânico


usado para controlar o fluxo de líquido ou gás. A válvula
de solenóide é controlada pela corrente elétrica, que
passa por uma bobina. Quando a bobina é energizada,
um campo magnético é criado, fazendo com que um
êmbolo dentro da bobina se mova.

4.12 Módulo Relé 5V 2 Canais

Com este módulo você consegue fazer


acionamento de cargas de 200V AC, como lâmpadas,
equipamentos eletrônicos, motores, ou usá-lo para fazer
um isolamento entre um circuito e outro. O módulo é
equipado com transistores, conectores, leds, diodos e
relés de alta qualidade. Cada canal possui um LED para
indicar o estado da saída do relé.
29
30

5 IMAGENS DO PROJETO
31

Você também pode gostar