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

Arduino UNO-Based Alcohol Detection and GPS Tracking System with GSM Alert

View and Edit Project In Cirkit DesignerImage of Arduino UNO-Based Alcohol Detection and GPS Tracking System with GSM Alert

Circuit Documentation

Summary

This circuit is designed to detect alcohol levels using an MQ-3 sensor and take appropriate actions such as stopping a motor, alerting the driver with a buzzer and LED, and sending the GPS location via a GSM module. The circuit is controlled by an Arduino UNO microcontroller.

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. MQ-3 Breakout

    • Description: Alcohol sensor module.
    • Pins: VCC, GND, DO, AO
  3. Sim800l

    • Description: GSM module for sending SMS.
    • Pins: NET, RST, VCC, RXD, TXD, GND
  4. Resistor (10 Ohms)

    • Description: Resistor with 10 Ohms resistance.
    • Pins: pin1, pin2
  5. Resistor (20 Ohms)

    • Description: Resistor with 20 Ohms resistance.
    • Pins: pin1, pin2
  6. GPS NEO 6M

    • Description: GPS module for location tracking.
    • Pins: VCC, RX, TX, GND
  7. L298N DC Motor Driver

    • Description: Dual H-Bridge motor driver.
    • Pins: OUT1, OUT2, 12V, GND, 5V, OUT3, OUT4, 5V-ENA-JMP-I, 5V-ENA-JMP-O, +5V-J1, +5V-J2, ENA, IN1, IN2, IN3, IN4, ENB
  8. 12V Battery

    • Description: Power source for the circuit.
    • Pins: -, +
  9. DC Motor

    • Description: Motor controlled by the L298N driver.
    • Pins: pin 1, pin 2
  10. Buzzer

    • Description: Audio alert device.
    • Pins: PIN, GND
  11. LED: Two Pin (yellow)

    • Description: Visual alert device.
    • Pins: cathode, anode

Wiring Details

Arduino UNO

MQ-3 Breakout

Sim800l

Resistor (10 Ohms)

Resistor (20 Ohms)

GPS NEO 6M

L298N DC Motor Driver

12V Battery

DC Motor

Buzzer

LED: Two Pin (yellow)

Documented Code

#include <SoftwareSerial.h> // Include for GSM communication
#include <Wire.h>           // Include for I2C communication (if needed)

// Define hardware pins
#define ALCOHOL_PIN      A0  // Analog pin for alcohol sensor
#define BUZZER_PIN       8   // Digital pin for buzzer
#define LED_PIN          9   // Digital pin for LED
#define MOTOR_IN1_PIN    10  // Digital pin for motor driver IN1
#define MOTOR_IN2_PIN    11  // Digital pin for motor driver IN2
#define MOTOR_ENA_PIN    12  // Digital pin for motor driver ENA

// SoftwareSerial for GSM module
SoftwareSerial gsmSerial(7, 6); // RX, TX for GSM module

// Function prototypes
void stopMotor();
void alertDriver();
void sendLocation();
void sendSMS(const char* text);
bool getGPSLocation(double* latitude, double* longitude);

// Setup function
void setup() {
    Serial.begin(9600);         // Initialize serial communication for debugging
    gsmSerial.begin(9600);      // Initialize GSM communication
    
    // Configure pin modes
    pinMode(ALCOHOL_PIN, INPUT);
    pinMode(BUZZER_PIN, OUTPUT);
    pinMode(LED_PIN, OUTPUT);
    pinMode(MOTOR_IN1_PIN, OUTPUT);
    pinMode(MOTOR_IN2_PIN, OUTPUT);
    pinMode(MOTOR_ENA_PIN, OUTPUT);

    digitalWrite(MOTOR_ENA_PIN, HIGH); // Enable motor
    
    // Send initialization message
    sendSMS("System initialized and ready.");
}

// Main loop
void loop() {
    // Alcohol detection
    int alcoholValue = analogRead(ALCOHOL_PIN);

    // Alcohol detection threshold
    if (alcoholValue > 400) {
        Serial.println("Alcohol detected!");
        stopMotor();
        alertDriver();
        sendLocation();  // Send GPS location via SMS
    }

    // Simulate GPS data (mock, replace with actual GPS logic)
    double latitude = 12.345678;
    double longitude = 98.765432;
    Serial.print("Latitude: ");
    Serial.println(latitude, 6);
    Serial.print("Longitude: ");
    Serial.println(longitude, 6);

    delay(1000);
}

// Stop the motor
void stopMotor() {
    digitalWrite(MOTOR_IN1_PIN, LOW);
    digitalWrite(MOTOR_IN2_PIN, LOW);
}

// Alert the driver
void alertDriver() {
    digitalWrite(BUZZER_PIN, HIGH);
    digitalWrite(LED_PIN, HIGH);
    delay(2000); // Sound the alarm for 2 seconds
    digitalWrite(BUZZER_PIN, LOW);
    digitalWrite(LED_PIN, LOW);
}

// Send location via SMS
void sendLocation() {
    double latitude = 12.345678; // Replace with actual GPS data
    double longitude = 98.765432;

    char message[100];
    snprintf(message, sizeof(message), "Emergency! Alcohol detected. Location: Lat: %.6f, Lon: %.6f", latitude, longitude);
    sendSMS(message);
}

// Send an SMS message
void sendSMS(const char* text) {
    gsmSerial.println