Arduino Mega GPS med LCD og SD Logging: 9 trin

Arduino Mega GPS med LCD og SD Logging: 9 trin

Indholdsfortegnelse:

Anonim

Brug din Audino Mega som GPS-logger med et klart LCD-display og 5 funktionsknapper. En to-farvet LED bruges til at give statusinformation.

SD-kortet kan efterlades og læses ved hjælp af en kortlæser skitse, med udgang til den serielle skærm.

Dette instruerbare viser dig, hvordan et Adafruit Ultimate GPS-kort, der er baseret på MTK3339-chip, kan indstilles til at logge på et SD-kort.

LCD-skærmen er konfigureret til at vise:

  • Latitude og Longitude position
  • UK National Gid reference
  • Højde
  • Hastighed
  • Leje
  • Afstand tilbagelagt fra oprindelse (oprindelsen kan nulstilles)
  • Område fra oprindelse (Som kolk flyver)
  • Tid
  • Antal satellitter
  • Horisontal fortynding af position (HDOP)
  • Logging status

LCD-værdierne kan vises i metriske eller kejserlige enheder.

Det oprindelige logningskoncept blev udviklet fra:

Ladyada's logger

med Bill Greimans SdFat bibliotek

ved hjælp af MTK3339 chipset

forsyninger:

Trin 1: Krav

1) Arduino Mega 2560

The Sainsmart mega fungerer også.

2) LCD tastatur skærm http: //www.hobbytronics.co.uk/arduino-lcd-keypad-s …

Den sainsmart tastatur skærm fungerer også.

3) Adafruit Ultimate GPS Logger Shield http: //proto-pic.co.uk/adafruit-ultimate-gps-logge …

4) Arduino Stackable (Shield) Header Kit - R3 http: //www.hobbytronics.co.uk/cables-connectors/p …

Træk stifterne ud af stik med en enkelt rækkehoved og brug plastik til at skabe længder af afstandsstykker til de stabile skærmehovedkontakter.

5) Rød / grøn bi-farve fælles katode ledet med 3 / 5mm diameter

6) Micro SD hukommelseskort http: //www.hobbytronics.co.uk/4gb-microsd? Keyword = …

7) Modstand til LED-strømstyring (afhænger af LED'en)

Hvis LED'en kræver 10 ma @ 5V, ville modstanden være R = V / I = 5 / 0,010 = 500 ohm

8) Plastkasse

Jeg brugte 15cm * 10cm * 5cm og ville være gået mindre, hvis jeg kunne have hentet den.

9) 5,5 mm stikkontakt til Arduino http: //www.hobbytronics.co.uk/cables-connectors/dc …

9) Mono 3,5 mm phono stikkontakt

10) Panelafbryder (tændt / slukket passende for 5v 500mA)

11) Panel sikringsholder med 500mA hurtig sikring

12) Små Gummi Adhesive fødder (8 nødvendige)

13) 10mm nylon afstandsstykker med indvendig diameter 3.3mm http: //www.hobbytronics.co.uk/hardware/spacers-was …

Disse passer perfekt til lcd knapperne for at gøre forlængelser. Brug model beslutningstagere superlim til at vedhæfte. Påfør med en mikrodyse med forsigtighed!

14) 2-2.5mm bolte med møtrikker og spændeskiver (3 nødvendige) til at fungere som understøttende søjler til Arduino. En smal skrue 2 cm lang.

15) Lille længde på 5 mm dowel. Lille skrue til fastgørelse. 3-4 små plast vasker.

16) Hardboard til at passe til bunden af ​​boksen. Træ til at lave to baser understøtter boksens bredde.

17) Et batteri - Jeg brugte en 2 celle 500 mAH LIPO. Du skal bruge en LIPO oplader for det.

18) Bly for at matche batteriterminal type.

19) Et valgfrit UFA til SMA arial adapter kabel, hvis du planlægger at tilføje en ekstern arial.

GPS er meget følsom - jeg har ikke købt en arial endnu.

Trin 2: Kom godt i gang

Læs adafruit artiklen på den ultimative gps

