Geo-Data Logger: Arduino + GPS + SD + versnellingsmeter te melden, tijd-stempel, en geo-tag sensorgegevens (5 / 10 stap)

Stap 5: De ARDUINO-programma dat het trekt allemaal samen


Dit programma leest de LS20031 GPS-ontvanger en slaat de NMEA-zinnen gegenereerd door de ontvanger als-is op de SD-kaart.  Het programma leest ook de X, Y, Z pinnen van de versnellingsmeter van de ADXL335 en slaat ze met elke regel NMEA opgeslagen.

Het programma van de Arduino dat ik ontwikkeld voor dit prototype gebruikt de SD-bibliotheek. Ik ben niet met behulp van TinyGPS om te interageren met de GPS-ontvanger of SoftwareSerial.  Ik had geen TinyGPS nodig voor dit project, omdat ik ben rauwe NMEA berichten opslaan op de SD-kaart. Wat betreft de SoftwareSerial-bibliotheek, na ik liep in een paar vraagstukken die tijdrovend om op te lossen dat heb ik besloten te houden aan de standaard seriële Arduino-bibliotheek.

Het nadeel van het niet gebruik van SoftwareSerial in dit project is dat de GPS-ontvanger zal worden met behulp van de Arduino RX/TX pinnen te lezen configuratieopdrachten en GPS gegevens te sturen naar de Arduino.  Dit betekent dat we hebben niet de Arduino seriële Monitor beschikbaar voor foutopsporing.

En wat nog belangrijker is, zullen we hebben de GPS-ontvanger TX pin van de Arduino Uno PIN0 (RX) verbreken voor het uploaden van een Arduino-programma. Als we de Arduino PIN0 (RX) niet in de GPS-ontvanger verbreken, zal het heel waarschijnlijk mislukken voor het uploaden van de Arduino programma vanaf de PC naar de Arduino vanwege seriële conflict. Ik vond dit als een kleine prijs voor de winsten in de codering van compactheid en verkort ontwikkelingscyclus.

De gegevens die worden opgeslagen door dit programma aan de SD zal uitzien in de onderstaande lijst. In theorie zal vijf regels voor GPS en sensor data per seconde worden gegenereerd. Dit logboek kan worden geïmporteerd als een CSV bestand in een groot aantal applicaties zoals spreadsheets of databases voor schrobben, analyses en grafieken:

  • 446,425,542, GPRMC, 093116.200, A, 3158.0155, N, 03551.5032, E, 18,78, 291.56, 111112,,, A * 54
  • 443,442,542, GPRMC, 093116.400, A, 3158.0159, N, 03551.5020, E, 18,78, 291.79, 111112,,, A * 50
  • 444,435,523, GPRMC, 093116.600, A, 3158.0163, N, 03551.5009, E, 18,77, 292.32, 111112,,, A * 53
  • 444,432,525, PRMC, 093116.800, A, 3158.0167, N, 03551.4998, E, 18,75, 292.88, 111112,,, A * 5A

// ====================== START PROGRAM ==========================
/*

PROJECT: Hobbel-O-Meter (Geo-Data Logger voor sensoren)

ONTWIKKELAAR: Hazim Bitar (techbitar op gmail dot com)

Beschrijving: Dit programma leest de ADXL335 versnellingsmeter sensor data (X, Y, Z) of een
sensorgegevens worden deze gegevens opgeslagen op een SD-kaart samen met geo-plaats en een datum/tijd-stempel
gegenereerd door de LS20031 GPS-ontvanger

LICENTIE: ben ik deze code plaatsen in het publieke domein

DATUM: 16 NOV 2012

*/

#include
#define LED 8 / / status LED voor SD operaties
#define BUFF_MAX 100 / / grootte van GPS & SD buffers

Bestand GPSlog;

