Arduino UNO-Based Smart Fan Controller with DHT11 Sensor and I2C LCD Display
View and Edit Project In Cirkit Designer
Circuit Documentation
Summary
This circuit is designed to measure temperature and humidity using a DHT11 sensor, display the readings on a 16x2 I2C LCD, and control a fan using an L293D motor driver module. The entire system is powered by a USB power source and controlled by an Arduino UNO microcontroller.
Component List
DHT11 Humidity and Temperature Sensor
- Description: Measures temperature and humidity.
- Pins: VDD, DATA, NULL, GND
Arduino UNO
- Description: Microcontroller board based on the ATmega328P.
- Pins: UNUSED, IOREF, Reset, 3.3V, 5V, GND, Vin, A0, A1, A2, A3, A4, A5, SCL, SDA, AREF, D13, D12, D11, D10, D9, D8, D7, D6, D5, D4, D3, D2, D1, D0
16x2 I2C LCD
- Description: Displays data in a 16x2 character format using I2C communication.
- Pins: GND, VCC, SDA, SCL
L293D Motor Driver Module
- Description: Drives the fan motor.
- Pins: IN4, IN3, EN2, 5V, IN2, IN1, EN1, M1, GND, 12V
Fan
- Description: Provides airflow.
- Pins: GND, 5V
USB Power
- Description: Provides power to the circuit.
- Pins: +, -
Wiring Details
DHT11 Humidity and Temperature Sensor
- VDD connected to 5V on Arduino UNO
- DATA connected to D7 on Arduino UNO
- GND connected to GND on Arduino UNO
Arduino UNO
- 5V connected to VCC on 16x2 I2C LCD, 5V on L293D Motor Driver Module, and VDD on DHT11 Sensor
- GND connected to GND on 16x2 I2C LCD and GND on DHT11 Sensor
- A4 connected to SDA on 16x2 I2C LCD
- A5 connected to SCL on 16x2 I2C LCD
- D7 connected to DATA on DHT11 Sensor
- D11 connected to IN2 on L293D Motor Driver Module
- D10 connected to IN1 on L293D Motor Driver Module
- D9 connected to EN1 on L293D Motor Driver Module
16x2 I2C LCD
- VCC connected to 5V on Arduino UNO
- GND connected to GND on Arduino UNO
- SDA connected to A4 on Arduino UNO
- SCL connected to A5 on Arduino UNO
L293D Motor Driver Module
- 5V connected to 5V on Arduino UNO
- IN2 connected to D11 on Arduino UNO
- IN1 connected to D10 on Arduino UNO
- EN1 connected to D9 on Arduino UNO
- M1 connected to 5V and GND on Fan
- GND connected to - on USB Power
- 12V connected to + on USB Power
Fan
- 5V connected to M1 on L293D Motor Driver Module
- GND connected to M1 on L293D Motor Driver Module
USB Power
- - connected to GND on L293D Motor Driver Module
- + connected to 12V on L293D Motor Driver Module
Documented Code
/**
* This example demonstrates how to collect temperature and humidity measurements
* from the Adafruit DHT11 sensor. Measurements are printed out to the serial monitor.
*
* - Make sure to first install the following libraries through the Arduino Library Manager:
* - DHT Sensor Library (by Adafruit)
* - Adafruit Unified Sensor (by Adafruit)
* - When you open the serial monitor to view measurements from the DHT11, make sure
* that you select 9600 baud so that the serial monitor can receive data from the Arduino.
*
* This example was originally written by Adafruit Industries LLC.
*/
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
#define DHTPIN 2 // Digital pin connected to the DHT sensor
// Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 --
// Pin 15 can work but DHT must be disconnected during program upload.
// Uncomment the type of sensor in use:
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// See guide for details on sensor wiring and usage:
// https://learn.adafruit.com/dht/overview
DHT_Unified dht(DHTPIN, DHTTYPE);
uint32_t delayMS;
void setup() {
Serial.begin(9600);
// Initialize device.
dht.begin();
Serial.println(F("DHTxx Unified Sensor Example"));
// Print temperature sensor details.
sensor_t sensor;
dht.temperature().getSensor(&sensor);
Serial.println(F("------------------------------------"));
Serial.println(F("Temperature Sensor"));
Serial.print (F("Sensor Type: ")); Serial.println(sensor.name);
Serial.print (F("Driver Ver: ")); Serial.println(sensor.version);
Serial.print (F("Unique ID: ")); Serial.println(sensor.sensor_id);
Serial.print (F("Max Value: ")); Serial.print(sensor.max_value); Serial.println(F("°C"));
Serial.print (F("Min Value: ")); Serial.print(sensor.min_value); Serial.println(F("°C"));
Serial.print (F("Resolution: ")); Serial.print(sensor.resolution); Serial.println(F("°C"));
Serial.println(F("------------------------------------"));
// Print humidity sensor details.
dht.humidity().getSensor(&sensor);
Serial.println(F("Humidity Sensor"));
Serial.print (F("Sensor Type: ")); Serial.println(sensor.name);
Serial.print (F("Driver Ver: ")); Serial.println(sensor.version);
Serial.print (F("Unique ID: ")); Serial.println(sensor.sensor_id);
Serial.print (F("Max Value: ")); Serial.print(sensor.max_value); Serial.println(F("%"));
Serial.print (F("Min Value: ")); Serial.print(sensor.min_value); Serial.println(F("%"));
Serial.print (F("Resolution: ")); Serial.print(sensor.resolution); Serial.println(F("%"));
Serial.println(F("------------------------------------"));
// Set delay between sensor readings based on sensor details.
delayMS = sensor.min_delay / 1000;
}
void loop() {
// Delay between measurements.
delay(delayMS);
// Get temperature event and print its value.
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"));
}
// Get humidity event and print its value.
dht.humidity().getEvent(&event);
if (isnan(event.relative_humidity)) {
Serial.println(F("Error reading humidity!"));
}
else {
Serial.print(F("Humidity: "));
Serial.print(event.relative_humidity);
Serial.println(F("%"));
}
}
This code initializes the DHT11 sensor, reads temperature and humidity data, and prints the readings to the serial monitor. Make sure to install the required libraries and set the serial monitor to 9600 baud to view the data correctly.