ממשק כרטיס SD לרישום נתונים

נסה את הכלי שלנו לביטול בעיות





בפוסט זה אנו הולכים להתממשק מודול כרטיס SD עם ארדואינו לרישום נתונים. נראה סקירה כללית של מודול כרטיס SD ונבין את תצורות הסיכה שלו ואת רכיבי הלוח. לבסוף נבנה מעגל לרישום נתוני הטמפרטורה והלחות לכרטיס SD.



כרטיס דיגיטלי מאובטח

כרטיס SD או כרטיס Secure Digital הם ברכה לאלקטרוניקה מודרנית מכיוון שהוא מספק אחסון בקיבולת גבוהה בגודל מינימלי. השתמשנו בכרטיס SD לאחסון מדיה באחד הפרויקטים הקודמים (נגן MP3). כאן אנו נשתמש בו לרישום נתונים.

רישום נתונים הוא הצעד הבסיסי לרישום התרחשות העבר של אירוע. לדוגמא: מדענים וחוקרים המסוגלים לפרש את עליית הטמפרטורה העולמית.



הם הגיעו למסקנה זו לאחר שהבינו את דפוס הטמפרטורה העולה על ידי בדיקת הנתונים של העשורים האחרונים. הקלטת הנתונים על האירוע הנוכחי עשויה לחשוף גם לגבי ההתרחשות העתידית.

מכיוון שארדואינו היה מיקרו-בקר נהדר לקריאת נתוני חיישנים ותומך בפרוטוקולי תקשורת שונים לקריאת החיישנים וציוד הפלט של קלט, החיבור בין מודול כרטיס ה- SD לארדואינו עשה חתיכת עוגה.

מכיוון שלארדואינו אין אחסון מלבד שטח אחסון תוכנית משלו, אנו יכולים להוסיף אחסון חיצוני באמצעות המודול המתואר במאמר זה.

עכשיו בואו נסתכל על מודול כרטיס ה- 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.3 וולט ולא 5V.

יש לו מעגל משולב LVC125A שהוא מעביר רמת לוגיקה. הפונקציה של הסטת רמת ההיגיון היא להפחית אותות 5V מארדואינו לאותות לוגיים של 3.3V.

עכשיו זה מסיים את מודול כרטיס ה- SD.

באמצעות מודול כרטיס SD אנו יכולים לאחסן כל מלך נתונים, כאן אנו הולכים לאחסן נתוני טקסט. נשמור נתוני טמפרטורה ולחות בכרטיס SD. אנו משתמשים גם במודול שעון בזמן אמת כדי לתעד את הזמן יחד עם נתוני חיישנים. הוא מתעד את הנתונים כל 30 שניות.

תרשים סכמטי:

ממשק כרטיס SD לרישום נתונים

מודול ה- RTC יעקוב אחר הזמן וירשם את התאריך והשעה לכרטיס ה- SD.

נורית השגיאה מהבהבת במהירות, אם כרטיס ה- SD נכשל או נכשל באתחול או שכרטיס ה- SD אינו קיים. בשאר הזמן הנורית נשארת כבויה.

כיצד להגדיר זמן ל- RTC:

• הורד את הספרייה למטה.
• עם הגדרת החומרה שהושלמה, חבר את הארדואינו למחשב האישי.
• פתח 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




קודם: חיישנים ללא מגע - אינפרא אדום, טמפרטורה / לחות, קיבולי, קל הבא: כיצד לחבר חיישן פוטו-דיודה במעגל