In qualità di ingegneri / sviluppatori, facciamo sempre affidamento sui dati raccolti per progettare o migliorare un sistema. Registrare i dati e analizzarli è una pratica comune nella maggior parte dei settori, qui stiamo costruendo il progetto Arduino Data Logger in cui impareremo come possiamo registrare i dati in un intervallo di tempo specifico. Useremo una scheda Arduino per leggere alcuni dati (qui temperatura, umidità, data e ora) e salvarli su una scheda SD e sul computer contemporaneamente.
I dati salvati possono essere facilmente aperti in un foglio Excel per ulteriori analisi. Per mantenere la data e l'ora utilizzeremo il famoso modulo RTC DS3231 e per ottenere la temperatura e l'umidità utilizzeremo il sensore DHT11. Alla fine del progetto imparerai
- Come registrare i dati nella scheda SD con data, ora e valori del sensore.
- Come scrivere dati direttamente su foglio Excel su PC tramite comunicazione seriale.
Materiali richiesti:
- Breadboard
- Arduino UNO (qualsiasi scheda Arduino)
- DHT11 Sensore di temperatura
- Modulo RTC DS3231
- Modulo scheda SD
- scheda SD
- Cavi di collegamento
- Computer / laptop
Schema elettrico:
Di seguito è mostrato lo schema del circuito per questo progetto Arduino Temperature Logger.
Come mostrato nello schema del circuito i collegamenti sono molto semplici poiché li abbiamo usati come moduli possiamo costruirli direttamente su una breadboard. I collegamenti sono ulteriormente classificati nella tabella seguente
Pin di Arduino |
Pin del modulo |
Sensore di temperatura - DHT11 |
|
Vcc |
5V |
Gnd |
Gnd |
Nc |
Nc |
Su |
Pin 7 |
Modulo RTC DS3231 |
|
Vcc |
5V |
Gnd |
Gnd |
SCL |
Pin A5 |
SDA |
Pin A4 |
Modulo scheda SD |
|
Vcc |
5V |
Gnd |
Gnd |
MISO |
Pin 12 |
MOSI |
Pin 11 |
SCK |
Pin 13 |
CS |
Pin 4 |
È possibile sostituire il sensore di temperatura DHT11 con uno qualsiasi dei sensori da cui è necessario registrare i valori. Puoi controllare LM35 con Arduino per leggere la temperatura.
Il modulo RTC DS3231 è interfacciato con Arduino utilizzando la comunicazione I2C (SCL, SDA) e il modulo scheda SD è interfacciato utilizzando la comunicazione SPI (MISO, MOSI, SCK, CS). I pin 4 e 7 sono definiti come pin CS e pin di uscita dal programma Arduino, è possibile cambiarli in qualsiasi altro pin se necessario. In precedenza abbiamo interfacciato la scheda SD con Arduino nel progetto Music Player.
Spiegazione del programma Arduino:
Dobbiamo scrivere il programma Arduino che può fare quanto segue.
- Leggere i dati dal sensore DTH11 (o qualsiasi altro dato che si desidera registrare).
- Inizializza il bus I2C per leggere i dati dal modulo RTC.
- Inizializza il bus SPI per interfacciare il modulo della scheda SD con Arduino.
- Memorizza la data, l'ora, la temperatura e l'umidità nella scheda SD.
- Memorizza la data, l'ora, la temperatura e l'umidità su un foglio Excel in esecuzione su un computer / laptop.
I passaggi precedenti potrebbero sembrare complicati ma sono molto facili poiché abbiamo le librerie per fare il duro lavoro per noi. Devi scaricare le seguenti due librerie
- Libreria di sensori DHT11 da GitHub
- Libreria del modulo RTC DS3231 di Rinky-Dink Electronics
Dopo aver scaricato la libreria, aggiungili al tuo IDE Arduino seguendo
Schizzo-> Includi libreria -> Aggiungi libreria.ZIP
Per alimentare i dati di Arduino vivace in un foglio Excel su computer avremo anche bisogno di installare un software chiamato PLX-DAQ fornito da Parallax Inc. Segui il link per scaricare il file e installarli in base al tuo sistema operativo. Questo dovrebbe aver creato una cartella denominata PLS-DAQ sul desktop. Ce ne occuperemo più avanti nella nostra sezione lavorativa.
Ora dopo aver aggiunto entrambe le librerie e dopo aver installato il software, puoi utilizzare il codice completo (fornito in fondo al tutorial) e caricarle sul tuo Arduino. Ho fatto del mio meglio per mantenere il codice il più semplice possibile e le spiegazioni vengono fornite anche attraverso le sezioni dei commenti. Inoltre, spiegherò di seguito i segmenti importanti.
1. Lettura dei dati da DS3231:
DS3231 è un modulo RTC (Real Time Clock). Viene utilizzato per mantenere la data e l'ora per la maggior parte dei progetti di elettronica. Questo modulo dispone di un proprio alimentatore a celle a bottone che mantiene la data e l'ora anche quando l'alimentazione principale viene rimossa o l'MCU è andato via tramite un hard reset. Quindi, una volta impostate la data e l'ora in questo modulo, ne terrà sempre traccia.
Utilizzare questo modulo è molto semplice grazie alla libreria fornita da Arduino.
// Inizializza il DS3231 utilizzando l'interfaccia hardware DS3231 rtc (SDA, SCL); void Initialize_RTC () {// Inizializza l'oggetto rtc rtc.begin (); // #### le seguenti righe possono essere decommentate per impostare la data e l'ora per la prima volta ### / * rtc.setDOW (FRIDAY); // Imposta il giorno della settimana su SUNDAY rtc.setTime (18, 46, 45); // Imposta l'ora a 12:00:00 (formato 24 ore) rtc.setDate (6, 30, 2017); // Imposta la data al 1 ° gennaio 2014 * /}
Nota: quando si utilizza questo modulo per la prima volta è necessario impostare la data e l'ora. Può essere fatto semplicemente rimuovendo i commenti come menzionato sopra e scrivendo la data e l'ora. Assicurati di commentarli e caricarli, altrimenti ogni volta che esegui la scheda la data e l'ora verranno impostate di nuovo. Puoi anche usare RTC IC DS1307 per leggere l'ora con Arduino.
2. Lettura dei dati da DHT11:
DHT11 è un sensore di temperatura come umidità. Invia i valori di temperatura e umidità come dati a 8 bit in modo seriale attraverso il pin di uscita del modulo. La libreria legge questi dati utilizzando la funzione seriale del software di Arduino.
#define DHT11_PIN 7 // Il pin di uscita del sensore è collegato al pin 7 dht DHT; // Oggetto sensore denominato DHT void Read_DHT11 () {int chk = DHT.read11 (DHT11_PIN); }
Qui ho collegato il pin di uscita al pin 7 come esempio puoi scegliere qualsiasi pin che supporti Software Serial. Chiamare DHT.read (numero pin); leggerà il valore di temperatura e umidità e lo memorizzerà rispettivamente nel parametro DHT.temperature e DHT.Humidity . Controlla anche questa misurazione della temperatura Arduino basata su DHT11.
3. Inizializzazione del modulo della scheda SC:
void Initialize_SDcard () {// controlla se la scheda è presente e può essere inizializzata: if (! SD.begin (chipSelect)) {Serial.println ("Card failed, or not present"); // non fare più niente: return; } // apre il file. nota che può essere aperto solo un file alla volta, // quindi devi chiudere questo prima di aprirne un altro. File dataFile = SD.open ("LoggerCD.txt", FILE_WRITE); // se il file è disponibile, scrivici: if (dataFile) {dataFile.println ("Date, Time, Temperature, Humidity"); // Scrive la prima riga del file excel dataFile.close (); }}
Usare una scheda SD con Arduino è facile grazie alla libreria della scheda SD che verrà aggiunta all'IDE di Arduino per impostazione predefinita. Nella funzione di inizializzazione della scheda SD creeremo un file di testo denominato "LoggerCD.txt" e scriveremo la prima riga del nostro contenuto. Qui separiamo i valori utilizzando un "," come delimitatore. Significa che quando viene inserita una virgola significa che dobbiamo spostarci alla cella successiva nel foglio Excel.
4. Scrittura dei dati sulla scheda SD
void Write_SDcard () {// apre il file. nota che può essere aperto solo un file alla volta, // quindi devi chiudere questo prima di aprirne un altro. File dataFile = SD.open ("LoggerCD.txt", FILE_WRITE); // se il file è disponibile, scrivici: if (dataFile) {dataFile.print (rtc.getDateStr ()); // Memorizza la data sulla scheda SD dataFile.print (","); // Passa alla colonna successiva utilizzando un "," dataFile.print (rtc.getTimeStr ()); // Memorizza la data sulla scheda SD dataFile.print (","); // Passa alla colonna successiva utilizzando un "," dataFile.print (DHT.temperature); // Memorizza la data sulla scheda SD dataFile.print (","); // Passa alla colonna successiva utilizzando un "," dataFile.print (DHT.humidity); // Memorizza la data sulla scheda SD dataFile.print (","); // Passa alla colonna successiva utilizzando un "," dataFile.println (); // Fine della riga passa alla riga successiva dataFile.close ();// Chiude il file} else Serial.println ("OOPS !! Scrittura scheda SD fallita"); }
Come detto in precedenza, la nostra intenzione è quella di salvare la data, l'ora, la temperatura e l'umidità nella nostra scheda SD. Con l'aiuto della libreria DS3231 e della libreria DHT11 il nostro Arduino sarà in grado di leggere tutti questi quattro parametri e di memorizzarli nei seguenti parametri come mostrato nella tabella sottostante
Data |
rtc.getDateStr ()); |
Tempo |
rtc.getTimeStr ()); |
Temperatura |
DHT. Temperatura |
Umidità |
DHT. Umidità |
Ora possiamo utilizzare direttamente questi parametri per memorizzarli sulla scheda SD utilizzando la linea di stampa
dataFile.print (parametro);
Puoi notare che ogni parametro è separato da una virgola per renderlo leggibile e da un dataFile.println (); è usato per indicare la fine della riga.
5. Scrittura dei dati su PLX-DAQ
PLX-DAQ è un software plug-in di Microsoft Excel che ci aiuta a scrivere valori da Arduino direttamente in un file Excel sul nostro laptop o PC. Questo è il mio preferito per due motivi:
1.È possibile scrivere e monitorare i dati allo stesso tempo e ci fornisce il modo per tracciarli come grafici.
2. Non è necessario un modulo RTC come DS3231 per tenere traccia di data e ora. Puoi semplicemente utilizzare la data e l'ora in esecuzione sul tuo laptop / computer e salvarle direttamente su Excel.
Per utilizzare questo software con Arduino dobbiamo inviare i dati in serie in uno schema specifico proprio come la visualizzazione del valore sul monitor seriale. Le linee chiave sono spiegate di seguito:
void Initialize_PlxDaq () {Serial.println ("CLEARDATA"); // cancella tutti i dati rimasti dai progetti precedenti Serial.println ("LABEL, Date, Time, Temperature, Humidity"); // scrivi sempre LABEL, per indicarlo come prima riga} void Write_PlxDaq () {Serial.print ("DATA"); // scrivi sempre "DATA" per indicare quanto segue come Data Serial.print (","); // Passa alla colonna successiva utilizzando un "," Serial.print ("DATE"); // Memorizza la data su Excel Serial.print (","); // Passa alla colonna successiva utilizzando un "," Serial.print ("TIME"); // Memorizza la data su Excel Serial.print (","); // Passa alla colonna successiva utilizzando un "," Serial.print (DHT.temperature); // Memorizza la data su Excel Serial.print (","); // Passa alla colonna successiva utilizzando un "," Serial.print (DHT.humidity);// Memorizza la data su Excel Serial.print (","); // Passa alla colonna successiva utilizzando "," Serial.println (); // Fine della riga passa alla riga successiva}
Il software è in grado di riconoscere parole chiave come ETICHETTA, DATI, ORA, DATA ecc. Come mostrato nella funzione Inizializza, la parola chiave “ETICHETTA” viene utilizzata per scrivere la prima RIGA del foglio Excel. Successivamente nella funzione Write utilizziamo la parola chiave “DATA” per indicare che le seguenti informazioni devono essere considerate come DATA. Per indicare che dobbiamo passare alla riga successiva dobbiamo usare la virgola (","). Per indicare la fine della riga dobbiamo inviare un Serial.println ();.
Come detto in precedenza possiamo scrivere la data e l'ora del sistema inviando rispettivamente le parole chiave “DATA” e “ORA” come mostrato sopra.
Nota: non utilizzare il monitor seriale quando si utilizza questo software PLX_DAQ.
Spiegazione di lavoro:
Il funzionamento di Arduino Data Logger è semplice. Una volta che l'hardware e il software sono pronti, è il momento di masterizzare il programma nella scheda Arduino. Non appena il programma viene caricato, i valori di temperatura e umidità inizieranno a essere memorizzati nella scheda SD. È necessario seguire i passaggi seguenti per abilitare PLX-DAQ ad accedere al foglio Excel nel computer.
Passaggio 1: aprire il file "Plx-Daq Spreadsheet" creato sul desktop durante l'installazione.
Passaggio 2: se è presente un blocco di sicurezza, fare clic su Opzioni-> Abilita contenuto -> Fine -> OK per ottenere la seguente schermata.
Passaggio 3: Ora seleziona la velocità di trasmissione come "9600" e la porta a cui è connesso Arduino e fai clic su Connetti. I tuoi valori dovrebbero iniziare a essere registrati come mostrato nell'immagine qui sotto.
Puoi lasciare aperto questo foglio Excel e monitorare i valori man mano che vengono registrati. Mentre questo sta accadendo, anche la nostra scheda SD avrebbe salvato gli stessi valori. Per verificare che funzioni è sufficiente rimuovere la scheda SD e aprirla sul computer. Dovresti trovare un file di testo denominato "LoggerCD.txt" al suo interno. Una volta aperto, sarebbe simile a questo.
Questo file contiene dati, ma sarebbe difficile analizzarli su un blocco note. Quindi possiamo aprirlo su Excel come file CSV (valori separati da virgola), rendendolo così più efficace. Per aprire in Excel
1.Apri Excel. Fare clic su File-> Apri e selezionare "Tutti i file" nell'angolo inferiore destro e selezionare il file "LoggerCD" dalla scheda SD. Questo aprirà una procedura guidata di importazione del testo.
2. Fare clic su "Avanti" e selezionare la virgola come delimitatore. Fare nuovamente clic su "Avanti". Quindi Fine.
3.Ora i tuoi valori verranno aperti in un file Excel come mostrato di seguito
Ho registrato i valori ogni 5 secondi; è possibile registrarli per qualsiasi tempo desiderato modificando la funzione di ritardo nel programma. Per una comprensione dettagliata del funzionamento, guarda il video qui sotto.
Spero ti sia piaciuto il progetto, se hai qualche dubbio scrivili nella sezione commenti qui sotto e ti aiuterò.
Miglioramento bonus: registrazione dati wireless tramite Arduino:
Una volta che sei riuscito fino a questo punto, con pochi progressi e aggiungendo solo poche righe di codice puoi registrare i dati in modalità wireless.
Basta collegare un dispositivo Bluetooth come HC-05 e scrivere i dati su PLX-DAQ tramite Bluetooth invece che seriale. Ovvero sostituire Serial.print (parametro); con BluetoothName.print (parametro); e collega il tuo laptop al tuo modulo Bluetooth e seleziona la porta COM a cui è connesso il tuo laptop Bluetooth e Taadaaa…… Hai un sistema di registrazione dati wireless funzionante in pochissimo tempo.