آردوینو آردوینو Arduino Uno آموزش آردوینو پروژه های آردوینو

ذخیره داده بر روی کارت SD به کمک آردوینو و ماژول SD CARD

sd-ardoino-Daneshjookit
نوشته شده توسط علیرضا قربانی, معین صابری

ثبت و ذخیره داده ها، امری مهم در طراحی سیستم های دیتالاگر به شمار می رود. سیستم های ثبت کننده داده و یا دیتالاگر، داده های مختلف نظیر دما، رطوبت، فشار و…. را بر روی کارت های حافظه ذخیره کرده تا دسترسی به آن ها در زمان های آتی جهت تجزیه و تحلیل، فراهم شود. به کمک ماژول کارت SD، می توانید داده های اندازه گیری شده توسط آردوینو را به سادگی بر روی کارت های حافظه SD، ذخیره کنید. به عنوان مثال، به کمک این ماژول می توان یک دیتالاگر دما و رطوبت را به گونه ای ساخت که تغییرات پارامترهای فیزیکی محیط را به همراه زمان، ثبت کند. از آنجاییکه به کمک این ماژول می توان داده ها را به صورت فایل اکسل هم ذخیره نمود، بنابراین به سادگی می توانید داده ها را به صورت نموداری تحلیل نمایید. در این آموزش به معرفی و بررسی ماژول کارت SD می پردازیم. سپس با یک نمونه برنامه که در آن مقادیر خوانده شده از پایه های آنالوگ در کارت SD ذخیره می شود، نحوه  ذخیره داده بر روی کارت حافظه را مورد بررسی قرار خواهیم داد. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 


برد آردوینو UNO


هر پروژه الکترونیکی جهت تجزیه و تحلیل داده ها و اجرای فرامین کاربر، نیازمند یک پردازنده مرکزی است. در این پروژه، جهت ذخیره داده ها بر روی کارت SD، از برد آردوینو UNO استفاده می نماییم. برد آردوینو UNO، در حقیقت یک برد توسعه برای میکروکنترلر است. به کمک این برد می توان به سادگی به پایه های GPIO، دسترسی داشت. از آنجاییکه این برد بر روی خود کریستال خارجی جهت تامین منبع کلاک پردازنده را دارد، لذا راه اندازی و کار با آن، بسیار ساده خواهد شد.

 

بر روی برد آردوینو جک آداپتور جهت تغذیه آن وجود دارد. این آداپتور می تواند بازه ولتاژی ۶ الی ۱۲ را داشته باشد. از طرفی دیگر، بر روی برد آردوینو، رگولاتورهای ۵ و ۳٫۳ جهت تامین تغذیه ماژول مختلف وجود دارد. برای برنامه نویسی بردهای آردوینو، محیط مخصوص آن توسعه یافته است. دستورات برنامه نویسی آردوینو بر مبنای زبان ++C شکل گرفته است. اما پلتفرم آردوینو، سعی بر ساده سازی دستورات و استفاده تمام افراد، از مبتدی تا حرفه ای را در دستور کار خود قرار داده است.

 

انتقال(آپلود) برنامه بر روی برد آردوینو به سادگی از طریق کابل USB صورت می پذیرد. به همین منظور کافیست برد را از طریق کابل به رایانه متصل کرده و برنامه را بر روی آن منتقل نمایید. شایان ذکر است که برد آردوینو از طریق همین کابل نیز، تغذیه می گردد.

 


ماژول کارت SD


همانطور که پیشتر بیان شد، در این آموزش قصد داریم تا داده های برد آردوینو را بر روی کارت SD ذخیره نماییم. جهت اجرای این مورد، به ماژول کارت SD نیاز خواهیم داشت. به کمک این ماژول و با قرار دادن کارت SD در درگاه ماژول، می توانید داده ها را به سادگی در کارت SD ذخیره نمایید.

 

ماژول کارت SD از پروتکل SPI جهت برقراری ارتباط با آردوینو استفاده می نماید. جهت راه اندازی و کار با این ماژول، کتابخانه تحت آردوینو توسعه یافته است. بنابراین به کمک این ماژول و به سادگی، می توانید داده ها را بر روی آن، ذخیره نمایید.

 


اتصالات ماژول کارت حافظه SD Card


پس از معرفی برد آردوینو و ماژول SD، نوبت به سیم کشی مدار می رسد. جهت اتصال ماژول کارت SD به برد آردوینو، لطفا سیم کشی را به صورت زیر انجام دهید.

 

