logo-site-sefid
Search
Close this search box.
Untitled-1

ذخیره اطلاعات در آردوینو

آموزش ذخیره اطلاعات در آردوینو وکارت SD

در این آموزش آردینو ما یاد می‌گیریم که چگونه از یک ماژول کارت SD با برد آردینو برای ذخیره اطلاعات در آردوینو استفاده کنیم. همچنین در ترکیب با ماژول ساعت زمان واقعی DS3231 یک نمونه ثبت داده خواهیم ساخت که در آن داده‌های سنسور دما را در کارت SD ذخیره کرده و آن را به اکسل وارد می‌کنیم تا یک نمودار از آن بسازیم.

ماژول SD کارت چگونه کار می‌کند

اول اجازه دهید نگاهی به ماژول کارت SD بیندازیم. این دستگاه با کارت‌های استاندارد میکرو SD کار می‌کند که ولتاژ کاری آن ۳.۳ ولت است. بنابراین، ماژول دارای تنظیم کننده ولتاژ تغییر سطح است تا بتوانیم از آن با پین های 5 ولت آردوینو استفاده کنیم.

ذخیره اطلاعات در آردوینو
ذخیره اطلاعات در آردوینو


ماژول کارت SD دارای شش پین، دو پین برای تقویت ماژول، VCC و GND، و چهار پین دیگر برای ارتباط SPI است. این روشی است که ما باید ماژول کارت SD را به برد آردینو متصل کنیم.

02-چگونه-کار-می کند


توجه داشته باشید که هر برد آردینو دارای پین‌های SPI مختلفی است که باید بر این اساس متصل شوند.

03-چگونه-کار-می کند

کد ماژول کارت SD آردینو

سپس ما باید آردینو را برنامه‌ نویسی کنیم. این یک کد ساده است ما در بخش های مختلف آموزش رباتیک و ساخت رباتهای هوشمند نیز از برنامه نویسی آردوینو استفاده خواهیم کرد.

/*
 *  Arduino SD Card Tutorial Example
 *  
 *  by Dejan Nedelkovski, www.HowToMechatronics.com
 */
#include <SD.h>
#include <SPI.h>
File myFile;
int pinCS = 53; // Pin 10 on Arduino Uno
void setup() {
    
  Serial.begin(9600);
  pinMode(pinCS, OUTPUT);
  
  // SD Card Initialization
  if (SD.begin())
  {
    Serial.println("SD card is ready to use.");
  } else
  {
    Serial.println("SD card initialization failed");
    return;
  }
  
  // Create/Open file 
  myFile = SD.open("test.txt", FILE_WRITE);
  
  // if the file opened okay, write to it:
  if (myFile) {
    Serial.println("Writing to file...");
    // Write to file
    myFile.println("Testing text 1, 2 ,3...");
    myFile.close(); // close the file
    Serial.println("Done.");
  }
  // if the file didn't open, print an error:
  else {
    Serial.println("error opening test.txt");
  }
  // Reading the file
  myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("Read:");
    // Reading the whole file
    while (myFile.available()) {
      Serial.write(myFile.read());
   }
    myFile.close();
  }
  else {
    Serial.println("error opening test.txt");
  }
  
}
void loop() {
  // empty
}


