server_cooling_system.ino
Firmware loaded on Arduino Uno (Read-Only)
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// PIN DEFINITIONS
const int DHT_PIN = 2;
const int DHT_TYPE = DHT22;
const int RED_LED_PIN = 7;
const int GREEN_LED_PIN = 6;
const int MOTOR_PIN = 5;
// White LEDs receive HIGH continuously. Physical switches determine ON/OFF.
const int WHITE_LED_1_PIN = 4;
const int WHITE_LED_2_PIN = 3;
// TEMPERATURE THRESHOLD
const float MOTOR_ON_TEMPERATURE = 30.2;
// I2C LCD (0x27, 16x2) & DHT22
LiquidCrystal_I2C lcd(0x27, 16, 2);
DHT dht(DHT_PIN, DHT_TYPE);
void setup() {
Serial.begin(9600);
pinMode(RED_LED_PIN, OUTPUT);
pinMode(GREEN_LED_PIN, OUTPUT);
pinMode(WHITE_LED_1_PIN, OUTPUT);
pinMode(WHITE_LED_2_PIN, OUTPUT);
pinMode(MOTOR_PIN, OUTPUT);
dht.begin();
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("System Starting");
lcd.setCursor(0, 1);
lcd.print("Please wait...");
delay(2000);
lcd.clear();
// Always HIGH for White LED switches
digitalWrite(WHITE_LED_1_PIN, HIGH);
digitalWrite(WHITE_LED_2_PIN, HIGH);
// Initial Motor Condition: OFF (Red ON, Green OFF)
digitalWrite(MOTOR_PIN, LOW);
digitalWrite(RED_LED_PIN, HIGH);
digitalWrite(GREEN_LED_PIN, LOW);
}
void loop() {
float temperatureC = dht.readTemperature();
if (isnan(temperatureC)) {
Serial.println("Failed to read DHT22");
lcd.setCursor(0, 0);
lcd.print("Sensor Error ");
lcd.setCursor(0, 1);
lcd.print("Check DHT22 ");
digitalWrite(MOTOR_PIN, LOW);
digitalWrite(RED_LED_PIN, HIGH);
digitalWrite(GREEN_LED_PIN, LOW);
delay(2000);
return;
}
bool motorOn;
if (temperatureC > MOTOR_ON_TEMPERATURE) {
digitalWrite(MOTOR_PIN, HIGH);
digitalWrite(GREEN_LED_PIN, HIGH);
digitalWrite(RED_LED_PIN, LOW);
motorOn = true;
} else {
digitalWrite(MOTOR_PIN, LOW);
digitalWrite(RED_LED_PIN, HIGH);
digitalWrite(GREEN_LED_PIN, LOW);
motorOn = false;
}
digitalWrite(WHITE_LED_1_PIN, HIGH);
digitalWrite(WHITE_LED_2_PIN, HIGH);
// LCD Row 1: Temp Display
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperatureC, 1);
lcd.write(223); // Degree symbol
lcd.print("C ");
// LCD Row 2: Motor State
lcd.setCursor(0, 1);
if (motorOn) {
lcd.print("Motor: ON ");
} else {
lcd.print("Motor: OFF ");
}
delay(2000);
}
Motor Base drive: Pin 5 • White LEDs supply: Pin 3 & 4 (Continuously HIGH)
Read-only firmware