Arduino UNO WiFi CO and Temperature Monitoring System with Bluetooth Connectivity
View and Edit Project In Cirkit Designer
Circuit Documentation
Summary
This circuit is designed to monitor environmental conditions using a DHT22 temperature and humidity sensor, an MQ-7 carbon monoxide (CO) sensor, and a Bluetooth HC-06 module for wireless communication. The Arduino UNO R4 WiFi microcontroller is used to read sensor data and transmit it via Bluetooth. The circuit also includes an LED to indicate alarm conditions based on CO levels.
Component List
MQ-7 Breakout
- Description: Carbon Monoxide (CO) sensor
- Pins: VCC, GND, DO, AO
Bluetooth HC-06
- Description: Bluetooth module for wireless communication
- Pins: VCC, GND, TXD, RXD
Arduino UNO R4 WiFi
- Description: Microcontroller board with WiFi capability
- Pins: OFF, GND, VRTC, IIC0_SCL, IIC0_SDA, 3V3, GPIO 41, GPIO 0, GPIO 42, GPIO 43, GPIO 44, BOOT, IOREF, RESET, 5V, VIN, A0, A1, A2, A3, A4, A5, RSPCKA, CIPO, COPI, D0/RX, D1/TX, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, AREF, SDA, SCL
DHT22
- Description: Temperature and humidity sensor
- Pins: GND, VCC, DAT
Wiring Details
MQ-7 Breakout
- VCC: Connected to Arduino UNO R4 WiFi 5V
- GND: Connected to Arduino UNO R4 WiFi GND
- DO: Connected to Arduino UNO R4 WiFi D8
- AO: Connected to Arduino UNO R4 WiFi A0
Bluetooth HC-06
- VCC: Connected to Arduino UNO R4 WiFi 3V3
- GND: Connected to Arduino UNO R4 WiFi GND
- TXD: Connected to Arduino UNO R4 WiFi D0/RX
- RXD: Connected to Arduino UNO R4 WiFi D1/TX
Arduino UNO R4 WiFi
- 5V: Connected to MQ-7 Breakout VCC and DHT22 VCC
- GND: Connected to MQ-7 Breakout GND, DHT22 GND, and Bluetooth HC-06 GND
- D8: Connected to MQ-7 Breakout DO
- A0: Connected to MQ-7 Breakout AO
- 3V3: Connected to Bluetooth HC-06 VCC
- D0/RX: Connected to Bluetooth HC-06 TXD
- D1/TX: Connected to Bluetooth HC-06 RXD
- D2: Connected to DHT22 DAT
DHT22
- VCC: Connected to Arduino UNO R4 WiFi 5V
- GND: Connected to Arduino UNO R4 WiFi GND
- DAT: Connected to Arduino UNO R4 WiFi D2
Documented Code
Sketch Code
#include <DHT.h> // Add DHT library
#include <SoftwareSerial.h> // Add SoftwareSerial library
// Pin and sensor definitions
#define DHTPIN 2 // DHT22 sensor pin (D2)
#define DHTTYPE DHT22 // Use DHT22 sensor type
DHT dht(DHTPIN, DHTTYPE); // Create DHT sensor object
const int AOUTpin = A0; // Connect CO sensor AOUT pin to analog pin A0
const int DOUTpin = 8; // Connect CO sensor DOUT pin to digital pin D8
const int ledPin = 13; // Connect LED pin to digital pin D13
int limit;
int value;
// Define software serial pins for Bluetooth
const int BT_TX = 10; // Bluetooth TX pin
const int BT_RX = 11; // Bluetooth RX pin
SoftwareSerial bluetooth(BT_TX, BT_RX); // Create software serial object
void setup() {
Serial.begin(9600); // Set the serial monitor communication speed
bluetooth.begin(9600); // Set the Bluetooth communication speed
dht.begin(); // Initialize DHT sensor
pinMode(DOUTpin, INPUT); // Set DOUT pin as input mode
pinMode(ledPin, OUTPUT); // Set LED pin as output mode
}
void loop() {
// 1. Read CO sensor value
value = analogRead(AOUTpin); // Read analog value from CO sensor
limit = digitalRead(DOUTpin); // Read digital value from CO sensor
// 2. Read temperature and humidity from DHT22
float temperature = dht.readTemperature(); // Read temperature (Celsius)
float temperatureF = (temperature * 9.0 / 5.0) + 32.0;
float humidity = dht.readHumidity(); // Read humidity
// 3. Output sensor data to Serial Monitor
Serial.print("CO value: ");
Serial.println(value); // Print CO sensor value
Serial.print("Limit: ");
Serial.println(limit); // Print digital limit value (LOW or HIGH)
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °F"); // Print temperature
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println(" %"); // Print humidity
// 4. Output sensor data to Bluetooth
bluetooth.print("CO value: ");
bluetooth.println(value); // Print CO sensor value
bluetooth.print("Limit: ");
bluetooth.println(limit); // Print digital limit value (LOW or HIGH)
bluetooth.print("Temperature: ");
bluetooth.print(temperature);
bluetooth.println(" °F"); // Print temperature
bluetooth.print("Humidity: ");
bluetooth.print(humidity);
bluetooth.println(" %"); // Print humidity
delay(1000); // Wait for 1 second
// 5. Check CO sensor alarm
if (limit == HIGH) {
Serial.println("Alarm"); // Print alarm message if CO concentration exceeds the limit
bluetooth.println("Alarm"); // Send alarm message via Bluetooth
digitalWrite(ledPin, HIGH); // Turn on LED
} else {
Serial.println("OK"); // Print message if CO concentration does not exceed the limit
bluetooth.println("OK"); // Send OK message via Bluetooth
digitalWrite(ledPin, LOW); // Turn off LED
}
}
Fire Detector Code
#include <DHT.h> // Add DHT library
#include <SoftwareSerial.h> // Add SoftwareSerial library
// Pin and sensor definitions
#define DHTPIN 2 // DHT22 sensor pin (D2)
#define DHTTYPE DHT22 // Use DHT22 sensor type
DHT dht(DHTPIN, DHTTYPE); // Create DHT sensor object
const int AOUTpin = A0; // Connect CO sensor AOUT pin to analog pin A0
const int DOUTpin = 8; // Connect CO sensor DOUT pin to digital pin D8
const int ledPin = 13; // Connect LED pin to digital pin D13
int limit;
int value;
// Define software serial pins for HC-06
const int BT_TX = 11; // Arduino TX to HC-06 RX
const int BT_RX = 10; // Arduino RX to HC-06 TX
SoftwareSerial bluetooth(BT_RX, BT_TX); // Create a SoftwareSerial object
void setup() {
Serial.begin(9600); // Set the serial monitor communication speed
bluetooth.begin(9600); // Set the Bluetooth communication speed
dht.begin(); // Initialize DHT sensor
pinMode(DOUTpin, INPUT); // Set DOUT pin as input mode
pinMode(ledPin, OUTPUT); // Set LED pin as output mode
}
void loop() {
// 1. Read CO sensor value
value = analogRead(AOUTpin); // Read analog value from CO sensor
limit = digitalRead(DOUTpin); // Read digital value from CO sensor
// 2. Read temperature and humidity from DHT22
float temperature = dht.readTemperature(); // Read temperature (Celsius)
if (isnan(temperature)) {
Serial.println("Failed to read temperature!");
return; // Skip the rest of the loop if reading fails
}
float temperatureF = (temperature * 9.0 / 5.0) + 32.0;
float humidity = dht.readHumidity(); // Read humidity
if (isnan(humidity)) {
Serial.println("Failed to read humidity!");
return; // Skip the rest of the loop if reading fails
}
// 3. Output sensor data to Serial Monitor
Serial.print("CO sensor analog value: ");
Serial.println(value); // Print CO sensor value (analog reading)
Serial.print("CO sensor limit (digital): ");
Serial.println