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

Arduino-Based Environmental Monitoring and GSM Reporting System

View and Edit Project In Cirkit DesignerImage of Arduino-Based Environmental Monitoring and GSM Reporting System

Circuit Documentation

Summary

The circuit in question is designed to monitor environmental parameters such as air quality, humidity, temperature, and pressure, and to control a stepper motor. It utilizes an Arduino UNO as the central microcontroller to interface with various sensors including the MQ135 Air Quality Sensor, DHT11 Humidity and Temperature Sensor, and an Industrial Pressure Sensor. The circuit also includes a SIM800L GSM module for communication purposes and an L298N motor driver to control a Nema 17 stepper motor. Power is supplied by a 12V battery and a 3.3V battery for different components.

Component List

Arduino UNO

MQ135 Air Quality Sensor

Battery 12V

DHT11 Humidity and Temperature Sensor

Nema 17 Stepper Motor (42-STH48)

Industrial Pressure Sensor

L298N DC Motor Driver

SIM800L V2.0 GSM Module

3.3V Battery

Sim800l GSM Module

Wiring Details

Arduino UNO

MQ135 Air Quality Sensor

Battery 12V

DHT11 Humidity and Temperature Sensor

Nema 17 Stepper Motor (42-STH48)

Industrial Pressure Sensor

L298N DC Motor Driver

SIM800L V2.0 GSM Module

3.3V Battery

Documented Code

#include <DHT.h>
#include <SoftwareSerial.h>

// Pin definitions
#define DHTPIN 7
#define DHTTYPE DHT11
#define MQ135_PIN A1
#define PRESSURE_SENSOR_PIN A2
#define MOTOR_IN1 8
#define MOTOR_IN2 9
#define MOTOR_IN3 10
#define MOTOR_IN4 11
#define SIM_TX 0
#define SIM_RX 1

// Initialize DHT sensor
DHT dht(DHTPIN, DHTTYPE);

// Initialize SoftwareSerial for SIM800L
SoftwareSerial sim800l(SIM_RX, SIM_TX);

void setup() {
  // Initialize serial communication
  Serial.begin(9600);
  sim800l.begin(9600);

  // Initialize DHT sensor
  dht.begin();

  // Initialize motor driver pins
  pinMode(MOTOR_IN1, OUTPUT);
  pinMode(MOTOR_IN2, OUTPUT);
  pinMode(MOTOR_IN3, OUTPUT);
  pinMode(MOTOR_IN4, OUTPUT);

  // Initialize other sensors
  pinMode(MQ135_PIN, INPUT);
  pinMode(PRESSURE_SENSOR_PIN, INPUT);

  // Print initial messages
  Serial.println("System Initialized");
  sim800l.println("AT"); // Check if SIM800L is responding
}

void loop() {
  // Read DHT11 sensor
  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();

  // Read MQ135 sensor
  int mq135Value = analogRead(MQ135_PIN);

  // Read Pressure sensor
  int pressureValue = analogRead(PRESSURE_SENSOR_PIN);

  // Print sensor values to Serial Monitor
  Serial.print("Humidity: ");
  Serial.print(humidity);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(temperature);
  Serial.print(" *C\t");
  Serial.print("MQ135: ");
  Serial.print(mq135Value);
  Serial.print("\t");
  Serial.print("Pressure: ");
  Serial.println(pressureValue);

  // Send data via SIM800L
  sim800l.print("Humidity: ");
  sim800l.print(humidity);
  sim800l.print(" %\t");
  sim800l.print("Temperature: ");
  sim800l.print(temperature);
  sim800l.print(" *C\t");
  sim800l.print("MQ135: ");
  sim800l.print(mq135Value);
  sim800l.print("\t");
  sim800l.print("Pressure: ");
  sim800l.println(pressureValue);

  // Control the stepper motor (example: rotate one step)
  digitalWrite(MOTOR_IN1, HIGH);
  digitalWrite(MOTOR_IN2, LOW);
  digitalWrite(MOTOR_IN3, HIGH);
  digitalWrite(MOTOR_IN4, LOW);
  delay(10);
  digitalWrite(MOTOR_IN1, LOW);
  digitalWrite(MOTOR_IN2, HIGH);
  digitalWrite(MOTOR_IN3, LOW);
  digitalWrite(MOTOR_IN4, HIGH);
  delay(10);

  // Wait for a second before next loop
  delay(1000);
}

This code initializes and reads from the