VOID Setup
{
Serial.begin(4800); De LS20031 GPS-ontvanger moet worden ingesteld op 4800 voor programma om te werken

U kunt de instructies hieronder gebruiken om configuratieopdrachten te verzenden naar de GPS LS20031.
Maar voor dit te laten werken, moet de baud-rate zijn ingesteld op de LS20031 GPS ontvanger 4800.
U kunt het hulpprogramma MiniGPS 1.4 configureren of query de LS20031 GPS-ontvanger.
//
LS20031 OPDRACHTEN:
Serial.Print("$PMTK251,4800*27\r\n");  Set GPS baud-rate
Serial.Print("$PMTK314,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*2C\r\n"); RMC ingesteld op 5 correcties/seconde.
Serial.Print("$PMTK220,200*2C\r\n");  GPS vernieuwingsfrequentie bij 5Hz

pinMode (10, OUTPUT);   Per SD bibliotheek notities, moet pin 10 worden ingesteld voor de uitvoer van
pinMode (LED, uitvoer);

if (!. SD.begin(4)) {/ / SD-kaart gedetecteerd?
digitalWrite(LED,LOW);   status LED uitschakelen als SD detectie mislukt
terugkeer;
}
anders digitalWrite (LED, hoge); LED inschakelen als SD detectie OK is

GPSlog = SD.open ("GPS.log", O_CREAT | O_WRITE);  Open/toevoegen aan een bestand GPS.log
if (!. GPSlog) {/ / test als bestand kan worden geopend
digitalWrite(LED,LOW);     status-LED uitschakelen als bestand openen mislukt
terugkeer;
}
anders digitalWrite (LED, hoge);  status-LED inschakelen als bestand openen OK is
}

void loop
{
char inBuffer [BUFF_MAX];    buffer die wordt gebruikt voor het lezen van NMEA lijnen van GPS
byte outBuffer [BUFF_MAX];   buffer gebruikt om te schrijven NMEA lijnen naar SD-kaart
int sizeBuffer = 0;        teller van het aantal tekens per regel

HIER DECLAREREN WIJ MIN OF MEER ANALOGE SENSOR VARIABELEN
char an0 [4], an1 [4], an2 [4];  char variabelen analoge pin waarden opslaan. Totaal 6 pinnen van 0-5

terwijl (Serial.available() > 0) / / als seriële data beschikbaar via GPS
{
sizeBuffer = Serial.readBytesUntil ('\n', inBuffer, BUFF_MAX);  Lees een NMEA lijn van GPS tot einde van regel

DIT IS WAAR WIJ LEZEN SENSOR-WAARDES
Itoa (analogRead(A0), an0, 10);    X lezen en converteren van numerieke analoge pin naar char
Itoa (analogRead(A1), an1, 10);    // Y  ..
Itoa (analogRead(A2), an2, 10);    // Z  ..
for (int i = 0; ik < BUFF_MAX; i ++) outBuffer [i] = inBuffer [i];   CSV-bestand op SD maken
int j = 0;

DIT IS WAAR WE SENSORGEGEVENS SCHRIJVEN NAAR DE SD-BESTAND
Als (GPSlog) {}
GPSlog.print(an0);    ANALOG0 (X) naar SD schrijven
GPSlog.print (",");
GPSlog.print(an1);    ANALOG1 (Y) naar SD schrijven
GPSlog.print (",");
GPSlog.print(an2);    ANALOG2 (Z) naar SD schrijven
GPSlog.print (",");
Als u alleen NMEA uitvoer geregistreerd wilt, commentaar uit alle bovenstaande GPSlog.print verklaringen
GPSlog.write (outBuffer, sizeBuffer);  GPS NMEA uitvoer naar SD schrijven
GPSlog.print("\r\n");
GPSlog.flush();
digitalWrite (LED, hoge);  LED op houden zo lang als SD logboekregistratie werkt.
}
else {}
Als het bestand niet openen, uitschakelen LED
digitalWrite (LED, laag);  LED uitschakelen als schrijven naar bestand mislukt
}
}
}
// ================ END PROGRAM =====================

HOW TO ADD/REMOVE SENSOREN OM DE GEO-DATALOGGER

