ذخیره اطلاعات در کارت حافظه SD با آردوینو (+اکسل)

محتویات
ذخیره سازی داده ها یکی از مهمترین بخش های هر پروژه است. روش های مختلفی برای ذخیره داده ها با توجه به نوع و اندازه داده ها وجود دارد. کارتهای SD و micro SD یکی از کاربردیترین کارتها در میان فضا های ذخیرهسازیها هستند که در دستگاههایی مانند تلفن همراه، مینی کامپیوتر و … استفاده میشوند.
در این آموزش، نحوه استفاده از کارت های SD و micro SD با آردوینو را خواهید آموخت.
در پایان به عنوان یک پروژه ساده دمای محیط را اندازه گیری کرده و روی کارت SD ذخیره می کنید.
آنچه شما یاد خواهید گرفت:
- نحوه استفاده از کارت حافظه SD و micro SD
- نوشتن اطلاعات روی کارت SD
- خواندن اطلاعات از کارت SD
ماژول کارت SD و Micro SD
ماژول های کارت حافظه SD و micro SD به شما این امکان را می دهند که با کارت حافظه ارتباط برقرار کرده و اطلاعات روی آنها را بنویسید یا بخوانید. اتصال ماژول کارت SD به آردوینو از طریق پروتکل SPI است.
برای استفاده از این ماژول ها با آردوینو به کتابخانه SD نیاز دارید. این کتابخانه به صورت پیش فرض بر روی نرم افزار آردوینو نصب شده است.
توجه کنید: این ماژول ها نمی توانند کارت های حافظه با ظرفیت بالا را کنترل کنند. معمولاً حداکثر ظرفیت قابل شناسایی این ماژول ها برای کارت های SD برابر 2 گیگابایت و برای کارت های micro SD 16 گیگابایت است.

