#include <OneWire.h>
#include <DallasTemperature.h>
const int phPin = A0; // pH potentiometer (SIG)
const int ecPin = A1; // EC potentiometer (SIG)
const int tempPin = 2; // DS18B20 data pin (D2)
const int coolingPin = 4; // relay/MOSFET controlling cooling system
const int heaterPin = 5; // relay/MOSFET controlling heater
OneWire oneWire(tempPin);
DallasTemperature tempSensor(&oneWire);
void setup() {
Serial.begin(115200);
delay(1000);
analogReadResolution(12); // Force 12-bit ADC (0-4095)
tempSensor.begin();
pinMode(coolingPin, OUTPUT);
pinMode(heaterPin, OUTPUT);
digitalWrite(coolingPin, LOW);
digitalWrite(heaterPin, LOW);
Serial.println("HydroTank - pH + EC + Temp Test");
}
void loop() {
// --- pH (simulated) ---
int phRaw = analogRead(phPin);
float simulatedPH = map(phRaw, 0, 4095, 0, 1400) / 100.0;
// --- EC (simulated) ---
int ecRaw = analogRead(ecPin);
float simulatedEC = map(ecRaw, 0, 4095, 0, 2000) / 100.0;
// --- Temperature ---
tempSensor.requestTemperatures();
float waterTemp = tempSensor.getTempCByIndex(0);
Serial.print("pH: ");
Serial.print(simulatedPH, 2);
Serial.print(" | EC: ");
Serial.print(simulatedEC, 2);
Serial.print(" | Temp: ");
Serial.print(waterTemp, 2);
Serial.println(" C");
// --- Temperature logic ---
if (waterTemp > 25.0) {
Serial.println("ALERT: Water too hot -> cooling ON");
digitalWrite(coolingPin, HIGH);
digitalWrite(heaterPin, LOW);
} else if (waterTemp < 18.0) {
Serial.println("ALERT: Water too cold -> heater ON");
digitalWrite(heaterPin, HIGH);
digitalWrite(coolingPin, LOW);
} else {
digitalWrite(coolingPin, LOW);
digitalWrite(heaterPin, LOW);
}
delay(1000);
}