Cirkit Designer LogoCirkit DesignerYour all-in-one circuit design IDE Launch Cirkit Designer App

Arduino UNO-Based Environmental Monitoring System with CO2 and Temperature Sensors

View and Edit Project In Cirkit DesignerImage of Arduino UNO-Based Environmental Monitoring System with CO2 and Temperature Sensors

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

  1. 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
  2. LED: Two Pin (red)

    • Description: Red LED with two pins (anode and cathode).
    • Pins: cathode, anode
  3. LED: Two Pin (green)

    • Description: Green LED with two pins (anode and cathode).
    • Pins: cathode, anode
  4. 16x2 I2C LCD

    • Description: 16x2 character LCD with I2C interface.
    • Pins: GND, VCC, SDA, SCL
  5. MQ135

    • Description: Gas sensor for detecting CO2 levels.
    • Pins: VCC, GND, A0, D0
  6. DHT11

    • Description: Temperature and humidity sensor.
    • Pins: DATA, GND, VCC
  7. Resistor (220 Ohms)

    • Description: Resistor with a resistance of 220 Ohms.
    • Pins: pin1, pin2

Wiring Details

Arduino UNO

LED: Two Pin (red)

LED: Two Pin (green)

16x2 I2C LCD

MQ135

DHT11

Resistor (220 Ohms)

Resistor (220 Ohms)

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