Guys,
thank you very much for your help with the project. I had seen the messages, I tested it and it worked in my project, but I forgot to reply.
However, now I have a problem where my relay doesn’t want to activate the water pump with all the components inserted in the circuit…I’m using an external 12V and 3A supply to power the Arduino Uno R3, thinking it’s a power supply problem, but it still didn’t work. I don’t know if it’s something in the circuit or something to do with the code. I’ll insert the code here for you to analyze and if you can help me with this problem.
I’m from Brazil and some of the comments I made in the line of code were to remind me of what each line does.
I
Code:
int ledB = 10;
int ledR = 9;
int ledY = 8;
int ledG = 7;
int bombaH2O = 6;
const int sensor01 = 5;
const int sensor02 = 4;
//Definição de todas as entradas.
bool nivelMaximoDetectado = false; //Detecta se o nível está no máximo.
unsigned long tempoNivelMaximo; //Armazena tempo em que o nível máximo foi detectado.
const long atrasoLigamento = 2000; //Tempo para o qual deve acionar o led azul e a bomba, após o evento de detecção.
bool bombaLigada = false;
void setup() {
pinMode(ledB, OUTPUT);
pinMode(ledR, OUTPUT);
pinMode(ledY, OUTPUT);
pinMode(ledG, OUTPUT);
pinMode(sensor01, INPUT);
pinMode(sensor02, INPUT);
digitalWrite(bombaH2O, LOW);
digitalWrite(ledB, LOW);
digitalWrite(ledR, LOW);
digitalWrite(ledY, LOW);
digitalWrite(ledG, LOW);
Serial.begin(9600);
Serial.println(“Iniciando controle cisterna…”);
//Definição qual a função das entradas.
}
void loop() {
int nivelsensor01 = digitalRead(sensor01);
int nivelsensor02 = digitalRead(sensor02);
if ((nivelsensor01 == LOW) && (nivelsensor02 == LOW)){
digitalWrite(bombaH2O, LOW);
digitalWrite(ledB, LOW);
digitalWrite(ledR, LOW);
digitalWrite(ledY, LOW);
digitalWrite(ledG, HIGH);
Serial.println(“Cisterna sem água.”);
nivelMaximoDetectado = false;
bombaLigada = false; //Desliga a bomba e reseta o estado, ou seja, verifica se é verdade, se não continua o código para atender aos outros requisitos.
}else if ((nivelsensor01 == HIGH) && (nivelsensor02 == LOW)){
digitalWrite(bombaH2O, LOW);
digitalWrite(ledB, LOW);
digitalWrite(ledR, LOW);
digitalWrite(ledY, HIGH);
digitalWrite(ledG, LOW);
Serial.println(“Detectado agua na cisterna”);
nivelMaximoDetectado = false;
bombaLigada = false; //Desliga a bomba e reseta o estado, ou seja, verifica se é verdade, se não continua o código para atender aos outros requisitos.
} else if ((nivelsensor01 == HIGH) && (nivelsensor02 == HIGH)){
//Nível máximo detectado.
if (!nivelMaximoDetectado){
//Se o nível máximo for detectado, então deve executar estas condições do “if”.
digitalWrite(ledR, HIGH);
digitalWrite(ledY,LOW);
Serial.println(“Cisterna nível máximo. Iniciando medidas de drenagem”);
tempoNivelMaximo = millis(); //Armazena o tempo exato em que condição de nível máximo é armazenada.
nivelMaximoDetectado = true; //Detecta a condição de positivo para condição de HIGH-HIGH dos sensores.
} else {
if (millis() - tempoNivelMaximo >= atrasoLigamento){ //Essa equeção define se o tempo para o atraso de ligamento do led azul e da bomba é atendidada (maior ou igual a 2s).
digitalWrite(bombaH2O, HIGH);
digitalWrite(ledB, HIGH);
digitalWrite(ledY, LOW);
digitalWrite(ledG, LOW);
Serial.println(“Bomba acionanda. Drenando agua.”);
bombaLigada = true; //Marca que a bomba foi ligada.
}
}
}
else if (bombaLigada && (nivelsensor01 == LOW) && (nivelsensor02 == LOW)) {
//Se os sensores abaixarem para o nível de LOW, então a bomba cessa seu funcionamento.
digitalWrite(bombaH2O, LOW);
digitalWrite(ledB, LOW);
digitalWrite(ledR, LOW);
bombaLigada = false; //Bomba desligada.
nivelMaximoDetectado = false; //Com os dois sensores no LOW, então essa condição não se torna verdadeira.
}
delay(2000);
}