Sei sulla pagina 1di 1

#include <LiquidCrystal_I2C.

h>
#include<Wire.h>

LiquidCrystal_I2C lcd(0x3f,16,2);

// Configuramos los pines del sensor Trigger y Echo


const int PinTrig = 7;
const int PinEcho = 6;

// Constante velocidad sonido en cm/s


const float VelSon = 34000.0;

// Número de muestras
//const int numLecturas = 100;
********************************
const int numLecturas = 30;

// Distancia a los 100 ml y vacío


const float distancia100 = 2.90;
//const float distanciaVacio = 11.41; ****
const float distanciaVacio = 17.30;

float lecturas[numLecturas]; // Array para


almacenar lecturas
int lecturaActual = 0; // Lectura por la que vamos
float total = 0; // Total de las que llevamos
float media = 0; // Media de las medidas
bool primeraMedia = false; // Para saber que ya
hemos calculado por lo menos una

void setup()
{
// Iniciamos el monitor serie para mostrar el
resultado
Serial.begin(9600);
// Ponemos el pin Trig en modo salida
pinMode(PinTrig, OUTPUT);
// Ponemos el pin Echo en modo entrada
pinMode(PinEcho, INPUT);

// Inicializamos el array
for (int i = 0; i < numLecturas; i++)
{
lecturas[i] = 0;
}
lcd.init();
lcd.backlight();
lcd.clear();
}
void loop()
{
// Eliminamos la última medida
total = total - lecturas[lecturaActual];

iniciarTrigger();

// La función pulseIn obtiene el tiempo que tarda


en cambiar entre estados, en este caso a HIGH
unsigned long tiempo = pulseIn(PinEcho, HIGH);

// Obtenemos la distancia en cm, hay que


convertir el tiempo en segudos ya que está en
microsegundos
// por eso se multiplica por 0.000001
float distancia = tiempo * 0.000001 * VelSon /
2.0;

// Almacenamos la distancia en el array


lecturas[lecturaActual] = distancia;

// Añadimos la lectura al total


total = total + lecturas[lecturaActual];

// Avanzamos a la siguiente posición del array


lecturaActual = lecturaActual + 1;

// Comprobamos si hemos llegado al final del


array
if (lecturaActual >= numLecturas)
{
primeraMedia = true;
lecturaActual = 0;
}

// Calculamos la media
media = total / numLecturas;

// Solo mostramos si hemos calculado por lo menos


una media
if (primeraMedia)
{
float distanciaLleno = distanciaVacio - media;
float cantidadLiquido = distanciaLleno * 100 /
distancia100;
int porcentaje = (int) (distanciaLleno * 100 /
distanciaVacio);

// Mostramos en la pantalla LCD


lcd.clear();
// Cantidada de líquido
lcd.setCursor(0, 0);
//lcd.print(String(cantidadLiquido) + "
ml");**************************

lcd.print("Cant."+ String(cantidadLiquido) + "


ml");

// Porcentaje
lcd.setCursor(0, 1);
//lcd.print(String(porcentaje) + " %");
******************
lcd.print("Porc."+ String(porcentaje) + " %");
Serial.print(media);
Serial.println(" cm");

Serial.print(cantidadLiquido);
Serial.println(" ml");
}
else
{
lcd.setCursor(0, 0);
lcd.print("Calculando: " +
String(lecturaActual));
}

// delay(500); ****************
delay(200);
}

// Método que inicia la secuencia del Trigger para


comenzar a medir
void iniciarTrigger()
{
// Ponemos el Triiger en estado bajo y esperamos
2 ms
digitalWrite(PinTrig, LOW);
delayMicroseconds(2);

// Ponemos el pin Trigger a estado alto y


esperamos 10 ms
digitalWrite(PinTrig, HIGH);
delayMicroseconds(10);

// Comenzamos poniendo el pin Trigger en estado


bajo
digitalWrite(PinTrig, LOW);
}

Potrebbero piacerti anche