En anden nyttig artikel http: //learn.adafruit.com/adafruit-shield-compat …

Monter 4 små gummifødder til basen af ​​Arduino Mega:

Dette giver en stabil monteringsoverflade.

Undgå monteringshullerne.

Monter de stabile stik til GPS-kortet:

Sørg for at bruge de yderste huller i GPS-kortet. Tjek, hvordan alt går sammen!

Jeg har delvist indsat brættet i arduinoen, så loddede de 2 endepinde i hver sektion med bordet opad.

Pas på at ikke overophedes bestyrelsen. Resten af ​​stifterne blev loddet med brættet fjernet.

Brug en længde af lige enkle Row Header-stik og træk stifterne ud for at få strimler af afstandsstykker. Monter afstandsstykkerne til hver af de 4 sektioner af stabile stik, du nu har på GPS-kortet.

Forudsat at du bruger en Mega, skær sporene til stifter 7, 8 og 10 som vist på skissen. Brug en skarp skalpel og skær forsigtigt. Tjek før du skærer!

Monter GPS-batteriet og SD-kortet:

Indsæt batteriet og noter polariteten.

Skub forsigtigt det forudformede SD-kort ind i spalten, indtil det holdes på plads. Overhold den korrekte justering.

Tilslut 3 ledninger til CCS, TX og RX :

Jeg bøjede ledningerne på en ekstra 6-vejs stabelbar stik gennem 90 grader og loddede den i rækken med CSS / TX / RX

Dette gør det muligt for mig at fjerne ledningerne let, hvis det er nødvendigt.

Alternativt loddele ledningerne direkte.

Tilføj bi-farve LED:

Kontroller databladet for din tofarvet LED og vælg en modstand for at give den korrekte strøm. Fastlæg orienteringen for lederne. LED'en skal være af den fælles katodetype.

Tilpas LCD-kortet midlertidigt på GPS-bordet - match hullerne forsigtigt!

Bøj leddene ved hjælp af pegede næsepliarer som støtte for at opnå profilen på skissen.

Ledningen skal rydde slutningen af ​​LCD-skærmen med 10-12 mm og nå 4-5 mm over den, så den bare kommer ud af sagen.

Fjern LCD'et, når du har etableret ledprofil og længde.

Lodd LED, modstand og 3 ledninger til undersiden af ​​GPS bordet.

Rød førte til pin 2, grøn til pin 3 og katode via modstand til 0V.

Sæt GPS-kortet i Arduino Mega:

Hvis du bruger en Sainsmart, vil der være 2 ledninger på hver side ikke i sokkel huller. Før montering bøjede jeg disse lidt udad og satte varmekrympeslanger på de udsatte stifter.

Tilslut de 3 ledninger til Arduino-RX til TX1, TX til RX1 og SSC til pin 32 (Kan være en anden, hvis du vil)

Indstil GPS-kontakten til SOFT SERIAL.

Slut LCD-kortet til GPS-kortet:

Find monteringshullet i lcd-kortet ved siden af ​​knapperne. Skær forsigtigt et stykke 5 mm trædyk for at understøtte knappens ende af skærmen under monteringshullet. Det skal hvile på bænken. Dette stopper LCD-rockingen, når knapperne trykkes.

Sæt nok plastikskiver i spalten for at forhindre lukningen. Skru træstangen på plads - brug et godt pilothul. Juster om nødvendigt højden med sandpapir / vasker. Stangen bør bare rydde adgangen til Mega-stikkontakten.

Trin 3: Lav en boks

1) Skær et stykke hardboard for at passe ind i bunden af ​​kassen - tillad mindst 2 mm bevægelse hele vejen rundt.

2) Placér Mega på basen - Carefully position for at tillade 15mm fra venstre kant af LCD-skærmen til venstre for kassen og 35mm fra forkanten af ​​LCD-skærmen til forsiden af ​​kassen. Markér og bor et monteringshul. Tænk bunden af ​​bunden. Monter en 2 mm møtrik og bolt fra bunden.

