Tracking Device Berbasis GPS Dan LoRa Untuk Helmet Yang Dimodernisasi

by DarwinPDGz in Circuits > Arduino

592 Views, 8 Favorites, 0 Comments

Tracking Device Berbasis GPS Dan LoRa Untuk Helmet Yang Dimodernisasi

IMG_20231216_134452.jpg
Screenshot 2023-12-20 093048.png
Screenshot 2023-12-20 093120.png
DEMO TR SPE 1-16 screenshot.png

GPS Tracker, terdiri dari modul transmitter, receiver, dan aplikasi. Dimana transmisi data dilakukan melalui LoRa dan Firebase.

Supplies

Berikut suplai dan alasan pakainya:

  1. ESP 32 DOIT DEVKIT [untuk modul WiFi]
  2. ARDUINO NANO [Power efisien]
  3. LoRa SX1276 (915 MHz) [guna mengirim pesan secara wireless, jarak lebih jauh]
  4. GPS Ublox Neo-6M [built in antenna dan built in memory saver]
  5. Baterai 18650 [rechargeable]

Tujuan

Tujuan alat ini adalah sebagai upaya agar membantu para supervisor untuk memonitor kualitas dan performa dari para pekerja yang akan menggunakan alat ini, terutamanya dalam sisi aktivitas pekerja.

Desain Sistem

Sistem secara keseluruhan terdiri dari 2 subsistem yaitu transmitter dan receiver. Transmitter ini dihubungkan dengan LoRa yang mana akan mengirimkan data yang diperoleh dari sinyal GPS lalu akan dikirimkan ke receiver. Lalu dari receiver ini, lora yang menjadi penerimanya akan melakukan parse packet dan membaca latitude dan longitude dari transmitter. Data yang masuk ke receiver ini akan dikirimkan menggunakan firebase dan akan ditampilkan di aplikasi flutter

Desain PCB

messageImage_1703080662137.jpg
messageImage_1703081065061.jpg

Desain PCB untuk sistem.

Block Diagram & Flowchart

messageImage_1703044879996.jpg
messageImage_1703044866049.jpg
1703081094845.jpg

Block Diagram Sistem beserta Flowchart Sistem

Aplikasi

Screenshot 2023-12-20 161553.png

Aplikasi Flutter untuk mengakses data sebagai Graphical User Interface (GUI)

Struktur Data Firebase

Screenshot 2023-12-20 160248.png
Screenshot 2023-12-20 160913.png

cara data terstruktur pada RTDB firebase

Kode

[Transmitter]

#include <Arduino.h>

#include <SPI.h>

#include <SoftwareSerial.h>

#include <TinyGPS++.h>

#include <LoRa.h>


SoftwareSerial gpsSerial(3, 2); // RX, TX for GPS

TinyGPSPlus gps;


#define BAND 915E6 // Frequency for your LoRa module (adjust according to your region)


void setup() {

 Serial.begin(9600);

 gpsSerial.begin(9600);


 while (!LoRa.begin(BAND)) {

  Serial.println("LoRa initialization failed. Retrying...");

  delay(1000);

 }


 Serial.println("LoRa initialization complete");

}


void sendGPSToLoRa() {

 unsigned long startTime = millis();


 // Wait for valid GPS data for up to 5 seconds

 while (millis() - startTime < 5000) {

  while (gpsSerial.available() > 0) {

   if (gps.encode(gpsSerial.read())) {

    if (gps.location.isValid()) {

     // GPS data is valid, split the data into latitude and longitude

     String latitude = String(gps.location.lat(), 6);

     String longitude = String(gps.location.lng(), 6);

              

     // Create a message to send over LoRa, i want to send latitude first, then in the different line is longitude

     String message = latitude;

     String pesan = longitude;

     Serial.print("Sending message: ");

     Serial.println(message);

     Serial.println(pesan);


     LoRa.beginPacket();

     LoRa.print(message);

     LoRa.print(pesan);

     LoRa.endPacket();


     Serial.println("Message sent successfully.");


     return; // Exit the loop when valid data is sent

    }

   }

  }

 }


 // If no valid GPS data is received within 5 seconds, print an error message

 Serial.println("Error: GPS module not detected or not functioning");

 delay(1000); // Add a delay before retrying

}