جهت اتصال ماژول کارت SD به آردوینو UNO، مطابق تصویر فوق، اتصالات را به شرح زیر، انجام دهید.

اتصال پین ۱۱ آردوینو به پایه MOSI
اتصال پین ۱۲ آردوینو به پایه MISO
اتصال پین ۱۳ آردوینو به پایه SCK
اتصال پین ۴ آردوینو به پایه CS

همچنین پایه VCC ماژول SD را به پایه ۵ و پایه GND آن را به پایه GND آردوینو، متصل نمایید.

توجه: پیش از قرار دادن کارت SD درون ماژول، لطفا آن را به طور کامل، فرمت نمایید. برای این منظور در سیستم عامل ویندوز، پس از اتصال کارت SD به رایانه، بر روی آن کلیک راست کرده و گزینه complete format را انتخاب نمایید.

 


کد پروژه ذخیره سازی بر روی کارت SD


در این قسمت کدهای پروژه را مشاهده می نمایید. در این پروژه مقادیر خوانده شده از پین های آنالوگ A0، A1 و A2 بر روی کارت SD به صورت یک فایل اکسل ذخیره می گردند. این کد برای برد آردوینو UNO نیز توسعه یافته اند. بنابراین در منوی Tools->Board، گزینه آردوینو UNO را انتخاب و کدهای زیر را بر روی برد آپلود کنید.

 

 


پروژه ذخیره بر روی کارت SD با آردوینو


پس از آپلود کدها، نوبت به اجرای پروژه می رسد. همانطور که پیشتر گفته شد، در این پروژه مقادیر خوانده شده از پایه های A0 و A1 و A2 (پایه های مبدل آنالوگ به دیجیتال) را در کارت SD ذخیره می نماییم. چنانچه به اطلاعات بیشتری در رابطه با مبدل آنالوگ به دیجیتال نیاز دارید، می توانید با کلیک بر روی این لینک، آموزش آن را مطالعه نمایید. در ابتدای اجرای برنامه، تصویر زیر را می توانید در سریال مانیتور آردوینو، مشاهده کنید.

 

در ادامه، نوبت به مشاهده داده های ذخیره شده بر روی کارت SD می رسد. به همین منظور، پس از اتصال کارت SD به رایانه، با فایل اکسل داده ها با نام datalog.csv رو به رو می شویم. با کلیک و باز نمودن فایل، تصویر زیر را مشاهده می نماییم.

 

در فایل فوق، سه ستون به ازای داده های خوانده شده از هر ورودی آنالوگ وجود دارد. ستون نخست مقادیر خوانده شده از A0، ستون دوم مقادیر A1 و ستون سوم مقادیر خوانده شده از پایه A2 را شامل می شود. در نهایت، با توجه به قابلیت ترسیم نمودار در اکسل، نمودار تغییرات ستون نخست را ترسیم می کنیم.

 


تحلیل کد پروژه ذخیره داده روی کارت SD


در این قسمت به تحلیل و بررسی کدهای برنامه می پردازیم. پیش از هر چیز، در نظر داشته باشید که درون کدهای برنامه، به صورت خط به خط  به ازای هر دستور، کامنت و توضیح به فارسی درج شده است. از این رو، در اینجا به صورت خلاصه به عملکرد برنامه می پردازیم. همانطور که پیشتر بیان شد، ماژول کارت SD از پروتکل SPI جهت ارتباط با آردوینو استفاده می نماید. در طرف دیگر، جهت برقراری ارتباط آسان و سریع با ماژول کارت SD و ذخیره داده بر روی آن، از کتابخانه SD که به همین منظور توسعه یافته است، بهره می بریم. بنابراین، این دو کتابخانه در ابتدای برنامه به صورت زیر، فراخوانی می شوند.

در ادامه، پس از راه اندازی و تنظیمات اولیه در تابع SETUP، در بدنه اصلی برنامه، به کمک یک حلقه تکرار، مقادیر پایه های A0 الی A2 را خوانده و درون یک رشته، ذخیره می نماییم. این مقادیر به کمک یک  ویرگول در رشته ذخیره می شوند. وجود ویرگول بین داده های هر سطر، در فرمت فایل اکسل ضروری است. در نهایت با بازگشایی فایلی با نام datalog.csv، داده ها را ذخیره می کنیم. توجه داشته باشید که در فایل اکسل، داده ها می بایست در هر سطر ذخیره شوند. لذا تابع زیر، این عمل را برای ما میسر می نماید.