Udskift Arduino og sæt et andet hul i. Sørg for, at LCD'en er parallel med bunden.

Tilføj en tredje møtrik og bolt. Den endelige montering vil være en skrue fra toppen ind i nederste højre monteringshul.

Skær og monter monteringsboltene i længden, hvis det er relevant.

3) Placér mega på dens monteringer. Mål forsigtigt højden mellem boksens top og toppen af ​​LCD'et. Kontroller positionen på undersiden af ​​låget med hensyn til toppen af ​​LCD'et.

Lav to rektangulære løbere Den korrekte dybde placeres øverst på LCD'et 1-2 mm under lågets bund.

Højre runner skal være centreret på skruehullet til nederste højre monteringsposition.

Skru gennem bundens top for at sikre løbene. Undgå monteringshullet.

Kontroller lcdens højde igen med hensyn til låget - læg ikke låget på - ledningen bøjer!

4) Træk skruehullet i højre håndløb. Skru ned tæt på hullet til skruen. Skær en 10 mm nylon spacer for at understøtte nederste højre afsnit af brættet. Hold afstandsstykket på plads med skruen og lim afstandsstykket på plads.

5) Placer Mega'en med lcd'en parallelt med boksens forside. Monter basen med en forsænket skrue i hver løber fra ydersiden af ​​kassen. Omhyggelig positionering skal overholdes.

6) Mål LED'ens placering. Bor et lille pilothul i låget. Kontroller, at LED'en er justeret og åbner hullet til en klar størrelse for LED'en. Låget vil nu fortsætte.

7) Mål og skær hullet til LCD-skærmen - 1-2 mm mindre end LCD-skærmmonterings ekstern størrelse.

8) Fjern bunden og skær to bånd af bølgepap, så de passer til basisen af ​​løbene. Lim disse til løberne. Sæt derefter 2 huller gennem kortet for at matche skruehullerne. Sæt bunden på plads igen. Juster skruetrykket, indtil låget passer fint på toppen af ​​LCD'et (Ah 1-2 mm mellemrum!)

9) Bor de fem knaphuller:

Mal forsigtigt hvid tippex på toppen af ​​knapperne.

Mål positionen til den nederste venstre knap. Bor et pilothul i låget. Kontrollér, at hullet justerer - sæt låget på, skinn en lommelygte ovenfra - den hvide knap øverst skal vise.

Juster pilothullet, hvis det er nødvendigt, med en rundnålfil - kontrollér positionen og bor hullet ud til clearance diameteren for en 10 mm nylon spacer.

Gentag for 4 flere knapper. Rens tippexen af ​​med hvid spiritus.

10) Tilføj knappen Udvidelser til LCD-kortet:

Beskyt din arbejdsflade. Få nogle papirklæder klar. Fjern alle distraherende børn.

Kontrollér, at 10mm nylonafstandsstykkerne hviler pænt, når knappen trykkes. Hvis det er nødvendigt, forstørr hullerne, indtil der opnås en tæt interferenspasning. Du vil have brug for radiokontrolmodellerne cyanoacrylatlimmedium til tynd viskositet og nogle fine limdyser, også fra en radiokontrolmodelleverandør. Monter det første afstandsstykke lodret. Brug derefter den fineste dyse en hak af lim til indersiden af ​​bunden af ​​røret. Drej lcd-kortet om for at forhindre udsivning i kontakten. Vent et øjeblik, og følg de andre knapper efter samme procedure. Lad LCD'et vende om i 30 minutter for at lade limen hærde. I mellemtiden fjernes og kasseres den fine dyse. Rengør limflasken med væv og udskift limpladen.

Kontroller, at låget på kassen passer!

11) Bore og sæt opladeren i stikkontakten, skift sikringen og Arial-ledningen (Hvis nødvendigt)

12) Fjern skruen på plastikaflastningssæt fra 5,5 mm jævnstrømsstikket. Lod et par ledninger til terminalerne - rødt til spidsen. Brug krympeslange til at isolere og arrangere ledningerne i en kurve inden opvarmning. Fjernelse af belastningsaflastningen giver plads til træstøtten.

