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

Arduino-Based Gas Detection and Alert System with GSM Communication

View and Edit Project In Cirkit DesignerImage of Arduino-Based Gas Detection and Alert System with GSM Communication

Circuit Documentation

Summary

The circuit in question appears to be a gas detection system with alerting capabilities. It uses an Arduino UNO as the central microcontroller to interface with various components including an MQ135 gas sensor, a SIM800L GSM module for communication, a piezo buzzer for audible alerts, LEDs for visual indication, and an I2C LCD module for displaying information. The system is designed to detect gas concentrations above a certain threshold and then alert the user via SMS and phone call, while also providing local visual and audible warnings.

Component List

Arduino UNO

Resistor (200 Ohms)

Piezo Buzzer

LED: Two Pin (Red)

LED: Two Pin (Green)

SIM800L

3.7v Battery

MQ135 Gas Sensor

16X2 LCD

I2C Module

Wiring Details

Arduino UNO

Resistor (200 Ohms)

Piezo Buzzer

LED: Two Pin (Red)

LED: Two Pin (Green)

SIM800L

MQ135 Gas Sensor

16X2 LCD and I2C Module

Documented Code

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>

#define MQ135_PIN A0
#define RED_LED_PIN 4
#define GREEN_LED_PIN 5
#define BUZZER_PIN 2
#define GSM_RX_PIN 1
#define GSM_TX_PIN 0

LiquidCrystal_I2C lcd(0x27, 16, 2);
SoftwareSerial gsm(GSM_RX_PIN, GSM_TX_PIN);

const int threshold = 310;
const unsigned long smsInterval = 60000;
const unsigned long callInterval = 180000;
unsigned long lastSmsTime = 0;
unsigned long lastCallTime = 0;

// Timer variables for LED blinking and buzzer activation
unsigned long ledBlinkTimer = 0;
unsigned long buzzerTimer = 0;

void setup() {
  pinMode(RED_LED_PIN, OUTPUT);
  pinMode(GREEN_LED_PIN, OUTPUT);
  pinMode(BUZZER_PIN, OUTPUT);
  lcd.begin();
  lcd.backlight();
  gsm.begin(9600);
  digitalWrite(GREEN_LED_PIN, HIGH);
}

void loop() {
  int mq135Value = analogRead(MQ135_PIN);
  lcd.setCursor(0, 0);
  if (mq135Value > threshold) {
    lcd.print("Gas Detected");
    digitalWrite(GREEN_LED_PIN, LOW);
    startBlinkingRedLed();
    startBuzzer();
    sendAlert();
  } else {
    lcd.print("No Gas Detected");
    digitalWrite(GREEN_LED_PIN, HIGH);
    digitalWrite(RED_LED_PIN, LOW);
    noTone(BUZZER_PIN);
  }
  lcd.setCursor(0, 1);
  lcd.print("AQI: ");
  lcd.print(mq135Value);
  handleLedBlinking();
  handleBuzzer();
  delay(1000);
}

void startBlinkingRedLed() {
  ledBlinkTimer = millis();
}

void handleLedBlinking() {
  if (millis() - ledBlinkTimer >= 500) {
    digitalWrite(RED_LED_PIN, !digitalRead(RED_LED_PIN));
    ledBlinkTimer = millis();
  }
}

void startBuzzer() {
  buzzerTimer = millis();
  tone(BUZZER_PIN, 325);
}

void handleBuzzer() {
  if (millis() - buzzerTimer >= 5000) {
    noTone(BUZZER_PIN);
  }
}

void sendAlert() {
  sendSms();
  makeCall();
}

void sendSms() {
  unsigned long currentTime = millis();
  if (currentTime - lastSmsTime >= smsInterval) {
    gsm.print("AT+CMGF=1\r");
    delay(100);
    gsm.print("AT+CMGS=\"+918446656933\"\r");
    delay(100);
    gsm.print("Gas leakage detected");
    delay(100);
    gsm.write(26);
    lastSmsTime = currentTime;
  }
}

void makeCall() {
  unsigned long currentTime = millis();
  if (currentTime - lastCallTime >= callInterval) {
    gsm.print("ATD+918446656933;\r");
    delay(30000);
    gsm.print("ATH\r");
    lastCallTime = currentTime;
  }
}

This code is responsible for reading the gas sensor data, controlling the LEDs and buzzer based on the gas concentration, and using the GSM module to send SMS and make calls when gas is detected. The LCD displays the gas concentration and alert messages.