Controle automático de irrigação de jardim

Participantes:

Elias Ribeiro Farciroli

Resumo do projeto:

Um sistema de irrigação que através de sensores de temperatura , e umidade do solo e horário do dia verificando se é necessário irrigar o jardim ,assim economizando água na redução das evaporação da água no solo.

Descrição do projeto:

 

No projeto desenvolvido é criado um sistema hábil para acionar um sistema de irrigação aplicando a técnica por gotejamento, sempre que for apresentada uma medição de umidade no solo. Utilizando o Franzininho Wifi e sensores específicos para garantir a segurança e funcionamento integral do projeto, é possível monitorar e se necessário adequar o sistema, alterando a programação de acordo com a necessidade de cada plantação, proeminentemente possibilitando minimizar e até solucionar problemas de produção causados consequentemente por problemas climáticos que afetam diretamente o solo e a disponibilidade da água.

Imagem 1: Protótipo.

Histórico do desenvolvimento:

A ideia do projeto se deu a uma necessidade no meses secos na região sudeste no ano de 2021 .Água é um recurso essencial para a vida humana e quando sofremos com um período de seca refletimos sobre como à utilizamos e no desperdício do dia a dia.

pesquisando sobre o assunto encontrei diversas informações sobre formas de irrigação e como evitar o desperdício.

Irrigação

Um sistema de irrigação deve ser feito de forma sustentável, visando ainda o melhor aproveitamento da água evitando desperdício da mesma, consequentemente poupando outros fatores como o esgotamento do solo e o uso de energia. No caso da irrigação por gotejamento, o processo é feito umedecendo o solo junto da planta, de forma que economize água, e satisfaça as necessidades da plantação .A falta de água pode retardar o crescimento das plantas e danificar as folhas, enquanto que o excesso “afoga” as raízes, dificultando a oxigenação e contribuindo para o aparecimento de fungos e doenças. O segredo é regar devagar, parando quando a água começar a penetrar na terra.

Melhor horário para irrigação 

O melhor horário para irrigar as plantas é entre as primeiras horas do dia e após as 15 horas.

Shield Franzininho Wifi

Para facilitar as ligações e a prototipagem foi desenvolvido um shield para a Franzininho Wifi utilizando uma placa perfurada dupla face de 4×6 cm e barra de pinos ,nela temos :

  • VCC (3v3): Barra cor vermelha
  • GND: Barra cor preta
  •  Esp32: Barra cor amarela

Imagem 2: Vista superior shield e Franzininho Wifi.

Imagem 1: Vista superior shield e Franzininho Wifi.

Imagem 3: Vista lateral shield e Franzininho Wifi.

A fim de economizar água foi desenvolvido um coletor de água de chuva , consiste em um recipiente cilíndrico com um filtro fixado na tampa , foi utilizado como recipiente um pote de sorvete e um pano como filtro.

Imagem 4: Tanque com filtro coletor de água de chuva.

 

Para irrigar foi utilizado uma mangueira e feito furos até as extremidades.

Imagem 5: mangueira com furos.

 

Hardware:

Esquemático Fritzing

 

Imagem 6:Esquemático fritzing.

.

 

Lista de materiais


Tabela 1: Lista de materiais.

Quantidade

Componente

1 Franzininho Wifi
2 Sensor de umidade do solo
1 DHT11
1 Módulo relé
1 DS3231
1 Boia de nível
1 Display Oled
1 Bomba d’água 3v3

Foi soldado um resistor de 4K7 no pino SDA e no pino SCL ( comunicação I2C ), sem eles não é possível realizar a comunicação I2C.

Imagem 7: Resistores de 4K7.

Demonstrativo de funcionamento

Vídeo 1.

 

Vídeo 2.

Conclusão

O Franzininho Wifi se mostrou eficiente para a prototipagem, porém não foi utilizado seu recurso wifi, uma atualização deste projeto poderia utilizar este recurso para a informação de forma online dos valores dos sensores de umidade do solo ,temperatura e umidade ambiente. Automatizar e controlar processos visa otimizar o tempo e ganho na economia de recursos, ao usar a engenharia para melhorar técnicas comuns de subsistência, conclui-se que contribui para maior aproveitamento das mesmas, sendo possível analisar e avaliar qual melhor instrumentação a ser utilizada. A relevância do tema agrega na percepção das vantagens de um sistema automático, bem como sua influência na economia e na conscientização no que se diz respeito aos impactos ambientais. Destaca-se ainda a viabilidade de sua utilização no aproveitamento de recursos, otimização do tempo beneficiando o resultado desejado. Um sistema de irrigação deve ser feito de forma sustentável, visando ainda o melhor aproveitamento da água evitando desperdício da mesma, consequentemente poupando outros fatores como o esgotamento do solo e o uso de energia. No caso da irrigação por gotejamento, o processo é feito umedecendo o solo junto da planta, de forma que economize água, e satisfaça as necessidades da plantação.

Software/Firmware:

A lógica do programa consiste na leitura dos sensores de umidade do solo , temperatura e umidade do ambiente (DHT11), nível  do tanque (boia )e hora do dia (DS3231).De acordo com o set point dessas variáveis podemos irrigar um jardim ou plantação de forma a economizar água, e de acordo com o solo alterar para melhor resultado.

 

Segue abaixo o código utilizado na plataforma Arduino IDE. 

 

#include <DS3231.h>

#include “DHT.h”

#include <Adafruit_SSD1306.h>

#include <Adafruit_GFX.h>

#include <driver/adc.h>//necessario para o funcionamento do ADC do esp32

 

Adafruit_SSD1306 dsp(-1);//cria o objeto do display para i2c

 

/*                                               Variaveis                                               */

 

DS3231 relogio;

RTCDateTime dt;

int Hora, Minuto, Segundo , Dia, Mes, Ano;

int t, h;

int Sen1, Sen2, media;

boolean statusBoia;

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

/*                                               Pinos                                                   */

 

#define DHTPIN 6     // Digital pin connected to the DHT sensor

#define Boia 7

#define Bomba 4

const int Sensor1 = 1;

const int Sensor2 = 2;

// SDA  8

// SCL  9

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

#define DHTTYPE DHT11   // DHT 11

DHT dht(DHTPIN, DHTTYPE);

 

/*                                               Funções                                                 */

void escreveHora() {

 

  dsp.clearDisplay();

  dsp.setCursor(0, 0);

  dsp.print(F(“Data: “));

  dsp.print(dt.day);

  dsp.print(F(“-“));

  dsp.print(dt.month);

  dsp.print(F(“-“));

  dsp.println(dt.year);

 

  dsp.print(F(“Hora: “));

  dsp.print(dt.hour);

  dsp.print(F(“:”));

  dsp.print(dt.minute);

  dsp.print(F(“:”));

  dsp.println(dt.second);

  dsp.print(F(“Boia: “));

  dsp.println(statusBoia);

  dsp.display();

  delay(1000);

}

 

void escreveTemp() {

  dsp.setTextColor(WHITE);//define o texto para branco (no display ficara azul)

  dsp.setTextSize(1);

  dsp.clearDisplay();

  dsp.setCursor(0, 0);

  dsp.print(F(“Umidade: “));

  dsp.print(h);

  Serial.println(“h” + String(h));

  dsp.println(F(“% “));

  dsp.print(F(“Temp: “));

  dsp.print(t);

  Serial.println(“t” + String(t));

  dsp.println(F(” C “));

  dsp.print(F(“S1: “));

 

  int sen1 = analogRead(Sensor1);

 

  Serial.println(“sa” + String(sen1));

  dsp.println(sen1);

  delay(300);

  dsp.print(F(“S2: “));

  

  int sen2 = analogRead(Sensor2);

  Serial.println(“sb” + String(sen2));

  dsp.println(sen2);

 

  dsp.display();//mostra as alterações no display, sem isso não ira mostrar nada!!

  delay(1000);

}

 

void escreve()

{

 

  if (isnan(h) || isnan(t) ) {

   Serial.println(F(“Failed to read from DHT sensor!”));

 

  }

 

  escreveTemp();

  escreveHora();

 

}

 

void irrigar() {

  h = dht.readHumidity();

  t = dht.readTemperature();

  Sen1 = analogRead(Sensor1);

  delay(300);

  Sen2 = analogRead(Sensor2);

  dt = relogio.getDateTime();

  Hora = dt.hour;

  Minuto = dt.minute;

  Segundo = dt.second;

  Dia = dt.day;

  Mes = dt.month;

  Ano = dt.year;

  statusBoia = digitalRead(Boia);

  escreve();

  media = (Sen1 + Sen2) / 2;

 

  if ( ((t <= 28) && (Hora >= 5) && (Hora <= 7) && (media >= 600)) || ((Hora >= 17) && (Hora <= 19) && (media >= 600)) ) {

    if (statusBoia == false) {

      digitalWrite(Bomba, HIGH);

    }

  }

  else {

    digitalWrite(Bomba, LOW);

  }

  escreve();

}

 

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

void setup() {

  Serial.begin(9600);

  relogio.begin();

  // relogio.setDateTime(__DATE__, __TIME__); //atualiza hora e data de acordo com o momento de compilação

   analogReadResolution ( 10 ); // resolução de 10 bits necessario para a leitura analogica.

  analogSetPinAttenuation (Sensor1, ADC_11db); // Atenuação de 6db no pino

  analogSetPinAttenuation (Sensor2, ADC_11db); // Atenuação de 6db no pino

 

  dht.begin();

  dsp.begin(SSD1306_SWITCHCAPVCC, 0x3C);//inicia o display com endereco padrao

  dsp.clearDisplay();//limpa a tela

 

  pinMode(Boia, INPUT);

  pinMode(Bomba, OUTPUT);

 

}

 

void loop() {

  // Wait a few seconds between measurements.

 

  irrigar();

 

}