Dit programma zal lezen van maximaal 6 analoge sensoren en hun waarden opslaan op de SD-kaart. Er zijn twee plaatsen in het programma waarin u wijzigingen aanbrengen wilt aan uw behoeften:

1. HET DECLAREREN VAN VARIABELEN VAN DE SENSOR

In de sectie verklaring maken we tekstvariabelen die de geconverteerde numerieke waarden van de sensoren houden zal voordat we ze op de SD-kaart schrijven.  Wij verklaren hier, voor een maximum van 6 analoge sensoren. Desgewenst verkleinen

char an0 [4], an1 [4], an2 [4]; an3 [4]; an4 [4]; AN5 [4];

2. LEZING SENSOREN

In dit deel van het programma converteren we de numerieke sensor lezingen naar tekst voordat we ze op de SD-kaart schrijven. Het volgende codesegment in het programma toevoegen/verwijderen sensoren desgewenst wijzigen. U kunt maximaal 6 analoge sensoren lezen in dit programma hebben:

Itoa (analogRead(A0), an0, 10);
Itoa (analogRead(A1), an1, 10);
Itoa (analogRead(A2), an2, 10);
Itoa (analogRead(A3), an0, 10);
Itoa (analogRead(A4), an1, 10);
Itoa (analogRead(A5), an2, 10);

3. HET SCHRIJVEN VAN SENSOREN WAARDEN NAAR DE SD-KAART

Nadat we de sensor(en) hierboven lezen, schrijven we hun tekstwaarden op de SD-kaart. In het codesegment hieronder, we zijn het toevoegen van een komma tussen elke sensor waarde geschreven naar de SD-kaart, zodat we kunnen scheiden. Dit maakt het gemakkelijker om ze te importeren naar een spreadsheetprogramma als door komma's gescheiden tekst:

GPSlog.print(an0);    ANALOG0 op SD-kaart schrijven
GPSlog.print (",");
GPSlog.print(an1);    ANALOG1 op SD-kaart schrijven
GPSlog.print (",");
GPSlog.print(an2);    ANALOG2 op SD-kaart schrijven
GPSlog.print (",");
GPSlog.print(an0);    ANALOG3 op SD-kaart schrijven
GPSlog.print (",");
GPSlog.print(an1);    ANALOG4 op SD-kaart schrijven
GPSlog.print (",");
GPSlog.print(an2);    ANALOG5 op SD-kaart schrijven
GPSlog.print (",");

Gerelateerde Artikelen

Dubbel voltage generieke Data Logger Arduino

Dubbel voltage generieke Data Logger Arduino

ik heb al moeite met de bouw van een 'generieke' 'minimalist' datalogger Arduino voor geruime tijd. Als ik zeg 'generieke' Ik wil niet om het te bouwen voor een bepaalde sensor, liever willen gebruiken een verscheidenheid van hen - alleen of in combi
Arduino GPS/GSM Tracker (WatchDog ingeschakeld)

Arduino GPS/GSM Tracker (WatchDog ingeschakeld)

Wat is een GPS of GLONASS?Een GPS tracking-apparaat is een apparaat, normaal gedragen door een bewegend voertuig of persoon, die gebruikmaakt van het Global Positioning System te bepalen en de precieze locatie bijhouden, en dus die van de vervoerder,
MPU6050: Arduino 6 Axis versnellingsmeter + Gyro - GY 521 Test & 3D-simulatie

MPU6050: Arduino 6 Axis versnellingsmeter + Gyro - GY 521 Test & 3D-simulatie

Bent u op zoek naar uw eigen quadcopter drone of RC vliegtuig met Arduino maar weet niet hoe om de gyro werkend te krijgen? Misschien u al gekocht sommige modules 6 as MPU6050 (op de GY-521 breakout boards) alleen om uit te vinden dat ze niet zo eenv
Arduino GPS/GSM Tracker

Arduino GPS/GSM Tracker

