Ciao a tutti, sto creando un piccolo circuito in pratica tramite un VL530X ed un sensore liquidi non a contatto dovrei riuscire a capire quanto acqua ho ancora nella cisterna, il problema è nei conti sicuramente imposto male le equazioni ma non capisco dove sbaglio.
La cisterna è 1,2m di diametro per 2m di altezza per 2000 litri di acqua.
Ora ho impostato delle variabili sia float che int per ottenere i vari dati ma ottengo dati sbagliati, non so perché, ho convertito di dati del VL530X, che dovrebbe dare i dati in mm, in cm per quando l'altezza dell'acqua è sotto il metro, mentre li converto in metri per quando sono sopra la metro di lettura.
Potete spiegarmi dove sbaglio non lo arrivo a capire.
Ho fatto varie prove, prima inserendo l'aerea della base del cilindro, pensando che fosse li il problema ho inserito la formula del volume ma ho ancora l'errore sia nella sezione cm che nella sezione m
Vi allego anche uno screenshot delle letture che ottengo.
Grazie per il possibile aiuto.
#include <SPI.h>
#include <Wire.h> // Libreria per sensore laser
#include <VL53L0X.h> // Libreria per sensore laser
// Costanti varie
char str_CM [7]; // Stringa per scrittura altezza
char Litri[7]; // Stringa per scrittura litri
// Sezione sensore laser
#define HIGH_ACCURACY // Accuratezza laser
VL53L0X sensor; // Sensore laser
// Pin sensore non a contatto
#define sensore_H2O 6
void setup() {
pinMode(sensore_H2O, INPUT_PULLUP);
Wire.begin();
sensor.init();
sensor.setTimeout(500);
sensor.startContinuous();
Serial.begin(9600);
}
void loop() {
int A = digitalRead(sensore_H2O);
int distanza = sensor.readRangeSingleMillimeters();
if( A==LOW){
// Sezione calcolo sotto 1 metro di altezza
if((distanza/10.0)<=99){
float distanza_CM = (float)(distanza/10.0); //Distanza in cm
dtostrf(distanza_CM, 1, 0, str_CM);
Serial.print(str_CM);
Serial.println(" cm");
int L = (((3,14*(60*60))*distanza_CM)/1000); // Calcolo litri
int Hy = ((86*L)/2000); // Calcolo altezza rettangolo
int y = (117-Hy); // Calcolo coordinata y rettangolo percentuale
int Perc = ((L/2000)*100); // Calcolo percentuale litri
dtostrf(L, 1, 0, Litri);
Serial.print(Litri);
Serial.println("litri");
Serial.print(Perc);
Serial.println(" %");
Serial.print("Hy: ");
Serial.println(Hy);
Serial.print("y: ");
Serial.println(y);
Serial.println("");
}
else{
float distanza_M = (float)(distanza/1000); // Distanza in metri
dtostrf(distanza_M, 1, 1, str_CM);
Serial.print(str_CM);
Serial.println(" m");
Serial.print(distanza);
Serial.println(" dist");
int L = (((3,14*(0,6*0,6))*distanza_M)*1000); // Calcolo litri
int Hy = ((86*L)/2000); // Calcolo altezza rettangolo
int y = (117-Hy); // Calcolo coordinata y rettangolo percentuale
int Perc = ((L/2000)*100); // Calcolo percentuale litri
dtostrf(L, 1, 0, Litri);
Serial.print(Litri);
Serial.println("litri");
Serial.print(Perc);
Serial.println(" %");
Serial.print("Hy: ");
Serial.println(Hy);
Serial.print("y: ");
Serial.println(y);
Serial.println("");
}
}
delay(1500);
}