Está en la página 1de 7

#include <LiquidCrystal.

h>

#include "HX711.h"

#define DOUT A1

#define CLK A0

#define hallA A2

#define hallB A3

#define btnRst 47

#define btnPsr 46

#define distancia 22.0 // en cm

#define densidadEsfera 5.21//g/cm^3

#define volumen 300.0 //cm^3

#define radioEsfera 0.91 //cm

#define gravedad 981//cm/s^2

#define factor 0.22

// volumen de la esfera: 0.000029186943m^3

//masa de la esfera 0.018kg

HX711 balanza(DOUT, CLK);

LiquidCrystal lcd(53, 52, 51, 50, 49, 48);

int valorHallA = 0;

int valorHallB = 0;

int reposoA=0;

int reposoB=0;

float masa=0;//en gramos

float viscosidad=0;

float velocidad=0;
unsigned long tiempo1=0;

unsigned long tiempo2=0;

bool boolaux=true;

bool pausar=false;

bool pesado=false;

bool mensajeMostrado=false;

bool mostrarViscosidad=false;

void setup() {

lcd.begin(16,2);

pinMode(btnRst,INPUT);

pinMode(btnPsr,INPUT);

iniciarCeldaCarga();

Serial.begin(9600);

reposoA = analogRead(hallA);

reposoB = analogRead(hallB);

reset();

void loop() {

valorHallA = analogRead(hallA);

valorHallB = analogRead(hallB);

/*

Serial.print(reposoA);//valores de reposo de A y B

Serial.print(" ");

Serial.print(reposoB);

Serial.print(" ");
Serial.print(analogRead(hallA));//valores de reposo de A y B

Serial.print(" ");

Serial.println(analogRead(hallB));

*/

if(pausar||valorHallA==0||valorHallB==0){

delay(100);

//Serial.print("En pausa");

if(valorHallA==0||valorHallB==0){

Serial.println("Sensor desconectado.");

if(!mensajeMostrado){

lcd.clear();

lcd.setCursor(4,0);

lcd.print("Sensor");

lcd.setCursor(1,1);

lcd.print("Desconectado");

mensajeMostrado=true;

//Serial.println();

else{

if(mensajeMostrado){

reset();

mensajeMostrado=false;
if(valorHallA<(reposoA-3)||valorHallA>(reposoA+3)){

if(boolaux){

Serial.println("Hall A activado");

lcd.setCursor(13,1);

lcd.print("|");

tiempo1=millis();

boolaux=false;

if(valorHallB<(reposoB-3)||valorHallB>(reposoB+3)){

if(!boolaux){

Serial.println("Hall B activado");

lcd.setCursor(14,1);

lcd.print("|");

tiempo2=millis();

velocidad=distancia*1000/(tiempo2-tiempo1);//en cm/s

Serial.print("Velocidad: ");

Serial.print(velocidad);

Serial.println("cm/s");

pausar=true;

if(digitalRead(btnRst)){

reset();

}
if(digitalRead(btnPsr))

pesar();

if(pesado&&pausar&&!mostrarViscosidad){

calcularViscosidad();

void reset(){

boolaux=true;

pausar=false;

pesado=false;

mostrarViscosidad=false;

lcd.clear();

lcd.setCursor(0,0);

lcd.print("Preparado");

lcd.setCursor(13,0);

lcd.print("ABM");

delay(100);

void iniciarCeldaCarga(){

Serial.println(balanza.read());

balanza.set_scale(385.05); // Establecemos la escala

balanza.tare(20); //El peso actual es considerado Tara.

Serial.println("Listo para pesar");


}

void pesar(){

pesado=true;

Serial.print("Masa: ");

masa=balanza.get_units(20)-197;

Serial.print(masa);

Serial.println(" g");

lcd.setCursor(15,1);

lcd.print("|");

delay(100);

void calcularViscosidad(){

lcd.clear();

lcd.setCursor(0,0);

lcd.print("Viscosidad:");

lcd.setCursor(0,1);

float densidadLiquido=masa/volumen;//g/cm3

float diferenciaDensidades=densidadEsfera-densidadLiquido;

viscosidad=factor*gravedad*diferenciaDensidades*radioEsfera/velocidad;//kg/mm*s

//m/s^2*(kg/m^3-g/cm^3

Serial.print(radioEsfera);

Serial.print(" ");

Serial.print(diferenciaDensidades);

Serial.print(" ");

Serial.print("Viscosidad: ");
Serial.println();

Serial.print(viscosidad);

Serial.println("*10^-6 kg/m*s");

lcd.print(viscosidad);

lcd.setCursor(11,1);

lcd.print("kg/ms");

mostrarViscosidad=true;

También podría gustarte