Come aggiungere un registratore di dati della scheda SD a un progetto Arduino

I progetti Arduino possono variare ampiamente dai responsabili della produzione di birra domestica alle stazioni meteorologiche fino alla domotica avanzata. Spesso vorrete registrare i dati da questi progetti. In questo tutorial ti mostrerò come integrare una scheda SD e un modulo di orologio in tempo reale in un progetto per consentire la registrazione dei dati con timestamp.

Raccogli i componenti, gli strumenti e le librerie

componenti

  • Tagliere standard
  • Arduino questo tutorial usa Nano, ma la maggior parte dei modelli dovrebbe funzionare
  • Scheda di sblocco della scheda MicroSD
  • Scheda MicroSD
  • Orologio in tempo reale
  • Sensore di umidità di temperatura
  • 22 calibro collegamento Gauge (più colori)
  • Batteria a 9 V con cavi

Utensili

  • Saldatore
  • Saldare
  • Strumento di terza mano
  • Computer con IDE Arduino per la programmazione
  • Cavo USB appropriato per Arduino-Mini B per Nano

biblioteche

Scarica le seguenti librerie Arduino dai loro repository. Per ogni libreria, decomprimere la cartella in Arduino / librerie cartella. Rinominare ciascuna delle cartelle in modo che siano SD, RTCLib, e DHT rispettivamente. L'IDE Arduino non può gestire i trattini nei nomi dei file.

  • Adafruit SD library (wrapper per la libreria sdfat) per lavorare con la SD Card
  • Adafruit RTCLib forchetta per leggere e impostare l'ora dell'orologio in tempo reale
  • Adafruit DHT sensor Library per leggere la temperatura e l'umidità

Una parola sulla scelta di un data logger

I data logger sono disponibili come elementi discreti e possono variare da $ 35 a centinaia. La scelta del logger giusto è una decisione importante nel progetto. Sarebbe un'enorme delusione recuperare un progetto di osservatori di acque profonde per scoprire che i dati dell'ultimo anno sono stati corrotti. 

Come per tutti i progetti, è necessario considerare il consumo di energia, ma ci sono molte altre funzionalità di cui si desidera essere a conoscenza quando si seleziona un data logger per un particolare progetto.

Condizioni ambientali

Forse il progetto sarà in condizioni difficili. Scosse fisiche, temperature elevate, umidità e altre condizioni influenzeranno la scelta. Sono disponibili logger in grado di resistere a condizioni diverse. Assicurati di sapere dove vivranno il tuo progetto e il tuo logger e scegli la tecnologia giusta.

Tipo di interfaccia

Esistono logger seriali che parlano praticamente di qualsiasi protocollo, I2C, RS232, CAN, SPI e altro. Il protocollo dell'interfaccia influenzerà la velocità di scrittura dei dati del registro. Assicurati di selezionare il logger che si adatta alla tecnologia del progetto e ai requisiti di velocità di scrittura.  

Log Retrieval

Non va bene se i dati registrati non possono essere recuperati. È il proverbiale albero che cade senza nessuno intorno a sentirlo. Assicurati di aver compreso in che modo i dati devono essere recuperati dal registratore che stai selezionando. In alcuni casi di chip IC logger discreti, sarà necessario creare un'interfaccia esterna che è possibile utilizzare per estrarre i dati dal chip.

Tempo

Alcuni logger eseguono semplicemente il dump dei dati mentre altri hanno timestamp incredibilmente accurati per i record di dati. Come ci si aspetterebbe, più accurati sono i timestamp, generalmente maggiore è il prezzo. Se il tuo progetto richiede una registrazione ad altissima velocità che timestamp al nanosecondo, il logger funzionerà un po 'più di un logger che non ha idea di che ora del giorno è.  

Persistenza

Questo è ciò che vuoi che succeda quando superi la fine dello spazio di archiviazione. Gli schemi variano dalla registrazione di stop per iniziare a sovrascrivere i dati più vecchi.

Tipo di supporto / durata

Assicurati di valutare quante volte la memoria del dispositivo può essere sovrascritta e quale è il piano quando inizia a scomporre. Se è necessario sostituire l'intero programma di registrazione dopo aver sovrascritto 10.000, il valore dipenderà dal numero di scritture pianificate per il secondo al secondo.

