Sistema de Irrigação Automática com Microcontrolador

Neste post, vamos construir um sistema automatizado de irrigação de água para pequenos jardins usando arduino e sensor de umidade do solo.

De Arduino Guru

Olá, se tiver algum erro de tradução (AUTO), falta de link para download etc...
Veja na FONTE até ser revisado o post. -status (revisado 70% 31/10/2019)-
 Mas se gostou compartilhe!!!

Introdução

O sistema proposto pode monitorar o nível de umidade do solo e quando a umidade do solo fica abaixo do valor pré-definido, a bomba de 12V DC será acionada por um período predeterminado de tempo. O status do nível de umidade do solo e outras funções do sistema podem ser monitorados via display LCD 16 x 2 em tempo real.

Estima-se que existam 3 trilhões de árvores em todo o mundo, o que é maior do que o número de lares em nossa galáxia, a Via Láctea, que é estimada em 100 bilhões. Mas nós, humanos, cortamos um número incontável de árvores para satisfazer nossas necessidades básicas às necessidades de luxo.

A Mãe Natureza é projetada com um sistema de feedback, quando uma espécie introduz grandes perturbações, a natureza eliminará a espécie.

Os seres humanos estavam perturbando a natureza inconscientemente por séculos, mas, mesmo após um grande desenvolvimento em ciência e tecnologia, a taxa de perturbação não diminuiu.

A mudança climática é um dos exemplos, quando se torna drasticamente suficiente, nossa espécie não durará muito.
Este projeto dá um pequeno passo em frente para preservar a natureza, pode irrigar seu lindo jardim sem interação humana. Agora vamos entrar em detalhes técnicos do projeto.

Sensor de umidade do solo:

O coração do projeto é o sensor de umidade do solo, que pode detectar a quantidade de umidade no solo. O sensor fornece valor analógico e um microcontrolador interpretará esses valores e exibirá o conteúdo de umidade.

Existem dois eletrodos, que serão inseridos no solo. Os eletrodos são conectados a uma placa de circuito composto por um comparador IC, LED, entrada do resistor trimmer e pinos de saída.

Ilustração do sensor de umidade do solo:

Possui 4 + 2 pinos, 2 pinos para conexão do eletrodo e os restantes 4 pinos são Vcc, GND, saída digital e saída analógica. Vamos usar apenas o pino de saída analógica para detectar a umidade do solo.
Como não estamos usando o pino de saída digital, não usaremos o resistor aparador integrado para calibrar o sensor.

Agora, isso conclui o sensor de umidade do solo.

Diagrama esquemático:

O circuito é mantido bastante simples e amigável para iniciantes. O esquema é dividido em duas partes do mesmo projeto para reduzir a confusão ao duplicar o projeto.

O esquema acima é o LCD para fiação arduino . Um potenciômetro de 10K é fornecido para ajustar o contraste do display LCD.

Aqui está o resto do esquema que consiste em sensor de umidade do solo, bomba de 12V DC, botão de calibração e fonte de alimentação de 12V (1 – 2 amp). Por favor, use uma fonte de alimentação pelo menos maior que 500mA de corrente nominal de 12V DC da bomba.

O MOSFET IRF540N (ou qualquer canal N equivalente) é usado em vez de BJTs para melhorar a eficiência geral de energia do sistema.

A bomba vai regar você pequeno jardim, verifique se você sempre tem quantidade adequada de água está disponível.

