Ενότητα διασύνδεσης κάρτας SD για καταγραφή δεδομένων

Δοκιμάστε Το Όργανο Μας Για Την Εξάλειψη Των Προβλημάτων





Σε αυτήν την ανάρτηση πρόκειται να διασυνδέσουμε τη μονάδα κάρτας SD με το arduino για καταγραφή δεδομένων. Θα δούμε επισκόπηση της μονάδας κάρτας SD και θα κατανοήσουμε τις διαμορφώσεις των καρφιτσών και τα στοιχεία του σκάφους. Τέλος, θα κατασκευάσουμε ένα κύκλωμα για την καταγραφή των δεδομένων θερμοκρασίας και υγρασίας στην κάρτα SD.



Ασφαλής ψηφιακή κάρτα

Η κάρτα SD ή η κάρτα Secure Digital είναι ευεργετική για τα σύγχρονα ηλεκτρονικά είδη καθώς παρέχει αποθήκευση υψηλής χωρητικότητας σε ελάχιστο μέγεθος. Χρησιμοποιήσαμε την κάρτα SD για αποθήκευση πολυμέσων σε ένα από τα προηγούμενα έργα (συσκευή αναπαραγωγής Mp3). Εδώ πρόκειται να το χρησιμοποιήσουμε για καταγραφή δεδομένων.

Η καταγραφή δεδομένων είναι το θεμελιώδες βήμα για την καταγραφή του παρελθόντος ενός συμβάντος. Για παράδειγμα: επιστήμονες και ερευνητές μπορούν να ερμηνεύσουν την άνοδο της παγκόσμιας θερμοκρασίας.



Έφτασαν σε αυτό το συμπέρασμα αφού κατέλαβαν το αυξανόμενο μοτίβο θερμοκρασίας κοιτάζοντας τα δεδομένα των τελευταίων δεκαετιών. Η καταγραφή των δεδομένων για το τρέχον περιστατικό μπορεί επίσης να αποκαλύψει το μελλοντικό περιστατικό.

Δεδομένου ότι το arduino είναι ένας εξαιρετικός μικροελεγκτής για την ανάγνωση δεδομένων αισθητήρων και υποστηρίζει διάφορα πρωτόκολλα επικοινωνίας για την ανάγνωση των αισθητήρων και των περιφερειακών εξόδου εισόδου, η σύνδεση μεταξύ της μονάδας κάρτας SD arduino έκανε κομμάτι κέικ.

Εφόσον το arduino δεν διαθέτει αποθηκευτικό χώρο εκτός από το δικό του χώρο αποθήκευσης προγραμμάτων, μπορούμε να προσθέσουμε έναν εξωτερικό χώρο αποθήκευσης χρησιμοποιώντας την ενότητα που περιγράφεται σε αυτό το άρθρο.

Ας ρίξουμε μια ματιά στην ενότητα κάρτας SD.

Εικόνα μονάδας κάρτας SD:

Εικόνα μονάδας κάρτας SD:

Πίσω πλευρά της μονάδας και διαμόρφωση ακίδων:

Πίσω πλευρά της μονάδας και διαμόρφωση ακίδων:

Υπάρχουν έξι ακίδες και υποστηρίζει πρωτόκολλο επικοινωνίας SPI (σειριακή περιφερειακή διεπαφή). Για το Arduino UNO οι ακίδες επικοινωνίας SPI είναι 13, 12, 11 και 10. Για το Arduino mega οι ακίδες SPI είναι 50, 51, 52 και 53.

Το προτεινόμενο έργο απεικονίζεται με το Arduino UNO εάν έχετε οποιοδήποτε άλλο μοντέλο Arduino, παρακαλούμε ανατρέξτε στο Διαδίκτυο για τις καρφίτσες SPI.

Η μονάδα αποτελείται από έναν κάτοχο κάρτας που κρατά την κάρτα SD στη θέση της. Ο ρυθμιστής 3.3V παρέχεται για τον περιορισμό της τάσης σε κάρτες SD καθώς έχει σχεδιαστεί για να λειτουργεί στα 3.3V και όχι στα 5V.