Registratore di schede SD

I lati positivi dell'utilizzo di una scheda SD per la registrazione sono molti. È relativamente economico. È possibile scegliere il proprio formato di registrazione e se si desidera o meno timestamp. Il supporto è facilmente sostituibile se usurato e può essere rimosso rapidamente e letto da qualsiasi computer standard.  

La registrazione della scheda SD ha anche alcuni aspetti negativi. 

Non è il miglior ambiente robusto in cui l'umidità possa influire sui contatti. Inoltre consuma un sacco di pin preziosi su un microcontrollore. Tra il real time clock (RTC) e la breakout board SD consuma sei pin di vario tipo.  

Ho scelto il logger della scheda SD per questo tutorial a causa della facilità e della flessibilità di lavorare con la scheda SD per scrivere e leggere i registri. Ancora più importante, le capacità di utilizzare la scheda SD e un RTC saranno utili per una varietà di altri progetti.

Costruisci il progetto

Seguire i passaggi seguenti per assemblare la breadboard. Questo tutorial utilizza un semplice sensore di temperatura e umidità per raccogliere i dati per la registrazione. Dopo aver seguito i passaggi, dovresti avere una breadboard che assomiglia allo schema qui sotto.

Datalogger della scheda SD completato

Assemblare la scheda di sblocco SD

La scheda di sblocco della scheda SD viene fornita con fori passanti, intestazioni per breadboard, ma non sono collegati. Una rapida sessione di saldatura la risolverà e ti consentirà di posizionare la tavola come mostrato nel diagramma.

Formatta e inserisci la scheda SD

Inserire la scheda SD in un computer e verificare che sia formattata con un filesystem FAT32. Potrebbe essere necessario un MicroSD per l'adattatore per schede SD standard. La scheda SD nell'elenco dei componenti viene fornita con un adattatore. Inserire con attenzione la scheda SD nella scheda di sblocco.

Assemblare l'orologio in tempo reale

La scheda Real Time Clock, o RTC, viene fornita in kit e richiede un po 'più di saldatura da assemblare. Tutti i componenti sono inclusi nel kit. Seguire le istruzioni passo passo per assemblare la scheda comprese le intestazioni foro passante. 

Assicurarsi di inserire la batteria inclusa nella clip dopo il montaggio. Non funzionerà correttamente senza la batteria in posizione. L'RTC attinge solo dalla batteria quando non c'è tensione principale, quindi la batteria dovrebbe durare anni.

Attaccare la clip della batteria da 9V

Molti casi di batteria come quello nella lista delle parti sopra sono dotati di cavi non compatibili con il breadboard. Per fare in modo che i cavi si possano saldare, saldare un filo o un capocorda all'estremità di ciascun conduttore.

Una parola sui lettori di schede SD

I lettori di schede SD possono essere acquistati in modo molto più economico di quello consigliato in questo tutorial. Il problema, tuttavia, è che i lettori di schede SD sono una tecnologia a 3 volt mentre l'Arduino utilizza un microcontrollore da 5 volt. 

Ciò significa che per utilizzare in sicurezza un lettore di schede SD con un Arduino è necessario un convertitore di livello logico per convertire le tensioni tra i due. Ciò aggiunge costi e complessità. Il lettore specificato nell'elenco delle parti potrebbe essere un po 'più costoso, ma ha molte cose da fare per questo.

  • Ha un convertitore di livello logico incorporato, quindi non sono necessari componenti aggiuntivi o cablaggio. Non utilizza resistori per ridurre la tensione che può rallentare le letture e le scritture sulla scheda. Quindi, può essere collegato direttamente ad Arduino in modo sicuro
  • Utilizza schede Micro SD per un ingombro molto ridotto
  • C'è un sacco di codice disponibile ed esempi per questo

Il lettore utilizza il protocollo SPI per comunicare. Le schede Arduino sono dotate di alcuni pin progettati per questo protocollo. Mentre è possibile utilizzare pin alternativi in ​​un pizzico, otterrete le prestazioni più veloci e affidabili utilizzando i pin dedicati all'hardware.

