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

آموزش استفاده از ماژول کارت حافظه SD CARD با برد آردوینو بخش اول

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

آموزش استفاده از SD CARD آردوینو بخش اول

با توجه به حجم حافظه محدود EEPROM آردوینو‌ها ، گاهی اوقات در اختیار داشتن یک حافظه جانبی با ظرفیت بیشتر برای ذخیره سازی داده‌های سنسور‌ها و همچنین ثبت گزارشات ضروری می‌باشد. شما با توجه به این ماژول می‌توانید اطلاعات مورد نظر خود را بر روی SD card آپلود کنید.در ادامه آموزش با مرجع تخصصی آردوینو دیجی اسپارک همراه باشید. با استفاده از کتابخانه SD Card آردوینو می‌توانید برو روی SD Card خود دیتا بنویسید یا از آن دیتا بخوانید.این کتابخانه از فرمت FAT32 و FA16 کارت‌حافظه‌های استاندارد و همچنین از  کارت‌حافظه‌های SDHC پشتیبانی می‌کند.در لینک زیر می‌توانید تفاوت‌های بین کارت‌های SD را که توسط سایت zoomit گرد‌آوری شده است را مشاهده کنید.  راهنمای جامع خرید کارت حافظه و آشنایی با مشخصات آن (بخش دوم)

در سری آموزش‌‌های SD card در هر بخش ابتدا یک سری از توابع کتابخانه SD Card آموزش داده می‌شود سپس در پایان با استفاده از توابع آموزش داده شده یک پروژه انجام می‌دهیم.ماژول کارت حافظه توسط پروتکل ارتباطی SPI با آردوینو ارتباط برقرار می‌کند.

 

سخت افزار مورد نیاز

آردوینو Uno

ماژول SD Card

SD Card

 

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

آموزش SD Card بخش اول

 

کد نویسی ماژول کارت حافظه SD Card

برای شروع کدنویسی ابتدا باید دو کتابخانه SPI و SD را فراخوانی کنیم.

 

سپس باید از هر  کدام از کلاس‌های Sd2Card ،‌SdVolume و SdFile  یک آبجکت بسازیم.

 

معرفی توابع ماژول کارت حافظه SD Card

SD.begin(cspin)

به وسیله‌ی این تابع ماژول SD card فعال می‌شود.به جای آرگمان cspin باید شماره پینی از آردوینو که پین cs آردوینو متصل می‌شود را وارد کنیم.

 

 

card.init(SPEED, chipSelect_PIN)

این تابع نیز سرعت ماژول و همچنین شماره پینی از آردوینو که به پین CS متصل شده است را مشخص می‌کند.

به جای آرگمان SPEED می‌توان مقادیر زیر را قرار داد:

SPI_FULL_SPEED : از تمام سرعت ماژول استفاده می‌کند

SPI_HALF_SPEED : از نیمی از سرعت ماژول استفاده می‌کند

SPI_QUARTER_SPEED :یک چهارم از سرعن ماژول استفاده می‌کند

 

به جای آرگمان chipSelect_PIN نیز شماره پینی از آردوینو که به CS ماژول متصل می‌شود را وارد می‌کنیم.

 

 

card.type()

به وسیله‌ی این ماژول می‌توان به نوع SD card پی برد.

خروجی ماژول می‌تواند دارای مقادیر زیر باشد:

اگر مقدار خروجی برابر SD_CARD_TYPE_SD1 باشد به این معناست که SD card ورژن ۱  با ظرفیت استاندار می‌‌باشد.

اگر مقدار خروجی برابر  SD_CARD_TYPE_SD2 باشد به این معناست که SD card ورژن۲  root.ls(LS_R | LS_DATE | LS_SIZE); با ظرفیت استاندار می‌باشد.

اگر مقدار خروجی برابر SD_CARD_TYPE_SDHC باشد به این معناست که  SD card مدل SDHC با حداکثر  ظرفیت می‌باشد.

 

 

  root.ls(LS_R | LS_DATE | LS_SIZE)

به وسیله‌ی این تابع نام فایل‌های موجود در کارت حافظه ، تاریخ ایجاد آن‌‌ها و همچنین سایز آن‌‌‌ها بر روی سریال مانیتور نرم‌افزار نمایش داده می‌شود.

 

کدنویسی ماژول کارت حافظه SD Card

در این پروژه ابتدا اطلاعات مربوط به کارت حافظه و سپس اطلاعات مربوط به فایل‌های درون کارت حافظه بر روی سریال مانیتور نرم‌افزار آردوینو نمایش داده می‌شود.

 

مهمان گرامی، جهت دسترسی به کدهای این پروژه، اسپارکر شوید.

 

 

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

 

 

پروژه و دریافت بن ارسال رایگان

 

برای دریافت بن خرید از دانشجو کیت، کاربران بایستی با استفاده از وسایل این آموزش، پروژه را اجرا کرده و یا حتی مدار جدیدی تعریف کنید. سپس از اجرای کار فیلم گرفته و در شبکه‌های اجتماعی از جمله آپارات و اینستگرام، با هشتگ‌های دیجی_اسپارک   دانشجوکیت    digispark    daneshjookit منتشر کنند. سپس از طریق بخش نظرات در ادامه همین آموزش، جهت دریافت بن خرید ارسال رایگان به ارزش ۱۲۰۰۰ تومان از دانشجو کیت، لینک را زیر همین پست ارسال کنید.

 

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

 

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

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

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

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

۱۸ دیدگاه

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

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

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

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

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

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

  • سلام خسته نباشید
    ببخشید من اگه بخام خروجی یک سنسور 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);

        }