Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Track ME: Arduino Mega 2560 Auto Tracker Prototyp met GPS & GPRS

Onderdelen en benodigdheden

Arduino Mega 25601
NEO-6M GPS module1
Adafruit SD Card Shield1
Seeed Studio GPRS Shield V2.01
Jumper wires1 set
9V batterij1
Plastic projectdoos1

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.

Track ME: Arduino Mega 2560 Auto Tracker Prototyp met GPS & GPRS

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

Track ME: Arduino Mega 2560 Auto Tracker Prototyp met GPS & GPRS

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)

Track ME: Arduino Mega 2560 Auto Tracker Prototyp met GPS & GPRS
Track ME: Arduino Mega 2560 Auto Tracker Prototyp met GPS & GPRS

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.

Track ME: Arduino Mega 2560 Auto Tracker Prototyp met GPS & GPRS

Voeding

9V batterij op Vin of DC-jack.

Track ME: Arduino Mega 2560 Auto Tracker Prototyp met GPS & GPRS
Track ME: Arduino Mega 2560 Auto Tracker Prototyp met GPS & GPRS
Track ME: Arduino Mega 2560 Auto Tracker Prototyp met GPS & GPRS
Track ME: Arduino Mega 2560 Auto Tracker Prototyp met GPS & GPRS

Code

Belangrijke bibliotheekwijzigingen voor Mega:

  • In GSM.h: comment #define UNO uit, 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).
Track ME: Arduino Mega 2560 Auto Tracker Prototyp met GPS & GPRS

Suggesties en vragen zijn welkom! – Hugo Gomes

Schema's

Track ME: Arduino Mega 2560 Auto Tracker Prototyp met GPS & GPRS
Track ME: Arduino Mega 2560 Auto Tracker Prototyp met GPS & GPRS

Productieproces

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