I pin indicati nella figura schematica sono precisi per uno Arduino Uno o Arduino Nano.

Programma l'Arduino

Con l'hardware del progetto assemblato, il passo successivo è programmarlo. Scarica il pacchetto zip compresso con questo tutorial o dal repository github per questo progetto di registrazione dei dati.

  • Aperto datalogger.ino nell'IDE di Arduino
  • Collega Arduino Nano al computer con il cavo mini USB-to-USB
  • Assicurarsi che la porta seriale sia impostata sulla porta rilevata dal computer quando si è collegato Arduino utilizzando il Strumenti> Porta seriale menu
  • Assicurarsi che la scheda sia impostata su Arduino Nano w / ATmega328 usando il Strumenti> Scheda menu
  • Verificare che le librerie siano installate correttamente facendo clic su Verificare pulsante e assicurarsi che non ci siano errori
  • Collega la batteria al progetto. Questo sembra un passo strano, ma tutti i lettori di Arduino, RTC, sensore e scheda SD hanno una tensione sufficiente che ho trovato che la mia porta USB non forniva una potenza sufficiente e il progetto si resettava continuamente. Prendi il tempo per connettere la batteria da 9V. Quando l'ho fatto ho notato che l'indicatore di stato acceso sull'arduino si era notevolmente illuminato
  • Utilizzare il Caricare pulsante per inviare il codice ad Arduino
  • Modifica il codice per commentare la riga: rtc.adjust (DateTime (F (__ DATE__), F (__ TIME__))); Mettendo a // all'inizio della linea. La prima volta che hai caricato il codice, imposta la data e l'ora dell'RTC al momento della compilazione. Ma non vuoi continuare a reimpostare l'orologio per compilare il tempo ogni volta che la scheda viene reimpostata. Caricamento del codice senza questo rtc.adjust in esso lascerà il tempo di clock da solo al prossimo avvio
  • Carica nuovamente il codice con la riga del tempo impostata come commento
  • Apri il Monitor seriale finestra premendo Control-Shift-M e assicurarsi che sia impostato su 19200 baud. Dovresti vedere l'inizializzazione di Arduino con l'output come nell'esempio seguente
Inizializzazione del datalogger con RTC versione 1.0 Avvio del sensore di temperatura e umidità Avvio del lettore e della scheda SDCard Apertura del file di registro per la scrittura. Avvio di Real Time Clock Unixtime: 1405787147 1405787148,2014 / 7/19 16: 25: 48,69.80,40,00 1405787151,2014 / 7/19 16: 25: 51,69.80,40,00 1405787155,2014 / 7/19 16:25: 55,69.80,40,00 1405787158,2014 / 7/19 16: 25: 58,69.80,40,00 1405787162,2014 / 7/19 16: 26: 02,69.80,40,00 1405787165,2014 / 7/19 16:26:05, 69.80,40.00

Note sul programma

Il programma del datalogger unisce le funzioni della libreria RTC, della libreria DHT e della libreria SD. Ci sono alcune opzioni nella parte superiore del programma che puoi regolare come il nome del file di dati e il tipo di DHT che hai. 

Tutte le impostazioni predefinite, tuttavia, dovrebbero funzionare correttamente se si utilizzano i componenti suggeriti sopra.

Ciclo principale

Il ciclo principale del programma fa tre cose.

  • Leggi la temperatura e l'umidità dal sensore. Ho preso in prestito del codice per questo da un altro tutorial che ho scritto: Costruire una rete di sensori wireless nella tua casa 
  • Formattare i dati recuperati in un elenco separato da virgole da inviare alla funzione di registro
  • Invia i dati al logThis () funzione per scrivere sulla carta
  • Dormi per tre secondi

Ripete il processo finché c'è alimentazione e spazio sulla scheda SD.

Registrazione

Il logThis () funzione prende una stringa di caratteri di dati come argomento, ottiene il tempo dall'RTC, lo formatta con i dati e lo scrive nel file di registro. Il nome del file di registro è specificato nel file #definire sezione del programma. Lo schizzo apre il file di registro all'avvio dell'installazione in modo che il registratore di file non debba riaprirlo per ciascuna voce di registro. Il criptico sprintf il comando mostrato sotto forma i dati. 