Διαθέτει ενσωματωμένο κύκλωμα LVC125A, το οποίο έχει μετατόπιση λογικού επιπέδου. Η λειτουργία της αλλαγής στάθμης λογικής είναι η μείωση των σημάτων 5V από arduino σε 3.3V λογικά σήματα.

Τώρα που ολοκληρώνει τη μονάδα κάρτας SD.

Χρησιμοποιώντας τη μονάδα κάρτας SD μπορούμε να αποθηκεύσουμε οποιονδήποτε βασιλιά δεδομένων, εδώ θα αποθηκεύσουμε δεδομένα κειμένου. Θα αποθηκεύουμε δεδομένα θερμοκρασίας και υγρασίας στην κάρτα SD. Χρησιμοποιούμε επίσης μονάδα ρολογιού σε πραγματικό χρόνο για την καταγραφή του χρόνου μαζί με τα δεδομένα αισθητήρα. Καταγράφει τα δεδομένα κάθε 30 δευτερόλεπτα.

Σχηματικό διάγραμμα:

Ενότητα διασύνδεσης κάρτας SD για καταγραφή δεδομένων

Η μονάδα RTC θα παρακολουθεί την ώρα και θα καταγράφει την ημερομηνία και την ώρα στην κάρτα SD.

Η λυχνία LED σφάλματος αναβοσβήνει γρήγορα, εάν η κάρτα SD αποτύχει ή δεν ξεκινήσει ή δεν υπάρχει κάρτα SD. Υπόλοιπο χρόνο το LED παραμένει σβηστό.

ΠΩΣ ΝΑ ΡΥΘΜΙΣΕΤΕ ΧΡΟΝΟ ΣΤΟ RTC:

• Κατεβάστε την παρακάτω βιβλιοθήκη.
• Με την ολοκλήρωση της εγκατάστασης υλικού, συνδέστε το arduino στον υπολογιστή.
• Ανοίξτε το arduino IDE
• Μεταβείτε στο Αρχείο> Παραδείγματα> DS1307RTC> SetTime.
• Μεταφορτώστε τον κωδικό και το RTC θα συγχρονιστεί με την ώρα του υπολογιστή.
• Τώρα ανεβάστε τον κωδικό που δίνεται παρακάτω.

Πραγματοποιήστε λήψη της ακόλουθης βιβλιοθήκης arduino πριν ανεβάσετε τον κωδικό.

DS1307RTC: github.com/PaulStoffregen/DS1307RTC

Θερμοκρασία & υγρασία DHT11: arduino-info.wikispaces.com/file/detail/DHT-lib.zip

Πρόγραμμα:

