آموزش ذخیره اطلاعات در آردوینو وکارت SD
در این آموزش آردینو ما یاد میگیریم که چگونه از یک ماژول کارت SD با برد آردینو برای ذخیره اطلاعات در آردوینو استفاده کنیم. همچنین در ترکیب با ماژول ساعت زمان واقعی DS3231 یک نمونه ثبت داده خواهیم ساخت که در آن دادههای سنسور دما را در کارت SD ذخیره کرده و آن را به اکسل وارد میکنیم تا یک نمودار از آن بسازیم.
ماژول SD کارت چگونه کار میکند
اول اجازه دهید نگاهی به ماژول کارت SD بیندازیم. این دستگاه با کارتهای استاندارد میکرو SD کار میکند که ولتاژ کاری آن ۳.۳ ولت است. بنابراین، ماژول دارای تنظیم کننده ولتاژ تغییر سطح است تا بتوانیم از آن با پین های 5 ولت آردوینو استفاده کنیم.
ماژول کارت SD دارای شش پین، دو پین برای تقویت ماژول، VCC و GND، و چهار پین دیگر برای ارتباط SPI است. این روشی است که ما باید ماژول کارت SD را به برد آردینو متصل کنیم.
توجه داشته باشید که هر برد آردینو دارای پینهای SPI مختلفی است که باید بر این اساس متصل شوند.
کد ماژول کارت 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 برای خواندن تمام کاراکترها یا کل دادههای نوشته شده قبلی استفاده کنیم. در پایان ما باید فایل را ببندیم.
حالا پس از آپلود کد در آردوینو، اگر همه چیز درست باشد، موارد زیر بر روی مانیتور سریال ظاهر خواهند شد.
همانطور که میبینیم، کارت 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 را در رایانه خود باز کنیم تا نتایج را مشاهده کنیم.
برای ایجاد یک نمودار در اکسل باید این فایل را وارد کنیم و نحوه انجام آن را در اینجا توضیح میدهیم:
از منوی داده باید بر روی دکمه “Get Data From Text” کلیک کرده و فایل متنی را انتخاب کنیم. در اینجا “Delimited” را انتخاب میکنیم و بعدی را کلیک میکنیم، و در مرحله دوم کاما را به عنوان محو کننده انتخاب میکنیم و سپس wizard را تمام میکنیم.
بنابراین این فرآیند زمان و مقادیر دما را در ستونهای جداگانه قرار میدهد. اکنون ما فقط باید هر دو ستون را انتخاب کنیم و از منوی درج “Insert line chart” را انتخاب کنیم. این نمودار را ایجاد میکند که در آن میتوانیم مقادیر دما را در هر ۳ ثانیه ببینیم.
تمام اینها برای این برنامه آموزشی است، لطفاً در بخش نظرات هر سوالی را در این مورد بپرسید.
2 دیدگاه دربارهٔ «ذخیره اطلاعات در آردوینو»
با ضمن تشکر . بعد از آپلود کد ها اگر ما کارت اس دی رو جدا کنیم و در پروژه به طور صحیح استفاده کنیم کار آردوینو رو برای ما انجام میده؟
خیر