buongiorno a tutti, volevo fare un sistema che (durante la notte) rilevasse il livello dell'acqua della piscina e nel caso fosse basso aprisse un'elettrovalvola in modo da riempirla. il problema sta nel sensore. Se collego il sensore ad un voltmetro il segnale è netto (1,0), se lo leggo con digitalRead() mi segnala sempre il livello basso, se lo leggo in analogico (con intervalli di 1/2 secondo) il segnale passa da 1023 a 900, poi 400 poi 0 e viceversa.
Qual'è il problema???
grazie in anticipo
// Progetto di apertura automatica dell'acqua di riempimento della piscina
#define ELETTROVALVOLA 12
#define SENSORE A2
#define COUNTDOWN 0 //tempo in secondi rimanenti all'inizio dell'attivazione
#define GIORNO 86400 //i secondi in un giorno
#define INTERVALLO 14400//i secondi che deve durare il tempo del riempimento
#define PAUSA 10000 //i millisecondi in cui deve stare in pausa per la stabilità del sistema
#define STATOSENSORE HIGH //lo stato del sensore nel momento in cui il livello dell'acqua è basso
unsigned long starttime = 0;
int aperto=0;
void setup ()
{
pinMode(ELETTROVALVOLA, OUTPUT);
pinMode(SENSORE, INPUT);
Serial.begin(9600);
starttime = millis()/1000;
}
void loop ()
{
while(((millis()/1000)-starttime > COUNTDOWN) && ((millis()/1000)-starttime < (COUNTDOWN + INTERVALLO))){
if(analogRead(SENSORE)>900&&aperto==0){
digitalWrite(ELETTROVALVOLA, LOW);
aperto = 1;
Serial.println(analogRead(SENSORE));
delay(10); //per la stabilità del sistema
delay(PAUSA);
}
else if(aperto == 1){ //se c'è acqua ma l'elettrovalvola è aperta
digitalWrite(ELETTROVALVOLA, HIGH);
aperto = 0;
Serial.println(analogRead(SENSORE));
delay(10); //per la stabilità del sistema
delay(PAUSA);
}
}
if(aperto==1){
digitalWrite(ELETTROVALVOLA, HIGH);
aperto=0;
Serial.println("chiuso");
}
if((millis()/1000)-starttime>GIORNO){
starttime=millis()/1000;
}
delay(1);
}