دستورات مهم کتابخانه ماژول SD
توضیح مختصری از دستورات کاربردی کتابخانه SD در زیر ارائه شده است:
- SD.begin(sspin) = شروع کار با ماژول کارت SD است. در پرانتز شماره پایه SS را وارد کنید.
- SD.exists(filename) = بررسی میکند فایل مورد نظر در کارت حافظه موجود است یا خیر
- SD.open(filepath,mode) = فایل را در کارت SD باز میکند و در حالت خواندن یا نوشتن قرار میدهد.
- file.close() = فایل را میبندد و موارد درون آن را ذخیره میکند. (file نام فایل مورد نظر شما است)
- SD.remove(filename) = فایل داده شده را از حافظه پاک میکند.
- SD.mkdir(name) = یک پوشه در کارت حافظه SD ایجاد میکند.
- SD.rmdir(name) = پوشه را در کارت حافظه SD حذف میکند.
- file.name() = نام فایل را برمیگرداند. (file نام فایل مورد نظر شما است)
- file.print(data) = داده های شما را در فایل مورد نظر قرار میدهد.
- file.println(data) = داده های شما را همراه با خط جدید (new line) در فایل مورد نظر قرار میدهد.
- file.read() = فایل مورد نظر را میخواند.
- file.available() = بررسی میکند آیا در فایل چیزی موجود است یا خیر
دقت کنید در متود ها کلمه file که در ابتدا نوشته شده است نام فایل مورد نظر شما است. این کتابخانه دستورات زیادی دارد که مهم ترین های آن ها را در اینجا بررسی کردیم
اتصال ماژول کارت حافظه SD به آردوینو
نکته: ماژول استفاده شده در این آموزش، ماژول micro SD است، اما برای ماژول های SD نیز می توانید از کد و آموزش استفاده کنید.
استفاده از این ماژول بسیار ساده است و نحوه سیم کشی و اتصال آن به آردوینو به شرح زیر است:
کد نوشتن اطلاعات روی کارت SD با آردوینو
کد زیر برای نوشتن داده ها روی کارت حافظه SD با برد آردوینو استفاده میشود. توضیحات خط به خط قرار داده شده است.
#include <SPI.h>
#include <SD.h>
File myFile;
void setup() {
// آغاز ارتباط سریال
Serial.begin(9600);
while (!Serial) {
; // صبر برای برقراری ارتباط سریال
}
Serial.print("Initializing SD card...");
if (!SD.begin(10)) {
Serial.println("initialization failed!");
while (1);
}
Serial.println("initialization done.");
// باز کردن فایل
myFile = SD.open("test.txt", FILE_WRITE);
// اگر فایل باز شده است، مواردی را در آن مینویسیم.
if (myFile) {
Serial.print("Writing to test.txt...");
myFile.println("This is a test file :)");
myFile.println("testing 1, 2, 3.");
for (int i = 0; i < 20; i++) {
myFile.println(i);
}
// بستن فایل
myFile.close();
Serial.println("done.");
} else {
// اگر فایل باز نشده بود این ارور نمایش داده شود
Serial.println("error opening test.txt");
}
}
void loop() {
// چیزی به صورت متناوب اجرا نمیکنیم
}
نتیجه اجرای کد بالا، ایجاد یک فایل txt با محتوای زیر است.
کد آردوینو برای خواندن داده های کارت حافظه SD
#include <SPI.h>
#include <SD.h>
File myFile;
void setup() {
// آغاز ارتباط سریال
Serial.begin(9600);
while (!Serial) {
; // صبر برای برقراری ارتباط سریال
}
Serial.print("Initializing SD card...");
if (!SD.begin(10)) {
Serial.println("initialization failed!");
while (1);
}
Serial.println("initialization done.");
// باز کردن فایل برای خواندن
myFile = SD.open("test.txt");
if (myFile) {
Serial.println("test.txt:");
// خواندن داده های موجود در فایل
while (myFile.available()) {
Serial.write(myFile.read());
}
// بستن فایل
myFile.close();
} else {
// اگر فایل باز نشده است ارور چاپ شود
Serial.println("error opening test.txt");
}
}
void loop() {
// هیچ چیز را به صورت متناوب اجرا نمیکنیم
}
نتیجه اجرای کد بالا:
ذخیره دما روی SD همراه با ساعت
شما میتوانید از ماژول RTC DS3231 برای اضافه کردن قابلیت زمان و تاریخ به کد خود اضافه کنید. ما در این پروژه همراه با ذخیره دما، ساعت را نیز ذخیره میکنیم. پیشنهاد میکنم مقاله راه اندازی DS3231 با آردوینو را بخوانید. مدار زیر نحوه اتصال ماژول کارت خوان SD و ماژول RTC DS3231 به آردوینو را نشان میدهد.
برای کار با ماژول DS3231، ابتدا باید کتابخانه (Sodaq_DS3231.h) را به آردوینو اضافه کنید. (آموزش نصب کتابخانه آردوینو)
#include <SPI.h>
#include <SD.h>
#include <Wire.h>
#include "Sodaq_DS3231.h"
File myFile;
DateTime now;
int newHour = 0;
int oldHour = 0;
void save_temperature() {
myFile = SD.open("temp.txt", FILE_WRITE);
now = rtc.now();
myFile.print(now.hour());
myFile.print(":");
myFile.print(now.minute());
rtc.convertTemperature(); //تبدیل دما
myFile.print(",");
myFile.println(rtc.getTemperature()); //ذخیره دما در کارت حافظه
myFile.close();
}
void setup ()
{
Wire.begin();
rtc.begin();
Serial.begin(9600);
Serial.print("Initializing SD card...");
if (!SD.begin(10)) {
Serial.println("initialization failed!");
while (1);
}
Serial.println("initialization done.");
now = rtc.now();
oldHour = now.hour();
}
void loop ()
{
now = rtc.now();
newHour = now.hour();
if (oldHour != newHour) {
save_temperature();
oldHour = newHour;
}
}
کد بالا راس هر ساعت دما را در فایل ذخیره میکند. داده های ذخیره شده در فایل را میتوانید با استفاده از اکسل مطالعه کنید یا در صورت نیاز در نمودار رسم کنید.
برای انجام این کار ابتدا اکسل را باز کنید و روی گزینه مشخص شده کلیک کنید.
سپس فایل خود را انتخاب کنید. در پنجره بعدی روی Next کلیک کنید. در ادامه گزینه Comma را انتخاب کنید و اطلاعات شما در اکسل ظاهر خواهند شد.
برای تمرین میتوانید یک دستگاه کنترل ورود/خروج بسازید. با استفاده از ماژول RFID و آردوینو، هر فرد را شناسایی کنید و اطلاعات را در کارت حافظه SD ذخیره کنید.
کدش رو نمیتونید بگید؟
سلام میشه فایل های ذخیره شده رو روی ال سی دی نمایش داد؟
مثلا اینطوری که ما یک ساعت مشخص رو بدیم و اون بگه دما در اون لحظه چند درجه بود
سلام عزیز
بله
سلام میشه کاری کرد که چیزی را که با کلیپد تایپ می کنیم همون عدد رو پس از زدن دکمه ستاره روی کارت micro sdذخیره کنه
سلام استاد من می خواستم علاوه بر ذخیره دما بر میکروsd اون رو در ماژول اولد هم ذخیره کنم
ماژول ها به صورت جداگانه کار می کنه ولی وقتی کد های جفتشون رو باهم می زنم نه میکرو sd کار می کنه و نه اولد من اینو با آردوینو زدم می خواستم بدونم کدش رو در ماژول wemos بزنم باز هم این مشکل هست یا خیر
سلام…ایا در برد اردوینو امکان خواندن اطلاعات به صورت مستقیم از فایل اکسل وجود دارد؟؟یا فقط به صورت txt میتونه بخونه یا ذخیره کنه؟؟
سلام عزیز
اگر از این ماژول استفاده میکنید باید از فرمت فایل مناسب همین ماژول استفاده شود.