13 Tilslut ledningerne som vist i den indvendige visning af boksen.

Phono socket tip skal tilsluttes batteriets positive.

Den tilsluttede forbindelse på phono-stikket giver forsyningen til resten af ​​kredsløbet.

14) Skær hullet til USB-stikket og samle Arduino igen.

Medtag UFL-forbindelsen til arialkabelen, hvis det er nødvendigt - håndter forsigtigt.

Stram den endelige bordmonteringsskrue forsigtigt.

Kontroller ledningerne omhyggeligt. Jeg accepterer ikke ansvar for dette eller nogen anden funktion indeholdt i!

15) Tilslut batteriet og fastgør på plads med borrelås

Stick 4 små gummifødder til bunden af ​​kassen, og den er færdig.

Trin 4: Biblioteker og software

Du skal installere to biblioteker:

1) Download og installer adafruit gps bibliotek

2) Installer adafruit SD-kortbiblioteket:

Standardinstallationen fungerer ikke, medmindre et eksisterende SD-bibliotek fjernes fra din mappe Arduino libraries. På alle måder skal du gøre det og installere biblioteket fra

Eller hold dit eksisterende SD-bibliotek på plads og download SDADA.zip som jeg har ændret for at acceptere opkald til SDADA. Installer den i Arduino biblioteker SDADA På denne måde kan du stadig bruge det andet SD-bibliotek

Hvis du bruger SDADA-versionen, er den inkluderet i gps2.ino-skitsen med linjen:

#include SDADA.h

Hvis ikke, kommentér denne linje og brug: #include SD.h

Begge biblioteker har eksempel, som du kan teste GPS med.

Følgende biblioteker bør allerede installeres som standard:

LiquidCrystal.h

SoftwareSerial.h

SPI.h

avr / sleep.h

Download gps2.zip

Gem gps2.ino og gps_card.ino til deres egne mapper i din Arduino sketch bibliotek.

Åbn gps2.ino

Ændre følgende linje:

#include SDADA.h

at #include SD.h, hvis du ikke bruger mit ændrede SD-bibliotek

Denne ændring gælder også for gps_card.ino

Kontroller indstillingen for LCD-mærket:

I konfigurationsafsnittet:

boolean sain = true; // Sæt til sandt, hvis du bruger sainsmart LCD-skærm, falsk for en anden f.eks. DFROBOT-skjoldet.

Indstil sain-variablen i henhold til dit valg af lcd.

Bemærk at begge de angivne lcd boards bruger pin 10 til at indstille baggrundsbelysningen. Op-knappen gør det muligt at slukke for baggrundsbelysningen, hvilket sparer batteristrøm.

gps2.ino skal nu køre!

Knapperne:

en) Vælg ændrer den viste funktion på 1. linie i lcd:

Position og højde (decimal længdegrad og breddegrad, skiftevis med højde)

Position (decimal længdegrad og breddegrad)

Position i ordnance survey easting og northing koordinater plus OS ark nummer

Højde

Running total afstand fra oprindelse

Område fra Oprindelsen

Tid

b) Venstre skifter metrisk / imperial.

c) Ret skifter logning:

En L vises nederst til højre, når du logger

En! Markér i denne position angiver intet SD-kort eller kort er ikke tilgængeligt

d) Op skifter tilbage display. (Nyttig strømsparer.)

e) ned nulstiller afstanden til nul:

Dette indstiller den aktuelle position som oprindelse for rækkevidde. (Krågen flyver afstand til oprindelse.)

For at aktivere en knap - hold den nede, indtil ledningen slutter at blinke. Slip derefter.

Trin 5: Brug af SD-kortet i Gps2.ino

Opsætning af SD-kortet:

Standard chip select pin og den faktiske chipSelect pin skal indstilles til output.

SD-kortet er tilgængeligt med en begyndelseserklæring, der indeholder de ben, der bruges af kortet på GPS-kortet.

Kortets hastighed er indstillet til SPI_Full_SPEED.

