NOTA! Questo sito utilizza i cookie e tecnologie simili.

Se non si modificano le impostazioni del browser, l'utente accetta. Cookies policy

Accesso Utenti

Top Panel
Mercoledì, 26 Luglio 2017

Da pochi giorni si è concluso il quinto stage di speleologia e chi meglio dei giovani allievi poteva descrivere meglio l'esperienza? Ecco di seguito ...
Leggi tutto
Il Gruppo Speleologico Lunense organizza sotto l'egida della Scuona Nazionale di Speleologia CAI il quarto stage di avvicinamento alla speleologia, ...
Leggi tutto
...Alessandro Gogna ha vissuto lo spirito e la pratica di entrambi questi momenti: <da che mondo è mondo ci sono stati tempi nuovi e sempre ci ...
Leggi tutto
Ero ancora in mezzo al mare per lavoro quando Gigi mi chiamò per questo nuova avventura. Croazia, la terra dei Balcani dove tra bianche spiagge ...
Leggi tutto
Il Gruppo Speleologico Lunense organizza sotto l'egida della Scuona Nazionale di Speleologia CAI il quarto stage di avvicinamento alla speleologia, ...
Leggi tutto
Cosa fare in caso di incidente in grotta, montagna, o in un semplice sentiero? Come aiutare un amico in difficoltà in attesa dell’arrivo dei ...
Leggi tutto
Lo scorso autunno una nutrita squadra di speleo si recò al Bombassei per il suo disarmo, per portare fuori i chilometri di corde che senza ...
Leggi tutto
Domenica 3 Luglio 2016 - Continuano le risalite al MilazzoRisalita al femminile la scorsa domenica all'abisso Franco Milazzo. Durante una veloce ...
Leggi tutto
Speleo Attitude alla fortezza "Firmafede" di Sarzana   23 – 24 aprile 2016. È il terzo anno che il GSLunense ha partecipato al raduno delle ...
Leggi tutto
L'Alpinismo Giovanile del CAI ospite del centro polifunzionale del Gruppo Speleologico Lunense Sabato 16 e Domenica 17 Aprile gli Accompagnatori, i ...
Leggi tutto
Prev Next

Data Logger con Arduino

Questo tutorial servirà a illustrare la realizzazione di un semplice data logger, low cost, per il monitoraggio ambientale di temperature  , nel nostro caso in grotta, e registrarle in una SD-Card. Il cuore del progetto è Arduino una piattaforma hardware low-cost programmabile, con cui è possibile creare circuiti "quasi" di ogni tipo per molte applicazioni, soprattutto in ambito di robotica ed automazione. Un particolare molto importante, ogni programma che si scrive su Arduino sarà naturalmente avviato a loop() finché non si toglie l'alimentazione dal dispositivo. Quando lo colleghiamo ad una fonte di alimentazione (ad esempio la USB del PC o anche una comunissima Batteria da 9V) si accende e avvia il programma caricato dall'IDE a loop infinito. Questo continua fino a quando non togliamo la batteria o stacchiamo il cavo.

 

Gli shields per Arduino sono schede aggiuntive che permettono alla piattaforma base di interagire con il mondo esterno. Sono disponibili modelli per un numero estremamente elevato di applicazioni. Per il nostro progetto è stato utilizzato per comodità un modulo (shield) aggiuntivo che mi permette di avere:

  • Un RTC DS1307 (Real Time Clock) con batteria tampone, mantiene il tempo meglio del vostro orologio.
  • Un card reader, i nostri output li andremo a scrivere su file.
  • Led, non avendo monitor i led saranno le nostre spie.
  • Fori per saldare i sensori o per usare una breadboard

Per il sensore è stato utilizzato LM335 simile ad un transistor in contenitore TO-92 a tre pin:

 

Arduino, non è solo hardware ma anche: software, documentazione e community. Sul sito ufficiale (arduino.cc) è possibile scaricare l’IDE che permette di programmare la propria Arduino via USB Il linguaggio di programmazione è (simil) C. All’interno dell’ide, vi sono molti codici di prova già funzionanti, essa include gran parte delle librerie di cui avremo bisogno. Altre sono presenti nei siti dei corrispettivi produttori hardware o dai siti personali di utenti che hanno condiviso le proprie. Installare librerie di terze parti è molto semplice (un paio di copy&paste): google ci aiuterà non poco. Nel nostro caso andremo ad utilizzare le librerie RTC ed SD suggerite sulla pagina di adafruit relative alla logger shield utilizzata: http://www.ladyada.net/make/logshield/download.html E’ importante documentarsi sempre e approfonditamente sull’hardware su cui andremo a lavorare. Datasheet, reference, librerie, documentazione varia e google vanno sempre consultati quando abbiamo hardware tra le mani. Cercare: “lm335 arduino” o “ldr arduino” sia su google testo che immagini ci darà tantissima documentazione… per non parlare poi del forum ufficiale. La lettura analogica dell’lm335 verrà fatta sul pin 0 (zero) della nostra Arduino.

