Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Pencatat Data GPS Canggih: Pelacakan Real-Time, Ketinggian Puncak & Pemantauan Kecepatan

Komponen dan Perlengkapan

Pencatat Data GPS Canggih: Pelacakan Real-Time, Ketinggian Puncak & Pemantauan Kecepatan
Arduino UNO
arduino uno
×1
Pencatat Data GPS Canggih: Pelacakan Real-Time, Ketinggian Puncak & Pemantauan Kecepatan
Jumper (Busbar), Jumper Leads Set
×1
Pencatat Data GPS Canggih: Pelacakan Real-Time, Ketinggian Puncak & Pemantauan Kecepatan
Arduino Proto Shield
×1
1.8" TFT SPI LCD Screen with MicroSD Socket
atau yang lain dengan kartu SD
×1
u-blox gps neo 6m
×1

Alat dan Mesin yang Diperlukan

Pencatat Data GPS Canggih: Pelacakan Real-Time, Ketinggian Puncak & Pemantauan Kecepatan
Soldering iron (generic)
Pencatat Data GPS Canggih: Pelacakan Real-Time, Ketinggian Puncak & Pemantauan Kecepatan
Solder Wire, Lead Free
Pencatat Data GPS Canggih: Pelacakan Real-Time, Ketinggian Puncak & Pemantauan Kecepatan
Wire Stripper & Cutter, 18-10 AWG / 0.75-4mm² Capacity Wires

Tentang Proyek Ini

PENDAHULUAN

Saya berolahraga aeromodelling dan saya ingin mengetahui kecepatan dan ketinggian pesawat saya. sayangnya, pencatat data GPS komersial sangat mahal.

Jadi saya memutuskan untuk membuat pencatat data GPS berbasis Arduino dengan biaya kurang dari 50€.

Prototipe pertama saya didasarkan pada Arduino Uno R3 dengan layar Sainsmart ST7735 dengan kartu SD terintegrasi dan modul GPS NEO 6M V2.

Pada proyek kedua saya akan menggunakan Arduino Nano dengan layar OLED SSD1306, modul GPS yang sama, dan kartu micro SD. Berat dengan kotak sekitar 40 gram dan dapat dengan mudah diintegrasikan ke dalam pesawat ukuran sedang (ukuran L 50 mm X l 30mm X H 22mm).

Itu akan menjadi proyek selanjutnya (saya menunggu bahan-bahannya.)

UJI COBA

Tidak mudah untuk menyunting layar Arduino dalam mobil, tetapi saya melakukannya dan Anda dapat melihat hasilnya pada video.

Uji coba berikutnya akan dilakukan dengan prototipe baru, lebih kecil dan lebih ringan pada pesawat kendali jarak jauh. Akan dilanjutkan!


Kode

