Home
About Us
Achievement
Home
Raspberry-Pi Projects
_Raspberry Pi 4 Complete Guide
Arduino Project
_All Projects
Esp8266 Project
_All Projects
Esp32 Project
_Automation-with-feedback
GSM + GPS Based Vehicle Location Tracking System
Just Do Electronics
December 12, 2021
Circuit Diagram :-
Code :-
//Prateek //wwww.prateeks.in //https://www.youtube.com/c/JustDoElectronics/videos #include
#include
#include
//sender phone number with country code const String PHONE = "+918830584864"; #define ignition_switch 4 #define ignition_sensor A0 //GSM Module RX pin to Arduino 10 //GSM Module TX pin to Arduino 11 #define rxPin 11 #define txPin 10 SoftwareSerial sim800(rxPin, txPin); //GPS Module RX pin to Arduino 9 //GPS Module TX pin to Arduino 8 AltSoftSerial neogps; TinyGPSPlus gps; String sms_status, sender_number, received_date, msg; boolean ignition_status = false; boolean tracking_status = false; boolean reply_status = true; //not completely implemented boolean anti_theft = false; unsigned long previousMillis = 0; long interval = 60000; void setup() { delay(7000); Serial.begin(115200); //Serial.println("Arduino serial initialize"); sim800.begin(9600); neogps.begin(9600); //Serial.println("neogps Software serial initialize"); //delay(1000); pinMode(ignition_switch, OUTPUT); pinMode(ignition_sensor, INPUT); sms_status = ""; sender_number = ""; received_date = ""; msg = ""; sim800.print("AT+CMGF=1\r"); //SMS text mode delay(1000); //sendATcommand("AT+CSCLK=2", "OK", 1000); } void loop() { ignition_status = getIgnitionStatus(); if (tracking_status == true && ignition_status == true) { unsigned long currentMillis = millis(); if (currentMillis - previousMillis > interval) { previousMillis = currentMillis; sendGpsToServer(); } } if (anti_theft == true && ignition_status == true) { digitalWrite(ignition_switch, HIGH); } while (sim800.available()) { parseData(sim800.readString()); } while (Serial.available()) { sim800.println(Serial.readString()); } } void parseData(String buff) { Serial.println(buff); unsigned int len, index; index = buff.indexOf("\r"); buff.remove(0, index + 2); buff.trim(); if (buff != "OK") { index = buff.indexOf(":"); String cmd = buff.substring(0, index); cmd.trim(); buff.remove(0, index + 2); //Serial.println(buff); if (cmd == "+CMTI") { //get newly arrived memory location and store it in temp //temp = 4 index = buff.indexOf(","); String temp = buff.substring(index + 1, buff.length()); temp = "AT+CMGR=" + temp + "\r"; //AT+CMGR=4 i.e. get message stored at memory location 4 sim800.println(temp); } else if (cmd == "+CMGR") { extractSms(buff); //Serial.println("extractSms Success."); if (sender_number == PHONE) { //Serial.println("doAction"); doAction(); //deleteSms(); } } } else { } } void extractSms(String buff) { unsigned int index; Serial.println(buff); index = buff.indexOf(","); sms_status = buff.substring(1, index - 1); buff.remove(0, index + 2); sender_number = buff.substring(0, 13); buff.remove(0, 19); received_date = buff.substring(0, 20); buff.remove(0, buff.indexOf("\r")); buff.trim(); index = buff.indexOf("\n\r"); buff = buff.substring(0, index); buff.trim(); msg = buff; buff = ""; msg.toLowerCase(); Serial.println("----------------------------------"); Serial.println(sms_status); Serial.println(sender_number); Serial.println(received_date); Serial.println(msg); Serial.println("----------------------------------"); //Prateek //wwww.prateeks.in //https://www.youtube.com/c/JustDoElectronics/videos } void doAction() { //case sensitive if (msg == "bike on") { digitalWrite(ignition_switch, HIGH); Serial.println("Prateek Your Bike has ON"); if (reply_status == true) { sendSms("Prateek Your Bike has ON"); } } else if (msg == "bike off") { digitalWrite(ignition_switch, LOW); Serial.println("Prateek Your Bike has OFF"); if (reply_status == true) { sendSms("Prateek Your Bike has OFF"); } } else if (msg == "get location") { sendSmsGPS("Location"); } else if (msg == "anti theft on") { anti_theft = true; if (reply_status == true) { sendSms("Hi Prateek Your Anti Theft System on And Bike Will Be OFF"); } } else if (msg == "anti theft off") { anti_theft = false; if (reply_status == true) { sendSms("Anti-Theft System OFF"); } else if (msg == "reply on") { reply_status = true; sendSms("Reply has ON"); } else if (msg == "reply off") { reply_status = false; } } else if (msg == "tracking on") { tracking_status = true; if (reply_status == true) { sendSms("Live Tracking has ON"); } } //yet to be implemented else if (msg == "tracking off") { tracking_status = false; if (reply_status == true) { sendSms("Live Tracking has OFF"); } } else if (msg == "tracking status") { if (tracking_status == false) { sendSms("Live Tracking has OFF"); } else { sendSms("Live Tracking has ON"); } } sms_status = ""; sender_number = ""; received_date = ""; msg = ""; } void deleteSms() { sendATcommand("AT+CMGD=1,4", "OK", 2000); Serial.println("All SMS are deleted."); //Prateek //wwww.prateeks.in //https://www.youtube.com/c/JustDoElectronics/videos } void sendSmsGPS(String text) { // Can take up to 60 seconds boolean newData = false; for (unsigned long start = millis(); millis() - start < 2000;) { while (neogps.available()) { if (gps.encode(neogps.read())) { newData = true; } } } if (newData) //If newData is true { float flat, flon; unsigned long age; Serial.print("Latitude= "); Serial.print(gps.location.lat(), 6); Serial.print(" Longitude= "); Serial.println(gps.location.lng(), 6); newData = false; delay(300); sim800.print("AT+CMGF=1\r"); delay(1000); sim800.print("AT+CMGS=\"" + PHONE + "\"\r"); delay(1000); sim800.print("http://maps.google.com/maps?q=loc:"); sim800.print(gps.location.lat(), 6); sim800.print(","); sim800.print(gps.location.lng(), 6); delay(100); sim800.write(0x1A); //ascii code for ctrl-26 //sim800.println((char)26); //ascii code for ctrl-26 delay(1000); //Prateek //wwww.prateeks.in //https://www.youtube.com/c/JustDoElectronics/videos } } void sendSms(String text) { sim800.print("AT+CMGF=1\r"); delay(1000); sim800.print("AT+CMGS=\"" + PHONE + "\"\r"); delay(1000); sim800.print(text); delay(100); sim800.write(0x1A); //ascii code for ctrl-26 //sim800.println((char)26); //ascii code for ctrl-26 delay(1000); Serial.println("SMS Sent Successfully."); } int8_t sendATcommand(char* ATcommand, char* expected_answer, unsigned int timeout) { uint8_t x = 0, answer = 0; char response[100]; unsigned long previous; memset(response, '\0', 100); // Initialice the string delay(100); while ( sim800.available() > 0) sim800.read(); // Clean the input buffer if (ATcommand[0] != '\0') { sim800.println(ATcommand); // Send the AT command } x = 0; previous = millis(); // this loop waits for the answer do { if (sim800.available() != 0) { // if there are data in the UART input buffer, reads it and checks for the asnwer response[x] = sim800.read(); //Serial.print(response[x]); x++; if (strstr(response, expected_answer) != NULL) // check if the desired answer (OK) is in the response of the module { answer = 1; } } } while ((answer == 0) && ((millis() - previous) < timeout)); // Waits for the asnwer with time out return answer; } boolean getIgnitionStatus() { float val = 0; for (int i = 1; i <= 10; i++) { val = val + analogRead(ignition_sensor); } val = val / 100; //Serial.println(val); if (val > 90) { sendSms("Hi Prateek Someone Trying To Start Your Bike"); sendSmsGPS("Location"); return true; } else if (val < 50) { return false; } } void setIgnition() { ignition_status = getIgnitionStatus; if (ignition_status == false) { //sim800l sleep mode turned off //must send sim800.print("AT"); here sim800.print("AT"); sendATcommand("AT+CSCLK=0", "OK", 1000); } else if (ignition_status == true) { //sim800l sleep mode turned on sendATcommand("AT+CSCLK=2", "OK", 1000); } } int sendGpsToServer() { //Prateek //wwww.prateeks.in //https://www.youtube.com/c/JustDoElectronics/videos }
Link For Download
Github Link
:-
Code And Circuit Diagram
Video :-
2 Comments
Anonymous
27 December 2022 at 03:54
can u list componants and links of it
Reply
Delete
Replies
Reply
Anonymous
26 March 2023 at 10:05
hi
Reply
Delete
Replies
Reply
Add comment
Load more...
Newer
Older
ESP32 Interfacing With LDR Sensor
Esp32 Cam Based Face Unlock
IoT Based Patient Health Monitoring System Using Blynk App
Ultrasonic Sensor as a Counter with Arduino
Measure CO2 Level in Air Using Arduino
ESP32 Led Blink With Push Button
4 Way Traffic Signal Control System Using Arduino and IR Sensor
NRF Based Servo Motor Control
IoT Based Fingerprint Biometric Attendance System Using NodeMCU (Esp8266)
Smart Street Light Using Arduino
YouTube
Like on Facebook
Follow on Twitter
Follow on Google+
Follow on Instagram
Subscribe on Youtube
Hi WelCome To My Website If you have a creative mind and want to learn Electronics even without studying it then FRIENDS this Website And Youtube Channel is for you, I am crazy creators who love making Electronics things. I have a bunch of more than 130 Tutorial Videos on My YouTube Channel and I upload a new Tutorial every Sunday.
Tags
Arduino Project
Esp32 Project
Esp8266 Project
2 Comments
can u list componants and links of it
ReplyDeletehi
ReplyDelete