شرح کد: بنابراین ابتدا باید کتابخانه‌های SD و SPI استاندارد را در نظر بگیریم، یک شی “” File را ایجاد کنیم و پین ChipSelect ، SPI را برای برد مگا آردوینو تعریف کنیم. برای این مثال ما می‌خواهیم که کد ما تنها یکبار اجرا شود، بنابراین تمام کد در بخش “راه‌اندازی” قرار داده خواهد شد، در حالی که بخش “حلقه” خالی باقی خواهد ماند.
بنابراین ابتدا باید ارتباط سریال را شروع کنیم و پین ChipSelect را به عنوان خروجی تعریف کنیم. ما باید این کار را انجام دهیم چون پین ChipSelect باید “پایین” باشد تا ارتباط SPI بین ماژول و آردوینو کار کند.
سپس، با استفاده از تابع ()SDbegin، کارت SD را راه‌اندازی می‌کنیم و اگر مقدار دهی اولیه موفق باشد، عبارت “if” درست خواهد شد و کارت SD رشته آماده استفاده است.” بر روی مانیتور سریال چاپ خواهد شد، در غیر این صورت رشته “مقدار دهی کارت SD” خراب خواهد شد و همچنین برنامه خاتمه خواهد یافت.
سپس، با استفاده از تابع ()‏SD open فایل جدیدی به نام “test.txt” را ایجاد خواهیم کرد، از جمله شناسه FILE-WRITE به این معنی است که ما می‌توانیم هر دو فایل را بخوانیم و بنویسیم. اگر فایل از قبل وجود داشته باشد تابع SD.open() آن را باز خواهد کرد.
بنابراین اگر فایل با موفقیت ایجاد شده باشد، ابتدا رشته “Writing to file” را بر روی مانیتور سریال چاپ می‌کنیم و سپس با استفاده از تابع () myFile.prin tln متن “…Testing text 1,2,3” را در فایل چاپ می‌کنیم. پس از آن باید از تابع ()close استفاده کنیم تا اطمینان حاصل کنیم که داده‌های قبلی نوشته شده در فایل به صورت فیزیکی در کارت SD ذخیره شده‌اند.
سپس، خواهیم دید که چگونه می‌توانیم از فایل بخوانیم. بنابراین دوباره همان تابع ()SD.open را خواهیم داشت، اما این بار به عنوان فایل “test.txt” ایجاد شده‌است، این تابع فایل را باز خواهد کرد. سپس با استفاده از تابع ()myFile از فایل خواهیم خواند و آن را بر روی مانیتور سریال چاپ خواهیم کرد. تابع read() در واقع فقط یک کاراکتر را در یک زمان می‌خواند، بنابراین ما باید از حلقه “while” و تابع ()myFile.avai lable برای خواندن تمام کاراکترها یا کل داده‌های نوشته شده قبلی استفاده کنیم. در پایان ما باید فایل را ببندیم.
حالا پس از آپلود کد در آردوینو، اگر همه چیز درست باشد، موارد زیر بر روی مانیتور سریال ظاهر خواهند شد.

04-کد-ماژول-کارت- اس دی- آردوینو


همانطور که می‌بینیم، کارت SD با موفقیت اولیه شده‌ است، نوشتن برای آن نیز موفق بوده‌است، و همچنین خواندن داده‌های نوشته شده یا رشته “…Testing text 1, 2,3 ” نیز موفق خوانده شده‌است. اگر کارت SD را روی کامپیوترمان باز کنیم، می‌توانیم فایل “test.txt” ایجاد شده و متن نوشته شده در آن را ببینیم.

ثبت اطلاعات SD کارت آردوینو

حال بیایید یک مثال جالب دیگر از ثبت داده‌های سنسور دما ارائه دهیم. برای این منظور ما از ماژول DS3231 Real Time Clock استفاده خواهیم کرد که یک سنسور حرارتی داخلی نیز دارد.
بنابراین پس از اتصال این دو ماژول به آردوینو بیایید نگاهی به کد این مثال بیندازیم.

/*
 *  Arduino Temperature Data Logging
 *  
 *  by Dejan Nedelkovski, www.HowToMechatronics.com
 */
