Arduino Irrigation System
Itens necessários:
1 Arduino Uno
2 Um ou mais sensores de umidade de solo (higrometro)
http://produto.mercadolivre.com.br/MLB-713434924-sensor-de-umidade-do-solo-higrmetro-_JM
3 Um Relay 5v para Arduino
http://produto.mercadolivre.com.br/MLB-714228857-modulo-rele-relay-um-cana-5v-pra-arduinocodigo-estoque-sp-_JM
4 Uma valvula solenoide normalmente fechada 110v
http://produto.mercadolivre.com.br/MLB-680762297-valvula-solenoide-simples-entrada-de-agua-110220v-csuporte-_JM
5 Conexão com a rede de agua
6 Canos ou mangueias para irrigar
Funcionamento
Esse é um sistema automático de irrigamento, que liga a saída de água de acordo com a taxa de umidade detectada na terra, garantindo a quantidade exata desejada durante todo o dia.
O arduino recebe as informações do sensor de umidade e, caso detecte que a umidade esta abaixo de um determinado nível, aciona o relay por alguns segundos (ou minutos), que por sua vez liga a válvula solenoide liberando a saída de água.
O desligamento é feito quando se atinge a taxa de umidade desejável ou após um determinado período (caso o sensor falhe).
Ligações
Somente duas portas do arduino são utilizadas no projeto, uma porta digital para controlar o relay e outra porta analógica receber valores do sensor de umidade.
O relay possui dois lados, no lado um, com as marcações S + - é o lado a ser controlado pelo arduino. O S significa signal, e recebe os dados da porta digital do arduino.
Do outro lado do relay existem as marcações NC, NO e C, que significam Normally closed, Normally Opened e Common. Para o nosso sistema de irrigação utilizaremos o relay na função Normally Closed. Isso significa que a corrente só passara pelo relay caso o arduino a acione. Isso evita desperdício de energia.
O relay nada mais é do que um interruptor controlado pelo arduino.
Código 1
int umidade = 0; //Variavel
int umid_minima = 300; //Esta variavel deve ser testada para determinar o nivel de umidade desejado
int tempo_irrigacao = 5000; //Tempo em que a valvula ficara ligada em milesimos de segundos, precisa testar
void setup()
{
Serial.begin(9600); //Inicia o monitoramento da Serial
pinMode(6, OUTPUT);
}
void loop()
{
Serial.print("A umidade agora e "); //Escreve a umidade na Serial
Serial.println(analogRead(A0));
if(analogRead(A0)<=umid_minima) //Condicional que testa a umidade do sistema
{
digitalWrite(6, HIGH); //Liga a valvula e inicia a irrigacao
delay(tempo_irrigacao); //Tempo de espera para desligar a irrigacao
digitalWrite(6, LOW); //Desliga a valvula
}
delay(60000); //Tempo entre cada teste de umidade
}
Nesse código o arduino vai testar a umidade do solo a cada 1 minuto (60000) e com base nisso irá irrigar o solo por 5 segundos, caso a umidade esteja a baixo de 300. Todos os valores devem ser testados para evitar que o solo fique seco demais ou encharcado.
Se o tempo de irrigação for muito alto, a quantidade de agua pode ser maior do que a necessária. O ideal é que a irrigação seja feita em pequenas etapas.
Código 2
int umidade = 0; //Variavel
int umid_minima = 300; //Esta variavel deve ser testada para determinar o nivel de umidade desejado
int umid_maxima = 500;
void setup()
{
Serial.begin(9600); //Inicia o monitoramento da Serial
pinMode(6, OUTPUT);
}
void loop()
{
Serial.print("A umidade agora e "); //Escreve a umidade na Serial
Serial.println(analogRead(A0));
if(analogRead(A0)<=umid_minima) //Condicional que testa a umidade do sistema
{
while(analogRead(A0)<umid_maxima)
{
digitalWrite(6, HIGH); //Liga a valvula e inicia a irrigacao
}
digitalWrite(6, LOW); //Desliga a valvula
}
delay(60000); //Tempo entre cada teste de umidade
}
Nesse código a irrigação não depende do tempo estipulado mas do nível de umidade medido. Quando o Arduino detecta que a umidade está muito baixa, ele inicia a irrigação até que o o sensor detecte o valor máximo estipulado pela variável umid_maxima.
Aviso: caso ocorra algum erro de medição de umidade máxima, a válvula não será desligada e a terra ficara encharcada.