I tilfælde af en fejl blinker ledningen et fejlsignal-detaljer i skitsehovedet.

Hvis fejlfinding er sat til sand i config, sendes også serielle skærm meddelelser.

Hvis kortet initialiseres ok, er variabel hascard sat til true.

// Sørg for, at standard chip select pin er indstillet til

// output, selvom du ikke bruger det:

pinMode (SS, OUTPUT); // default mega select pin

pinMode (chipSelect, OUTPUT);

digitalWrite (chipSelect, LOW);

// se om kortet er til stede og kan initialiseres:

hvis (! SD.begin (chipSelect, 11, 12, 13)) {

hvis (debug) Serial.println (F ("Card init. failed!"));

error (1);

} ellers {

hvis (! card.init (SPI_FULL_SPEED, chipSelect, 11, 12, 13)) {

fejl (2);

hvis (debug) {

Serial.println (F ("initialisering mislykkedes. Ting at kontrollere:"));

Serial.println (F ("* er et kort indsat?"));

Serial.println (F ("* Er din ledning korrekt?"));

Serial.println (F ("* skiftede du chipSelect pin for at matche dit skærm eller modul?"));

}

}andet{

hascard = true;

hvis (debug) Serial.println (F ("Kort init. lykkedes"));

}

}

Valg af SD-filen til Logging:

Når højre hånd-knappen trykkes subroutine openfile hedder.

Dette inspicerer GPS-mappen på udkig efter et ubrugt filnavn i sekvensen GPSLOGnn.TXT, hvor nn = 0 til 99.

Hvis en fil er fundet, skal du sætte foundit til true.

hvis (! hascard) {return;} // fortsæt ikke, hvis et kort ikke eksisterer eller ikke er tilgængeligt

byte i;

char filnavn 18;

strcpy (filnavn, "/gps/GPSLOG00.TXT");

filnavn 17 = char (0);

boolean foundit = false;

for (i = 0; i <100; i ++) {

filnavn 11 = '0' + i / 10;

filnavn 12 = '0' + i% 10;

hvis (! SD.exists (filnavn)) {

foundit = true; pause;

}

}

Hvis alle filnavne er i brug, vil foundit være falsk, og brugeren bliver spurgt, om de første 50 skal slettes. Hvis dette ikke er ok, er hascard sat til falsk, så der ikke er nogen yderligere forsøg på at logge.

hvis (! foundit) {

int denne knap = -1;

lcd.clear ();

lcd.print ("Dir full-Erase?");

lcd.setCursor (0,1);

lcd.print ("Sel: Ok Right: No");

gøre {

thisbutton = read_LCD_buttons ();

} mens (thisbutton == btnNONE);

lcd.clear ();

hvis (thisbutton == btnSELECT) {

lcd.print ("Sletning");

for (i = 0; i <50; i ++) {

filnavn 11 = '0' + i / 10;

filnavn 12 = '0' + i% 10;

hvis (SD.exists (filnavn)) SD.remove (filnavn);

}

i = 0;

filnavn 11 = '0' + i / 10;

filnavn 12 = '0' + i% 10;

}andet{

fejl (4);

hascard = false;

Vend tilbage;

}

}

Filen kan åbnes:

I tilfælde af en fejl, udføres serielle oplysninger, og fejlkoden signaleres via statuslederen.

Hvis det lykkes, udskrives den første linje i filen. Dette er kolonneoverskrifterne.

Bemærk brugen af ​​logfile.flush (). Dette sikrer, at al output sendes til SD-filen, inden den fortsættes.

logfile = SD.open (filnavn, FILE_WRITE);

hvis (! logfile) {

hvis (debug) {

Serial.print ("Kunne ikke oprette");

Serial.println (filnavn);

}

error (3);

hascard = false;

}andet{

logging = true;

myfile = filnavn;

logfile.println (pad ("Time", 13) + lpad ("Date", 9) + lpad ("Longitude", 10)

+ lpad ("Latitude", 10) + lpad ("Højde", 9) + "m" + lpad ("Geoid", 9) + "m" + lpad ("Speed", 7) + "mph Bearing");

logfile.flush ();

hvis (debug) {Serial.print ("Skriver til"); Serial.println (filnavn);}

}