void loop() {

 sendGPSToLoRa();


 delay(5000); // Send the message every 15 seconds

}


Dari code ini digunakan library yaitu softwareserial, tinygps dan lora. Library software serial ini digunakan untuk interaksi dengan lora, yang mana memerlukan MOSI dan MISO agar dapat berkomunikasi dengan LoRa SX1276. Lalu library TinyGPS++ yang bertujuan agak dapat berkomunikasi dengan modul GPS. Dari code ini, kami menggunakan serial dan gps begin di baud rate 9600. GPS dihubungkan dengan RX dan TX dari arduino nano ini dan untuk LoRa dihubungkan dengan default pin dari nano ini. Nano akan melakukan pendeteksian LoRa, yang mana jika tidak terdeteksi akan menulis di serial monitornya yaitu "Lora initialization failed. Retrying..." dan akan didelay 1 detik, kemudian jika berhasil terhubung, maka di serial monitor akan tertulis LoRa intialization complete. kemudian, dari modul GPS akan melakukan pemanggilan data latitude dan longitude, dan akan ditampilkan di serial monitor jika berhasil, namun jika sinyal GPS tidak ditemukan atau modul gps yang bermasalah, maka akan ditampilkan "Error: GPS module not detected or not functioning". Jika berhasil didapatkan data, maka data GPS akan dikirim ke LoRa untuk dapat dikirimkan ke receiver. Jika message berhasil dikirim, maka tertulis "message sent successfully".


[Receiver]


#include <WiFi.h>

#include <FirebaseESP32.h>

#include <Wire.h>

#include <LoRa.h>


#define FIREBASE_HOST "https://sentracerproj-default-rtdb.asia-southeast1.firebasedatabase.app/"

#define FIREBASE_AUTH "zo9Jd1matTxrorFzQrrHp9J1YuH9P4uZ71lIXn9a"




FirebaseData firebaseData;


struct WifiCredentials {

 const char* ssid;

 const char* password;

};


WifiCredentials wifiCredentials[] = {

 {"S22 Ultra", "Daniel12"},

 {"B29 2.4GHz", "68205713"}

};


void connectToWiFi(int index) {

 WiFi.begin(wifiCredentials[index].ssid, wifiCredentials[index].password);

 Serial.print("Connecting to Wi-Fi");

 unsigned long startTime = millis();

 while (WiFi.status() != WL_CONNECTED && millis() - startTime < 5000) {

  delay(500);

  Serial.print(".");

 }

 Serial.println();

  

 if (WiFi.status() == WL_CONNECTED) {

  Serial.println("Connected to Wi-Fi");

 } else {

  Serial.println("Switching to the next Wi-Fi...");

  delay(2000);

  int nextIndex = (index + 1) % (sizeof(wifiCredentials) / sizeof(wifiCredentials[0]));

  connectToWiFi(nextIndex);

 }

}


void setup() {

 Serial.begin(115200);

 connectToWiFi(0); 

  

 Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);


 LoRa.setPins(5, 14, 2);

 while (!LoRa.begin(915E6)) {

  Serial.println(".");

  delay(500);

 }

 if (LoRa.begin(915E6)) {

 LoRa.setSyncWord(0xA5);

 Serial.println("LoRa Initializing OK!");

} else {

 Serial.println("LoRa Initializing failed!");

}


  

  

 FirebaseJson emptyJson;

 Firebase.updateNode(firebaseData, "/location", emptyJson);

  String dataPath = "/location/" + String(millis());

  Firebase.setBool(firebaseData, dataPath.c_str(), true);

  if (firebaseData.dataPath() == dataPath) {

    Serial.println("Data sent");

   } else {

    Serial.println("Failed");

    Serial.println(firebaseData.errorReason());  


}

}


void sendToFirebase(String latitude, String longitude) {

 FirebaseJson json;

 json.add("latitude", latitude);

 json.add("longitude", longitude);

 String dataPath = "/location" + String(millis());

  Firebase.updateNode(firebaseData, dataPath.c_str(), json);

  //make me able to tell if the data is sent or not

  if (firebaseData.dataPath() == dataPath) {

    Serial.println("Data sent");

   } else {

    Serial.println("Failed");

    Serial.println(firebaseData.errorReason());  


}

}


