Ho provato a riconvertire un vecchio progetto in un GPS Datalogger
Lo shield aggiunto presenta un lettore SD Card ed un modulo DS1307 con il GPS collegato su Software Serial
I principali problemi:
1) pur acquisendo a 9600 dalla seriale ho scoperto che la scrittura della SD Card e' piu' lenta ..da questo la necessita' di fare un buffer. La scrittura di un blocco di byte e' molto piu' veloce di aprire il file in append, scrivere il byte, chiudere il file
2) il nome del file di acquisizione (che viene creato sulla base del tempo acquisito dall'RTC del DS1307) deve essere nel formato 8+3 del vecchio MSDOS (nel mio caso ho preferito usare due caratteri per mese, due carattteri per giorni, due caratteri per ora ed infine due caratteri per i minuti di inizio acquisizione)
3) questo semplice script segnala comunque che la memoria dell'Arduino e' ad limite critico
non ho ancora provato la funzione di deep sleep
--------------------------------------------------------------------------------------
// Low Power header
#include "LowPower.h"
// RTC headers
#include <Wire.h>
#include "RTClib.h"
// SD Card headers
#include <SPI.h>
#include <SD.h>
// Seriale dove invia il GPS
#include <SoftwareSerial.h>
RTC_DS1307 rtc;
const unsigned long SECOND = 1000;
const unsigned long HOUR = 3600 * SECOND;
unsigned long contatore = 0;
const unsigned int dim_buffer = 250;
byte SerialData[dim_buffer];
Sd2Card card;
SdVolume volume;
SdFile root;
const int chipSelect = 10;
char incomingByte = 0; // for incoming serial data
char filen[10];
String filename;
// impostazione della seriale secondaria del GPS
SoftwareSerial mySerial(8, 9); // RX, TX
void setup() {
Serial.begin(9600);
while (!Serial) {
}
// inizializzazione RTC
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
// Inizializzazione SD
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
while (1);
}
mySerial.begin(9600);
contatore = 0;
Serial.println("Inizializzazione terminata.");
}
void loop() {
DateTime now = rtc.now();
sprintf(filen, "%02d%02d%02d%02d.txt", now.month(), now.day(), now.hour(), now.minute());
String filename(filen);
delay(2500);
for (int i=0; i <= 100000; i++){
contatore = 0;
while (mySerial.available()) {
SerialData[contatore] = mySerial.read();
contatore++;
}
File dataFile = SD.open(filename, FILE_WRITE);
if (dataFile) {
for (int s=0; s < contatore; s++){
dataFile.print(char(SerialData[s]));
}
dataFile.close();
}
}
Serial.println("Finita acquisizione");
//entra in sleep mode
delay(HOUR);
//LowPower.idle(SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF,SPI_OFF, USART0_OFF, TWI_OFF);
}
Iscriviti a:
Commenti sul post (Atom)
Arduino logger low power
Alla fine ci sono riuscito La arduino MKR zero e' ormai da un mese che e' rimasta accesa sul tavolo...o meglio si attiva ogni minuto...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...
Nessun commento:
Posta un commento