LPAD og pad er tekstpolstring funktioner:

String lpad (String temp, byte L) {

byte mylen = temp.length ();

hvis (mylen> (L - 1)) returnerer temp.substring (0, L-1);

for (byte i = 0; i <(L-mylen); i ++) temp = "" + temp;

retur temp;

}

String pad (String temp, byte L) {

byte mylen = temp.length ();

hvis (mylen> (L - 1)) returnerer

temp.substring (0, L-1);

for (byte i = 0; i <(L-mylen); i ++) temp = temp + "";

retur temp;

}

Skrive til filen:

Hovedlusen læser GPS'et og udsender værdierne til en fil, hvis logning finder sted. (En "L" vises nederst til højre på LCD-skærmen.)

Værdierne er formateret til at producere faste bredde kolonner.

Funktion dtostrf (float, w, dp, buf) er en Arduino bibliotek funktion, der tager en float variabel og konverterer den til en streng med bredde w med dp decimalpoint. buf er en char buffer, som skal være stor nok til at håndtere konverteringen.

Jeg definerede buf med "char buf 20;" i skitseoverskriften.

Filen spyles, inden du fortsætter.

ogfile.print (pude (mytime, 13)); // indeholder mellem sekunder

logfile.print (pude (myyear, 9));

logfile.print (dtostrf (længdegrad, 10,5, buf));

logfile.print (dtostrf (breddegrad, 10,5, buf));

logfile.print (dtostrf (altitudem, 9,1, buf)); logfile.print ("m");

logfile.print (dtostrf (geoid, 9,1, buf)); logfile.print ("m");

logfile.print (dtostrf (speedmph, 7,2, buf)); logfile.print ("mph");

logfile.print (dtostrf (overskrift, 6,1, buf)); logfile.println ("deg");

logfile.flush ();

Lukning af filen:

Hvis kortet ikke er tilgængeligt, skal du ellers skylle alle resterende output til kortet, inden du lukker filen.

void closefile () {

hvis (! hascard) returneres

logfile.flush ();

logfile.close ();

logging = false;

hvis (debug) Serial.println ("File" + myfile + "closed");

}

Trin 6: Læsning af GPS

Indstil biblioteker i scriptoverskriften:

#include Adafruit_GPS.h

#include SoftwareSerial.h

HardwareSerial mySerial = Serial1;

Adafruit_GPS GPS (& mySerial);

Vælg gps i opstart:

pinMode (chipSelect, OUTPUT);

digitalWrite (chipSelect, LOW);

GPS.begin (9600);

// Indstil opdateringshastigheden // 1Hz fungerer godt og lader tiden gå til at logge GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); // alternativt 0,1 Hz, 5 Hz og 10 Hz opdateringshastighed

// RMC (anbefalet minimum): GGA (fix data) inklusive højde GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA);

// Sluk opdateringer om antennestatus, hvis firmwaren tillader det

GPS.sendCommand (PGCMD_NOANTENNA);

Læs GPS'et ved afbrydelse med det formål at ekko til den serielle skærm.

Bemærk, at dataene faktisk tolkes i Adafruit_GPS.h-bibliotekskoden, ikke i denne afbrydelsesrutine.

// 1ms Afbryd på timer0 for at lette gps data echo-

hvis GPSECHO = true useInterrupt (true); // læs input ved afbryd hvis true

Det er det! Loop og læs:

GPS.newNMEAreceived () er sat til sand, hvis der er kommet nye GPS-oplysninger.

GPS.parse (stringptr) er sat til sand, hvis værdier er blevet adskilt (parseret) fra de rå GPS-tekststrenger.

GPS.fix er sat til sand, hvis GPS rapporterer har en rettelse på den position.

Hvis GPS'en har en fix, ekstraheres værdierne for position, højde, hastighed, leje, tid, geoidheight, satellitter og hdop.

Position returneres i decimal længdegrad og breddegrad, hastighed i knob, afstand i meter.