void processGPSData(String gpsData) {

 // Process GPS data and send it to Firebase

 int comma1 = gpsData.indexOf(',');

 int comma2 = gpsData.indexOf(',', comma1 + 1);


 String latitude = gpsData.substring(0, comma1);

 String longitude = gpsData.substring(comma1 + 1, comma2);


 Serial.println("Latitude: " + latitude);

 Serial.println("Longitude: " + longitude);


 // Send data to Firebase

 sendToFirebase(latitude, longitude);

}


void loop() {

 int packetSize = LoRa.parsePacket();

 if (packetSize) {

  Serial.print("Received packet: '");


  while (LoRa.available()) {

   String LoRaData = LoRa.readString();


   // Process the GPS data

   processGPSData(LoRaData);

  }

  Serial.println("'");

  Serial.println("LoRa packet received");

 }

}


Untuk receiver ini kami menggunakan library FirebaseESP32 dan LoRa. perlu untuk melakukan define host dan auth di awal agar dapat mengirimkan data ke firebase. Karena kami menggunakan modul ESP32 yang ada built in Wi-Fi, kami dapat menggunakan Wi-Fi, sehingga kami tidak memerlukan modul Wi-Fi tambahan. Kami menambahkan 2 Wi-Fi credential, yang mana jika credential Wi-Fi tidak ditemukan, maka dapat berpindah ke Wi-Fi yang lain. Lalu kami menggunakan baud rate 115200 dan mengdefine pin LoRa ke 5, 14, 2 yang mana kemudian akan mencari LoRa dan akan menampilkan "LoRa intializing ok" jika modul Lora ditemukan, dan jika tidak ditemukan maka akan menampilkan "LoRa intializing failed". Kemudian, dibagian firebase kami menambahkan path /loaction yang mana akan membuat path location di firebase, yang mana flutternya akan dapat menampilkan hasil yang diterima dari transmitter. Kemudian, untuk mendapatkan data perlu untuk melakukan string data dan parse packet. Jadi akan menampilkan hasil latitude dan longitude yang didapat dari transmitter, dan akan menampilkan LoRa packet received jika data telah diterima dari transmitter, data ini diforward ke firebase untuk ditampilkan di aplikasi.

Kode (Aplikasi)

Screenshot 2023-12-20 204553.png
Screenshot 2023-12-20 204600.png
Screenshot 2023-12-20 204613.png
Screenshot 2023-12-20 204622.png
Screenshot 2023-12-20 204633.png
Screenshot 2023-12-20 204647.png
Screenshot 2023-12-20 204655.png
Screenshot 2023-12-20 204702.png
Screenshot 2023-12-20 204709.png
Screenshot 2023-12-20 204720.png
Screenshot 2023-12-20 204727.png

Berikut kode untuk aplikasi flutter

Casing

Screenshot 2024-01-04 113602.png

1 lobang buat LoRa, dan 1 lobang buat usb, keduanya digabung menggunakan tight fit.

Demo Video

DEMO TR SPE

link youtube: https://youtu.be/S722K5eRjS0?si=8BT6OqzFDgtXhEiw


link mkv gdrive: https://drive.google.com/file/d/1KtUm6mOKxoIcXUW98UwwJTzwhFolG1Kw/view?usp=sharing

Evaluasi

Dari sistem yang kami buat ini, kami menyimpulkan bahwa alat ini dapat bekerja sebegaimana yang kami inginkan, namun juga terdapat permasalahan yang berkemungkinan untuk menghambat penggunaan sistem ini. Salah satunya yaitu permasalahan dengan antena yang mana untuk melakukan pengambilan data.

Anggota Kelompok

Darwin - 2502026532

Daniel Geraldo - 2501966742

Sagara Wahyu Dwipa - 2502035013

Referensi

https://how2electronics.com/lora-based-low-power-gps-tracker-with-arduino-esp8266/#Bill_of_Materials

https://www.electroschematics.com/neo-6m-gps-module/

https://how2electronics.com/esp32-lora-sx1278-76-transmitter-receiver/

https://docs.fleaflet.dev/