Ως Μηχανικοί / Προγραμματιστές βασιζόμαστε πάντα στα δεδομένα που συλλέγονται για το σχεδιασμό ή τη βελτίωση ενός συστήματος. Η καταγραφή δεδομένων και η ανάλυσή τους είναι κοινή πρακτική στις περισσότερες βιομηχανίες, εδώ κατασκευάζουμε το Arduino Data Logger Project όπου θα μάθουμε πώς μπορούμε να καταγράψουμε δεδομένα σε ένα συγκεκριμένο χρονικό διάστημα. Θα χρησιμοποιήσουμε έναν πίνακα Arduino για να διαβάσουμε ορισμένα δεδομένα (εδώ θερμοκρασία, υγρασία, ημερομηνία και ώρα) και να τα αποθηκεύσουμε ταυτόχρονα σε μια κάρτα SD και στον υπολογιστή.
Τα αποθηκευμένα δεδομένα μπορούν να ανοίξουν εύκολα σε ένα φύλλο Excel για περαιτέρω αναλύσεις. Για να διατηρήσουμε την ημερομηνία και την ώρα θα χρησιμοποιήσουμε τη διάσημη μονάδα RTC DS3231 και για να λάβουμε τη θερμοκρασία και την υγρασία θα χρησιμοποιήσουμε τον αισθητήρα DHT11. Στο τέλος του έργου θα μάθετε
- Πώς να συνδέσετε δεδομένα στην κάρτα SD με τιμές ημερομηνίας, ώρας και αισθητήρα.
- Πώς να γράψετε δεδομένα απευθείας στο φύλλο Excel στο PC μέσω σειριακής επικοινωνίας
Απαιτούμενα υλικά:
- Ψωμί
- Arduino UNO (οποιοσδήποτε πίνακας Arduino)
- Αισθητήρας θερμοκρασίας DHT11
- Μονάδα DS3231 RTC
- Μονάδα κάρτας SD
- κάρτα SD
- Σύνδεση καλωδίων
- Υπολογιστής / φορητός υπολογιστής
Διάγραμμα κυκλώματος:
Το διάγραμμα κυκλώματος για αυτό το έργο Arduino Temperature Logger φαίνεται παρακάτω.
Όπως φαίνεται στο διάγραμμα κυκλώματος, οι συνδέσεις είναι πολύ απλές, αφού τις έχουμε χρησιμοποιήσει ως μονάδες, τις οποίες μπορούμε να τις χτίσουμε απευθείας σε ένα breadboard. Οι συνδέσεις ταξινομούνται περαιτέρω στον παρακάτω πίνακα
Arduino Pin |
Καρφίτσα ενότητας |
Αισθητήρας θερμοκρασίας - DHT11 |
|
Vcc |
5V |
Gnd |
Gnd |
Αρ |
Αρ |
Εξω |
Καρφίτσα 7 |
Ενότητα RTC DS3231 |
|
Vcc |
5V |
Gnd |
Gnd |
SCL |
Καρφίτσα Α5 |
SDA |
Καρφίτσα Α4 |
Ενότητα κάρτας SD |
|
Vcc |
5V |
Gnd |
Gnd |
ΜΙΣΟ |
Καρφίτσα 12 |
MOSI |
Καρφίτσα 11 |
SCK |
Καρφίτσα 13 |
CS |
Καρφίτσα 4 |
Μπορείτε να αντικαταστήσετε τον αισθητήρα θερμοκρασίας DHT11 με οποιονδήποτε αισθητήρα από τον οποίο πρέπει να καταγράψετε τις τιμές. Μπορείτε να ελέγξετε το LM35 με το Arduino για να διαβάσετε τη θερμοκρασία.
Η μονάδα RTC DS3231 διασυνδέεται με το Arduino χρησιμοποιώντας την επικοινωνία I2C (SCL, SDA) και η μονάδα κάρτας SD διασυνδέεται χρησιμοποιώντας την επικοινωνία SPI (MISO, MOSI, SCK, CS). Οι ακίδες 4 και 7 ορίζονται ως ο πείρος CS και ο πείρος εξόδου από το πρόγραμμα Arduino, μπορείτε να τους αλλάξετε σε οποιονδήποτε άλλο ακροδέκτη εάν απαιτείται. Προηγουμένως διασυνδέσαμε την κάρτα SD με το Arduino στο πρόγραμμα αναπαραγωγής μουσικής.
Επεξήγηση προγράμματος Arduino:
Πρέπει να γράψουμε το πρόγραμμα Arduino που μπορεί να κάνει τα εξής.
- Διαβάστε δεδομένα από τον αισθητήρα DTH11 (ή άλλα δεδομένα που θέλετε να καταγράψετε).
- Αρχικοποιήστε το δίαυλο I2C για να διαβάσετε δεδομένα από τη μονάδα RTC.
- Αρχικοποιήστε το δίαυλο SPI για διασύνδεση της μονάδας κάρτας SD με το Arduino.
- Αποθηκεύστε την ημερομηνία, ώρα, θερμοκρασία και υγρασία στην κάρτα SD.
- Αποθηκεύστε την ημερομηνία, ώρα, θερμοκρασία και υγρασία σε ένα φύλλο Excel που εκτελείται σε έναν υπολογιστή / φορητό υπολογιστή.
Τα παραπάνω βήματα μπορεί να ακούγονται περίπλοκα, αλλά είναι πολύ εύκολο αφού έχουμε τις βιβλιοθήκες να κάνουμε τη σκληρή δουλειά για εμάς. Πρέπει να κατεβάσετε τις ακόλουθες δύο βιβλιοθήκες
- Βιβλιοθήκη αισθητήρων DHT11 από το GitHub
- Βιβλιοθήκη μονάδων DS3231 RTC από την Rinky-Dink Electronics
Μόλις κατεβάσετε τη βιβλιοθήκη, προσθέστε τις στο Arduino IDE σας ακολουθώντας
Σκίτσο-> Συμπερίληψη βιβλιοθήκης -> Προσθήκη βιβλιοθήκης.ZIP
Για να τροφοδοτήσουμε ζωντανά τα δεδομένα από το Arduino σε ένα φύλλο Excel σε υπολογιστή, θα πρέπει επίσης να εγκαταστήσουμε λογισμικό που ονομάζεται PLX-DAQ που παρέχεται από την Parallax Inc. Ακολουθήστε τον σύνδεσμο για να κατεβάσετε το αρχείο και να τα εγκαταστήσετε με βάση το λειτουργικό σας σύστημα. Αυτό θα έπρεπε να έχει δημιουργήσει ένα φάκελο με το όνομα PLS-DAQ στην επιφάνεια εργασίας σας. Θα το φροντίσουμε αργότερα στο τμήμα εργασίας μας.
Τώρα μετά την προσθήκη και των δύο βιβλιοθηκών και μετά την εγκατάσταση του λογισμικού, μπορείτε να χρησιμοποιήσετε τον Πλήρες κώδικα (παρέχεται στο κάτω μέρος του οδηγού) και να τις ανεβάσετε στο Arduino σας. Προσπάθησα να διατηρήσω τον κώδικα όσο το δυνατόν πιο απλό και οι εξηγήσεις δίνονται επίσης μέσω σχολίων. Επιπλέον, θα εξηγήσω τα σημαντικά τμήματα παρακάτω.
1. Ανάγνωση δεδομένων από το DS3231:
Το DS3231 είναι μια μονάδα RTC (Ρολόι πραγματικού χρόνου). Χρησιμοποιείται για τη διατήρηση της ημερομηνίας και της ώρας για τα περισσότερα από τα έργα Ηλεκτρονικής. Αυτή η μονάδα έχει τη δική της τροφοδοσία κυψέλης νομισμάτων χρησιμοποιώντας την οποία διατηρεί την ημερομηνία και την ώρα ακόμη και όταν η κύρια τροφοδοσία έχει αφαιρεθεί ή το MCU έχει περάσει με σκληρή επαναφορά. Έτσι, μόλις ορίσουμε την ημερομηνία και την ώρα σε αυτήν την ενότητα, θα την παρακολουθεί πάντα.
Η χρήση αυτής της ενότητας είναι πολύ εύκολη λόγω της βιβλιοθήκης που παρέχεται από το Arduino.
// Εισαγάγετε το DS3231 χρησιμοποιώντας τη διεπαφή υλικού DS3231 rtc (SDA, SCL). void Initialize_RTC () {// Αρχικοποιήστε το αντικείμενο rtc rtc.begin (); // #### οι ακόλουθες γραμμές μπορεί να είναι ασυμβίβαστες για να ορίσετε την ημερομηνία και την ώρα για πρώτη φορά ### / * rtc.setDOW (FRIDAY); // Ορίστε την ημέρα της εβδομάδας σε ΚΥΡΙΑΚΗ rtc.setTime (18, 46, 45); // Ορίστε την ώρα στις 12:00:00 (24ωρη μορφή) rtc.setDate (6, 30, 2017); // Ορίστε την ημερομηνία έως την 1η Ιανουαρίου 2014 * /}
Σημείωση: Όταν χρησιμοποιείτε αυτήν την ενότητα για πρώτη φορά, πρέπει να ορίσετε την ημερομηνία και την ώρα. Αυτό μπορεί να γίνει απλώς αφαιρώντας τα σχόλια όπως αναφέρθηκαν παραπάνω και γράφοντας την ημερομηνία και την ώρα. Φροντίστε να τα σχολιάσετε ξανά και να τα ανεβάσετε, αλλιώς κάθε φορά που εκτελείτε τον πίνακα, η ημερομηνία και η ώρα θα ρυθμίζονται ξανά. Μπορείτε επίσης να χρησιμοποιήσετε το RTC IC DS1307 για να διαβάσετε την ώρα με το Arduino.
2. Ανάγνωση δεδομένων από DHT11:
Το DHT11 είναι ένας αισθητήρας υγρασίας θερμοκρασίας. Στέλνει τις τιμές της θερμοκρασίας και της υγρασίας ως δεδομένα 8-bit σειριακά μέσω του πείρου εξόδου της μονάδας. Η βιβλιοθήκη διαβάζει αυτά τα δεδομένα χρησιμοποιώντας τη σειριακή λειτουργία λογισμικού του Arduino.
#define DHT11_PIN 7 // Ο πείρος εξόδου του αισθητήρα είναι συνδεδεμένος με τον πείρο 7 dht DHT; // Αντικείμενο αισθητήρα που ονομάζεται DHT void Read_DHT11 () {int chk = DHT.read11 (DHT11_PIN); }
Εδώ έχω συνδέσει τον ακροδέκτη εξόδου στον ακροδέκτη 7, για παράδειγμα, μπορείτε να επιλέξετε οποιονδήποτε ακροδέκτη που υποστηρίζει το λογισμικό Serial. Κλήση DHT.read (αριθμός pin); θα διαβάσει την τιμή της θερμοκρασίας και της υγρασίας και θα την αποθηκεύσει στην παράμετρο DHT. θερμοκρασία και DHT . Υγρασία αντίστοιχα. Ελέγξτε επίσης αυτήν τη μέτρηση θερμοκρασίας Arduino με βάση το DHT11.
3. Αρχικοποίηση της μονάδας κάρτας SC:
void Initialize_SDcard () {// δείτε εάν η κάρτα υπάρχει και μπορεί να αρχικοποιηθεί: if (! SD.begin (chipSelect)) {Serial.println ("Η κάρτα απέτυχε ή δεν υπάρχει"); // μην κάνετε τίποτα περισσότερο: επιστροφή; } // ανοίξτε το αρχείο. Σημειώστε ότι μόνο ένα αρχείο μπορεί να είναι ανοιχτό κάθε φορά, // οπότε πρέπει να το κλείσετε πριν ανοίξετε άλλο. Data fileFile = SD.open ("LoggerCD.txt", FILE_WRITE); // εάν το αρχείο είναι διαθέσιμο, γράψτε το: if (dataFile) {dataFile.println ("Ημερομηνία, Ώρα, Θερμοκρασία, Υγρασία"); // Γράψτε την πρώτη σειρά του αρχείου excel dataFile.close (); }}
Η χρήση μιας κάρτας SD με το Arduino είναι εύκολη λόγω της βιβλιοθήκης καρτών SD που θα προστεθεί στο Arduino IDE από προεπιλογή. Στη λειτουργία αρχικοποίησης κάρτας SD θα δημιουργήσουμε ένα αρχείο κειμένου με το όνομα "LoggerCD.txt" και θα γράψουμε την πρώτη σειρά του περιεχομένου μας. Εδώ διαχωρίζουμε τις τιμές χρησιμοποιώντας ένα "," ως οριοθέτη. Σημασία όταν τοποθετείται ένα κόμμα σημαίνει ότι πρέπει να μετακινηθούμε στο επόμενο κελί στο φύλλο Excel.
4. Σύνταξη δεδομένων σε κάρτα SD
void Write_SDcard () {// άνοιγμα του αρχείου Σημειώστε ότι μόνο ένα αρχείο μπορεί να είναι ανοιχτό κάθε φορά, // οπότε πρέπει να το κλείσετε πριν ανοίξετε άλλο. Data fileFile = SD.open ("LoggerCD.txt", FILE_WRITE); // εάν το αρχείο είναι διαθέσιμο, γράψτε το: if (dataFile) {dataFile.print (rtc.getDateStr ()); // Ημερομηνία αποθήκευσης στην κάρτα SD dataFile.print (","); // Μεταβείτε στην επόμενη στήλη χρησιμοποιώντας ένα "," dataFile.print (rtc.getTimeStr ()); // Ημερομηνία αποθήκευσης στην κάρτα SD dataFile.print (","); // Μεταβείτε στην επόμενη στήλη χρησιμοποιώντας ένα "," dataFile.print (DHT.temperature); // Ημερομηνία αποθήκευσης στην κάρτα SD dataFile.print (","); // Μεταβείτε στην επόμενη στήλη χρησιμοποιώντας ένα "," dataFile.print (DHT.humidity); // Ημερομηνία αποθήκευσης στην κάρτα SD dataFile.print (","); // Μεταβείτε στην επόμενη στήλη χρησιμοποιώντας ένα "," dataFile.println (); // Τέλος της σειράς μετάβαση στην επόμενη σειρά dataFile.close ();// Κλείστε το αρχείο} else Serial.println ("OOPS !! Η εγγραφή κάρτας SD απέτυχε"); }
Όπως ειπώθηκε νωρίτερα, η πρόθεσή μας είναι να αποθηκεύσουμε την ημερομηνία, ώρα, θερμοκρασία και υγρασία στην κάρτα SD. Με τη βοήθεια της βιβλιοθήκης DS3231 και της βιβλιοθήκης DHT11, το Arduino θα είναι σε θέση να διαβάσει και τις τέσσερις παραμέτρους και να τις αποθηκεύσει στις ακόλουθες παραμέτρους, όπως φαίνεται στον παρακάτω πίνακα.
Ημερομηνία |
rtc.getDateStr ()); |
χρόνος |
rtc.getTimeStr ()); |
Θερμοκρασία |
Θερμοκρασία DHT |
Υγρασία |
DHT. Υγρασία |
Τώρα μπορούμε να χρησιμοποιήσουμε απευθείας αυτές τις παραμέτρους για να τις αποθηκεύσουμε στην κάρτα SD χρησιμοποιώντας τη γραμμή εκτύπωσης
dataFile.print (παράμετρος);
Μπορείτε να παρατηρήσετε ότι κάθε παράμετρος χωρίζεται από κόμμα για να φαίνεται ευανάγνωστη και dataFile.println (); χρησιμοποιείται για να δείξει το τέλος της γραμμής.
5. Σύνταξη δεδομένων στο PLX-DAQ
Το PLX-DAQ είναι λογισμικό Microsoft Excel Plug-in που μας βοηθά να γράφουμε τιμές από το Arduino σε απευθείας σε ένα αρχείο Excel στον φορητό ή τον υπολογιστή μας. Αυτό είναι το προσωπικό μου αγαπημένο για δύο λόγους:
1. Μπορείτε να γράψετε και να παρακολουθήσετε τα δεδομένα ταυτόχρονα και μας παρέχει τον τρόπο να τα σχεδιάσουμε ως γραφήματα.
2. Δεν χρειάζεστε μια μονάδα RTC όπως το DS3231 για να παρακολουθείτε την ημερομηνία και την ώρα. Μπορείτε απλά να χρησιμοποιήσετε την ημερομηνία και την ώρα που εκτελούνται στον φορητό υπολογιστή / υπολογιστή σας και να τα αποθηκεύσετε απευθείας στο Excel.
Για να χρησιμοποιήσουμε αυτό το λογισμικό με το Arduino, πρέπει να στείλουμε τα δεδομένα σειριακά σε ένα συγκεκριμένο μοτίβο, όπως να εμφανίζουμε την τιμή στη σειριακή οθόνη. Οι βασικές γραμμές εξηγούνται παρακάτω:
void Initialize_PlxDaq () {Serial.println ("CLEARDATA"); // διαγράφει τυχόν δεδομένα που απομένουν από προηγούμενα έργα Serial.println ("LABEL, Date, Time, Temperature, Humidity"); // πάντα γράψτε LABEL, για να το υποδείξετε ως πρώτη γραμμή} άκυρο Write_PlxDaq () {Serial.print ("DATA"); // γράψτε πάντα "DATA" για να δηλώσετε τα ακόλουθα ως Data Serial.print (","); // Μεταβείτε στην επόμενη στήλη χρησιμοποιώντας ένα "," Serial.print ("DATE"); // Ημερομηνία αποθήκευσης στο Excel Serial.print (","); // Μεταβείτε στην επόμενη στήλη χρησιμοποιώντας ένα "," Serial.print ("TIME"); // Ημερομηνία αποθήκευσης στο Excel Serial.print (","); // Μεταβείτε στην επόμενη στήλη χρησιμοποιώντας ένα "," Serial.print (DHT.temperature); // Ημερομηνία αποθήκευσης στο Excel Serial.print (","); // Μεταβείτε στην επόμενη στήλη χρησιμοποιώντας ένα "," Serial.print (DHT.humidity);// Ημερομηνία αποθήκευσης στο Excel Serial.print (","); // Μεταβείτε στην επόμενη στήλη χρησιμοποιώντας ένα "," Serial.println (); // Τέλος της σειράς μετάβαση στην επόμενη σειρά}
Το λογισμικό μπορεί να αναγνωρίσει λέξεις-κλειδιά όπως LABEL, DATA, TIME, DATE κ.λπ. Όπως φαίνεται στη συνάρτηση Initialize η λέξη-κλειδί "LABEL" χρησιμοποιείται για τη σύνταξη της πρώτης σειράς του φύλλου Excel. Αργότερα στη συνάρτηση Write χρησιμοποιούμε τη λέξη-κλειδί "DATA" για να υποδείξουμε ότι οι ακόλουθες πληροφορίες πρέπει να θεωρηθούν ως DATA. Για να δείξουμε ότι πρέπει να προχωρήσουμε στην επόμενη σειρά πρέπει να χρησιμοποιήσουμε κόμμα (","). Για να δείξουμε το τέλος της σειράς πρέπει να στείλουμε ένα Serial.println ();.
Όπως ειπώθηκε νωρίτερα, μπορούμε να γράψουμε την ημερομηνία και την ώρα του συστήματος στέλνοντας τις λέξεις-κλειδιά "DATE" και "TIME" αντίστοιχα όπως φαίνεται παραπάνω.
Σημείωση: Μην χρησιμοποιείτε σειριακή οθόνη κατά τη χρήση αυτού του λογισμικού PLX_DAQ.
Επεξήγηση εργασίας:
Η εργασία του Arduino Data Logger είναι απλή. Μόλις το υλικό και το λογισμικό είναι έτοιμα, είναι καιρός να εγγράψετε το πρόγραμμα στο Arduino Board σας. Μόλις φορτωθεί το πρόγραμμά σας, οι τιμές θερμοκρασίας και υγρασίας θα αρχίσουν να αποθηκεύονται στην κάρτα SD σας. Πρέπει να ακολουθήσετε τα παρακάτω βήματα για να επιτρέψετε στο PLX-DAQ να συνδεθεί στο φύλλο Excel στον υπολογιστή.
Βήμα 1: Ανοίξτε το αρχείο "Plx-Daq Spreadsheet" που δημιουργήθηκε στην επιφάνεια εργασίας σας κατά την εγκατάσταση.
Βήμα 2: Εάν υπάρχει ένα μπλοκ ασφαλείας, κάντε κλικ στο Επιλογές-> Ενεργοποίηση του περιεχομένου -> Τέλος -> OK για να εμφανιστεί η ακόλουθη οθόνη.
Βήμα 3: Τώρα επιλέξτε το ρυθμό baud ως "9600" και τη θύρα στην οποία είναι συνδεδεμένο το Arduino και κάντε κλικ στο Connect. Οι τιμές σας πρέπει να αρχίσουν να καταγράφονται όπως φαίνεται στην παρακάτω εικόνα.
Μπορείτε να αφήσετε αυτό το φύλλο excel ανοιχτό και να παρακολουθείτε τις τιμές καθώς καταγράφονται. Καθώς αυτό συμβαίνει, η κάρτα SD θα είχε επίσης αποθηκεύσει τις ίδιες τιμές. Για να ελέγξετε ότι λειτουργεί, απλώς αφαιρέστε την κάρτα SD και ανοίξτε την στον υπολογιστή σας. Θα πρέπει να βρείτε ένα αρχείο κειμένου με το όνομα "LoggerCD.txt" σε αυτό. Όταν άνοιξε θα έμοιαζε κάπως έτσι.
Αυτό το αρχείο έχει δεδομένα, αλλά θα ήταν δύσκολο να τα αναλύσετε σε ένα σημειωματάριο. Ως εκ τούτου μπορούμε να το ανοίξουμε στο Excel ως αρχείο CSV (τιμές διαχωρισμένες με κόμματα), καθιστώντας το πιο αποτελεσματικό. Για να ανοίξετε το Excel
1. Ανοίξτε το Excel. Κάντε κλικ στο Αρχείο-> Άνοιγμα και επιλέξτε "Όλα τα αρχεία" στην κάτω δεξιά γωνία και επιλέξτε το αρχείο "LoggerCD" από την κάρτα SD. Αυτό θα ανοίξει έναν οδηγό εισαγωγής κειμένου.
2. Κάντε κλικ στο «Επόμενο» και επιλέξτε κόμμα ως οριοθέτης. Κάντε ξανά κλικ στο «Επόμενο». Τότε τελειώστε.
3. Τώρα οι τιμές σας θα ανοίξουν σε ένα αρχείο Excel όπως φαίνεται παρακάτω
Έχω καταγράψει τις τιμές για κάθε 5 δευτερόλεπτα. Μπορείτε να τα καταγράψετε για οποιαδήποτε επιθυμητή ώρα αλλάζοντας τη λειτουργία καθυστέρησης στο πρόγραμμα. Για λεπτομερή κατανόηση της εργασίας παρακαλώ παρακολουθήστε το παρακάτω βίντεο.
Ελπίζω να σας άρεσε το έργο, αν έχετε οποιαδήποτε αμφιβολία γράψτε τα στην παρακάτω ενότητα σχολίων και θα σας βοηθήσω.
Βελτίωση μπόνους - Ασύρματη καταγραφή δεδομένων με χρήση του Arduino:
Μόλις πετύχετε μέχρι αυτό το σημείο, τότε με λίγες εξελίξεις και προσθέτοντας μερικές γραμμές κώδικα μπορείτε να καταγράψετε δεδομένα ασύρματα.
Απλώς συνδέστε μια συσκευή Bluetooth όπως το HC-05 και γράψτε τα δεδομένα στο PLX-DAQ μέσω Bluetooth αντί για Serial. Αυτό είναι αντικατάσταση Serial.print (παράμετρος)? με BluetoothName.print (παράμετρος); και συνδέστε το φορητό υπολογιστή σας στη μονάδα Bluetooth και επιλέξτε τη θύρα COM στην οποία είναι συνδεδεμένο το φορητό υπολογιστή σας Bluetooth και Taadaaa…… Έχετε λειτουργικό σύστημα ασύρματης καταγραφής δεδομένων σε χρόνο μηδέν.