În calitate de ingineri / dezvoltatori, ne bazăm întotdeauna pe datele colectate pentru a proiecta sau îmbunătăți un sistem. Înregistrarea și analizarea datelor este o practică obișnuită în majoritatea industriilor, aici construim proiectul Arduino Data Logger, unde vom afla cum putem înregistra date la un anumit interval de timp. Vom folosi o placă Arduino pentru a citi câteva date (aici temperatura, umiditatea, data și ora) și le vom salva simultan pe un card SD și computer.
Datele salvate pot fi deschise cu ușurință într-o foaie Excel pentru analize ulterioare. Pentru a menține data și ora vom folosi celebrul modul RTC DS3231 și pentru a obține temperatura și umiditatea vom folosi senzorul DHT11. La finalul proiectului veți învăța
- Cum să conectați datele pe cardul SD cu data, ora și valorile senzorului.
- Cum să scrieți date direct pe foaia Excel pe computer prin intermediul comunicării seriale.
Materiale necesare:
- Breadboard
- Arduino UNO (orice placa Arduino)
- DHT11 Senzor de temperatură
- Modulul DS3231 RTC
- Modul card SD
- card SD
- Conectarea firelor
- Computer / laptop
Diagrama circuitului:
Diagrama circuitului pentru acest proiect Arduino Temperature Logger este prezentată mai jos.
Așa cum se arată în schema circuitelor, conexiunile sunt foarte simple, deoarece le-am folosit ca module, le putem construi direct pe o placă de calcul. Conexiunile sunt clasificate în continuare în tabelul de mai jos
Pinul Arduino |
Pinul modulului |
Senzor de temperatură - DHT11 |
|
Vcc |
5V |
Gnd |
Gnd |
Nc |
Nc |
Afară |
Pinul 7 |
Modulul RTC DS3231 |
|
Vcc |
5V |
Gnd |
Gnd |
SCL |
Pinul A5 |
SDA |
Pinul A4 |
Modul card SD |
|
Vcc |
5V |
Gnd |
Gnd |
MISO |
Pinul 12 |
MOSI |
Pinul 11 |
SCK |
Pinul 13 |
CS |
Pinul 4 |
Puteți înlocui senzorul de temperatură DHT11 cu oricare dintre senzorii dvs. de la care trebuie să înregistrați valorile. Puteți verifica LM35 cu Arduino pentru a citi temperatura.
Modulul RTC DS3231 este interfațat cu Arduino utilizând comunicația I2C (SCL, SDA), iar modulul cardului SD este interfațat utilizând comunicația SPI (MISO, MOSI, SCK, CS). Pinii 4 și 7 sunt definiți ca pinul CS și pinul de ieșire prin programul Arduino, le puteți schimba la orice alt pin, dacă este necesar. Am interfațat anterior cardul SD cu Arduino în proiectul Music player.
Explicația programului Arduino:
Trebuie să scriem programul Arduino care poate face următoarele.
- Citiți datele de la senzorul DTH11 (sau orice alte date pe care doriți să le înregistrați).
- Inițializați magistrala I2C pentru a citi datele din modulul RTC.
- Inițializați magistrala SPI pentru a interfața modulul cardului SD cu Arduino.
- Stocați data, ora, temperatura și umiditatea pe cardul SD.
- Stocați data, ora, temperatura și umiditatea pe o foaie Excel care rulează pe un computer / laptop.
Pașii de mai sus s-ar putea să pară complicați, dar sunt foarte simpli, deoarece avem bibliotecile pentru a face treaba grea pentru noi. Trebuie să descărcați următoarele două biblioteci
- Biblioteca senzorului DHT11 de la GitHub
- Biblioteca de module DS3231 RTC de la Rinky-Dink Electronics
După ce ați descărcat biblioteca, adăugați-le la ID-ul dvs. Arduino urmând
Sketch-> Include Library -> Add.ZIP Library
Pentru a alimenta datele de la Arduino în mod viu într-o foaie Excel de pe computer, va trebui, de asemenea, să instalăm un software numit PLX-DAQ furnizat de Parallax Inc. Urmați linkul pentru a descărca fișierul și a le instala pe baza sistemului dvs. de operare. Aceasta ar fi trebuit să creeze un folder numit PLS-DAQ pe desktop. Ne vom ocupa mai târziu în secțiunea noastră de lucru.
Acum, după adăugarea ambelor biblioteci și după instalarea software-ului, puteți utiliza codul complet (dat în partea de jos a tutorialului) și le puteți încărca pe Arduino. Am încercat din răsputeri să păstrez codul cât mai simplu posibil și explicațiile sunt date și prin secțiuni de comentarii. Mai departe, voi explica segmentele importante de mai jos.
1. Citirea datelor din DS3231:
DS3231 este un modul RTC (Real Time Clock). Este folosit pentru a menține data și ora pentru majoritatea proiectelor de electronică. Acest modul are propria sa sursă de alimentare cu celulă monedă, folosind care menține data și ora chiar și atunci când alimentarea principală este scoasă sau MCU a dispărut, deși a fost resetat. Deci, odată ce am setat data și ora în acest modul, acesta va urmări întotdeauna.
Utilizarea acestui modul este foarte ușoară datorită bibliotecii furnizate de Arduino.
// Porniți DS3231 utilizând interfața hardware DS3231 rtc (SDA, SCL); void Initialize_RTC () {// Initializa obiectul rtc rtc.begin (); // #### următoarele linii pot fi necomentate pentru a seta data și ora pentru prima dată ### / * rtc.setDOW (FRIDAY); // Setați Ziua săptămânii la DUMINICĂ rtc.setTime (18, 46, 45); // Setați ora la 12:00:00 (format 24hr) rtc.setDate (6, 30, 2017); // Setați data la 1 ianuarie 2014 * /}
Notă: Când utilizați acest modul pentru prima dată, trebuie să setați data și ora. Se poate face prin simpla eliminare a comentariilor menționate mai sus și scrierea datei și orei. Asigurați-vă că le comentați și le încărcați, altfel de fiecare dată când rulați placa, data și ora vor fi setate din nou. De asemenea, puteți utiliza RTC IC DS1307 pentru citirea orei cu Arduino.
2. Citirea datelor din DHT11:
DHT11 este un senzor de umiditate a temperaturii. Trimite valorile temperaturii și umidității ca date pe 8 biți în serie prin pinul de ieșire al modulului. Biblioteca citește aceste date utilizând funcția software a serialului Arduino.
#define DHT11_PIN 7 // Pinul de ieșire al senzorului este conectat la pinul 7 dht DHT; // Obiect senzor denumit DHT void Read_DHT11 () {int chk = DHT.read11 (DHT11_PIN); }
Aici am conectat pinul de ieșire la pinul 7, de exemplu, puteți alege orice pin care acceptă Software Serial. Apelarea DHT.read (număr PIN); va citi valoarea temperaturii și umidității și o va stoca în parametrul DHT.temperature și respectiv DHT.Humidity . Verificați și această măsurare a temperaturii Arduino bazată pe DHT11.
3. Inițializarea modulului cardului SC:
void Initialize_SDcard () {// vezi dacă cardul este prezent și poate fi inițializat: if (! SD.begin (chipSelect)) {Serial.println ("Cardul eșuat sau nu este prezent"); // nu mai face nimic: întoarce-te; } // deschideți fișierul. rețineți că un singur fișier poate fi deschis odată, // deci trebuie să îl închideți înainte de a deschide altul. Fișier dataFile = SD.open ("LoggerCD.txt", FILE_WRITE); // dacă fișierul este disponibil, scrieți-l: if (dataFile) {dataFile.println ("Data, ora, temperatura, umiditatea"); // Scrieți primul rând al fișierului excel dataFile.close (); }}
Utilizarea unui card SD cu Arduino este ușoară datorită bibliotecii de carduri SD care va fi adăugată în mod implicit la IDE-ul Arduino. În funcția de inițializare a cardului SD vom crea un fișier text numit „LoggerCD.txt” și vom scrie primul rând al conținutului nostru. Aici separăm valorile folosind un „,” ca delimitator. Adică atunci când este plasată o virgulă înseamnă că trebuie să trecem la următoarea celulă din foaia Excel.
4. Scrierea datelor pe cardul SD
void Write_SDcard () {// deschideți fișierul. rețineți că un singur fișier poate fi deschis odată, // deci trebuie să îl închideți înainte de a deschide altul. Fișier dataFile = SD.open ("LoggerCD.txt", FILE_WRITE); // dacă fișierul este disponibil, scrieți-l: if (dataFile) {dataFile.print (rtc.getDateStr ()); // Stocați data pe cardul SD dataFile.print (","); // Treceți la coloana următoare folosind un „,” dataFile.print (rtc.getTimeStr ()); // Stocați data pe cardul SD dataFile.print (","); // Treceți la următoarea coloană folosind un „,” dataFile.print (DHT.temperature); // Stocați data pe cardul SD dataFile.print (","); // Treceți la coloana următoare folosind un „,” dataFile.print (DHT.humidity); // Stocați data pe cardul SD dataFile.print (","); // Treceți la coloana următoare folosind un fișier "," dataFile.println (); // Sfârșitul rândului trece la rândul următor dataFile.close ();// Închideți fișierul} else Serial.println ("OOPS !! scrierea cardului SD a eșuat"); }
Așa cum am spus mai devreme, intenția noastră este de a salva data, ora, temperatura și umiditatea pe cardul nostru SD. Cu ajutorul bibliotecii DS3231 și a bibliotecii DHT11, Arduino-ul nostru va fi capabil să citească toți acești patru parametri și să-i stocheze în următorii parametri, așa cum se arată în tabelul de mai jos.
Data |
rtc.getDateStr ()); |
Timp |
rtc.getTimeStr ()); |
Temperatura |
DHT.temperatura |
Umiditate |
DHT.umiditate |
Acum putem folosi direct acești parametri pentru a le stoca pe cardul SD folosind linia de imprimare
dataFile.print (parametru);
Puteți observa că fiecare parametru este separat printr-o virgulă pentru a face să pară lizibil și un dataFile.println (); este folosit pentru a indica sfârșitul liniei.
5. Scrierea datelor în PLX-DAQ
PLX-DAQ este software-ul Microsoft Excel Plug-in care ne ajută să scriem valori de la Arduino direct într-un fișier Excel de pe laptop sau computer. Acesta este favoritul meu personal din două motive:
1. Puteți scrie și monitoriza datele în același timp și ne oferă o modalitate de a le trasa sub formă de grafice.
2. Nu aveți nevoie de un modul RTC ca DS3231 pentru a urmări data și ora. Puteți utiliza pur și simplu data și ora care rulează pe laptop / computer și le puteți salva direct pe Excel.
Pentru a utiliza acest software cu Arduino trebuie să trimitem datele în serie într-un model specific, la fel ca afișarea valorii pe monitorul serial. Liniile cheie sunt explicate mai jos:
void Initialize_PlxDaq () {Serial.println ("CLEARDATA"); // șterge toate datele rămase din proiectele anterioare Serial.println („LABEL, Data, Ora, Temperatura, Umiditatea”); // scrieți întotdeauna LABEL, pentru ao indica ca prima linie} void Write_PlxDaq () {Serial.print ("DATA"); // scrieți întotdeauna „DATA” pentru a indica următoarele date ca Serial de date.print („,„); // Treceți la coloana următoare folosind un "," Serial.print ("DATE"); // Stocați data pe Excel Serial.print (","); // Treceți la coloana următoare folosind un "," Serial.print ("TIME"); // Stocați data pe Excel Serial.print (","); // Treceți la coloana următoare folosind un "," Serial.print (DHT.temperature); // Stocați data pe Excel Serial.print (","); // Treceți la coloana următoare folosind un "," Serial.print (DHT.humidity);// Stocați data pe Excel Serial.print (","); // Treceți la coloana următoare folosind un "," Serial.println (); // Trecerea la sfârșitul rândului la rândul următor}
Software-ul poate recunoaște cuvinte cheie precum LABEL, DATA, TIME, DATE etc. După cum se arată în funcția Initialize, cuvântul cheie „LABEL” este utilizat pentru a scrie primul RÂND al foii Excel. Mai târziu, în funcția de scriere, vom folosi cuvântul cheie „DATA” pentru a indica faptul că următoarele informații ar trebui considerate drept DATE. Pentru a indica faptul că trebuie să trecem la rândul următor trebuie să folosim virgula („,”). Pentru a indica sfârșitul rândului trebuie să trimitem un Serial.println ();.
Așa cum am spus mai devreme, putem scrie data și ora sistemului, trimițând cuvintele cheie „DATE” și „TIME”, așa cum se arată mai sus.
Notă: Nu utilizați monitor serial când utilizați acest software PLX_DAQ.
Explicație de lucru:
Funcționarea Arduino Data Logger este simplă. Odată ce hardware-ul și software-ul sunt gata, este timpul să inscripționați programul pe placa Arduino. De îndată ce programul dvs. va fi încărcat, valorile de temperatură și umiditate vor începe să fie stocate în cardul SD. Trebuie să urmați pașii de mai jos pentru a permite PLX-DAQ să conecteze foaia Excel în computer.
Pasul 1: Deschideți fișierul „Foaie de calcul Plx-Daq” care a fost creat pe desktop în timpul instalării.
Pasul 2: Dacă există un bloc de securitate, faceți clic pe Opțiuni-> Activați conținutul -> Finalizare -> OK pentru a obține următorul ecran.
Pasul 3: Acum selectați rata de transmisie ca „9600” și portul la care este conectat Arduino și faceți clic pe Conectare. Valorile dvs. ar trebui să înceapă să fie înregistrate așa cum se arată în imaginea de mai jos.
Puteți lăsa deschisă această foaie Excel și puteți monitoriza valorile pe măsură ce sunt înregistrate. Deoarece acest lucru se întâmplă, cardul nostru SD ar fi salvat, de asemenea, aceleași valori. Pentru a verifica dacă funcționează, pur și simplu scoateți cardul SD și deschideți-l pe computer. Ar trebui să găsiți un fișier text numit „LoggerCD.txt” în acesta. Când era deschis, ar arăta cam așa.
Acest fișier conține date, dar ar fi greu să le analizăm pe un blocnotes. Prin urmare, îl putem deschide pe Excel ca fișier CSV (valori separate prin virgulă), făcându-l astfel mai eficient. Pentru a deschide în Excel
1. Deschideți Excel. Faceți clic pe Fișier-> Deschideți și selectați „Toate fișierele” în colțul din dreapta jos și selectați fișierul „LoggerCD” de pe cardul SD. Aceasta va deschide un expert de importare a textului.
2. Faceți clic pe „Următorul” și selectați virgula ca delimitator. Faceți clic din nou pe „Next”. Apoi Termină.
3. Acum valorile dvs. vor fi deschise într-un fișier Excel așa cum se arată mai jos
Am înregistrat valorile la fiecare 5 secunde; le puteți înregistra pentru orice moment dorit schimbând funcția de întârziere din program. Pentru o înțelegere detaliată a funcționării vă rugăm să urmăriți videoclipul de mai jos.
Sper că ți-a plăcut proiectul, dacă ai vreo îndoială, scrie-le în secțiunea de comentarii de mai jos și te voi ajuta.
Îmbunătățirea bonusului - Jurnal de date fără fir folosind Arduino:
Odată ce ați reușit până în acest moment, atunci cu câteva progrese și doar adăugând câteva linii de cod, puteți înregistra datele fără fir.
Pur și simplu conectați un dispozitiv Bluetooth precum HC-05 și scrieți datele pe PLX-DAQ prin Bluetooth în loc de Serial. Adică înlocuiți Serial.print (parametru); cu BluetoothName.print (parametru); și conectați laptopul la modulul Bluetooth și selectați portul COM la care este conectat laptopul Bluetooth și Taadaaa…… Aveți un sistem de înregistrare a datelor fără fir în cel mai scurt timp.