#include <DHT11.h>
#include <Adafruit_NeoPixel.h>
#define DHT_PIN 33 // DHT11 sensor connected to digital pin 33
#define RELAY1_PIN 16 // Relay 1 connected to digital pin 16
#define RELAY2_PIN 17 // Relay 2 connected to digital pin 17
#define TOUCH_BUTTON_PIN 12 // Touch button connected to digital pin 12
#define NEOPIXEL_PIN 25 // NeoPixel data pin connected to digital pin 25
#define NUM_NEOPIXELS 5 // Number of NeoPixels
#define HUMIDITY_THRESHOLD 70 // Humidity threshold to activate the relays
#define HUMI_LOW_THRESHOLD 40 // Lower humidity threshold for green LEDs
#define HUMI_MEDIUM_THRESHOLD 50 // Medium humidity threshold for purple LEDs
#define HUMI_HIGH_THRESHOLD 60 // Higher humidity threshold for red LEDs
DHT11 dht11(DHT_PIN);
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_NEOPIXELS, NEOPIXEL_PIN, NEO_GRB + NEO_KHZ800);
void setup() {
Serial.begin(9600);
pinMode(RELAY1_PIN, OUTPUT);
pinMode(RELAY2_PIN, OUTPUT);
pinMode(TOUCH_BUTTON_PIN, INPUT);
strip.begin();
strip.show(); // Initialize all pixels to 'off'
}
void loop() {
int humidity = dht11.readHumidity();
if (humidity != DHT11::ERROR_CHECKSUM && humidity != DHT11::ERROR_TIMEOUT) {
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println(" %");
// Control NeoPixels based on humidity range
if (humidity >= HUMI_LOW_THRESHOLD && humidity <= HUMI_MEDIUM_THRESHOLD) {
// Green LEDs
setColor(strip.Color(0, 255, 0));
} else if (humidity >= HUMI_MEDIUM_THRESHOLD && humidity <= HUMI_HIGH_THRESHOLD) {
// Purple LEDs
setColor(strip.Color(128, 0, 128));
} else if (humidity > HUMI_HIGH_THRESHOLD) {
// Red LEDs
setColor(strip.Color(255, 0, 0));
} else {
// Humidity is below the low threshold, turn off NeoPixels
setColor(strip.Color(0, 0, 0));
}
// Control relays based on temperature
if (humidity > HUMIDITY_THRESHOLD) {
// Activate Relay 1 and Relay 2
digitalWrite(RELAY1_PIN, HIGH);
digitalWrite(RELAY2_PIN, HIGH);
} else {
// Deactivate Relay 1 and Relay 2
digitalWrite(RELAY1_PIN, LOW);
digitalWrite(RELAY2_PIN, LOW);
}
} else {
Serial.print("Humidity Reading Error: ");
Serial.println(DHT11::getErrorString(humidity));
}
// Check touch button state
if (touchRead(TOUCH_BUTTON_PIN) < 100) {
// Touch button is pressed, deactivate Relay 1 and Relay 2
digitalWrite(RELAY1_PIN, LOW);
digitalWrite(RELAY2_PIN, LOW);
delay(1000); // Delay to debounce the touch button
}
// Wait for 1 second before the next reading.
delay(1000);
Serial.print("Touch Button: ");
Serial.println(touchRead(TOUCH_BUTTON_PIN));
Serial.println(" ");
}
void setColor(uint32_t color) {
for (int i = 0; i < NUM_NEOPIXELS; i++) {
strip.setPixelColor(i, color);
}
strip.show();
}