Hi, I have included my sketch of a home thermometer using an Arduino Nano, a servo is used as a temperature indicator, from 10 > 26 deg C. .Also three led's show room temperature trends, either rising, falling, or steady state.
A 2 minute delay is introduced between each reading in the void loop, for sampling room temperature.
My programming skills are limited, however I've managed to put together a sketch that works. Would appreciate a member taking a look over it for me please, and if improvements to the code are needed, please advise.
The three led's temperature trend, share the same monitoring period of 30 seconds within the current room temperature loop, however could the previous temperature historic period be extended to say 20 minutes? Allowing a better overall indication as to how the room temperature has been progressing over the past time, ie warming, cooling or holding steady.
I would appreciate some help with the code please, and to how to include it in my sketch.
// date 24/05/2024
//Home_temp_leds_DHT22_v2_IDE
// conventional delay
//This version uses a DHT22 Sensor
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
#include <Servo.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define DHTPIN 2
#define DHTTYPE DHT22
DHT_Unified dht(DHTPIN, DHTTYPE);
// =========================================
int SENSOR_PIN = 2;
int SERVO_PIN = 9;
int sensorValue; // variable to store temp. sensor value
int previousTemperature; // last temperature shown prior to current temparature reading
int currentTemperature = 0;
const int ledH = (10); // warmng red led and wire
const int ledL = (11); // cooling orange wire
const int ledN = (12); //steady green led and wire
//const float TEMPERATURE_THRESHOLD = 26;
Servo servo;
OneWire oneWire(SENSOR_PIN);
DallasTemperature sensor(&oneWire);
float temperature;
float Temperature;
float servopos;
// ==========================================================================
void setup() {
Serial.begin(9600);
pinMode(ledH, OUTPUT);
pinMode(ledL, OUTPUT);
pinMode(ledN, OUTPUT);
servo.attach(SERVO_PIN); // attaches the servo on pin 9 to the servo object
servo.write(0);
currentTemperature = (SENSOR_PIN); //(temperature); //(SENSOR_PIN);
sensor.begin();
dht.begin();
Serial.println(F("DHTxx Unified Sensor Example"));
sensor_t sensor;
dht.temperature().getSensor(&sensor);
}
//==============================================================================
void loop() {
delay(4000);
// delay(2 * 60 * 1000UL); //set delay time = 2 min
sensors_event_t event;
dht.temperature().getEvent(&event);
if (isnan(event.temperature)) {
Serial.println(F("Error reading temperature!"));
} else {
Serial.print(F("Temperature: "));
Serial.print(event.temperature);
Serial.println(F("°C"));
}
previousTemperature = currentTemperature;
currentTemperature = (event.temperature); //(DHT22 SENSOR_PIN);
if (currentTemperature > previousTemperature) // warming
{
Serial.println(F(" Warming"));
digitalWrite(ledH, HIGH);
digitalWrite(ledL, LOW);
digitalWrite(ledN, LOW);
delay(50);
} else if (currentTemperature < previousTemperature) // cooling
{
Serial.println(F("Cooling"));
digitalWrite(ledL, HIGH);
digitalWrite(ledH, LOW);
digitalWrite(ledN, LOW);
delay(50);
} else if (currentTemperature == previousTemperature) // steady
{
Serial.println(F(" Steady"));
digitalWrite(ledN, HIGH);
digitalWrite(ledH, LOW);
digitalWrite(ledL, LOW);
}
{ servopos = map(currentTemperature, 10, 26, 180, 0); // set temperature range and servo angles
if (servopos < 0) servopos = 0;
if (servopos > 180) servopos = 180;
servo.write(servopos); // write servo position indcating temperature
//delay(50);
}
delay(2 * 60 * 1000UL); //set delay time = 2 min
}