Demande d'aide pour un capteur de niveau.

Bonjour à tous,

je suis Cédric et je début dans l’univers d’Arduino, j’ai un Arduino Uno Wifi, un écran LCD 2x16, un capteur à ultra-son HC-SR04.

J’aimerais mesuré la hauteur d’eau dans une cuve et l’exprimé en litre, j’ai réussi sauf que le code est inversé en effet le capteur ne bouge pas et avec mon code quand l’eau monte et sur mon écran LCD il y as moins de litres, par exemple si j’ai 10 cm = 5 litres et si j’ai 20 cm = 12 litres, je voudrais que cela s’inverse 10 cm = 12 litres et 20 cm = 5 litres.

Voici monde code

/*
* Ultrasonic Sensor HC-SR04 and Arduino Tutorial
*
* Crated by Dejan Nedelkovski,
* www.HowToMechatronics.com
*
*/
#include <LiquidCrystal.h> // includes the LiquidCrystal Library
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7)
const int trigPin = 7;
const int echoPin = 10;
long duration;
int distanceCm, volume;
void setup() {
lcd.begin(16,2); // Initializes the interface to the LCD screen, and specifies the dimensions (width and height) of the display
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distanceCm= duration*0.034/2;
volume = distanceCm *10* 0.40*0.20*0.15;
lcd.setCursor(0,0); // Sets the location at which subsequent text written to the LCD will be displayed
lcd.print("Distance: "); // Prints string "Distance" on the LCD
lcd.print(distanceCm); // Prints the distance value from the sensor
lcd.print(" cm");
delay(10);
lcd.setCursor(0,1);
lcd.print("Volume: ");
lcd.print(volume);
lcd.print(" Litres");
delay(10);
}

Pouvez-vous m’aidé s’il vous plait ?

Merci.

Volume_en_litres.ino (1.16 KB)

Il vous suffit d'écrire la petite équation qui relie la distance de la surface de l'eau à son volume et puis de la coder.

Cordialement.

Pierre

Merci Pierre peut-tu me donné un exemple car je ne connais rien au code, merci.

Supposons l'équation y = 5.2 x -1.65

On déclare les constantes a et b :

const float a = 5.2;
const float b = -1.65;

puis on déclare les variables x et y

float x, y;

on affecte une valeur à x, par exemple 3.2 et enfin on écrit l'équation :

x = 3.2;
y = a * x + b;

Voilà, mais je suppose que cela ne va pas vous aider beaucoup si vous ne savez pas coder en langage C.

Il est absolument nécessaire que vous ayez au moins quelques bases dans ce langage.

Cordialement.

Pierre

Merci Pierre, effectivement je ne connais rien en langage C.

bonjour,
ce que tu calcul, c'est le volume d'air apparemment.
pourquoi ne pas faire une simple soustraction?
volume restant = volume plein - volume

mais tu sors la formule de volume d'où?
forme de la cuve?

Bonjour,

en faite je veux fabriqué une fontaine à eau pour mon chat entièrement automatique avec pris sur le réseau d’eau et doublement filtré avec pompe à eau, j’aurais aimé s’avoir la capacité en litre d’eau restant dans la fontaine.

j’ai trouvé des codes sur internet et j’ais essayer de copier, j’ais bien ma capacité en litres mais inversé.

j’ai trouvé cela mais Arduino me dit qu’il y as une erreur.

<

// include the library code:

#include <SoftwareSerial.h>
#include <LiquidCrystal.h>

#define rxPin 10
#define txPin 7

SoftwareSerial mySerial = SoftwareSerial(rxPin,txPin); // RX, TX

byte mesHigh = 0;
byte mesLow = 0;
byte start =0;
byte sum = 0;

int mesure; // valeur de sortie brute du capteur en mm
int index=0; //numero d’ordre de l’octet courant du message

// initialize the lcd library with the numbers of the interface pins

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
// set up the LCD’s number of columns and rows:
lcd.begin(16, 2);

mySerial.begin(9600);

}

void loop() {
// set the cursor to column 0, line 0
// (note: line 0 is the first row, since counting begins with 0):
lcd.setCursor(0, 0);

int niveau, volume, mesurecm ;

mySerial.flush();
delay(100);

if (mySerial.available() >= 4) {

start=mySerial.read();
mesHigh=mySerial.read();
mesLow=mySerial.read();
sum=mySerial.read();

mesure = (mesHigh * 256) + mesLow;
mesurecm = mesure/10;
lcd.home();
//lcd.println(mesure);
//lcd.print(" ");
//lcd.home();

}
delay(1000);
niveau = 265-mesurecm; // 204 + réhausse + Espace inter niv-capteur
volume = niveau 10 1.171.173.14;
//delay(1000);
lcd.print(mesurecm);
lcd.print(" CM “);
lcd.print(“Niv:”);
lcd.print(niveau);
lcd.print(” CM");
lcd.setCursor(0, 1);
lcd.print(volume);
lcd.print(" Litres");

}