در نهایت پس از ذخیره، فایل را می بندیم تا در دفعات بعدی، امکان نوشتن نیز میسر باشد.

 


وسایل مورد نیاز


آردوینو Uno

ماژول SD Card

SD Card

 


جمع بندی


در این آموزش به بررسی نحوه ذخیره داده بر روی ماژول کارت SD به کمک آردوینو پرداختیم. کارت های حافظه SD که حتما با آن آشنایی دارید، دارای حافظه هایی با حجم بالا هستند. از طرفی دیگر از این کارت ها در سیستم عامل های مختلف نظیر ویندوز، اندروید، لینوکس و…. پشتیبانی می شود. با شرحی که در این آموزش تشریح شد، شما قادر خواهید بود تا داده های مختلفی که توسط آردوینو نظیر دما، رطوبت، فشار و…. اندازه گیری می شود را بر روی کارت SD ذخیره نمایید. یکی از مهم ترین کاربردهای ذخیره داده بر روی SD، طراحی و پیاده سازی سیستم های دیتالاگر است. در این آموزش مقادیر خوانده شده از ورودی های آنالوگ A0 الی A2 آردوینو را بر روی کارت SD و با فرمت اکسل ذخیره می نماییم. سپس با قرار دادن کارت SD در رایانه، می توانیم داده ها را به کمک قابلیت ترسیم نمودار اکسل، تحلیل و بررسی نماییم.

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

درباره نویسنده

علیرضا قربانی

علیرضا قربانی هستم دانشجوی مهندسی پزشکی. چیزهای خیلی زیادی رو در دنیا دوست دارم. یک گیک هستم و یشه گفت یک هکر. نه به معنی دزدی پسورد و ایمیل مردم. به معنی عشق به دونستن و عشق به تحقیق درباره خیلی از چیزهایی که می بینم و می‌شنوم. اگر بخوام علاقه‌مندی‌ درجه یکم رو نام ببرم میتونم بگم برنامه نویسی و بعد از اون امبدد سیستم ها.

درباره نویسنده

معین صابری

کارشناسی ارشد رشته معماری سیستم های کامپیوتری

مالي که ز تو کس نستاند، علم است
حرزي که تو را به حق رساند، علم است
جز علم طلب مکن تو اندر عالم
چيزي که تو را ز غم رهاند، علم است
(شیخ بهایی)

تبادل نظر و رفع عیب با ثبت دیدگاه

