Ola Amigos,
Estou precisando de uma ajuda com um sistema de irrigacao que estou montando, sou novo nesta area de eletronica/arduino e tenho um conhecimento bem basico ainda, mas vamos la... Os componentes que estou utilizando sao:
-Arduino UNO
-Modulo Rele Songle SRD-05VDC (da china)
-Sonsor de umidade do solo FC-28 (com conversor digital.. acho que eh isso kkk)
-Modulo RTC DS1307
-LED
Funcao: o Rele ira ativar uma valvula solenoide em um horario determinado do dia validando se o solo esta seco ou nao.
Problema: quando o sensor identifica o solo seco ativando o rele, as vezes acontece do rele ativar o restante dos modulos, ligando o led, ativando o sensor e ativando o rele (o que nao deveria ocorrer), neste caso ele fica ligando e desligando repetidamente... as vezes (nao sei dizer pq) ele funciona corretamente, porem a luz do DO do sensor fica levemente energizada (o que indica que tem algo errado.. kkk.)
Segue um video do que ocorre (desculpe a qualidade do video...)
Obs: Ha momentos que funciona normal... :~
Segue o Codigo:
// Programa : Data e Hora com DS1307
// Autor : Arduino e Cia
#include "Wire.h"
#define DS1307_ADDRESS 0x68
byte zero = 0x00;
int horaRelogio, minutoRelogio;
int ledPin13 = 13;
int rele = 8;
void setup()
{
Wire.begin();
Serial.begin(9600);
pinMode(11, INPUT); //Sensor de Solo
pinMode(ledPin13, OUTPUT); // Led
pinMode(rele, OUTPUT); // rele
digitalWrite(rele, HIGH);
//SelecionaDataeHora() ;
}
void loop()
{
Mostrarelogio();
delay(1000);
int umidadeSolo;
umidadeSolo = digitalRead (11);
Serial.print("Umidade: ");
Serial.println (umidadeSolo);
if(horaRelogio >=7 && horaRelogio <=18 || horaRelogio >=18 && horaRelogio <=22)
{
if (umidadeSolo == 1 )
{
digitalWrite(13, HIGH);
digitalWrite(rele, LOW);
}
if (umidadeSolo == 0 )
{
digitalWrite(13, LOW);
digitalWrite(rele, HIGH);
}
}
else{
// digitalWrite(13, LOW);
// digitalWrite(rele, HIGH);
}
}
void SelecionaDataeHora() //Seta a data e a hora do DS1307
{
byte segundos = 40; //Valores de 0 a 59
byte minutos = 46; //Valores de 0 a 59
byte horas = 13; //Valores de 0 a 23
byte diadasemana = 1; //Valores de 0 a 6 - 0=Domingo, 1 = Segunda, etc.
byte diadomes = 15; //Valores de 1 a 31
byte mes = 9; //Valores de 1 a 12
byte ano = 14; //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); //Start no CI
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) );
}
void Mostrarelogio()
{
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero);
Wire.endTransmission();
Wire.requestFrom(DS1307_ADDRESS, 7);
int segundos = ConverteparaDecimal(Wire.read());
int minutos = ConverteparaDecimal(Wire.read());
minutoRelogio = minutos;
int horas = ConverteparaDecimal(Wire.read() & 0b111111);
horaRelogio = horas;
int diadasemana = ConverteparaDecimal(Wire.read());
int diadomes = ConverteparaDecimal(Wire.read());
int mes = ConverteparaDecimal(Wire.read());
int ano = ConverteparaDecimal(Wire.read());
//Mostra a data no Serial Monitor
Serial.print("Data: ");
Serial.print(diadomes);
Serial.print("/");
Serial.print(mes);
Serial.print("/");
Serial.print(ano);
Serial.print(" ");
Serial.print("Hora : ");
Serial.print(horas);
Serial.print(":");
Serial.print(minutos);
Serial.print(":");
Serial.print(segundos);
switch(diadasemana)
{
case 0:Serial.println(", Domingo");
break;
case 1:Serial.println(", Segunda");
break;
case 2:Serial.println(", Terca");
break;
case 3:Serial.println(", Quarta");
break;
case 4:Serial.println(", Quinta");
break;
case 5:Serial.println(", Sexta");
break;
case 6:Serial.println(", Sabado");
}
}
Obs: O codigo esta bem pobre... nao foquei nele uma vez que nao tenho certeza do circuito...
O que estaria errado? O que estaria faltando nessa joca kkk?
Desde ja agradeco a vossa ajuda!