Ed ora il codice:

#include <SD.h>
#include <SPI.h>

#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 RTC;

const int chipSelect = 10;
short i=0;

void setup()
{
  //seriale aperta a 9600 baud
  Serial.begin(9600);
  Serial.println("Initializing SD card...");

  //inizializziamo i pin 3 e 4 per i led rosso-verde
  //pin 10 riservato al card reader
  pinMode(10, OUTPUT);
  pinMode(3, OUTPUT); 
  pinMode(4, OUTPUT); 

  //se il modulo sd non viene correttamente inizializzato
  if (!SD.begin(chipSelect)) {
    //messaggio di errore sul nostro monitor seriale
    Serial.println("Card failed, or not present");

    for (i=0;i<10;i++) {
      //blinking del led rosso
      digitalWrite(3, HIGH);   
      delay(100);              
      digitalWrite(3, LOW);     
      delay(100);
    }
    return;
  }

  //se correttamente inizializzata...
  Serial.println("card initialized.");
  //blinking led verde
  digitalWrite(4, HIGH);   
  delay(500);              
  digitalWrite(4, LOW);

  //inizializziamo l'RTC
  Wire.begin();
  RTC.begin();
  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
}
void loop()
{
  //chiediamo il tempo all'RTC
  DateTime now = RTC.now();
  int voltAD=0;
  float valore=0;
  int analogPin=0;
  float sensor =0;  

  //aspettiamo 30 minuti
  delay(1740000);

  //leggiamo e convertiamo la temperatura dal pin 0 di arduino
// da kelvin a celsius
voltAD = analogRead(analogPin); valore = voltAD*5.0/1024.0; // 0.5 volt sensor = (valore/(2.98/298.15))-273.15; //stampa sulla seriale Serial.print(now.day()); Serial.print("/"); Serial.print(now.month()); Serial.print("/"); Serial.print(now.year()); Serial.print("\t"); Serial.print(now.hour(), DEC); Serial.print(":"); Serial.print(now.minute(), DEC); Serial.print(":"); Serial.println(now.second(), DEC); Serial.print("\t"); Serial.print("Temperatura: "); Serial.println(sensor); //apriamo in scrittura il file sulla sd File dataFile = SD.open("datalog.txt", FILE_WRITE); //Scriviamo: giorno mese anno - ORA:MINUTI:SECONDI - temperatura if (dataFile) { dataFile.print(sensor); dataFile.print("\t"); dataFile.print(now.day()); dataFile.print("/"); dataFile.print(now.month()); dataFile.print("/"); dataFile.print(now.year()); dataFile.print("\t"); dataFile.print(now.hour(), DEC); dataFile.print(":"); dataFile.print(now.minute(), DEC); dataFile.print(":"); dataFile.println(now.second(), DEC); //chiudiamo il file dataFile.close(); //blinking led verde digitalWrite(4, HIGH); delay(100); digitalWrite(4, LOW); } else { //errore nell'apertura del file o card rimossa Serial.println("error opening datalog.txt"); for (i=0;i<10;i++) { //blinkig led rosso digitalWrite(3, HIGH); delay(100); digitalWrite(3, LOW); delay(100); } } }

Il progetto prevede anche due led alle uscite 3 e 4 per verificare il corretto funzionamento del logger.

Per l'utilizzo in grotta sono state utilizatte delle batterie da 6 volt 10Ah per ottenere un 12 volt e 20Ah, considerando un consumo di 50mAh, abbiamo un'autonomia presunta di 400 ore

Sulla scheda SD avremo un output in un file di testo più o meno del seguente tipo:

15.08	21/12/2013	18:32:35
14.59	21/12/2013	19:1:35
14.10	21/12/2013	19:30:35
14.10	21/12/2013	19:59:35
13.62	21/12/2013	20:28:35
13.62	21/12/2013	20:57:35
13.62	21/12/2013	21:26:35
13.13	21/12/2013	21:55:35
13.13	21/12/2013	22:24:35
13.13	21/12/2013	22:53:35
13.13	21/12/2013	23:22:35
13.13	21/12/2013	23:51:35
13.13	22/12/2013	0:20:34
13.13	22/12/2013	0:49:34
13.13	22/12/2013	1:18:34
12.64	22/12/2013	1:47:34
12.64	22/12/2013	2:16:34
13.13	22/12/2013	2:45:34
12.64	22/12/2013	3:14:34
12.64	22/12/2013	3:43:34
12.64	22/12/2013	4:12:34
12.64	22/12/2013	4:41:34
12.64	22/12/2013	5:10:33
12.64	22/12/2013	5:39:33
12.64	22/12/2013	6:8:33
12.64	22/12/2013	6:37:33
12.64	22/12/2013	7:6:33
18.99	22/12/2013	7:35:33
13.13	22/12/2013	8:4:33
14.10	22/12/2013	8:33:33
13.62	22/12/2013	9:2:32

Questo file potrà essere elaborato in qualunque modo ad esempio con un foglio di calcolo, in questo caso di LIbreOffice.