GPS tracking based on LoRa 169/433/868/915 Mhz
Release time:2019-12-02
Connection : USB - Serial
Need : Chrome Browser
Need : 1 X Arduino Mega
Need : 1 X GPS
Need : 1 X SD card
Need : 2 X LoRa Modem
Function: Arduino Send GPS value to main base - Main base store data in Dataino
Server
Lora Module: Ultra long range RF1276 from APPCONWIRELESS
LoRa is a new, private and spread-spectrum modulation technique which allows
sending data at extremely low data-rates to extremely long ranges. The low
data-rate (down to few bytes per second) and LoRa modulation lead to very low
receiver sensitivity, means in this test means more than 10km.
· 1 - Base Station
Computer width internet connection and a LoRa modem connected into USB port .
Arduino Car Kit
· The metric box
Anduino Mega connected to serial 2 to GPS reciver, and Serial 1 to LoRa
modem.
A SD card is used for store data.
The first test
· 10.6 Km on a path through urban centers, galleries and along the coast made with loops
The ratio of reception /transmission has been of 321/500
TX point
RX point
Create the Interface
· 1 - Set up a new project LoRa
Press icon cog to open project config
Add Gauge
·
2) Open the gauge slider.
· 3) Scroll to the GPS.
· 4) Add one to the desk.
Drag gauge GPS and add OpenStreetMap
· 5) Add OpenStreetMap map to desk
Dragging the component GPS on the icon map, OpenStreet map is generated.
Create the Interface
· 6) Change map refresh
Change the map refresh time from 5000 to 10000
Drag GPS gauge and add table log
· 7) Add a Table Log gauge.
By dragging the gauge above the GPS icon table is created gauge table log
· 8) Change table log refresh.
Change the map refresh time from 5000 to 10000
Adjust the position of the gauges
· 9) Drag gauges
adjust the position of the gauges by dragging them across the screen.
· 10) Save project
Get code
· 10) Activate code container
Button on top right button, select all and copy base code.
Arduino IDE
· 11) Paste code on Arduino IDE
· 12) Edit code
Add this line in the definition
//*************************************************************************
//** LIBRARY **
//*************************************************************************
#include <TinyGPS.h> // ++ GPS library
#include <SPI.h> // ++ SPI library
#include <SD.h> // ++ SD library
//*************************************************************************
//** SD **
//*************************************************************************
// * SD card attached to SPI bus as follows:
// ** UNO: MOSI - pin 11, MISO - pin 12, CLK - pin 13, CS - pin 4
// (CS pin can be changed) and pin #10 (SS) must be an output
// ** Mega: MOSI - pin 51, MISO - pin 50, CLK - pin 52, CS - pin 53
// (CS pin can be changed) and pin #52 (SS) must be an output
// ** Leonardo: Connect to hardware SPI via the ICSP header
// Pin 4 used here for consistency with other Arduino examples
const int chipSelect = 53; // ++ SD pin selector
//*************************************************************************
//** GPS **
//*************************************************************************
TinyGPS gps; // ++ GPS on Serial2
void gpsdump(TinyGPS &gps); // ++
bool newdataGPS = false; // ++
Add this line in the setup()
//***********************************************************************
//** GPS serial setup **
//***********************************************************************
Serial2.begin( 9600 ); // ++
delay( 1000 ); // ++
//***********************************************************************
//** SD Initializing **
//***********************************************************************
// make sure that the default chip select pin is set to // ++
// output, even if you don't use it: // ++
pinMode( SS, OUTPUT ); // ++
Serial.println( F("Initializing SD card...") ); // ++
// see if the card is present and can be initialized: // ++
if (!SD.begin(chipSelect)) { // ++
Serial.println( F("Card failed, or not present") ); // ++
// don't do anything more: // ++
return; // ++
} else { // ++
Serial.println( F("SD card OK") ); // ++
} // ++
Add this lines in loop() void
serialEvent2(); // ++ call GPS serial event
Add SeriaEvent2 code
//*************************************************************************
//** GPS serialEvent **
//*************************************************************************
void serialEvent2() { // ++
while (Serial2.available()) { // ++
char c = Serial2.read(); // ++
//Serial.print(c); // uncomment to see raw GPS data // ++
if ( gps.encode(c) ) { // ++
newdataGPS = true; // ++
break; // uncomment to print new data immediately! // ++
} // ++
} // ++
} // ++
Add GPS dump voud
//*************************************************************************
//** gps dump **
//*************************************************************************
//** The valid range of latitude in degrees is -90 and +90 . **
//** Longitude is in the range -180 and +180 **
//** specifying the east-west position **
//** "123456789 1234567890" **
//** "000.00000;0000.00000" **
//*************************************************************************
void gpsdump(TinyGPS & gps) // ++
{ // ++
int year; // ++
byte month, day, hour, minute, second, hundredths; // ++
unsigned long age; // ++
gps.f_get_position( &LATGP00, &LONGP00, &age ); // ++
gps.crack_datetime( &year, &month, &day, &hour, // ++
&minute, &second, &hundredths,