#include "CQRobotTDS.h"
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
CQRobotTDS tds(A0);
Adafruit_MPU6050 mpu;
LiquidCrystal_I2C lcd(0x27, 20, 4);
unsigned long timeout = 0;
float BETA = 3950;
const float tdsValue_to_conductivity = 0.64;
void setup()
{
Serial.begin(115200);
lcd.init();
lcd.backlight();
while (!mpu.begin()) {
Serial.println("MPU6050 not connected!");
delay(1000);
}
Serial.println("MPU6050 ready!");
}
sensors_event_t event;
void loop()
{
int analogValue = analogRead(A2);
float celsius = 1 / (log(1 / (1023. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
float tdsValue = tds.update(celsius);
float conductivity = calculate_conductivity(tdsValue);
float hardness_dh = calculate_hardness_dh(tdsValue);
mpu.getAccelerometerSensor()->getEvent(&event);
mpu.getGyroSensor()->getEvent(&event);
if (timeout<millis())
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(celsius);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("TDS: ");
lcd.print(tdsValue, 0);
lcd.print(" ppm");
lcd.setCursor(0, 2);
lcd.print("cond: ");
lcd.print(conductivity, 2);
lcd.print(" uS/cm");
lcd.setCursor(0, 3);
lcd.print("dur: ");
lcd.print(hardness_dh, 2);
lcd.print(" dH");
Serial.print("Temperature: ");
Serial.print(celsius);
Serial.println(" C");
Serial.print("TDS value: ");
Serial.print(tdsValue, 0);
Serial.println(" ppm");
Serial.print("Accelerometer x: ");
Serial.print(event.acceleration.x * 57.944954128);
Serial.print(" y: ");
Serial.print(event.acceleration.y * 57.33944954128);
Serial.print(" z: ");
Serial.println(event.acceleration.z * 57.33944954128);
Serial.println("");
timeout=millis() + 1000;
}
}
float calculate_conductivity(float tdsValue) {
return tdsValue / tdsValue_to_conductivity;
}
float calculate_hardness_dh(float tdsValue) {
return tdsValue / 17.848;
}