Arduino UNO-Based Environmental Monitoring System with CO2 and Temperature Sensors
View and Edit Project In Cirkit Designer
Circuit Documentation
Summary
This circuit is designed to monitor environmental conditions using an Arduino UNO microcontroller. It includes sensors for temperature, humidity, and CO2 levels, and displays the data on a 16x2 I2C LCD. Additionally, it uses two LEDs to indicate whether the environmental conditions are within safe limits.
Component List
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
LED: Two Pin (red)
- Description: Red LED with two pins (anode and cathode).
- Pins: cathode, anode
LED: Two Pin (green)
- Description: Green LED with two pins (anode and cathode).
- Pins: cathode, anode
16x2 I2C LCD
- Description: 16x2 character LCD with I2C interface.
- Pins: GND, VCC, SDA, SCL
MQ135
- Description: Gas sensor for detecting CO2 levels.
- Pins: VCC, GND, A0, D0
DHT11
- Description: Temperature and humidity sensor.
- Pins: DATA, GND, VCC
Resistor (220 Ohms)
- Description: Resistor with a resistance of 220 Ohms.
- Pins: pin1, pin2
Wiring Details
Arduino UNO
5V connected to:
- VCC of MQ135
- VCC of 16x2 I2C LCD
- VCC of DHT11
GND connected to:
- GND of 16x2 I2C LCD
- GND of MQ135
- GND of DHT11
- pin2 of Resistor (220 Ohms)
- pin2 of another Resistor (220 Ohms)
D3 connected to:
- anode of Red LED
D4 connected to:
- anode of Green LED
A0 connected to:
- A0 of MQ135
A4 connected to:
- SDA of 16x2 I2C LCD
A5 connected to:
- SCL of 16x2 I2C LCD
D7 connected to:
- DATA of DHT11
LED: Two Pin (red)
anode connected to:
- D3 of Arduino UNO
cathode connected to:
- pin1 of Resistor (220 Ohms)
LED: Two Pin (green)
anode connected to:
- D4 of Arduino UNO
cathode connected to:
- pin1 of another Resistor (220 Ohms)
16x2 I2C LCD
GND connected to:
- GND of Arduino UNO
VCC connected to:
- 5V of Arduino UNO
SDA connected to:
- A4 of Arduino UNO
SCL connected to:
- A5 of Arduino UNO
MQ135
VCC connected to:
- 5V of Arduino UNO
GND connected to:
- GND of Arduino UNO
A0 connected to:
- A0 of Arduino UNO
DHT11
DATA connected to:
- D7 of Arduino UNO
GND connected to:
- GND of Arduino UNO
VCC connected to:
- 5V of Arduino UNO
Resistor (220 Ohms)
pin1 connected to:
- cathode of Red LED
pin2 connected to:
- GND of Arduino UNO
Resistor (220 Ohms)
pin1 connected to:
- cathode of Green LED
pin2 connected to:
- GND of Arduino UNO
Code Documentation
#include <Wire.h> // Llibreria per a la comunicació I2C (necessària per a la pantalla LCD)
#include <LiquidCrystal_I2C.h> // Llibreria per controlar pantalles LCD amb mòdul I2C
#include <DHT.h> // Llibreria per al sensor de temperatura i humitat DHT11
#include <Adafruit_Sensor.h> // Llibreria base de sensors Adafruit (requerida per al DHT)
// Configuració de la pantalla LCD (adreça I2C i mida)
LiquidCrystal_I2C lcd(0x27, 16, 2); // 0x27 és l'adreça per defecte de la pantalla LCD
// Configuració del sensor DHT11
#define DHTPIN 7 // Pin digital al qual està connectat el DHT11
#define DHTTYPE DHT11 // Tipus de sensor
DHT dht(DHTPIN, DHTTYPE); // Inicialitza el sensor DHT amb el pin assignat
// Configuració del sensor MQ-135 (sensor de CO2)
#define CO2PIN A0 // Pin analògic connectat a l'MQ-135
// Configuració dels LEDs
#define LED_VERD 4 // Pin assignat al LED verd
#define LED_VERMELL 3 // Pin assignat al LED vermell
// Llindars per als valors de temperatura i CO2
const int LLINDAR_CO2_ALT = 1000; // ppm: Valor màxim segur de CO2
const int LLINDAR_CO2_BAIX = 800; // ppm: Valor mínim segur de CO2
const float LLINDAR_TEMP_ALT = 27.0; // ºC: Temperatura màxima permesa
const float LLINDAR_TEMP_BAIX = 17.0; // ºC: Temperatura mínima permesa
void setup() {
// Inicialització del monitor sèrie per a debugging
Serial.begin(9600);
// Inicialització de la pantalla LCD
lcd.begin(16, 2); // Defineix la mida de la pantalla: 16 columnes, 2 files
lcd.backlight(); // Activa la llum de fons de la pantalla LCD
lcd.setCursor(0, 0); // Col·loca el cursor al principi
lcd.print("Iniciant..."); // Mostra un missatge inicial
// Inicialitza el sensor DHT
dht.begin();
// Configura els pins dels LEDs com a sortides
pinMode(LED_VERD, OUTPUT);
pinMode(LED_VERMELL, OUTPUT);
}
void loop() {
// Llegeix la temperatura i la humitat del DHT11
float temperatura = dht.readTemperature(); // Llegeix la temperatura en ºC
float humitat = dht.readHumidity(); // Llegeix la humitat relativa (%)
// Llegeix el valor del sensor MQ-135 i calcula el CO2 en ppm
int valorCO2 = analogRead(CO2PIN); // Llegeix el valor analògic del sensor
int ppmCO2 = map(valorCO2, 0, 1023, 400, 2000); // Converteix el valor a ppm estimades
// Comprova si hi ha errors de lectura del sensor DHT
if (isnan(temperatura) || isnan(humitat)) {
Serial.println("Error: No s'han pogut llegir dades del DHT11.");
lcd.setCursor(0, 0);
lcd.print("Error DHT! ");
delay(2000); // Espera 2 segons
return; // Si hi ha error, surt de la funció loop
}
// Mostra les dades a la pantalla LCD
lcd.clear(); // Esborra el contingut de la pantalla
lcd.setCursor(0, 0); // Col·loca el cursor al principi
lcd.print("Temp: ");
lcd.print(temperatura); // Mostra la temperatura
lcd.print("C");
lcd.setCursor(0, 1); // Col·loca el cursor a la segona línia
lcd.print("CO2: ");
lcd.print(ppmCO2); // Mostra els ppm de CO2
lcd.print(" ppm");
// Control dels LEDs segons els llindars
if (ppmCO2 > LLINDAR_CO2_ALT) { // Si el CO2 és massa alt, encenem el LED vermell
digitalWrite(LED