Código do Programa:

 //-------------Program Developed By R.Girish-------------//
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int Time = 5;         // Set time in minutes
int threshold = 30;   // set threshold in percentage 80, 70, 60, 50, 40, 30, 20 only.
int i;
int x;
int y;
int z;
int start;
int calibrateValue;
const int calibrateBTN = A1 ;
const int input = A0;
const int motor = 7;
boolean calibration = false;
boolean rescue = false;
void setup()
{
Serial.begin(9600);
pinMode(input, INPUT);
pinMode(calibrateBTN, INPUT);
pinMode(motor, OUTPUT);
digitalWrite(calibrateBTN, HIGH);
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("Pour water and");
lcd.setCursor(0,1);
lcd.print("press calibrate");
while(!calibration)
{
if(digitalRead(calibrateBTN)==LOW)
{
calibrateValue = analogRead(input);
x = 1023 - calibrateValue;
x = x/10;
Serial.print("Difference = ");
Serial.println(x);
Serial.print("Calibration Value = ");
Serial.println(calibrateValue);
delay(500);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Calibration done");
lcd.setCursor(0,1);
lcd.print("successfully !!!");
calibration = true;
delay(2000);
}
}
}
void loop()
{
if(analogRead(input)<= calibrateValue)
{
delay(500);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Soil Moisture");
lcd.setCursor(0,1);
lcd.print("Level: 100%");
}
if(analogRead(input) > calibrateValue && analogRead(input) <= calibrateValue+x)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Soil Moisture");
lcd.setCursor(0,1);
lcd.print("Level: 90 to 99%");
}
if(analogRead(input) > calibrateValue+x && analogRead(input) <= calibrateValue+2*x )
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Soil Moisture");
lcd.setCursor(0,1);
lcd.print("Level: 80 to 90%");
start = 80;
}
if(analogRead(input) > calibrateValue+2*x && analogRead(input) <= calibrateValue+3*x)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Soil Moisture");
lcd.setCursor(0,1);
lcd.print("Level: 70 to 80%");
start = 70;
}
if(analogRead(input) > calibrateValue+3*x && analogRead(input) <= calibrateValue+4*x)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Soil Moisture");
lcd.setCursor(0,1);
lcd.print("Level: 60 to 70%");
start = 60;
}
if(analogRead(input) > calibrateValue+4*x && analogRead(input) <= calibrateValue+5*x)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Soil Moisture");
lcd.setCursor(0,1);
lcd.print("Level: 50 to 60%");
start = 50;
}
if(analogRead(input) > calibrateValue+5*x && analogRead(input) <= calibrateValue+6*x)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Soil Moisture");
lcd.setCursor(0,1);
lcd.print("Level: 40 to 50%");
start = 40;
}
if(analogRead(input) > calibrateValue+6*x && analogRead(input) <= calibrateValue+7*x)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Soil Moisture");
lcd.setCursor(0,1);
lcd.print("Level: 30 to 40%");
start = 30;
}
if(analogRead(input) > calibrateValue+7*x && analogRead(input) <= calibrateValue+8*x)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Soil Moisture");
lcd.setCursor(0,1);
lcd.print("Level: 20 to 30%");
start = 20;
}
if(analogRead(input) > calibrateValue+8*x && analogRead(input) <= calibrateValue+9*x)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Soil Moisture");
lcd.setCursor(0,1);
lcd.print("Level: 10 to 20%");
start = 10;
}
if(analogRead(input) > calibrateValue+9*x && analogRead(input) <= calibrateValue+10*x)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Soil Moisture");
lcd.setCursor(0,1);
lcd.print("Level: < 10%");
rescue = true;
}
if(start == threshold || rescue)
{
y = Time;
digitalWrite(motor, HIGH);
Time = Time*60;
z = Time;
for(i=0; i<Time; i++)
{
z = z - 1;
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("PUMP IS ON, WILL");
lcd.setCursor(0,1);
lcd.print("TURN OFF IN:");
lcd.print(z);
}
Time = y;
rescue = false;
digitalWrite(motor, LOW);
}
delay(1000);
}
//-------------Program Developed By R.Girish-------------// 

Como calibrar este sistema de irrigação automática:

• Com hardware concluído, insira o eletrodo no solo, em algum lugar no caminho do fluxo de água.
• Agora altere os dois valores no programa 1) O tempo necessário para regar todas as plantas (em minutos). 2) Nível limite abaixo do qual o arduino aciona a bomba. Você pode definir os valores percentuais 80, 70, 60, 50, 40, 30, 20 apenas.

int tempo = 5; // Definir hora em minutos
int threshold = 30; // defina o limite em porcentagem 80, 70, 60, 50, 40, 30, 20 apenas.

Altere os valores no programa.

• Carregue o código no arduino e ligue o circuito. Ele exibirá “despeje água e pressione calibrar”. Agora você tem que regar manualmente o seu jardim a um nível suficiente.
• Depois de regar o jardim, pressione o botão de calibração. Isso determinará a condução da eletricidade em solo totalmente úmido e tirará o valor de referência.
• Agora o sistema está pronto para servir seu pequeno jardim. Por favor, tente adicionar um backup de energia para este projeto. Quando a energia falhar, o valor calibrado de referência será apagado da memória e você terá que calibrar o sistema novamente.

Protótipo do autor:

Indicação do nível de umidade do solo:

Uma vez que a bomba é ligada, ele irá mostrar o tempo restante para desligar (em segundos).

Veja mais


Olá, se tiver algum erro de tradução (AUTO), falta de link para download etc…
Veja na FONTE até ser revisado o post. -status (revisado 70% 31/10/2019)-

Mas se gostou compartilhe!!!


FONTE

DEIXE UMA RESPOSTA

Por favor digite seu comentário!
Por favor, digite seu nome aqui