bonjour, j'ai créé un niveau d'eau avec capteur US pour ma piscine.
avec arduino nano
et capteur A02YYUW
1 alimentation 12V pour alimenter 1 electrovanne + 5V pour la carte arduino
1 relais pour commander l4EV
3 leds : blanche sous tension / rouge relais off / vert relais on.
principe : calcul de la distance, si >12cm => relais on.
lecture distance avec le capteur US OK , cohérente de la valeur réelle
à la mise en marche OK
au bout de qqs temps, plus rien ne se passe.
si j'éloigne le capteur, la mesure augmente, pourtant le relais ne s'active, y compris la led verte.
je pense à 1 saturation de la mémoire de l'arduino
voici le programme (j'en ai 1 autre qui fait le test de distance toutes les 24h, celui ci est simplifié).
merci de votre aide
#include <Wire.h>
#include <SoftwareSerial.h>
// affectation bornes capteur US
#define RXpin 6
#define TXpin 5
SoftwareSerial mySerial(RXpin, TXpin);
unsigned char data[4] = {};
float distance = 0.00;
// affectation led et relais------------------------------------------------
int ledV = 2; // borne digitale led verte remplissage en cours
int ledR = 3; // borne digitable led rouge remplissage l'arret
int ledB = 4; // borne digitable led blanche systeme en marche
int Relais = 8; // borne digitable relais EV
//paramètres distance et arrosage
const long temps_arrosage = 300000; // durée réglée à 5mn=300000
int HREF = 12; // cote de référence au delà de laquelle on commande le remplissage
void setup() {
pinMode(RXpin, INPUT);
pinMode(TXpin, OUTPUT);
Wire.begin();
Serial.begin(9600);
mySerial.begin(9600);
pinMode(ledV, OUTPUT);
pinMode(ledR, OUTPUT);
pinMode(ledB, OUTPUT);
pinMode(Relais, OUTPUT);
digitalWrite(ledB,HIGH);
digitalWrite(ledR,HIGH);
}
void loop() {
// Resetting the RX pin
digitalWrite(TXpin, HIGH);
delay(30);
delay(2); // Ensure the pulse is detected
digitalWrite(TXpin, LOW);
delay(30);
// Send positive pulse to the sensor's RX pin to start measurement
digitalWrite(TXpin, HIGH);
// Wait for the measurement to complete
delay(60); // Adjust delay based on sensor specifications
// Gathering & calculating the data
for(int i=0; i<4; i++) { data[i] = mySerial.read(); }
distance = ((data[1]*256)+data[2] )/ 10;
// Display the measurement
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
if (distance > HREF){
digitalWrite(ledR,LOW);
digitalWrite(ledV,HIGH);
digitalWrite(Relais,HIGH);
delay(temps_arrosage);
digitalWrite(ledV,LOW);
digitalWrite(ledR,HIGH);
digitalWrite(Relais,LOW);}
else { }
}


