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

Arduino UNO Based GPS and GSM Emergency Locator

View and Edit Project In Cirkit DesignerImage of Arduino UNO Based GPS and GSM Emergency Locator

Circuit Documentation

Summary

This circuit is designed to interface an Arduino UNO with a SIM800L GSM Module, a Neo 6M GPS Module, and a pushbutton. The purpose of the circuit is to send an SMS message with GPS location data when the pushbutton is pressed. The Arduino UNO acts as the central processing unit, reading GPS data from the Neo 6M GPS Module and sending SMS messages through the SIM800L GSM Module. A resistor is used for pull-up configuration on the pushbutton. The 9V battery provides power to the SIM800L GSM Module.

Component List

Arduino UNO

Pushbutton

SIM800L GSM Module

Resistor

9V Battery

Neo 6M GPS Module

Wiring Details

Arduino UNO

Pushbutton

SIM800L GSM Module

Resistor

9V Battery

Neo 6M GPS Module

Documented Code

#include <SoftwareSerial.h>
#include <TinyGPS++.h>

// Define pin numbers
const int buttonPin = 2;  // Push button connected to digital pin 2
const int gsmRxPin = 10;  // RX pin of GSM module
const int gsmTxPin = 11;  // TX pin of GSM module
const int gpsRxPin = 4;   // RX pin of GPS module
const int gpsTxPin = 3;   // TX pin of GPS module

// Create software serial objects
SoftwareSerial gsmSerial(gsmRxPin, gsmTxPin);
SoftwareSerial gpsSerial(gpsRxPin, gpsTxPin);

// Create a TinyGPS++ object
TinyGPSPlus gps;

// Variables
int buttonState = 0;
bool messageSent = false;
const char* phoneNumber = "+1234567890";  // Replace with the desired phone number
const char* message = "Emergency! Help needed at this location: ";

void setup() {
  Serial.begin(9600);
  gsmSerial.begin(9600);
  gpsSerial.begin(9600);
  
  pinMode(buttonPin, INPUT_PULLUP);
  
  // Initialize GSM module
  delay(1000);
  gsmSerial.println("AT");
  delay(1000);
  gsmSerial.println("AT+CMGF=1"); // Set SMS text mode
  delay(1000);
}

void loop() {
  // Update GPS data
  while (gpsSerial.available() > 0) {
    gps.encode(gpsSerial.read());
  }

  buttonState = digitalRead(buttonPin);

  if (buttonState == LOW && !messageSent) {
    sendSMS();
    messageSent = true;
  }
  
  if (buttonState == HIGH) {
    messageSent = false;
  }
}

void sendSMS() {
  Serial.println("Button pressed, sending SMS with location...");
  
  String locationMessage = message;
  
  if (gps.location.isValid()) {
    locationMessage += "http://maps.google.com/maps?q=";
    locationMessage += String(gps.location.lat(), 6);
    locationMessage += ",";
    locationMessage += String(gps.location.lng(), 6);
  } else {
    locationMessage += "GPS location not available";
  }
  
  // Send SMS
  gsmSerial.println("AT+CMGS=\"" + String(phoneNumber) + "\"");
  delay(1000);
  gsmSerial.print(locationMessage);
  delay(100);
  gsmSerial.write(26); // End SMS with Ctrl+Z character
  
  Serial.println("SMS sent with location!");
  delay(1000);
}

This code is designed to be uploaded to the Arduino UNO. It initializes the GSM and GPS modules, reads the button state, and sends an SMS with GPS coordinates when the button is pressed. The GPS data is obtained from the Neo 6M GPS Module, and the SMS is sent through the SIM800L GSM Module. The code uses the TinyGPS++ library to parse the GPS data and SoftwareSerial to communicate with the GSM and GPS modules.