Geo Data Logger: Arduino + GPS + SD + Accelerometer att logga, tidsstämpel och geo-tag sensordata (5 / 10 steg)
Steg 5: ARDUINO programmet som drar det alla tillsammans
Arduino används jag utvecklat för denna prototyp SD bibliotek. Jag använder inte TinyGPS för att interagera med GPS-mottagare eller SoftwareSerial. Jag behövde inte TinyGPS för det här projektet eftersom jag sparar rå NMEA meddelanden till SD-kortet. Som för SoftwareSerial biblioteket, efter jag sprang in på några frågor som var tidskrävande att lösa bestämde jag mig att hålla sig till Arduino seriell standardbiblioteket.
Nackdelen med att inte använda SoftwareSerial i detta projekt är att GPS-mottagaren kommer att använda den Arduino RX/TX stift att läsa kommandon och skicka GPS-data till Arduino. Detta innebär att vi inte har den Arduino Serial Monitor tillgänglig för felsökning. Viktigare, måste vi koppla Arduino Uno's PIN0 (RX) från GPS-mottagaren TX pin innan du lägger upp en Arduino program. Om vi inte koppla Arduino's PIN0 (RX) från GPS-mottagaren, inte det mest troligt ladda upp det Arduino programmet från datorn till Arduino på grund av seriell konflikten. Jag fann detta vara ett litet pris för vinsten i kodning kompakthet och förkorta utvecklingscykeln.
Data sparas genom detta program att SD kommer att se ut i listan nedan. Teoretiskt, fem rader med GPS och sensor data genereras per sekund. Den här loggen kan importeras som en kommaavgränsad fil till en mängd applikationer som kalkylblad eller databaser för att skura, analys och kartläggning:
- 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 ==========================
/*
PROJEKT: Bump-O-Meter (Geo Data Logger för sensorer)
FÖRFATTARE: Hazim Bitar (techbitar på gmail punkt com)
Beskrivning: Detta program läser ADXL335 accelerometer sensordata (X, Y, Z) eller någon
sensordata sparar sedan dessa data till ett SD-kort tillsammans med geografiska och ett datum/tidsstämpel
genereras av LS20031 GPS-mottagaren
LICENS: Jag är att placera denna kod i det offentliga rummet
DATUM: 16 NOV 2012
*/
#include
#define LED 8 / / status LED för SD
#define BUFF_MAX 100 / / storleken på GPS & SD buffertar
Filen GPSlog;
void setup()
{
Serial.BEGIN(4800); LS20031 GPS-mottagaren måste anges till 4800 för program för att arbeta
Uttalanden nedan kan du skicka kommandon till LS20031 GPS.
Men om detta ska fungera, baudhastighet måste anges på LS20031 GPS-mottagaren till 4800.
Verktyget MiniGPS 1.4 kan du konfigurera eller fråga LS20031 GPS-mottagaren.
//
LS20031 KOMMANDON:
Serial.Print("$PMTK251,4800*27\r\n"); Ställ in GPS baud-hastighet
Serial.Print("$PMTK314,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*2C\r\n"); Inställd på RMC 5 fixar/sekund.
Serial.Print("$PMTK220,200*2C\r\n"); GPS uppdateringshastighet på 5Hz
pinMode (10, OUTPUT); Per SD bibliotek anteckningar, måste stift 10 anges till utgång
pinMode (LED, OUTPUT);
IF (!. SD.begin(4)) {/ / SD-kort har upptäckts?
digitalWrite(LED,LOW); stänga av status-LED om SD upptäckt misslyckas
hemkomst.
}
annat digitalWrite (LED, hög); Aktivera LED om SD upptäckt är OK
GPSlog = SD.open ("GPS.log", O_CREAT | O_WRITE); Öppna/Lägg till en fil GPS.log
IF (!. GPSlog) {/ / test om filen kan öppnas
digitalWrite(LED,LOW); stänga av status LED om öppna filen misslyckas
hemkomst.
}
annat digitalWrite (LED, hög); slå på status-LED om öppna filen är OK
}
void loop()
{
char inBuffer [BUFF_MAX]; buffert används för att läsa NMEA linjer från GPS
byte outBuffer [BUFF_MAX]; buffert används för att skriva NMEA linjer till SD-kort
int sizeBuffer = 0; räknaren för hur många tecken per rad
HÄR FÖRKLARAR VI MER ELLER MINDRE ANALOG SENSOR VARIABLER
char an0 [4], an1 [4], an2 [4]; char variabler för att lagra analoga pin värden. Totalt 6 pins från 0-5
medan (Serial.available() > 0) / / om seriella data från GPS
{
sizeBuffer = Serial.readBytesUntil ("\n", inBuffer, BUFF_MAX); läsa en NMEA linje från GPS fram till slutet av raden
DET ÄR DÄR VI LÄSER SENSOR VÄRDEN
itoa (analogRead(A0), an0, 10); X läsa och konvertera numeriska analoga pin till röding
itoa (analogRead(A1), an1, 10); // Y ..
itoa (analogRead(A2), an2, 10); // Z ..
för (int jag = 0; jag < BUFF_MAX; i ++) outBuffer [i] = inBuffer [i]; skapa CSV-fil på SD
int j = 0;
DET ÄR HÄR VI SKRIVER SENSORDATA TILL SD-FILEN
om (GPSlog) {
GPSlog.print(an0); Skriv ANALOG0 (X) till SD
GPSlog.print (",");
GPSlog.print(an1); Skriv ANALOG1 (Y) till SD
GPSlog.print (",");
GPSlog.print(an2); Skriv ANALOG2 (Z) till SD
GPSlog.print (",");
Om du bara vill NMEA utdata inloggad, kommentera ut alla ovan GPSlog.print uttalanden
GPSlog.write (outBuffer, sizeBuffer); skriva GPS NMEA utdata till SD
GPSlog.print("\r\n");
GPSlog.flush();
digitalWrite (LED, hög); Hålla LED på så länge SD loggning fungerar.
}
annat {
om filen inte öppnas, Stäng LED av
digitalWrite (LED, låg); Inaktivera LED om skrivning till filen misslyckas
}
}
}
// ================ END PROGRAM =====================
HUR TILL TILLÄGGA/FLYTTA SENSORER TILL GEO DATALOGGER
Detta program kommer att läsa upp till 6 analoga sensorer och spara deras värden till SD-kortet. Det finns två platser i programmet där du behöver göra ändringar som passar dina behov:
1. DEKLARERA SENSOR VARIABLER
I avsnittet förklaring skapa vi textvariabler som kommer att hålla de konverterade numeriska värdena av sensorerna innan vi skriver dem till SD-kortet. Vi är här, att förklara för högst 6 analoga sensorer. Minska efter behov.
char an0 [4], an1 [4], an2 [4]; an3 [4]; an4 [4]; AN5 [4];
2. BEHANDLINGEN SENSORER
I denna del av programmet konvertera vi numeriska sensorns avläsningar till text innan vi skriver dem till SD-kortet. Ändra nästa kod segment i programmet med Lägg till/ta bort sensorer som behövs. Du kan ha upp till 6 analoga sensorer läsa i detta program:
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. SKRIVA SENSORER VÄRDEN TILL SD-KORTET
Efter att vi läst givare ovan, vi skriver deras textvärden till SD-kortet. Inom segmentet koden nedan, vi lägger till ett kommatecken mellan varje sensor värde skrivs till SD-kortet så att vi kan skilja dem. Detta gör det lättare att importera dem till ett kalkylprogram som semikolonavgränsad text:
GPSlog.print(an0); skriva ANALOG0 till SD-kort
GPSlog.print (",");
GPSlog.print(an1); Skriv ANALOG1 till SD-kort
GPSlog.print (",");
GPSlog.print(an2); Skriv ANALOG2 till SD-kort
GPSlog.print (",");
GPSlog.print(an0); skriva ANALOG3 till SD-kort
GPSlog.print (",");
GPSlog.print(an1); skriva ANALOG4 till SD-kort
GPSlog.print (",");
GPSlog.print(an2); skriva ANALOG5 till SD-kort
GPSlog.print (",");