salve
ho usato due sensori per umidità terreno come sensori per rilevare la presenza di acqua dentro un serbatoio (lo so è sbagliato ma questi mi trovo)
il codice attuale mi accende o spegne un relè a seconda se il serbatoio è pieno o vuoto (lo uso per svuotare il serbatoio)
vorrei variare il funzionamento del relè, cioè non deve stare acceso o spento, ma accendersi e spegnersi per 1 sec, il problema che non riesco a risolvere è che se uso il delay il tutto si ripete ciclicamente io invece vorrei che si fornisse l'impulso solo al variare della soglia cioè quando scendi sotto il minimo un impulso poi fermo fino a quando il livello non raggiunge nuovamente il massimo e quindi un'altro solo impulso
riassumo:
serbatoio pieno = arduino rileva che il sensore di massimo è in contatto con l'acqua e da un acceso spento al relè che attiva la pompa per lo svuotamento
serbatoio vuoto = arduino rileva che il sensore di minimo non è in contatto con l'acqua e da un acceso (LOW) spento (HIGH) al relè che disattiva la pompa per lo svuotamento.
per poi riattivarsi quando sarà nuovamente pieno
PS il serbatoio è alimentato da una sorgente in automatico
ecco il codice che ho scritto e non riesco a modificare
/*Sketch per rilevare l'umidita' del terreno (valore analogico) e accendere un led se si raggiunge una soglia critica. */
/*
50 led rosso livello acqua min
51 led verde livello acqua max
52 led rosso pompa spenta
53 led verde pompa accesa
A0 sensore livello acqua max
A1 sensore livello acqua min
22 relè pompa
*/
#define pompa 22 // relè pompa
#define led_liv_min 50
#define led_liv_max 51
#define led_pompa_off 52
#define led_pompa_on 53
#define liv_max A0
#define liv_min A1
const int soglia_minima = 800; //sensore di livello mimino
const int soglia_massima = 400; //sensore di livello massimo
void setup()
{
Serial.begin(9600);
pinMode(50, OUTPUT); //led rosso livello acqua min
pinMode(51, OUTPUT); //led verde livello acqua max
pinMode(52, OUTPUT); //led verde pompa accesa
pinMode(53, OUTPUT); //led rossa pompa spenta
pinMode(pompa, OUTPUT); //relè pompa
pinMode(A0, INPUT); // sensore livello acqua min
pinMode(A1, INPUT); // sensore livello acqua max
}
void loop()
{
int sensorValue_1 = analogRead(A0); //Legge il valore analogico liv MAX
{
if (sensorValue_1 <= soglia_massima)
{
Serial.println("pompa accesa livello acqua ok");
digitalWrite(pompa, LOW); //Accendi pompa
digitalWrite(led_pompa_on, HIGH); //Accendi led VERDE pompa
digitalWrite(led_liv_max, HIGH); //Accendi led VERDE liv MAX
digitalWrite(led_liv_min, LOW); //Spegni led ROSSO liv min
digitalWrite(led_pompa_off, LOW); //Spegni led ROSSO pompa
}
}
int sensorValue_2 = analogRead(A1); //Legge il valore analogico liv Min
{
if (sensorValue_2 >= soglia_minima)
{
Serial.println("pompa spenta livello acqua Basso" );
digitalWrite(pompa, HIGH); //spegni pompa
digitalWrite(led_pompa_on, LOW); //Spegni led VERDE pompa
digitalWrite(led_liv_max, LOW); //Spegni led VERDE liv MAX
digitalWrite(led_liv_min, HIGH); //Accendi led ROSSO liv min
digitalWrite(led_pompa_off, HIGH); //Accendi led ROSSO pompa
}
}
delay(2000); //Attende due secondi
}