این مطلب قسمت سیزدهم از آموزش جامع آردوینو (مبتدی و پیشرفته) است. در این آموزش به معرفی ماژول کارت SD و نحوه استفاده از آن به همراه آردوینو میپردازیم. همچنین پروتکل ارتباطی مهم SPI که در این ماژول استفاده میشود را معرفی خواهیم کرد. با داشتن اطلاعاتی در مورد پروتکل SPI میتوانید انبوه سنسورها و ماژولهایی که از آن استفاده میکنند را به کار بگیرید.
کارت SD میتواند یک ابزار کاربردی برای ذخیرهسازی اطلاعات در پروژههایی که با آردوینو انجام میشود باشد. استفاده از کارت SD باعث میشود نیاز شما به ایجاد ارتباطهای دیگر مانند ارتباط بیسیم، در مواردی که نیاز به داده آنلاین وجود نداشته باشد، کاهش یابد. مثلا میتوانید یک سیستم ثبت اطلاعات هواشناسی بسازید و دادههای آن را در یک کارت حافظه microSD ذخیره کرده و هر هفته که به آن سر میزنید، اطلاعات را از روی کارت حافظه بردارید. در پایان این آموزش خواهید توانست با ماژول کارت حافظه SD ارتباط برقرار کنید، اطلاعاتتان را بر روی آن ذخیره کرده و از روی آن بخوانید.
قطعات مورد نیاز:
معرفی کارت SD
کارت SD محلی برای ذخیره اطلاعات دیجیتال است. با گسترش فناوریهای پیشرفته از جمله تلفنهای همراه هوشمند، استفاده از کارتهای حافظه بسیار متداول شده است. کارت حافظه SD یک فضای ذخیرهسازی استاندارد است که اغلب شرکتها از آن برای ساخت کارت حافظه استفاده میکنند. نمونه جدیدتر و کوچکتر این نوع حافظه به microSD معروف است و برای قرار دادن در فضاهای کوچک مانند تلفن همراه بسیار مناسب است. ظرفیت ذخیرهسازی اطلاعات این حافظهها در ابتدا در حد چند مگابایت بود اما امروزه حافظههای SD با ظرفیت چند صد گیگابایت نیز در دسترس است.
استفاده از کارت SD میتواند در شرایط مختلفی کاربرد داشته باشد. اولا اینکه برای انتقال اطلاعات نیاز نیست دستگاه به یک شبکه (مثلا با بلوتوث یا ارتباط بیسیم) متصل باشد. میتوانید از این طریق اطلاعات مورد نیاز را در کارت حافظه ذخیره کرده و بعدا مورد استفاده قرار دهید. مزیت دوم این است که نیاز نیست دستگاه به رایانه وصل باشد. در حالت عادی برای ذخیره و مشاهده اطلاعات به دست آمده شما نیاز دارید تا آردوینو را به کامپیوترتان وصل کنید و اطلاعاتی که برای مثال یک سنسور میخواند را به صورت دستی ذخیره کنید. با وجود کارت حافظه، دستگاهتان میتواند بدون اتصال به کامپیوتر اطلاعات را ذخیره کند و شما در صورت نیاز کارت حافظه را جدا کرده و اطلاعات آن را مشاهده کرده و از آن استفاده کنید.
برای استفاده از کارت حافظه به یک وسیله واسط نیاز دارید که بتواند با کارت SD کار کند، اطلاعات را از روی آن بخواند و بر روی آن بنویسد. ماژول کارت SD این کار را برای شما انجام میدهد. این ماژول طوری طراحی شده است که به راحتی میتواند به همراه آردوینو استفاده شود. هرچند که این ماژول توسط سازندگان مختلفی ساخته میشود، اما همگی از پروتکل ارتباطی استاندارد SPI استفاده میکنند. از طرفی در آردوینو کتابخانهای برای استفاده از کارت SD وجود دارد که کار را بسیار ساده میکند. آردوینو توانایی خواندن اطلاعات از کارت SD و نوشتن بر روی آن را از طریق این کتابخانه دارد.
انواع کارتهای SD
اگر به یک کارت SD نگاهی بیاندازید، نوشتههایی بر روی آن خواهید دید که ممکن است معنای بعضی از آنها را ندانید. هرچند که مشخصات نوشته شده بر روی کارت حافظه تا حدی تخصصی است اما دانستن آنها در شرایطی ضروری است. مثلا اینکه بدانید کارت حافظهتان چقدر سریع است به شما کمک میکند که تشخیص دهید که برای چه کاربردی مناسبتر است. اهمیت دیگر این موضوع این است که برخی دستگاهها با نمونههایی از کارتهای حافظه همخوانی ندارند. پس قبل از خرید کارت حافظه (چه بخواهید با آردوینو کار کنید یا حافظه را برای دوربین دیجیتالتان میخرید) حتما مشخصات آن را چک کنید.
حافظههای SD، SDHC و SDXC
این تقسیمبندی مربوط به ظرفیت ذخیرهسازی اطلاعات است. کارتهای SD که قدیمیترین نوع این خانواده هستند، ظرفیت پائینی داشتند و حداکثر تا 2GB فضای ذخیرهسازی در اختیار شما قرار میدادند. نسل بعدی کارتهای SD به نام SDHC که مخفف Secure Digital High Capacity است نشاندهنده ظرفیت بالاتر این نوع است. کارتهای SDHC میتوانند بین 2GB تا 32GB ظرفیت داشته باشند. جدیدترین نوع این کارتها SDXC یا Secure Digital Extra Capacity است که دارای حجم ذخیرهسازی 32GB تا 2TB است. در توضیحات هر دستگاه کارتخوانی اینکه از کدام نوع کارت حافظه پشتیبانی میکند نوشته شده است. دستگاهی که از یکی از این سه دسته پشتیبانی میکند، از انواع قدیمیتر نیز پشتیبانی خواهد کرد اما عکس آن صادق نیست.
کلاسهای مختلف کارتهای حافظه
دستهبندی دیگر کارتهای حافظه مربوط به سرعت آنهاست. سرعت تجهیزات ذخیرهسازی اطلاعات مخصوصا با پیشرفتهتر شدن دوربینهای عکس و فیلمبرداری اهمیت زیادی پیدا کرده است. بیشترین استفاده از کارتهای حافظه در دوربینها شده است به همین دلیل رشد فناوری دوربینها تاثیر زیادی بر رشد فناوری ذخیرهسازی و انتقال اطلاعات در کارتهای SD داشته است. برای اینکه یک دوربین بتواند با کیفیت 4K فیلمبرداری کند، یا برای عکسبرداری با کیفیت بالا نیاز است تا حجم زیادی از دادهها در واحد زمان، بدون ایجاد وقفه انتقال پیدا کرده و ذخیره شود. به همین دلیل سرعت انتقال اطلاعات کارتهای SD به صورت استاندارد در آمده و تحت عنوان کلاسهای مختلف شناخته میشوند. کلاس کارت حافظه بر روی آن با یک حرف C به همراه یک عدد نوشته میشود. کلاسهای سرعتی شامل: کلاس ٢ (حداقل سرعت نوشتن 2MB/s)، کلاس ٤ (حداقل سرعت نوشتن 4MB/s)، کلاس ٦ (حداقل سرعت نوشتن 6MB/s) و کلاس ١٠ (حداقل سرعت نوشتن 10MB/s) است.
استاندارد دیگری که برای کارتهای حافظه سرعت بالا وجود دارد UHS است. این استاندارد دو کلاس UHS 1 و UHS 3 دارد که با یک حرف U به همراه یک عدد نمایش داده میشود. کلاس UHS 1 سرعت نوشتن حداقل 10MB/s و کلاس UHS 3 سرعت نوشتن حداقل 30MB/s دارد.
ابعاد مختلف کارتهای حافظه
آخرین تقسیمبندی مربوط به اندازه کارتهای SD است. اگر میخواهید یک کارت حافظه بخرید باید بدانید که دستگاهتان از کارت حافظه با چه ابعادی استفاده میکند. کارتهای حافظه در سه اندازه SD، miniSD و microSD وجود دارد. SD بزرگترین و microSD کوچکترین نوع این خانواده هستند. در صورتی که دستگاه شما از ابعاد بزرگتر استفاده میکند، میتوانید با یک مبدل (adapter) کارتهای کوچکتر را به کارتهای بزرگتر تبدیل کنید.
معرفی ارتباط SPI
نحوه ارتباط سنسورها، ماژولها و قطعات الکترونیکی مختلف با هم و با میکروکنترلر همیشه یکی از موضوعات با اهمیت در طراحی یک پروژه یا دستگاه الکترونیکی است. در بسیاری از موارد ارتباطات قطعات بسیار ساده است؛ مانند آنچه که تاکنون در مورد ارتباطات آنالوگ و دیجیتال (High/Low) انجام دادیم. اما برقراری ارتباط بین تجهیزات الکترونیکی همیشه هم به این سادگی نیست. موارد زیادی نیز وجود دارد که ماژولها از یک پروتکل استاندارد برای انتقال اطلاعات استفاده میکنند. وقتی دو قطعه الکترونیکی میخواهند با هم حرف بزنند (ارتباط برقرار کنند!) باید از یک زبان استفاده کنند تا حرف یکدیگر را متوجه شوند. به این زبانهای مشترک، در الکترونیک پروتکل میگویند. پروتکلهای بسیار متنوعی وجود دارند که از بعضی از آنها حتما استفاده کردهاید: Bluetooth، WiFi، USB و… . این موارد پروتکلهای پیچیده و البته سریعی هستند. پروتکلهای دیگری نیز وجود دارند که به زبان سختافزار نزدیکاند، کار با آنها و کدزنی برای آنها ساده بوده و البته سرعت کمتری دارند. این پروتکلها به دلیل سادگی، برای استفاده در پروژههای DIY (خودت بساز - Do it yourself) مناسباند.
به طور کلی پروتکلها به دو دسته سری و موازی تقسیمبندی میشوند. در ارتباط موازی، تعداد مشخصی سیگنال اطلاعاتی به صورت همزمان از طریق چند مسیر مجزا (چند سیم جداگانه) منتقل میشوند.
برخلاف ارتباط موازی، در ارتباط سری (یا سریال) تمام بیتها به صورت پشت سر هم و از طریق تنها یک مسیر منتقل میشوند. از آنجا که تمام اطلاعات از یک مسیر عبور میکنند، در این نوع ارتباط، پروتکل انتقال اطلاعات بسیار اهمیت دارد زیرا در صورت وجود یک اشتباه کوچک، اطلاعات قابل فهم نخواهد بود.
پروتکل سریال خود شامل انواع مختلفی میشود. سه پروتکل مهم در ارتباط سریال وجود دارد: UART ،SPI و I2C. ماژول کارت SD یکی از قطعاتی است که از یک پروتکل سریال به نام Serial Peripheral Interface) SPI) استفاده میکند. توضیح مفصل در مورد این نحوه ارتباط، در مطلب آشنایی با پروتکل های ارتباطی (SPI) به صورت مجزا آمده است و در اینجا تنها اشاره مختصری به آن میکنیم.
در پروتکل SPI دادهها به صورت پیوسته فرستاده میشوند و به بستههای مشخص تقسیمبندی نشده و بنابراین دادهای که ابتدا و انتهای بسته دادهای را نشان دهد وجود ندارد. در ارتباط SPI یک Master به همراه یک یا چند Slave وجود دارد. Master تمام انتقال اطلاعات از جمله زمانبندی را مدیریت میکند. در این نوع ارتباط 4 سیم استفاده میشود:
Master out Slave in) MOSI) - مسیر انتقال اطلاعات از Master به Slave
Master in Slave out) MISO) - مسیر انتقال اطلاعات از Slave به Master
Serial Clock) SCK) - سیگنال زمانبندی
Slave Select) SS) - سیگنال انتخاب Slave توسط Master
در ارتباط SPI سرعت انتقال اطلاعات با سیگنال کلاک (SCK) و توسط Master تعیین میشود. با هر کلاک این سیگنال، یک بیت در مسیرهای دیگر منتقل میشود. در ارتباط SPI یک Master میتواند به چند Slave متصل شود، با Low کردن پین SS برای هر Slave آن قطعه برای انتقال اطلاعات فعال میشود. SPI سریعترین روش ارتباطی در بین پروتکلهای سریال است و امکان انتقال تا ١٠ مگابیت بر ثانیه را فراهم میکند. در آردوینو کتابخانهای به نامSPI.hوجود دارد که برقرار ارتباط SPI با ماژولهای مختلف را ساده میکند.
آمادهسازی کارت SD
قبل از هر چیز باید کارت حافظه را فرمت کنید تا برای ماژول قابل استفاده باشد. فرمتهای FAT16 و FAT32 قابل قبول است. سایر فرمتها برای این کار مناسب نیستند. برای فرمت کردن کارت SD آن را به رایانهتان وصل کنید. بیشتر لپتاپها درگاه کارت SD دارند؛ در غیر این صورت میتوانید از یک کارتخوان SD استفاده کنید. وارد My Computer شوید و روی درایو نشاندهنده کارت حافظه کلیک راست کرده و گزینه Format را انتخاب کنید.
فرمت FAT32 را انتخاب کرده و بر روی Start کلیک کنید. منتظر بمانید تا فرمت تمام شود. حالا کارت SD آماده استفاده با آردوینو است.
راهاندازی کارت SD با آردوینو
در آردوینو پایههای مشخصی برای ارتباط SPI در نظر گرفته شده است. در صورتی که بخواهید ماژولی با پروتکل SPI را به کار بگیرید باید از پینهای ١١، ١٢ و ١٣ یا از هدرهای ICSP استفاده کنید.
برای استفاده از کارت SD از کتابخانهSD.hاستفاده میکنیم. این کتابخانه بر اساس ارتباط SPI نوشته شده است. بنابراین نیازی به استفاده مستقیم از کتابخانه SPI یا کدزنی برای آن نیست. برای استفاده از این کتابخانه پس از فراخوانی آن، باید Slave مورد نظر را فعال کنید:
SD.begin(SS);
برای نوشتن یک فایل در کارت SD یا خواندن آن باید ابتدا آن فایل را باز کنید:
File inputData = SD.open("data.txt", FILE_WRITE);
عبارت اول نام فایل در کارت SD و عبارت دوم دستور نوشتن در آن است. اگر چنین فایلی از قبل وجود داشته باشد، اطلاعات بر روی همان فایل و در ادامه دادههای قبل نوشته خواهد شد. اگر بخواهید فقط فایل را بخوانید، از دستورFILE_READاستفاده کنید. قبل از استفاده از هر فایلی باید آن را باز کنید و قبل از استفاده از هر فایل دیگری باید فایل قبل را ببندید.
برای بستن فایلها از دستور زیر استفاده میشود:
SD.remove(“filename.txt”);
با استفاده از دو دستور()mkdirو()rmdirمیتوانید برای پوشهها مسیر ایجاد کنید یا مسیرها را حذف کنید:
SD.mkdir(“category/subcategory”);
SD.rmdir(“category/subcategory”);
دستور()existsوجود یا عدم وجود یک فایل یا مسیر با نام مشخص را بررسی میکند:
SD.exists(“filename.txt”);
تست عملکرد کارت SD
قبل از اینکه از ماژول کارت SD در پروژهتان استفاده کنید مطمئن شوید که به درستی کار میکند. برای این کار ماژول را به صورت جدول بالا متصل کنید و کارت حافظه را در آن قرار دهید. پایه CS را به پین ٤ دیجیتال وصل کنید. در نرمافزار آردوینو از مسیر File → Examples → SD مثال CardInfo را انتخاب کرده و اجرا کنید. پنجره Serial Monitor را باز کنید و Baud Rate را بر روی 9600 قرار دهید. اگر همه چیز خوب باشد، مشخصات کارت حافظه را در پنجره سریال خواهید دید.
ثبت اطلاعات در کارت SD
برای شروع بد نیست یک برنامه ساده بنویسیم که مقداری را از کاربر گرفته و در کارت SD ذخیره کند. اتصالات ماژول کارت حافظه را مانند قبل و پایه CS را به پین ١٠ آردوینو وصل کنید.
برای اینکه بتوانید مقداری را به صورت دستی به آردوینو وارد کنید از سریال مانیتور استفاده میکنیم. دستور()Serial.availableچک میکند که آیا دادهای به پورت سریال وارد شده است یا نه و دستور()Serial.readاین مقدار را به حافظه آردوینو وارد میکند. برای ورود اطلاعات از نوار بالایی پنجره سریال مانیتور استفاده کنید.
/*
automee
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.automee.ir
*/
#include <SD.h>
#include <SPI.h>
#define SS 10
void setup()
{
Serial.begin(9600);
SD.begin(SS);
}
void loop()
{
Serial.println("Insert your data");
while (!Serial.available())
{
}
char input = char(Serial.read());
Serial.println(input);
File inputData = SD.open("data.txt", FILE_WRITE);
if (inputData)
inputData.println(String(input));
else
Serial.println("No Card inserted");
delay(1000);
}
ثبت دما و رطوبت در کارت حافظه
در این قسمت میخواهیم با استفاده از سنسور DHT11 که قبلا در آموزش راهاندازی سنسور دما و رطوبت با آن آشنا شدید، دما و رطوبت هوا را هر ١ دقیقه یکبار بخوانیم و این مقادیر را در یک کارت حافظه ذخیره کنیم. ماژول کارت SD را مانند قبل وصل کنید. سنسور DHT11 را نیز به پین ٧ آردوینو متصل کنید.
/*
automee
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.automee.ir
*/
#include <SD.h>
#include <SPI.h>
#define SS 10
#include <dht.h>
dht DHT;
#define DHT11_PIN 7
File weather;
#define minute 60000UL
void setup()
{
Serial.begin(9600);
SD.begin(SS);
}
void loop()
{
if (SD.exists("weather.txt"))
{
SD.remove("weather.txt");
}
DHT.read11(DHT11_PIN);
weather = SD.open("weather.txt", FILE_WRITE);
weather.println(String(DHT.temperature) + ";" + String(DHT.humidity));
weather.close();
Serial.println(String(DHT.temperature) + ";" + String(DHT.humidity));
delay(1 * minute);
}
فرض کنید که قبلا مقادیر دما و رطوبت را در کارت حافظه ذخیره کردهاید؛ با آردوینو میتوانید اطلاعات موجود در کارت حافظه را بخوانید:
/*
automee
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.automee.ir
*/
#include <SD.h>
#include <SPI.h>
#define SS 10
File weather;
void setup()
{
Serial.begin(9600);
SD.begin(SS);
weather = SD.open("weather.txt");
while (weather.available())
{
Serial.write(weather.read());
}
weather.close();
}
void loop()
{
}
نتیجهگیری
در این آموزش با ماژول کارت SD و روش راهاندازی آن آشنا شدید؛ نکاتی در مورد ویژگیهای کارت SD و نکات جدیدی نیز در مورد برنامهنویسی یاد گرفتید. همچنین با پروتکل SPI که یکی از پروتکلهای ارتباطی بسیار مهم است آشنا شدید. خواهید دید که این پروتکل در ماژولها و پروژههای متعددی استفاده خواهد شد.
در آموزش بعدی، نحوه کار با انواع ماژولهای وایرلس را خواهید آموخت.
نظرات شما باعث بهبود محتوای آموزشی ما میشود. اگر این آموزش را دوست داشتید، همینطور اگر سوالی در مورد آن دارید، از شنیدن نظراتتان خوشحال خواهیم شد.