رباتیک و هوافضا

آموزش راه اندازی کارت حافظه SD با آردوینو

راه اندازی کارت حافظه SD با آردوینو

به نام خدا

آموزش راه اندازی کارت حافظه SD با آردوینو

 

راه اندازی کارت حافظه SD با آردوینو

در این پست راه اندازی کارت حافظه SD با آردوینو را یاد خواهیم گرفت.

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

کار با کتابخانه کارت SD بسیار ساده است و راه اندازی SD کارت با آن کار دشواری نیست. این کتابخانه قابلیت خواندن و نوشتن روی کارت SD را به ما می دهد. این کتابخانه از سیستم های FAT16 و FAT32 در کارت های SD استاندارد و کارت های SDHC پشتیبانی می کند.

راه ارتباطی بین آردونیو و کارت SD بوسیله SPI  می باشد. پایه های SPI برای اکثر آردوینو ها پایه ۱۱ ، ۱۲ و ۱۳ می باشد و برای آردوینو مگا پایه ۵۰ ، ۵۱ و ۵۲ می باشد. علاوه بر این، برای انتخاب کارت SD، باید از یک پین(SS) دیگر نیز استفاده شود. این پین انتخاب(SS) می تواند  – پین ۱۰ (در بیشتر برد های آردوینو) و یا پین ۵۳ (در آردوینو مگا) – و یا دیگر پین مشخص توسط کاربر  بوسیله تابعSD.begin () باشد.

قطعات مورد نیاز:

  • بورد آردوینو
  • کارت  FAT16  SD یا FAT32
  • سوکت کارت SD
  • مقاومت ۱۰ کیلو اهم
  • ۳ مقاومت ۳٫۳ کیلو اهم
  • ۳ مقاومت ۲٫۲ کیلو اهم
  • برد بورد
  • سیم برد بورد

شماتیک مدار:

شماتیک مدار به صورت زیر است.

 

راه اندازی کارت حافظه SD با آردوینو

(همه زمین های مدار به هم متصل شده اند)

کارت SD به وسیله ۳٫۳ ولت آردوینو تغذیه شده است.

از آنجا که ولتاژ کاری SD کارت ۳ ولت است، در این مدار از سه مقسم ولتاژ استفاده شده است که هر کدام شامل مقاومت های ۲٫۲ کیلو و ۳٫۳ کیلو می باشند. این مقاومت ها باعث تبدیل ۵ ولت به ۳ ولت می شوند تا صدمه ای به کارت SD وارد نشود. مقسم ها در پایه های (SCK (serial clock) ، MOSI (master out slave in و (SS (chip select استفاده شده است. پایه های نام برده شده به ترتیب از پین های ۱۱ ، ۱۳ و ۱۰ سیگنال دریافت می کنند. پایه  MISO کارت SD مستقیما به آردوینو متصل شده است، این پایه اطلاعات را از کارت SD به آردوینو می فرستد و نیازی به مقسم ولتاژ ندارد.(چون ولتاژ دیتای فرستاده شده ۳٫۳ است). وصل کردن کارت SD بدون مدار مقسم ولتاژ ممکن است باعث خرابی آن شود.

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

 

کدهای آردوینو:

کد های پایین صفحه اطلاعات کارت SD را می خواند و به سریال مانیتور Arduino IDE می فرستد. نتایج زیر برای یک کارت SD خالی با حجم ۲ گیگابایت و فرمت FAT 16 است:

 

راه اندازی کارت حافظه SD با آردوینو

 

تصویر زیر یک کارت SD با حجم ۸ گیگابایت و فرمت FAT 32 را نشان می دهد.همانطور که مشاهده می کنید ۳ پوشه داخل این کارت SD با نام های Images , Videos و Audio  وجود دارد که پوشه Images دارای یک عکس با اسم Photo می باشد:

 

 

راه اندازی کارت حافظه SD با آردوینو

 

اگر هیچ کارت SD به آردوینو متصل نشده باشد ، سریال مانیتور پیغام زیر را نشان می دهد:

 

راه اندازی کارت حافظه SD با آردوینو

 

دانلود کد برنامه راه اندازی کارت حافظه SD با آردوینو :

دانلود فایل
// Interfacing Arduino with SD card example (get SD card info)

// include the SD library:
#include <SPI.h>
#include <SD.h>

// set up variables using the SD utility library functions:
Sd2Card card;
SdVolume volume;
SdFile root;

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }


  Serial.print("\nInitializing SD card...");

  // we'll use the initialization code from the utility libraries
  // since we're just testing if the card is working!
  if (!card.init()) {
    Serial.println("initialization failed. Things to check:");
    Serial.println("* is a card inserted?");
    Serial.println("* is your wiring correct?");
    Serial.println("* did you change the chipSelect pin to match your shield or module?");
    while (1);
  } else {
    Serial.println("Wiring is correct and a card is present.");
  }

  // print the type of card
  Serial.println();
  Serial.print("Card type:         ");
  switch (card.type()) {
    case SD_CARD_TYPE_SD1:
      Serial.println("SD1");
      break;
    case SD_CARD_TYPE_SD2:
      Serial.println("SD2");
      break;
    case SD_CARD_TYPE_SDHC:
      Serial.println("SDHC");
      break;
    default:
      Serial.println("Unknown");
  }

  // Now we will try to open the 'volume'/'partition' - it should be FAT16 or FAT32
  if (!volume.init(card)) {
    Serial.println("Could not find FAT16/FAT32 partition.\nMake sure you've formatted the card");
    while (1);
  }

  Serial.print("Clusters:          ");
  Serial.println(volume.clusterCount());
  Serial.print("Blocks x Cluster:  ");
  Serial.println(volume.blocksPerCluster());

  Serial.print("Total Blocks:      ");
  Serial.println(volume.blocksPerCluster() * volume.clusterCount());
  Serial.println();

  // print the type and size of the first FAT-type volume
  uint32_t volumesize;
  Serial.print("Volume type is:    FAT");
  Serial.println(volume.fatType(), DEC);

  volumesize = volume.blocksPerCluster();    // clusters are collections of blocks
  volumesize *= volume.clusterCount();       // we'll have a lot of clusters
  volumesize /= 2;                           // SD card blocks are always 512 bytes (2 blocks are 1KB)
  Serial.print("Volume size (Kb):  ");
  Serial.println(volumesize);
  Serial.print("Volume size (Mb):  ");
  volumesize /= 1024;
  Serial.println(volumesize);
  Serial.print("Volume size (Gb):  ");
  Serial.println((float)volumesize / 1024.0);

  Serial.println("\nFiles found on the card (name, date and size in bytes): ");
  root.openRoot(volume);

  // list all files in the card with date and size
  root.ls(LS_R | LS_DATE | LS_SIZE);
}

void loop(void) {
}

 

بیشتر بخوانید...  کنترل موتور دی سی با ریموت کنترل و آردوینو

دیدگاه‌ها (0)

*
*