Arduino UNO-Based Temperature and Humidity Monitor with OLED Display
View and Edit Project In Cirkit Designer
Circuit Documentation
Summary
This circuit is designed to collect temperature and humidity measurements using a DHT11 sensor and display the data on an OLED display. The Arduino UNO microcontroller is used to interface with the sensor and the display, and to process and output the data.
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
Resistor
- Description: Provides resistance in the circuit.
- Properties:
- Resistance: 10,000 Ohms
- Pins: pin1, pin2
OLED Display 128x32
- Description: Displays data in a 128x32 pixel format.
- Pins: SDA, SCL, VCC, GND
Wiring Details
DHT11 Humidity and Temperature Sensor
- VDD: Connected to 5V on Arduino UNO and VCC on OLED Display, and pin1 on Resistor.
- DATA: Connected to D2 on Arduino UNO and pin2 on Resistor.
- GND: Connected to GND on Arduino UNO.
Arduino UNO
- 5V: Connected to VDD on DHT11 Sensor, VCC on OLED Display, and pin1 on Resistor.
- GND: Connected to GND on DHT11 Sensor and GND on OLED Display.
- D2: Connected to DATA on DHT11 Sensor and pin2 on Resistor.
- D4: Connected to SDA on OLED Display.
- D5: Connected to SCL on OLED Display.
Resistor
- pin1: Connected to 5V on Arduino UNO and VDD on DHT11 Sensor.
- pin2: Connected to DATA on DHT11 Sensor and D2 on Arduino UNO.
OLED Display 128x32
- VCC: Connected to 5V on Arduino UNO and VDD on DHT11 Sensor.
- GND: Connected to GND on Arduino UNO.
- SDA: Connected to D4 on Arduino UNO.
- SCL: Connected to D5 on Arduino UNO.
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 and reads temperature and humidity data, which is then printed to the serial monitor. Make sure to install the required libraries and set the serial monitor to 9600 baud to view the data correctly.