۴۲ دیدگاه

  • سلام وقت بخیر.
    یه وسالی چطور به اطلاعات داخل SD از طریق بیسیم با ماژول esp8266 دسترسی داشته باشم و اطلاعات فایل های اونو برای خودم دانلود کنم؟
    مرسی لطفا خبرم کنید

  • فراموش کردم این برد SD و es8266 رو چطور به نسخه arduino pro mini وصل کنیم با منیع تغذیه یا همون یه usb هاب

  • با عرض سلام و خسته نباشید پروژه ی من ذخیره ی پیامک های کنترل کننده ی دو عدد رله هست.من تا جایی پیش
    رفتم که پیامک ها با شماره ی خاصی کنترل می شوند .مشکل اینجاست که میخوام چند شماره که در یک فایل و در میکرو اس دی موجود است از طریق این شماره ها فقط امکان کنترل رله ها باشد چه طور باید از اس دی اطلاعات خوانده شده و دوباره فرستاده شود؟

    • با سلام
      بابت تاخیر در پاسخگویی عذرخواهی میکنم. در حال یافتن راه حل مناسب برای پروژه شما بودم. اینطور که من متوجه شدم، شما پروژه را به صورت ترکیبی از ماژول GSM و ماژول SD کارت دارید. از این رو میخواهید بر اساس لاگ ذخیره شده در SD کارت و شماره‌های تماس یکتا آدرس دهی کنید؟
      لطفا توضیحات دقیق ارایه دهید تا راه حل مناسب ارسال شود.

  • سلام
    اگه بخوایم از این ماژول در اردوینو pro mini استفاده کنیم کدام پایه ها به کدام پایه یه pro mini وصل می شود؟

    • با سلام
      ضمن تشکر از توجه شما، برای این منظور باید اتصالات SPI برد Pro mini را بدانید. پایه‌های ۱۳=SCK و ۱۲=MISO و ۱۱=MosI هستند. انجام دهید و سوالات احتمالی را ازهمین طریق مطرح کنید.

  • سلام
    چطور میشه از این ماژول هم زمان با ماژول RFID در uno استفاده کرد.(به دلیل پایه های مشترک)

  • سلام ممنون از اموزش و سایت خوبتون
    این ماژول ک استفاده کردین قابلیت خواندن محتویات بعضی فایل ها مثل اکس در داخل اردوینو برای پردازش را دارد؟؟؟؟

  • سلام خسته نباشید
    ببخشید من اگه بخام خروجی یک سنسور mpu6050روی میکرو اس دی ذخیره بکنم باید چی کار کرد؟؟
    ممنون میشم سریع پاسخ بدید….

  • باسلام خسته نباشید می خوام با آرینوبرا اولین بار کار کنم .که برای روشن خاموش کردن مداوم وسایل استفاده کنم با مازول رله مثلا رله ۱نیم ساعت روشن ونیم ساعت بعد خاموش ومداوم این عمل تکرار شود .ورله های بعدی هم همینطور … (ویا ازطریق پیامک مثلافرستادن پیامک ۱روشن ویا بافرستادن پیامک۰۱خاموش شودوبقیه هم همین طور)

    • سلام ، از توجه شما ممنونم.
      آموزش های متنوعی در دیجی اسپارک منتشر شده است و از آن ها میتوانید ایده بگیرید. توصیه بنده شروع با آموزش‌های کیت آردوینو می‌باشد. تنها کافیست آموزش ها را انجام داده و سپس با دانش برنامه نویسی کدها را تعمیم دهید. در صورت نداشتن اطلاعات کافی از آردوینو و کدنویسی در محیط آردوینو، می‌توانید در کارگاه های آموزشی آردوینو شرکت کنید.

      • سلام خسته نباشین
        بشدت نیاز به راهنماییتون دارم تورو خدا کمکم کنین 🙁
        کد زیر یه رله رو به وسیله ی ماژول بلوتوث روشن و خاموش میکنه و باید وقتی که رله روشن و خاموش میشه تایم و تاریخ این اتفاق رو در کارت SD ذخیره کنه ! الان تایم و تاریخ رو به وسیله ی ماژول DS1307 میگیرم و نشون هم میدم فقط نمیتونم تو کارت SD ذخیره اش کنم
        توی کد اونجایی که (*******) این رو گذاشتم مشکلم هست که بجای ستاره باید چی بنویسم ؟

        #include
        #include
        #include
        #include
        #include
        #include
        #include
        #include
        #include

        #define DS1307_ADDRESS 0x68

        File myFile;
        int relay = 13;
        void setup() {
        Wire.begin();
        pinMode(13, OUTPUT);
        Serial.begin(9600);
        pinMode(8, OUTPUT);

        }

        void loop() {
        if (Serial.available() > 0) {
        int dat = Serial.read() – ‘0’;
        if(dat == 0 || dat == 1){
        Serial.println(dat);
        digitalWrite(relay, dat);
        delay(100);
        printDate();
        delay(1000);

        myFile = SD.open(“test.txt”, FILE_WRITE);

        if (myFile) {
        myFile.print(***********);
        myFile.close();
        Serial.println(“Done.”);
        }
        else
        Serial.println(“Error Opening”);
        }}
        }
        byte bcdToDec(byte val) {
        // Convert binary coded decimal to normal decimal numbers
        return ( (val/16*10) + (val%16) );
        }

        void printDate(){

        // Reset the register pointer
        Wire.beginTransmission(DS1307_ADDRESS);

        byte zero = 0x00;
        Wire.write(zero);
        Wire.endTransmission();

        Wire.requestFrom(DS1307_ADDRESS, 7);

        int second = bcdToDec(Wire.read());
        int minute = bcdToDec(Wire.read());
        int hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
        int weekDay = bcdToDec(Wire.read()); //0-6 -> sunday – Saturday
        int monthDay = bcdToDec(Wire.read());
        int month = bcdToDec(Wire.read());
        int year = bcdToDec(Wire.read());

        //print the date EG 3/1/11 23:59:59
        Serial.print(monthDay);
        Serial.print(“/”);
        Serial.print(month);
        Serial.print(“/”);
        Serial.print(year);
        Serial.print(” “);
        Serial.print(hour);
        Serial.print(“:”);
        Serial.print(minute);
        Serial.print(“:”);
        Serial.println(second);

        }

  • سلام. بنده یه سوالی داشتم لطفا راهنماییم کنید
    بنده میخوام با کمک برد آردوینو محتوای یه فایل txt رو درون یه متغیر مثلا MyText بریزم. چجوری میتونم این کار رو بکنم؟ آیا از طریق یه لینک هم میشه اینکار رو کرد؟
    مثلا به این شکل باشه
    String MyText = LoadString(“Good/New/matn.txt”); // zzzzzz

    • با سلام
      کاربر گرامی لطفا متن آموزش را خوانده و سپس سوالات خود را بپرسید.
      منظور شما از فایل چیست و قرار است محتوا کجا نمایش داده شود؟

      • بنده فقط میخوام مقدار یه فایل رو داخل یه متغیر ذخیره کنم و بعدش از خود متغیر در داخل برنامه استفاده کنم

        • اگر دیتا از sd card خوانده شود، یایستی آن را در متغیر String ذخیره کنید. همانند زیر:
          ;String filename = “files.txt”

  • میخوام اطلاعات یه فایل txt رو از یجایی بخونه و داخل یه متغیر ذخیره کنه و بعدش از اون مقدار ذخیره شده در متغیر در جاهای دیگه برنامه استفاده کنم

        • سلام
          بله امکان پذیر است و باید از دستورات EthernetClient و get و متغیر ReadString استفاده کنید.

          • میشه لطفا یه کد خیلی کوچولو برای اینکار بنویسید؟
            مثلا محتویات یه فایل txt رو از روی یه لینک فایل در سرور بخونه و بریزه توی یه متغیر

            • با سلام
              امکان نوشتن کد در کامنت ها نیست و نیاز به یک آموزش جداگانه خواهد داشت. موارد را پیش ببرید و در صورت سوال از همین طریق بپرسید تا راهنمایی گردد.

              • واقعا به ین آموزش نیاز دارم. لطفا یه برنامه خیلی کوچولو برای این کار بنویسید و برای ایمیلم ارسال بفرمایید. بنده هم جبران میکنم و هزینه اش رو میدم بهتون.
                یه برنامه خیلی کوچولو در این حد که مقدار یه فایل .txt رو از روی هاست بخونه و بریزه داخل یه متغیر. والسلام

                • سلام مجدد
                  همانطور که گفته شد، امکان پیگیری این موضوع از طریق کامنت وجود ندارد.

                    • با سلام
                      کاربر گرامی پرداختن به موضوع مورد نظر شما نیاز به یک آموزش مجزا دارد. نه اینکه اگر از کامنت نشد، از طریق ایمیل وقت نویسنده‌های سایت برای شما اختصاص داده شود. جهت اجرا بایستی دانش کدنویسی را تقویت کنید. سپس از طریق این بخش نسبت به دریافت راهنمایی اقدام بفرمایید.

                    • اینکه توی اینتر هم هیچ آموزشی برای این مورد پیدا نکردم هم دلیل منطقی هست. بنده یکساله با آردوینو کار میکمنم. بی سواد نیستم. فقط برای همچین چیزی آموزشی پیدا نکردم. خواستم که اگر شما بلدید یه آموزش برای این تهیه بفرمایید بنده هزینه اش رو هم پرداخت میکنم. و نمیشه که بخاطر این سوال در دوره آنلاین و یا کارگاهی با هزینه خیلی بالا ثبت نام کنم ولی مثلا یه آموزش مثلا ۱۰ دقیقه ای برای این کار تهیه کنید بنده میتونم به اندازه وسع ام جبران کنم

                    • در این خصوص از طریق بخش تیکت در فروشگاه اقدام نمایید.

  • سلام
    برای من اسم فایل دارای محدودیت ۸ کاراکتری هست چه جوری میتونم برای اسم فایلم رو بلند تر کنم؟

    • با سلام
      در کتابخانه اشاره ای به محدودیت اسم نشده است. لطفا ارور دریافتی را ارسال کنید تا بررسی شود.

  • فراموش کردم این برد SD و es8266 رو چطور به نسخه arduino pro mini وصل کنیم با منیع تغذیه یا همون یه usb هاب

  • سلام خسته نباشید
    چندتا سوال داشتم
    ۱٫ امکان وصل کردن این ماژول به esp8266 هست؟
    ۲٫میخوام یک صفحه وب روی esp8266 باگذاری کنم که برای این کار لازم هست فونت ، عکس وفایل های صفحه وب رو در esp ذخیره کنم تا صفحه بالا بیاد ، میخوام بدونم اگر از این ماژول sd card استفاده کنم امکان ذخیره این اطلاعات ذکر شده روی رم هست ؟