#include <SD.h>
#include <SPI.h>
#include <DS3231.h>
File myFile;
DS3231  rtc(SDA, SCL);
int pinCS = 53; // Pin 10 on Arduino Uno
void setup() {
    
  Serial.begin(9600);
  pinMode(pinCS, OUTPUT);
  
  // SD Card Initialization
  if (SD.begin())
  {
    Serial.println("SD card is ready to use.");
  } else
  {
    Serial.println("SD card initialization failed");
    return;
  }
  rtc.begin();    
}
void loop() {
  Serial.print(rtc.getTimeStr());
  Serial.print(",");
  Serial.println(int(rtc.getTemp()));
 
  myFile = SD.open("test.txt", FILE_WRITE);
  if (myFile) {    
    myFile.print(rtc.getTimeStr());
    myFile.print(",");    
    myFile.println(int(rtc.getTemp()));
    myFile.close(); // close the file
  }
  // if the file didn't open, print an error:
  else {
    Serial.println("error opening test.txt");
  }
  delay(3000);
}

شرح کد: ابتدا باید کتابخانه‌های مورد نیاز برای هر دو ماژول را در نظر بگیریم، سپس دو موضوع را ایجاد کنیم و در بخش راه‌اندازی آن‌ها را آغاز کنیم.
در بخش حلقه با استفاده از تابع ()Serial.prin t ما زمان و مقادیر دما را بر روی مانیتور سریال با یک کاراکتر “comma” بین آن‌ها و یک خط جدید پس از مقدار دما چاپ خواهیم کرد. ما به این شکل خطوط نیاز داریم تا بتوانیم به راحتی آن‌ها را وارد کرده و یک نمودار در اکسل بسازیم. همچنین توجه داشته باشید که مقادیر دما به اعداد صحیح تبدیل می‌شوند.
بنابراین همین مقادیر در فایل تازه ایجاد شده “test.txt” نیز نوشته خواهند شد و در پایان ما فقط باید تأخیری اضافه کنیم که فاصله ثبت داده‌های دمایی را نشان دهد.
پس از آپلود کد، آردوینو شروع به ذخیره مقادیر دما در هر ۳ ثانیه خواهد کرد. پس از مدتی می توانیم کارت SD را در رایانه خود باز کنیم تا نتایج را مشاهده کنیم.

05-ثبت- اطلاعات- اس دی-کارت- آردوینو


برای ایجاد یک نمودار در اکسل باید این فایل را وارد کنیم و نحوه انجام آن را در اینجا توضیح می‌دهیم:
از منوی داده باید بر روی دکمه “Get Data From Text” کلیک کرده و فایل متنی را انتخاب کنیم. در اینجا “Delimited” را انتخاب می‌کنیم و بعدی را کلیک می‌کنیم، و در مرحله دوم کاما را به عنوان محو کننده انتخاب می‌کنیم و سپس wizard را تمام می‌کنیم.
بنابراین این فرآیند زمان و مقادیر دما را در ستون‌های جداگانه قرار می‌دهد. اکنون ما فقط باید هر دو ستون را انتخاب کنیم و از منوی درج “Insert line chart” را انتخاب کنیم. این نمودار را ایجاد می‌کند که در آن می‌توانیم مقادیر دما را در هر ۳ ثانیه ببینیم.

06-ثبت -اطلاعات-اس دی-کارت-آردوینو

تمام اینها برای این برنامه آموزشی است، لطفاً در بخش نظرات هر سوالی را در این مورد بپرسید.

 

رضا قنبری
متخصص آموزش رباتیک

رضا قنبری هستم متخصص آموزش رباتیک با بیش از 10 سال سابقه فعالیت در ایران

این مطلب را به اشتراک بگذارید

ماژول کاهنده

ماژول كاهنده قبل از خواندن مقاله ماژول كاهنده بهتر است در نظر داشته باشید مقالاتی که با عنوان ماژول در سایت قرار گرفته اند از

ماژول تشخیص دود و گاز

ماژول تشخیص دود و گاز قبل از خواندن این مقاله بهتر است در نظر داشته باشید مقالاتی که با عنوان ماژول در سایت قرار گرفته

2 دیدگاه دربارهٔ «ذخیره اطلاعات در آردوینو»

  1. با ضمن تشکر . بعد از آپلود کد ها اگر ما کارت اس دی رو جدا کنیم و در پروژه به طور صحیح استفاده کنیم کار آردوینو رو برای ما انجام میده؟

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *