Track ME: Arduino Mega 2560 Auto Tracker Prototyp met GPS & GPRS
Onderdelen en benodigdheden
| Arduino Mega 2560 | 1 |
| NEO-6M GPS module | 1 |
| Adafruit SD Card Shield | 1 |
| Seeed Studio GPRS Shield V2.0 | 1 |
| Jumper wires | 1 set |
| 9V batterij | 1 |
| Plastic projectdoos | 1 |
Over dit project
Dit is mijn eerste prototype van een auto-/persoonstracker. Het systeem is eenvoudig: een Arduino Mega, GPS, GPRS-shield en een SD-kaart (optioneel, voor logging).
Hoe het werkt
De tracker zoekt continu de actuele GPS-positie. Als er een inkomende oproep op de SIM-kaart wordt gedetecteerd, stuurt het systeem een SMS terug met de huidige locatie en een Google Maps-link. Bijvoorbeeld:
Hugo location is now: Lat: 54.315010, Log: 10.130997. https://maps.google.com/maps?q=54.315010,+10.130997
Als de GPS geen fix heeft (minder dan 3 satellieten), wordt de laatst bekende positie gestuurd:
I can not seem to find Hugo. Last time that I've saw him, was in: Lat: 54.315010, Log: 10.130997. https://maps.google.com/maps?q=54.315010,+10.130997
Datum, tijd, positie en SMS-status worden gelogd op de SD-kaart.

Componenten aansluiten
Omdat de Arduino Mega een ander pinout heeft dan de Uno, is herbedrading nodig.
SD Card Shield (SPI)
Uno SPI → Mega SPI:
MOSI 11 → 51
MISO 12 → 50
SCK 13 → 52
SS 10 → 53

GPRS Shield
Zet de communicatiepinnen op Software Serial via jumper J7 op de shield. Verbind dan:
GPRS pin 7 → Mega pin 18 (Serial1 TX)
GPRS pin 8 → Mega pin 19 (Serial1 RX)


GPS Module
Verbinden met Serial2 poort:
GPS TX → Mega pin 16 (Serial2 RX)
GPS RX → Mega pin 17 (Serial2 TX)
Voeding: 5V en GND van SD-shield.

Voeding
9V batterij op Vin of DC-jack.




Code
Belangrijke bibliotheekwijzigingen voor Mega:
- In
GSM.h: comment#define UNOuit, uncomment#define MEGA. - In
HWSerial.h: uncomment#define MEGA. - GPS: gebruik
TinyGPS++library.
De code initialiseert GPRS, GPS en SD-kaart. In de main loop worden GPS-data gelezen en inkomende oproepen gecontroleerd. Bij een oproep wordt een SMS verstuurd met huidige of laatste bekende positie. Alles wordt gelogd op SD-kaart.
Hoofdcode (Arduino)
#include "SIM900.h"
#include <SoftwareSerial.h>
#include "sms.h"
#include "call.h"
#include <TinyGPS++.h>
#include <SPI.h>
#include <SD.h>
const int chipSelect = 53; // Mega CS pin
CallGSM call;
SMSGSM sms;
char number[20];
byte stat = 0;
int error = 0;
char value_str[5];
TinyGPSPlus gps;
const char *googlePrefix = "https://maps.google.com/maps?q=";
double Lat, Long;
int day, month, year, hour, minute, second;
int num_sat;
boolean one_point_true = false;
void setup() {
Serial.begin(9600);
Serial.print(F("Starting GSM..."));
if (gsm.begin(9600)) Serial.println(F("READY"));
else Serial.println(F("IDLE"));
Serial.println(F("Starting GPS"));
Serial2.begin(9600); // GPS op Serial2
Serial.print(F("Initializing SD card..."));
pinMode(53, OUTPUT);
if (!SD.begin(chipSelect)) {
Serial.println(F("Card failed, or not present"));
return;
}
Serial.println(F("card initialized."));
}
void loop() {
Get_GPS();
Check_call();
}
void Get_GPS() {
while (Serial2.available() > 0)
if (gps.encode(Serial2.read()))
num_sat = gps.satellites.value();
if (gps.location.isValid()) {
Lat = gps.location.lat();
Long = gps.location.lng();
if (Lat != 0 && Long != 0) one_point_true = true;
}
if (gps.date.isValid()) {
day = gps.date.day(); month = gps.date.month(); year = gps.date.year();
}
if (gps.time.isValid()) {
hour = gps.time.hour(); minute = gps.time.minute(); second = gps.time.second();
}
smartDelay(500);
if (millis() > 5000 && gps.charsProcessed() < 10) {
Serial.println(F("No GPS detected: check wiring."));
while (true);
}
}
static void smartDelay(unsigned long ms) {
unsigned long start = millis();
do {
while (Serial2.available()) gps.encode(Serial2.read());
} while (millis() - start < ms);
}
void Check_call() {
stat = call.CallStatusWithAuth(number, 0, 0);
if (stat == CALL_INCOM_VOICE_AUTH) {
delay(100);
call.HangUp(); // oproep afwijzen
Send_SMS();
}
}
void Send_SMS() {
char Date[13]; sprintf(Date, "%02d/%02d/%04d ", day, month, year);
char time1[10]; sprintf(time1, "%02d:%02d:%02d ", hour, minute, second);
delay(100);
char lat_print[10], Long_print[10];
dtostrf(Lat, 5, 6, lat_print);
dtostrf(Long, 5, 6, Long_print);
if (num_sat >= 3 && one_point_true) {
char sms_OK[160];
sprintf(sms_OK, "Hugo location is now: Lat: %s, Log: %s. %s%s,+%s\n", lat_print, Long_print, googlePrefix, lat_print, Long_print);
Serial.println(sms_OK);
error = sms.SendSMS(number, sms_OK);
delay(500);
Serial.println(error ? F("SMS OK") : F("SMS ERROR"));
} else if (num_sat < 3 && one_point_true) {
char sms_NOK[150];
sprintf(sms_NOK, "I can not seen to find Hugo. Last time that i've saw him, was in: Lat: %s, Log: %s. %s%s,+%s\n", lat_print, Long_print, googlePrefix, lat_print, Long_print);
Serial.println(sms_NOK);
error = sms.SendSMS(number, sms_NOK);
Serial.println(error ? F("SMS OK") : F("SMS ERROR"));
} else {
Serial.println(F("No valid GPS point"));
}
// Loggen op SD
File dataFile = SD.open("datalog.txt", FILE_WRITE);
if (dataFile) {
dataFile.print(Date); dataFile.print(" ");
dataFile.print(time1); dataFile.print(" ");
dataFile.print(number); dataFile.print(" ");
dataFile.print(lat_print); dataFile.print(", ");
dataFile.print(Long_print); dataFile.print(" ");
dataFile.print(error); dataFile.println();
dataFile.close();
} else {
Serial.println(F("error opening datalog.txt"));
}
}
Voor- en nadelen (prototypestatus)
- Stroomverbruik: batterij houdt maar ~1 uur. Slaapmodus is noodzakelijk voor verbetering.
- Afmetingen: te groot; nieuwe PCB ontworpen (zie foto).

Suggesties en vragen zijn welkom! – Hugo Gomes
Schema's


Productieproces
- Bouw een Slimme Robot met de Bridge Shield – Raspberry Pi & Arduino Integratie
- Web-gestuurd DMX-verlichtingssysteem – Arduino Master Controller
- Bluetooth-gecontroleerde Arduino Spybot bouwen
- UnifiedWater v1 – Complete Arduino Waterkwaliteit Sensor Kit
- HSV-klok: Levendige, aanpasbare klok voor Arduino-liefhebbers
- Geavanceerde Sneeuwruimingsrobot voor Efficiënte Winteronderhoud
- Draagbaar stemstysteem met GSM-connectiviteit
- DIY Whac-A-Mole Arcade Spel (Knoppen Editie) – Arduino Project
- Moderne Jukebox: Raspberry Pi & Arduino LED Muziekspeler
- DIY Arduino Smartwatch: Bouw Je Eigen Apple Watch-stijl Tijdwijzer
- Dankbaarheid tonen naar beleefde automobilisten – LED-tekstscherm in auto