Progetti Arduino

Data logger

Come salvare i dati con un data logger - Progetti con Arduino

Descrizione

Quando usi un qualsiasi sensore con Arduino, puoi memorizzare tutti i dati rilevati in modo permanente. Questo ti dà la possibilità di elaborarli e visualizzarli in un secondo momento.

Un dispositivo in grado di farlo si chiama data logger e seguendo questo video scoprirai come costruirne uno sulla breadboard.

Tra gli esempi vedrai come salvare la luminosità rilevata tramite una fotoresistenza. Le informazioni le puoi memorizzare sulla scheda microSD, abbinando ad ogni valore la data e l’ora, recuperati con un modulo RTC.

Inoltre scoprirai come ottimizzare tutto, integrando la gestione degli interrupt e della sleep mode, in modo da risvegliare Arduino solo quando serve effettuare una misurazione.

Scarica le risorse

Progetto: Data logger

Schema

Componenti

Codice

#include <SD.h>#include <RTClib.h> #define SD_PIN 10#define LED_PIN 9#define SWITCH_PIN 3#define SENSOR_PIN A1#define FILE_NAME "datalog.csv" File file;RTC_DS3231 rtc; void setup() {  pinMode(SWITCH_PIN, INPUT);  pinMode(LED_PIN, OUTPUT);    while (!SD.begin(SD_PIN));    rtc.begin();  if (rtc.lostPower()) {    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));  }} void loop() {  int enable = digitalRead(SWITCH_PIN);    if (!enable) {    return;  }   DateTime now = rtc.now();  char dateBuffer[] = "DD/MM/YYYY hh:mm:ss";  log(now.toString(dateBuffer), analogRead(SENSOR_PIN));  delay(500);} void log(String data, int value) {  file = SD.open(FILE_NAME, FILE_WRITE);  if (!file) {    if (SD.begin(SD_PIN)) {      file = SD.open(FILE_NAME, FILE_WRITE);    }  }  if (file) {    digitalWrite(LED_PIN, HIGH);    file.println(data + "," + String(value));    file.close();    digitalWrite(LED_PIN, LOW);  }}
scarica il file

Progetto: Data logger (sleep mode)

Schema

Componenti

Codice

#include <SD.h>#include <RTClib.h>#include <avr/sleep.h> #define SD_PIN 10#define LED_PIN 9#define SWITCH_PIN 3#define RTC_WAKEUP_PIN 2#define SENSOR_PIN A1#define FILE_NAME "datalog.csv" File file;RTC_DS3231 rtc; void setup() {  pinMode(SWITCH_PIN, INPUT);  pinMode(LED_PIN, OUTPUT);  pinMode(RTC_WAKEUP_PIN, INPUT_PULLUP);   while (!SD.begin(SD_PIN));    rtc.begin();  if (rtc.lostPower()) {    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));  }  rtc.disableAlarm(1);  rtc.disableAlarm(2);  rtc.clearAlarm(1);  rtc.clearAlarm(2);  rtc.writeSqwPinMode(DS3231_OFF);} void loop() {  int enable = digitalRead(SWITCH_PIN);   if (!enable) {    sleep(SWITCH_PIN, RISING);  }            DateTime now = rtc.now();  char dateBuffer[] = "DD/MM/YYYY hh:mm:ss";  log(now.toString(dateBuffer), analogRead(SENSOR_PIN));   rtc.setAlarm1(rtc.now() + TimeSpan(2), DS3231_A1_Second);  sleep(RTC_WAKEUP_PIN, FALLING);  rtc.clearAlarm(1);} void log(String data, int value) {  file = SD.open(FILE_NAME, FILE_WRITE);  if (!file) {    if (SD.begin(SD_PIN)) {      file = SD.open(FILE_NAME, FILE_WRITE);    }  }  if (file) {    digitalWrite(LED_PIN, HIGH);    file.println(data + "," + String(value));    file.close();    digitalWrite(LED_PIN, LOW);  }} void sleep(int pin, int type) {  sleep_enable();  set_sleep_mode(SLEEP_MODE_PWR_DOWN);  attachInterrupt(digitalPinToInterrupt(pin), callback, type);  delay(200);  sleep_cpu();  detachInterrupt(digitalPinToInterrupt(pin));  sleep_disable();} void callback() {}
scarica il file

Altri componenti

Arduino Software Hero

Vuoi imparare a programmare Arduino, ma non sai da dove cominciare?

Iscriviti al corso online

Libri consigliati


Tutorial consigliati

E-commerce di elettronica

Sul nostro negozio online trovi tutti i componenti usati nei tutorial.
Inoltre hai un'ampia scelta di prodotti tra:

  • Arduino
  • Raspberry Pi
  • Sensori
  • Robotica
  • Componenti elettronici
  • Accessori

Compra online, ricevi comodamente a casa

Visita il negozio