gps data logger Arduino
#include <SPI.h> #include <Adafruit_GFX.h> #include <Adafruit_ST7735.h> #define cs 10 #define dc 9 #define rst 8 #include <TinyGPS++.h> #include <SoftwareSerial.h> Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst); static const int RXPin = 4, TXPin = 3; //GPS communication static const uint32_t GPSBaud = 9600; #define OLED_RESET 5 TinyGPSPlus gps; SoftwareSerial ss(RXPin, TXPin); int x=80; int xh=80; int maxhigh=0; int maxspeed = 0, speed1 = 0; int high1 = 0;; void setup() { Serial.begin(9600); ss.begin(GPSBaud); tft.initR(INITR_GREENTAB); tft.fillScreen(ST7735_BLACK); tft.setCursor(5, 58); tft.setTextSize(1); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.print("initilisation"); } void loop() { tft.setTextSize(1); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); // affichage des informations a chaque bonne reception satellite while (ss.available() > 0){ gps.encode(ss.read()); if (gps.location.isUpdated()){ cadre(); tft.setCursor(5, 44); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.print("Latitude :"); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(gps.location.lat(), 6); tft.setCursor(5, 58); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.print("Longitude :"); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(gps.location.lng(), 6); //affichage ecran date tft.setCursor(5, 7); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.print("date : "); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(gps.date.day()); tft.print(" "); tft.print(gps.date.month()); tft.print(" "); tft.print(gps.date.year()); //affichage ecran heure tft.setCursor(5, 20); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.print("heure : "); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(gps.time.hour()+1); tft.print(" "); tft.print(gps.time.minute()); tft.print(" "); tft.print(gps.time.second()); tft.print(" "); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.setCursor(3, 30); //affichage ecran altitude tft.setCursor(5, 80); tft.print("H m :"); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print (gps.altitude.meters(),0); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(" "); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.setCursor(5, 95); hmax(); tft.print("Hmax :"); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(maxhigh); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(" "); courbeh(); //affichage ecran vitesse tft.setCursor(5, 115); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.print("V act: "); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print (gps.speed.kmph(),0); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(" "); tft.setCursor(5, 130); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); vmax(); tft.print("vmax: "); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(maxspeed); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(" "); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); courbe(); //affichage ecran nombre de satellites tft.setCursor(5, 147); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.print("nombre de Sat : "); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(gps.satellites.value()); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(" "); // Horizontal Dim. of Precision (100ths-i32) Serial.print("HDOP = "); Serial.println(gps.hdop.value()); smartDelay(400); } } } // delai pour une bonne recption static void smartDelay(unsigned long ms) { unsigned long start = millis(); do { while (ss.available()) gps.encode(ss.read()); } while (millis() - start < ms); } void cadre() { // affichage ecran //cadre tft.drawLine(0,0,130,0,ST7735_RED); tft.drawLine(0,1,130,1,ST7735_RED); tft.drawLine(0,158,130,158,ST7735_RED); tft.drawLine(0,142,130,142,ST7735_RED); tft.drawLine(0,141,130,141,ST7735_RED); tft.drawLine(0,107,130,107,ST7735_RED); tft.drawLine(0,108,130,108,ST7735_RED); tft.drawLine(80,108,80,140,ST7735_RED); tft.drawLine(81,109,81,140,ST7735_RED); tft.drawLine(80,70,80,108,ST7735_RED); tft.drawLine(81,70,81,108,ST7735_RED); tft.drawLine(0,159,130,159,ST7735_RED); tft.drawLine(0,0,0,156,ST7735_RED); tft.drawLine(1,1,1,157,ST7735_RED); tft.drawLine(127,0,127,156,ST7735_RED); tft.drawLine(126,0,126,156,ST7735_RED); tft.drawLine(0,35,130,35,ST7735_RED); tft.drawLine(0,36,130,36,ST7735_RED); tft.drawLine(0,70,130,70,ST7735_RED); tft.drawLine(0,71,130,71,ST7735_RED); } void courbe() { int nouvelleValeur; // converison vitesse max (350 km/h) en pixel nouvelleValeur = map((gps.speed.kmph()), 0, 150, 137, 110); // car l'cran a 64 pixels de haut x++; tft.drawPixel(x,nouvelleValeur,ST7735_CYAN); if (x>123) { x=80; tft.fillRect(82,110,43,30,ST7735_BLACK); } } void courbeh() { int nouvelleValeurh; // converison vitesse max (350 km/h) en pixel nouvelleValeurh = map((gps.altitude.meters()), 0, 1000, 104, 72); // car l'cran a 64 pixels de haut xh++; tft.drawPixel(xh,nouvelleValeurh,ST7735_CYAN); if (xh>123) { xh=80; tft.fillRect(82,72,43,35,ST7735_BLACK); } } void vmax() { // calcul vitese maximum speed1 = (gps.speed.kmph()); if ( speed1 > maxspeed) { maxspeed = speed1; } } void hmax() { // calcul altitude maximum high1 = (gps.altitude.meters()); if ( high1 > maxhigh) { maxhigh = high1; } } 
sauvegarde SDArduino
data logger
#include <SPI.h> #include<SD.h> #include <Adafruit_GFX.h> #include <Adafruit_ST7735.h> #define cs 10 #define dc 9 #define rst 8 #include <TinyGPS++.h> #include <SoftwareSerial.h> Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst); static const int RXPin = 4, TXPin = 3; //GPS communication static const uint32_t GPSBaud = 9600; const int cs_sd=4; #define OLED_RESET 5 TinyGPSPlus gps; SoftwareSerial ss(RXPin, TXPin); int x=80; int xh=80; int maxhigh=0; int maxspeed = 0, speed1 = 0; int high1 = 0;; void setup() { Serial.begin(9600); ss.begin(GPSBaud); tft.initR(INITR_GREENTAB); tft.fillScreen(ST7735_BLACK); tft.setCursor(5, 58); tft.setTextSize(1); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.print("initilisation"); tft.setCursor(5, 70); tft.print("init SD"); delay(1000); if(!SD.begin(cs_sd)) //Condition vrifiant si la carte SD est prsente dans l'appareil { tft.setCursor(5, 82); tft.print("Defaut SD"); return; } tft.setCursor(5, 82); tft.print("Carte SD OK"); delay(1000); tft.fillScreen(ST7735_BLACK); File data = SD.open("donnees.txt",FILE_WRITE); // Ouvre le fichier "donnees.txt" data.println(""); data.println("Dmarrage acquisition"); // Ecrit dans ce fichier data.close(); } void loop() { tft.setTextSize(1); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); // affichage des informations a chaque bonne reception satellite while (ss.available() > 0){ gps.encode(ss.read()); if (gps.location.isUpdated()){ cadre(); tft.setCursor(5, 44); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.print("Latitude :"); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(gps.location.lat(), 6); tft.setCursor(5, 58); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.print("Longitude :"); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(gps.location.lng(), 6); //affichage ecran date tft.setCursor(5, 7); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.print("date : "); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(gps.date.day()); tft.print(" "); tft.print(gps.date.month()); tft.print(" "); tft.print(gps.date.year()); String Date=String(gps.date.day())+(" ")+(gps.date.month())+(" ")+(gps.date.year()); //affichage ecran heure tft.setCursor(5, 20); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.print("heure : "); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(gps.time.hour()+1); tft.print(" "); tft.print(gps.time.minute()); tft.print(" "); tft.print(gps.time.second()); tft.print(" "); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.setCursor(3, 30); String Temps=String(gps.time.hour()+1)+(" ")+(gps.time.minute())+(" ")+(gps.time.second()); //affichage ecran altitude tft.setCursor(5, 80); tft.print("H m :"); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print (gps.altitude.meters(),0); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(" "); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.setCursor(5, 95); hmax(); tft.print("Hmax :"); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(maxhigh); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(" "); courbeh(); //affichage ecran vitesse tft.setCursor(5, 115); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.print("V act: "); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print (gps.speed.kmph(),0); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(" "); tft.setCursor(5, 130); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); vmax(); tft.print("vmax: "); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(maxspeed); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(" "); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); courbe(); //affichage ecran nombre de satellites tft.setCursor(5, 147); tft.setTextColor(ST7735_GREEN,ST7735_BLACK); tft.print("nombre de Sat : "); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(gps.satellites.value()); tft.setTextColor(ST7735_CYAN,ST7735_BLACK); tft.print(" "); // Horizontal Dim. of Precision (100ths-i32) Serial.print("HDOP = "); Serial.println(gps.hdop.value()); smartDelay(400); // Ecriture des donnes dans le fichier texte File data=SD.open("donnees.txt",FILE_WRITE); data.println(Date + " " + Temps + " " + String(gps.location.lat(), 6)+" "+String(gps.location.lng(), 6)+(" ")+String(gps.altitude.meters(),0)+(" ")+String(maxhigh)+(" ")+String(gps.speed.kmph(),0)+(" ")+String(maxspeed)); data.close(); } } } // delai pour une bonne recption static void smartDelay(unsigned long ms) { unsigned long start = millis(); do { while (ss.available()) gps.encode(ss.read()); } while (millis() - start < ms); } void cadre() { // affichage ecran //cadre tft.drawLine(0,0,130,0,ST7735_RED); tft.drawLine(0,1,130,1,ST7735_RED); tft.drawLine(0,158,130,158,ST7735_RED); tft.drawLine(0,142,130,142,ST7735_RED); tft.drawLine(0,141,130,141,ST7735_RED); tft.drawLine(0,107,130,107,ST7735_RED); tft.drawLine(0,108,130,108,ST7735_RED); tft.drawLine(80,108,80,140,ST7735_RED); tft.drawLine(81,109,81,140,ST7735_RED); tft.drawLine(80,70,80,108,ST7735_RED); tft.drawLine(81,70,81,108,ST7735_RED); tft.drawLine(0,159,130,159,ST7735_RED); tft.drawLine(0,0,0,156,ST7735_RED); tft.drawLine(1,1,1,157,ST7735_RED); tft.drawLine(127,0,127,156,ST7735_RED); tft.drawLine(126,0,126,156,ST7735_RED); tft.drawLine(0,35,130,35,ST7735_RED); tft.drawLine(0,36,130,36,ST7735_RED); tft.drawLine(0,70,130,70,ST7735_RED); tft.drawLine(0,71,130,71,ST7735_RED); } void courbe() { int nouvelleValeur; // converison vitesse max (350 km/h) en pixel nouvelleValeur = map((gps.speed.kmph()), 0, 150, 137, 110); // car l'cran a 64 pixels de haut x++; tft.drawPixel(x,nouvelleValeur,ST7735_CYAN); if (x>123) { x=80; tft.fillRect(82,110,43,30,ST7735_BLACK); } } void courbeh() { int nouvelleValeurh; // converison vitesse max (350 km/h) en pixel nouvelleValeurh = map((gps.altitude.meters()), 0, 1000, 104, 72); // car l'cran a 64 pixels de haut xh++; tft.drawPixel(xh,nouvelleValeurh,ST7735_CYAN); if (xh>123) { xh=80; tft.fillRect(82,72,43,35,ST7735_BLACK); } } void vmax() { // calcul vitese maximum speed1 = (gps.speed.kmph()); if ( speed1 > maxspeed) { maxspeed = speed1; } } void hmax() { // calcul altitude maximum high1 = (gps.altitude.meters()); if ( high1 > maxhigh) { maxhigh = high1; } } 

Skematik

Pencatat Data GPS Canggih: Pelacakan Real-Time, Ketinggian Puncak & Pemantauan Kecepatan

Proses manufaktur

  1. Bangun Sistem Deteksi Kebakaran Cepat dan Andalan dengan Samsung SAMIIO, Arduino UNO & Raspberry Pi
  2. Pemantauan Panel Surya Real-Time dengan Arduino: Sistem Akuisisi Data Hemat Biaya
  3. Buat Pemantau Energi & Pencatat Data Arduino yang Andalkan – Panduan Langkah demi Langkah
  4. Buat Animasi LCD dan Game Menarik dengan Arduino UNO
  5. Pencatat Suhu & Kelembaban Arduino dengan DHT11 dan Ethernet Shield
  6. Buat Kalkulator Dasar dengan Arduino UNO – Proyek Mudah
  7. Membuat Tampilan Persistence of Vision Portabel dengan Arduino UNO dan ATtiny85
  8. Modul GPS u-blox LEA-6H 02: Panduan Integrasi Arduino & Python
  9. Membuat Kubus LED 4x4x4 dengan Arduino Uno & 1Sheeld – Proyek LED Interaktif
  10. Python 3 ke Arduino UNO: Kontrol Perintah Mudah dan Demo LED