#include <SoftwareSerial.h>
#include <Adafruit_ADS1X15.h>
#include <LiquidCrystal_I2C.h>
#include <Relay.h>
#include <Wire.h>
Adafruit_ADS1115 ads;
LiquidCrystal_I2C lcd(0x27, 20, 4);
const float NIVEL_INFERIOR = 12500.0;
const float NIVEL_SUPERIOR = 66600.0;
const byte relepinB = 9;
const byte relepinA = 8;
const unsigned long TIEMPO_ADS = 2500UL;
const unsigned long TIEMPO_PRESENTACIO = 5000UL;
int adc0;
int nivel;
int aux;
int i;
int readADC0;
float litros;
float centimetros;
int ESTADOS;
unsigned long tiempoads = 0;
unsigned long tiempopresentacion = 0;
enum estados_l {
ESTADO_LITROS,
ESTADO_CENTIMETROS,
ESTADO_NIVEL_INFERIOR,
ESTADO_NIVEL_SUPERIOR
} estado = adc0;
void setup(void) {
Wire.begin();
lcd.begin(20, 4);
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
Serial.begin(9600);
ads.setGain(GAIN_ONE);
ads.begin();
lcd.setCursor(0, 1);
lcd.print(" INTERPRISE MX ");
lcd.setCursor(0, 3);
lcd.print(" AGUA CRUDA ");
delay(5000);
tiempopresentacion = millis();
lcd.clear();
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
tiempoads = millis();
}
void loop(void) {
if (millis() - tiempoads > 5000UL) {
tiempoads = millis();
short adc0 = ads.readADC_SingleEnded(0);
Serial.print("A0: ");
Serial.println(adc0);
float cadc0 = ads.readADC_SingleEnded(0); //deposito 3.7 mts. ancho - 6 mts. largo - 3 mts. altura
float ads = (0.01875 * adc0) ; //conversor 4-20ma = 2.722 mv. - 20530 adc0 - ads1115 0.01850 - maximo centimetros 306.00
float centimetros = ( 0.01475 * adc0) ; // ajuste centimetros
float litros = (centimetros * 222); // litros por cada centimetro - maximo 67988 litros
Serial.print("litros ");
Serial.println( litros);
Serial.print(" ctm: ");
Serial.println( centimetros);
lcd.setCursor(0, 1);
lcd.print("litros ");
lcd.print(litros , 0.0);
lcd.setCursor(0, 3);
lcd.print("centimetros ");
lcd.print(centimetros, 0.0);
if (NIVEL_INFERIOR) {
if (litros < NIVEL_INFERIOR) {
digitalWrite(8, LOW);
} else {
digitalWrite(8, HIGH);
}
}
if (NIVEL_SUPERIOR) {
if (litros > NIVEL_SUPERIOR) {
digitalWrite(9, LOW);
} else {
digitalWrite(9, HIGH);
}
}
}
}
Hola foro, e usado este código con sensor MPX10DP, ahora lo estoy usando con sensor de nivel piezoresistivo de 4 a 20 ma, uso un conversor de corriente a voltaje, HW-685 y de hay pasa por conversor de analógico a digital ADS1115 pin A0 analógico, y de hay a Arduino vía I2C, ya funciona mas o menos se que esta mal la conversión no se en que punto ads, a centímetros, a litros se que algo esta mal en mis matemáticas de conversión.
Saludos