Stap 5: De ARDUINO-programma dat het trekt allemaal samen
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 (",");