//-----Program developed by R.Girish-----//
#include
#include
#include
#include
#include
#include
#define DHTxxPIN A0
const int cs = 10
const int LED = 7
dht DHT
int ack
int f
File myFile
void setup()
{
Serial.begin(9600)
pinMode(LED,OUTPUT)
if (!SD.begin(cs))
{
Serial.println('Card failed, or not present')
while(true)
{
digitalWrite(LED, HIGH)
delay(100)
digitalWrite(LED, LOW)
delay(100)
}
}
Serial.println('Initialization done')
}
void loop()
{
myFile = SD.open('TEST.txt', FILE_WRITE)
if(myFile)
{
Serial.println('----------------------------------------------')
myFile.println('----------------------------------------------')
tmElements_t tm
if(!RTC.read(tm))
{
goto A
}
if (RTC.read(tm))
{
Serial.print('TIME:')
if(tm.Hour>12) //24Hrs to 12 Hrs conversion//
{
if(tm.Hour==13)
{
Serial.print('01')
myFile.print('01')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==14)
{
Serial.print('02')
myFile.print('02')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==15)
{
Serial.print('03')
myFile.print('03')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==16)
{
Serial.print('04')
myFile.print('04')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==17)
{
Serial.print('05')
myFile.print('05')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==18)
{
Serial.print('06')
myFile.print('06')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==19)
{
Serial.print('07')
myFile.print('07')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==20)
{
Serial.print('08')
myFile.print('08')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==21)
{
Serial.print('09')
myFile.print('09')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==22)
{
Serial.print('10')
myFile.print('10')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==23)
{
Serial.print('11')
myFile.print('11')
Serial.print(':')
myFile.print(':')
}
else
{
Serial.print(tm.Hour)
myFile.print(tm.Hour)
Serial.print(':')
myFile.print(':')
}
Serial.print(tm.Minute)
myFile.print(tm.Minute)
Serial.print(':')
myFile.print(':')
Serial.print(tm.Second)
myFile.print(tm.Second)
if(tm.Hour>=12)
{
Serial.print(' PM')
myFile.print( ' PM')
}
if(tm.Hour<12)
{
Serial.print('AM')
myFile.print( ' AM')
}
Serial.print(' DATE:')
myFile.print(' DATE:')
Serial.print(tm.Day)
myFile.print(tm.Day)
Serial.print('/')
myFile.print('/')
Serial.print(tm.Month)
myFile.print(tm.Month)
Serial.print('/')
myFile.print('/')
Serial.println(tmYearToCalendar(tm.Year))
myFile.println(tmYearToCalendar(tm.Year))
Serial.println('----------------------------------------------')
myFile.println('----------------------------------------------')
} else {
A:
if (RTC.chipPresent())
{
Serial.print('RTC stopped!!!')
myFile.print('RTC stopped!!!')
Serial.println(' Run SetTime code')
myFile.println(' Run SetTime code')
} else {
Serial.print('RTC Read error!')
myFile.print('RTC Read error!')
Serial.println(' Check circuitry!')
myFile.println(' Check circuitry!')
}
}
ack=0
int chk = DHT.read11(DHTxxPIN)
switch (chk)
{
case DHTLIB_ERROR_CONNECT:
ack=1
break
}
if(ack==0)
{
f=DHT.temperature*1.8+32
Serial.print('Temperature(C) = ')
myFile.print('Temperature(°C) = ')
Serial.println(DHT.temperature)
myFile.println(DHT.temperature)
Serial.print('Temperature(F) = ')
myFile.print('Temperature(°F) = ')
Serial.print(f)
myFile.print(f)
Serial.print('n')
myFile.println(' ')
Serial.print('Humidity(%) = ')
myFile.print('Humidity(%) = ')
Serial.println(DHT.humidity)
myFile.println(DHT.humidity)
Serial.print('n')
myFile.println(' ')
}
if(ack==1)
{
Serial.println('NO DATA')
myFile.println('NO DATA')
}
for(int i=0 i<30 i++)
{
delay(1000)
}
}
myFile.close()
}
}

// ----- Πρόγραμμα που αναπτύχθηκε από τον R.Girish ----- //

Μόλις το κύκλωμα επιτρέπεται να καταγράφει δεδομένα για κάποιο χρονικό διάστημα, μπορείτε να αφαιρέσετε την κάρτα SD που συνδέεται στον υπολογιστή σας, θα υπάρχει αρχείο TEXT.txt το οποίο καταγράφονται όλα τα δεδομένα θερμοκρασίας και υγρασίας μαζί με την ώρα και την ημερομηνία, όπως φαίνεται παρακάτω.

ΣΗΜΕΙΩΣΗ: Η παραπάνω ιδέα είναι ένα παράδειγμα τρόπου διασύνδεσης και καταγραφής δεδομένων. Η χρήση αυτού του έργου εξαρτάται από τη φαντασία σας, μπορείτε να καταγράψετε δεδομένα αισθητήρα οποιουδήποτε είδους.

Πρωτότυπο συγγραφέα:

Πρωτότυπο για ενδιάμεση μονάδα κάρτας SD με Arduino




Προηγούμενο: Αισθητήρες χωρίς επαφή - Υπέρυθρες, Θερμοκρασία / Υγρασία, Χωρητικό, Φως Επόμενο: Πώς να συνδέσετε έναν αισθητήρα φωτοδιόδου IR σε ένα κύκλωμα