Se si desidera modificare la modalità di registrazione dei dati, assicurarsi di avere familiarità con la funzione sprintf e di spostare la formattazione e gli elementi di dati. Se hai solo bisogno di riordinare i campi della data, puoi semplicemente cambiare il loro ordine tra le virgole e ogni cosa dovrebbe funzionare bene.

sprintf (messaggio, "% ld,% d /% d /% d% 02d:% 02d:% 02d,% s", epoca, anno, mese, giorno, ora, minuti, secondi, logmessage);

Finalmente, il dataFile.println (messaggio) comando scrive la stringa formattata sul file. La funzione si comporta proprio come il Serial.println comando.

Il filesystem FAT32 che si trova sulla scheda SD ha alcune limitazioni che vale la pena conoscere. Anche il nome del file deve essere in formato 8.3. La dimensione massima del file che può contenere è un file da 2 GB e può contenere solo 268.173.300 file. Spero che tu possa vivere con questi vincoli per un po '.

Tempo

Le funzioni now.year () e gli amici eseguono il lavoro richiesto per leggere gli elementi del tempo corrente (unix epoca, anno, mese, giorno, ora, minuto, secondo) dalla scheda RTC e restituiscono il valore.

La cosa bella degli orologi in tempo reale è che mantengono ovviamente il tempo. Mentre il codice e il progetto possono andare avanti facendo altre cose importanti come assicurarsi che la tua birra stia fermentando alla giusta temperatura, continua a mantenere il tempo. Anche se il tuo progetto perde potenza, continua a scorrere con una batteria indipendente. 

Tutto quello che devi fare è chiederlo e ti dirà a che ora è. Questo è ovviamente perfetto per la registrazione dei dati. Il componente specificato nell'elenco delle parti è un timekeeper passabile, ma le specifiche dicono che può guadagnare fino a due secondi al giorno. 

Se questo ti fa alzare la notte, controlla il fantasioso ChronoDot per una maggiore precisione con lo stesso identico protocollo. È completamente intercambiabile con RTC in questo progetto per pochi dollari in più e viene completamente assemblato.

analisi 

Hai costruito il progetto, programmato (due volte) e leggi tutto sulla teoria dell'operazione di cui sopra. È tempo di provarlo.

  1. Impostare la scheda in un punto in cui la temperatura e l'umidità saranno interessanti e collegare la batteria
  2. Lascia che il logger funzioni per un po 'durante la raccolta dei dati
  3. Dopo un po 'rimuovi l'alimentazione dal progetto e rimuovi la scheda SD
  4. Inserisci la scheda nell'adattatore di dimensioni complete e inserisci la scheda SD nel computer.
  5. Apri il file datalog.txt

Dovresti vedere qualcosa di simile al seguente.

1405787012,2014 / 7/19 16: 23: 32,69.80,40,00 1405787015,2014 / 7/19 16: 23: 35,69.80,40,00 1405787019,2014 / 7/19 16: 23: 39,69.80,40,00 1405787022, 24/7/19 16: 23: 42,69.80,40,00 1405787026,2014 / 7/19 16: 23: 46,69,80,40,00 1405787029,2014 / 7/19 16: 23: 49,69.80,40,00 1405787053,2014 / 7/19 16: 24: 13,69.80,40.00

Conclusione

In questo tutorial ti ho mostrato come integrare una scheda SD e un modulo di orologio in tempo reale nel tuo progetto. Con il codice di esempio è possibile registrare i dati per un periodo di tempo prolungato che può essere copiato rapidamente e facilmente su un computer. 

Dopo aver completato questo progetto, potresti provare alcune modifiche o aggiornamenti ad esso. Prova ad aggiornare il cronometro per timestamp più accurati. Il programma incluso scrive semplicemente nello stesso file più e più volte fino a quando non è pieno. Puoi provare a creare uno schema di rotazione dei file basato sulla data per ruotare i file una volta alla settimana. 

Non ho nemmeno menzionato il filo di rilevamento delle carte del lettore che ti permetterà di modificare lo schema e la scheda per testare la presenza di una scheda prima di provare qualsiasi operazione di lettura o scrittura. Buona fortuna e divertiti a sperimentare.