#include <Adafruit_Sensor.h>
#include <OneWire.h> // For DS18B20 sensor
#include <DallasTemperature.h>
#include <Wire.h>
#define TEMP_THRESHOLD_LOW 25 // Lower temperature threshold for heater in °C
#define TEMP_THRESHOLD_HIGH 35 // Upper temperature threshold for heater in °C
#define DS18B20_PIN 22 // DS18B20 sensor pin (liquid temperature)
#define HEATER_PIN 16 // Heater control pin
float liquidTemperature = 0.0; // Liquid temperature from DS18B20
// Setup for DS18B20
OneWire oneWire(DS18B20_PIN);
DallasTemperature sensors(&oneWire);
bool heaterState = false; // Keeps track of the heater state
void setup() {
Serial.begin(9600);
// Initialize DS18B20 sensor
sensors.begin();
// Initialize output devices
pinMode(HEATER_PIN, OUTPUT);
// Turn off all output devices initially
digitalWrite(HEATER_PIN, LOW);
}
void loop() {
// Read liquid temperature from DS18B20
sensors.requestTemperatures();
liquidTemperature = sensors.getTempCByIndex(0); // Assuming one DS18B20 sensor
// Control logic for heater
controlHeater();
// Print sensor readings and heater state
Serial.print("Water Temperature: ");
Serial.print(liquidTemperature);
Serial.print(" °C | Heater State: ");
Serial.println(heaterState ? "ON" : "OFF");
delay(2000); // Adjust delay as per required sampling rate
}
void controlHeater() {
if (liquidTemperature < TEMP_THRESHOLD_LOW && !heaterState) {
digitalWrite(HEATER_PIN, HIGH); // Turn on the heater
heaterState = true;
}
else if (liquidTemperature > TEMP_THRESHOLD_HIGH && heaterState) {
digitalWrite(HEATER_PIN, LOW); // Turn off the heater
heaterState = false;
}
}