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

Arduino-Based Alcohol Detection and GPS Tracking System with GSM Alerts

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

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 sending the GPS location via SMS using a Sim800l GSM module. The circuit also includes an MPU-6050 for additional sensor data and a GPS NEO 6M module for location tracking. The Arduino UNO microcontroller is used to control the entire system.

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. MPU-6050

    • Description: 6-axis motion tracking device.
    • Pins: VCC, GND, SCL, SDA, XDA, XCL, AD0, INT
  4. Sim800l

    • Description: GSM/GPRS module for communication.
    • Pins: NET, RST, VCC, RXD, TXD, GND
  5. Resistor (10 Ohms)

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

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

    • Description: GPS module for location tracking.
    • Pins: VCC, RX, TX, GND
  8. 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
  9. 12v Battery

    • Description: Power source.
    • Pins: -, +
  10. DC Motor

    • Description: DC motor.
    • Pins: pin 1, pin 2
  11. Buzzer

    • Description: Buzzer for alerting.
    • Pins: PIN, GND

Wiring Details

Arduino UNO

MQ-3 Breakout

MPU-6050

Sim800l

GPS NEO 6M

L298N DC motor driver

12v Battery

DC Motor

Buzzer

Resistor (10 Ohms)

Resistor (20 Ohms)

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);