Onze Gemeenschap kunt golfkarretjes op de openbare weg om vervuiling en congestie en mijn moeder gebruikt haar uitgebreid. Golfkarretjes hebben niet veel in de weg van veiligheid, dus voor gemoedsrust, ik dacht dat ik mijn eigen voertuig locatie syst
Arduino Project: Gyro/versnellingsmeter MPU-6050 en bestuurder van Adafruit Motorschild

Arduino Project: Gyro/versnellingsmeter MPU-6050 en bestuurder van Adafruit Motorschild

Hallo zijn jongens, als u van plan bent te gebruiken MPU 6050 Gyro/versnellingsmeter module of L329D adafruit moter stuurprogramma schild met Arduino voor uw volgende project dan u op de juiste plaats, omdat in het artikel ben ik een video delen met
Arduino GPS snelheidsmeter met een ks0108 - 128 x 64 GLCD (display)

Arduino GPS snelheidsmeter met een ks0108 - 128 x 64 GLCD (display)

Ik wilde het bouwen van een digitale snelheidsmeter voor mijn auto. Er was niets mis met de een al geïnstalleerd in mijn auto, ik wilde alleen maar een grote LCD display die zal worden geplaatst in een gemakkelijker positie - recht voor me hebben. En
Arduino GPS Datalogger

Arduino GPS Datalogger

wilt u sommige GPS-gegevens naar een SD-kaart met behulp van de Arduino te melden? Bezit u al een Sparkfun microSD schild en de GPS-module? Did u uitproberen de Adafruit Shield (hoewel het is geweldig en goedkoop), maar het stal alle van uw pins? Wil
Arduino GPS in iPhone Case - bouw je eigen! :)

Arduino GPS in iPhone Case - bouw je eigen! :)

Hi All,Het is ons wederom weer op de rails. Dit keer waren we denken aan iets cool dat kan worden gebruikt als een eenvoudige gadget dat anderen kan imponeren. Wat we hier hebben is een set van de schoonheid van schilden aangesloten op mijn favoriete
Arduino GPS Speedo compact + en meer

Arduino GPS Speedo compact + en meer

dus heb ik besloten om te bouwen van een apparaat dat ik zou kunnen in mijn auto gebruiken,een GPS speedo zag eruit als een goed idee.De delen die ik in deze build gebruikte:-(Fake) Arduino Nano v3 ($10,99).-MT3339-GPS-module.-Grafisch LCD + steker (
Eenvoudige Arduino GPS met OLED

Eenvoudige Arduino GPS met OLED

Dit kleine project laat zien hoe te bouwen van een eenvoudige GPS-ontvanger van een Arduino-bord (of soortgelijke), een OLED-display en een GPS-module met antenne.Stap 1: De onderdelen verzamelenGPS Bee met antenneXBee breakout board met headersArdui
Arduino GPS kaart navigatiesysteem

Arduino GPS kaart navigatiesysteem

Gebouwd op basis van Arduino UNO, GPS, SD card, TFT, GPS kaart navigatiesysteem is het verkrijgen van de real-time positie-informatie via GPS, te sturen naar UNO voor berekening, volgens de berekening resultaten, en samen met de kaart-bestand dat is
Discrete Data Logger

Discrete Data Logger

er is geen betere manier om te verbergen een geheime apparaat dan om het te houden binnen een grotere opvallende apparaat.Dat gezegd hebbende... In wezen, dit is een gids voor het maken van een data logging systeem voor gebruik met de microfoon breat
Data Logger Project

Data Logger Project

dit is een datalogger die ik heb voor mijn klas gemaakt. Ik kon niet het vinden van de instructies die ik kon gebruik te maken van de Arduino de lichte helderheid en de temperatuur opnemen. De temperatuur en de lichtwaarde weergegeven op het LCD-sche
Converteren gehele getal dat teken Arduino

Converteren gehele getal dat teken Arduino

Het omzetten van integer naar teken is een eenvoudig proces. Het gaat om het gehele getal eerst te wijzigen in een tekenreeks en vervolgens de tekenreeks te converteren naar een karakter array. De reden dat ik ben terbeschikkingstelling dit korte ber