hvis (GPS.newNMEAreceived ()) {

char * stringptr = GPS.lastNMEA ();

hvis (! GPS.parse (stringptr)) returnerer; // gå rundt hvis falsk

hvis (GPS.fix) {

digitalWrite (ledGreen, HIGH);

fast = true; // Husk stat, hvis det ændrer midtprocessen

mymillis = GPS.milliseconds;

myseconds = GPS.seconds;

mytime = String (GPS.hour) + ":" + String (GPS.minute) + ":";

logtime = mytime;

logtime + = String (int (myseconds + mymillis / 1000 + 0,1)); // runde op hvis inden for 0,1 S

Mytime + = String (myseconds + mymillis / 1000); // fuld tilbagekaldt tid

myyear = String (GPS.day) + "/" + String (GPS.month) + "/";

lcdyear = myyear; theyear = String (GPS.år);

myyear + = theyear;

mylen = theyear.length ();

lcdyear + = theyear.substring (mylen-1, mylen); // sidste ciffer kun for at passe ind

breddegrad = GPS.latitudeDegrees;

længdegrad = GPS.longitudeDegrees;

altitudem = GPS.altitude;

altitudef = altitudem * fconvert;

speedknots = GPS.speed;

speedmph = speedknots * 1.15077945;

speedkph = speedknots * 1,85200;

overskrift = GPS.angle;

satellitter = GPS.satellites;

geoid = GPS.geoidheight;

hdop = 7-int (GPS.HDOP + 0,5);

Trin 7: UK National Grid Position og Distance Traveled

1) Konverteringsposition i decimal længdegrad og Latitude til UK ordnance survey meter enheder er beskrevet i en pdf, der leveres af ordnanceundersøgelsen:

http: //www.ordnancesurvey.co.uk/docs/support/guide …

Page 40 gør ikke lys læsning, men giver de nødvendige matematikker.

Min subroutine void ordnance (float phi, float lamda) implementerer beregningen.

De returnerede værdier er nøjagtige til + - 0,1 for easting og + - 0.02 for northing. Denne mangel på præcision skyldes den begrænsede nøjagtighed af Arduino float aritmetik. Arduino understøtter kun "6-7" signifikante decimaler.

Ordnance survey sheet nummeret kan udvindes fra det mest signifikante ciffer i længde- og breddeværdierne. Funktionsstreng NE2NGR (float & east, float & north) udfører ekstraktionen og krediteres til:

Alex http: //www.codeproject.com/Articles/13577/GPS-Der …

2) Afstandsrejse kan beregnes ud fra forskellen i to breddegrader og længdeværdier.

For små forskelle skal estimatet være mistænkt på grund af den manglende præcision, der er forbundet med en gps fix. Begrænsningen af ​​Arduino floating point decimalsupport påvirker også den overordnede nøjagtighed. På trods af dette er kumulative beregninger af tilbagelagte distanceforbrug rimelige. Sortimentet til oprindelsen er ret præcist, da det kun indebærer forskellen mellem 2 steder.

Oprindelsen til afstandsberegninger kan genindstilles ved hjælp af den nederste knap.

Ved lave hastigheder prøver jeg positionerne over en tre sekunders periode for at øge sandsynligheden for, at forskellen i position er større end usikkerhedsafstanden i GPS-løsningen. Ved højere hastigheder reducerer jeg tiden mellem de samplede positioner. Denne gang styres af den variable dlimit.

Subrutinen float distance_between (float lat1, float long1, float lat2, float long2) returnerer afstanden.

Det oprindelige arbejde krediteres Maarten Lamers.

Trin 8: Læsning af SD-kortet ved hjælp af Gps_card.ino

Denne skitse forudsætter, at du har tilsluttet en seriel skærm, fortrinsvis en med evnen til at kopiere tekst.

Desværre vises standard Arduino Serial Monitor ikke tilbyde denne funktion. (Jeg skrev min egen.)

CoolTerm af Roger Meier gør jobbet

Hvis du bruger standard SD bibliotek opsætning, gør ændringen:

