Escolar Documentos
Profissional Documentos
Cultura Documentos
Indaiatuba/SP
2021
1
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
5 IMAGENS DO PROJETO.......................................................................................29
3
INTRODUÇÃO
PMCANVAS
5
1 ARQUITETURA
#include "Wire.h"
#include <LiquidCrystal_I2C.h>
#include <DS1307.h>
//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
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());
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
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);
}
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);
}
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);
}
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
void apagar()
{
digitalWrite(LED_VM, LOW);
digitalWrite(LED_VD, LOW);
digitalWrite(LED_AM, LOW);
digitalWrite(pinoRele, HIGH);
}
{
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
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
#include "Wire.h"
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include "DHT.h"
{
B11111, B00000, B11111, B11111, B11111, B11111, B00000, B11111
};
//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);
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
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();
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);
}
4.2 Protoboard
4.3 Jumpers
26
4.10 LED
5 IMAGENS DO PROJETO
31