You are on page 1of 3

#include <LiquidCrystal.

h> // Entre los s�mbolos <> buscar� en la carpeta de


librer�as configurada

// Lo primero is inicializar la librer�a indicando los pins de la interfaz


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

// Definimos las constantes


#define COLS 16 // Columnas del LCD
#define ROWS 2 // Filas del LCD

// 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;

// Distancia a los 100 ml y vac�o


const float distancia100 = 2.15;
const float distanciaVacio = 11.41;

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;
}

// Configuramos las filas y las columnas del LCD en este caso 16 columnas y 2
filas
lcd.begin(COLS, ROWS);
}
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");

// Porcentaje
lcd.setCursor(0, 1);
lcd.print(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);
}

// 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);
}

You might also like