#include SD.h i stedet for #include SDADA.h

Sæt Serial Monitor til en baud på 115200.

Når skitsen kører, vil den teste SD-kortet og vis kortstørrelsen og detaljerne i GPS-mappen.

Indtast navnet på en fil og det vil blive åbnet og vist.

Individuelle filer kan slettes ved hjælp af #delet filnavn

Dataene er præsenteret i kolonner med fast bredde med mellemrumsafbrydere.

Forudsat at du kan kopiere teksten, er det meget ligetil at bruge værdierne i Excel.

Trin 9: Specifikationer

Det LCD-skærm har en valgbar øverste linje og a lavere linje bestående af:

Antal satellitter

Hastighed

HDOP - Vandret fortynding af position

Leje

Logning Status:

  • "L" - Logging
  • "" - Ikke logning
  • "!" - SD-kort ikke til stede eller ikke tilgængeligt

Den øverste linje:

Latitude og Longitude position i grader, skiftevis med højde

Breddegrad og længdegrad i grader

UK National Gid reference

Højde

Afstand tilbagelagt fra oprindelse (Oprindelsen kan nulstilles)

Område fra oprindelse

Tid

Bemærkninger:

LCD-værdier i metrisk eller imperial.

For LCD-skærmen vises en hastighed på <= cutoff (0.65) mph som 0

Antallet af satellitter vises som en lodret bjælke i nederste venstre hjørne. Det største antal, der kan vises, er 8, hvorefter linjen er fuld.

HDOP er angivet i den nederste centerbevægelseslinje. HDOP angiver spredningen af ​​observerede satellitter. Øget spredning øger nøjagtigheden, og HDOP nummeret falder. HDOP værdier på 1 er meget gode!

En HDOP-præcision på <0,5 vises med en fuld stang.

En HDOP på 0,5 til 1,5 (1) vises med 7 bar.

En HDOP på 6 er vist med 1 bar.

En HDOP med> 6 viser ingen søjler.

Knapper:

a) Vælg ændringer lcd 1. linje mellem

højde / position (længdegrad og breddegrad)

position (Long & Lat)

position i ordnanceundersøgelse x, y koordinater

højde

tid

b) Venstre skifter metrisk / imperial

c) Højre skifter logning

d) Opkaldsknappen vender tilbage (Nyttig strømsparer)

e) Ned nulstiller afstanden til nul og indstiller den aktuelle position som oprindelse for rækkevidde (Kråden flyver afstand til oprindelse)

For at aktivere en knap - hold nede, indtil ledningen stopper med at blinke. Slip derefter.

LED indikator:

1 sekunders interval Blinker rødt - Nej Fix

1 sekunders interval Blinker grønt - Fix

Fire korte grønne blink - Der er trykket på en knap

1 rød flash gentaget 5 gange - Fejl 1: SD Card init mislykkedes

2 røde blink gentages 5 gange - Fejl 2: SD Card fuld hastighed init mislykkedes

3 røde blink gentages 5 gange - Fejl 3: Kan ikke oprette logfilen

4 røde blink gentages 5 gange - Fejl 4: 100 filer i logmappe og slet ikke

Det kumulative distansestimat vil have kumulative afrundingsfejl fra flere en sekunders intervallepositioner.

Sortimentet bliver mere præcist, da det kun bestemmes af to steder.

Bemærk at præcisionen af ​​Ordnance-undersøgelsesværdien er begrænset - Arduino float værdierne holder 6-7 signifikante decimaler. Konverteringsformlen indebærer mange beregninger, og afrundingsfejlene har kumulative effekter. I sidste ende er præcision begrænset af den returnerede synd, cos og tan værdier.

Easting værdien synes at være nøjagtig til + - 0,1

Norden til + - 0,02

Til sammenligning vises værdierne for længde- / breddegrad nøjagtigt til + - 0.00001

Tilslutning af en ufl til SMA-bly påvirker ikke ydeevnen. Kun en aktiv arial (1575.42MHz) ville blive genkendt af GPS-chip.