💾 ماژول کارت SD (microSD Card Module)
| اسم انگلیسی | microSD Card Module |
|---|---|
| در ووکوی (Wokwi) | wokwi-microsd-card |
| دسته | 📦 ماژولها |
| در شبیهساز فارسی | مود ساده (بدون کد) و مود آردوینو · رایگان |
ماژول کارت SD (microSD Card Module) به آردوینو یک دفترچهی ماندگار میدهد: عددهای سنسور را در فایل متنی یا CSV مینویسی و بعد کارت را در کامپیوتر میخوانی یا در اکسل نمودارش را میکشی. ارتباطش با آردوینو از راه گذرگاه SPI است، همان چهار سیمی که کارتخوان RFID و بعضی نمایشگرها هم استفاده میکنند. دیتالاگر دما، ثبت ساعت ورود و خروج و ذخیرهی تنظیمات برنامه کاربردهای اصلیاش هستند.
کارت SD در ووکوی (Wokwi)
ووکوی ماژول microSD را با شناسهی wokwi-microsd-card دارد. اسم پایههایش از دید خود کارت است: DI (ورودی دادهی کارت = MOSI آردوینو)، DO (خروجی دادهی کارت = MISO)، SCK، CS، و CD که «تشخیص کارت» است و برای این مثال لازم نیست. یک پتانسیومتر هم دادهی ما را میسازد:
{
"version": 1,
"parts": [
{ "type": "wokwi-arduino-uno", "id": "uno", "top": 100, "left": 0 },
{ "type": "wokwi-microsd-card", "id": "sd1", "top": -60, "left": 80 },
{ "type": "wokwi-potentiometer", "id": "pot1", "top": -60, "left": 260 }
],
"connections": [
[ "uno:10", "sd1:CS", "orange", [] ],
[ "uno:11", "sd1:DI", "blue", [] ],
[ "uno:12", "sd1:DO", "green", [] ],
[ "uno:13", "sd1:SCK", "yellow", [] ],
[ "uno:5V", "sd1:VCC", "red", [] ],
[ "uno:GND.1", "sd1:GND", "black", [] ],
[ "uno:5V", "pot1:VCC", "red", [] ],
[ "uno:A0", "pot1:SIG", "purple", [] ],
[ "uno:GND.1", "pot1:GND", "black", [] ]
]
}
| پایه در ووکوی | وصل به |
|---|---|
| CS | uno:10 |
| DI | uno:11 (MOSI) |
| DO | uno:12 (MISO) |
| SCK | uno:13 |
| VCC / GND | 5V / GND |
| CD | آزاد |
در تینکرکد فارسی، باز کردن و خواندن مثالها رایگان است؛ ماژول کارت SD جزو ماژولهای حرفهای است و اجرایش اشتراک Plus میخواهد. پروژهی آماده: ثبت داده روی کارت SD.
سیمکشی با آردوینو
| پایهی ماژول | وصل به |
|---|---|
| CS | پین 10 |
| MOSI | پین 11 |
| MISO | پین 12 |
| SCK | پین 13 |
| VCC | 5V (ماژولهایی که رگولاتور و مبدل سطح دارند) |
| GND | GND |
| پتانسیومتر | دو سر به 5V و GND، سر وسط به A0 |
روی اونو پایههای 11، 12 و 13 همان SPI سختافزاریاند و قابل تغییر نیستند؛ فقط CS را میشود عوض کرد.
کد نمونه
// SD data logger: writes the potentiometer value to a CSV file every second,
// then prints the whole file back after 10 rows.
#include <SPI.h>
#include <SD.h>
const int CS_PIN = 10;
int rows = 0;
void setup() {
Serial.begin(9600);
if (!SD.begin(CS_PIN)) {
Serial.println("SD init failed - check wiring and CS pin");
while (true) {} // stop here
}
File f = SD.open("data.csv", FILE_WRITE);
if (f) {
f.println("ms,pot"); // header row
f.close();
}
}
void loop() {
if (rows < 10) {
File f = SD.open("data.csv", FILE_WRITE); // appends to the end
if (f) {
f.print(millis());
f.print(",");
f.println(analogRead(A0));
f.close(); // close = data really written
rows++;
Serial.print("row ");
Serial.println(rows);
}
delay(1000);
} else if (rows == 10) {
File f = SD.open("data.csv");
while (f && f.available()) Serial.write(f.read());
if (f) f.close();
rows++; // print the file only once
}
}
اگر برنامه را دوباره اجرا کنی، ردیفهای تازه به انتهای همان فایل اضافه میشوند؛ برای فایل تمیز، قبل از نوشتن سرستون با SD.remove("data.csv") نسخهی قبلی را پاک کن.
چرا CSV؟ چون هر برنامهی صفحهگسترده آن را مستقیم باز میکند: ستون اول زمان به میلیثانیه و ستون دوم عدد سنسور، و با دو کلیک نمودار داری. اگر ثانیهای یک ردیف مینویسی، باز و بسته کردن فایل در هر بار مشکلی ندارد؛ برای نوشتن خیلی تندتر، فایل را باز نگه دار و هر چند ثانیه یک بار flush() بزن. اگر کنار کارت SD ماژول SPI دیگری هم داری، MOSI، MISO و SCK مشترکاند و هر ماژول فقط یک پایهی CS جدا میخواهد.
اشتباههای رایج
- اسم فایل بلند: کتابخانهی SD اسم حداکثر هشت حرفی با پسوند سهحرفی میخواهد، مثل
data.csv. close()فراموش شده: تا فایل بسته نشود، داده واقعاً روی کارت نمینشیند و با قطع برق از دست میرود.- کارت exFAT: کارتهای بزرگ را FAT32 فرمت کن.
- پین 10 ورودی شده: حتی اگر CS را روی پین دیگری گذاشتی، پین 10 اونو باید خروجی بماند تا SPI در حالت master کار کند.
آموزشهای مرتبط
- پتانسیومتر در ووکوی
- سنسور DHT22؛ دادهای که ارزش ثبت دارد
- کارتخوان RC522، همگذرگاه SPI
- درس ثبت داده روی کارت حافظه
سؤالهای رایج
کارت SD برای آردوینو چه فرمتی باید داشته باشد؟
FAT16 یا FAT32. کارتهای بزرگتر از ۳۲ گیگابایت معمولاً exFAT فرمت شدهاند و کتابخانهی SD آنها را نمیشناسد؛ کارت را FAT32 فرمت کن یا یک کارت کوچکتر بگذار.
چرا SD.begin شکست میخورد؟
رایجترین علتها: شمارهی CS در کد با سیمکشی یکی نیست، MISO و MOSI جابهجا شدهاند، کارت فرمت درستی ندارد یا ماژول برق کافی نمیگیرد.
ماژول SD در تینکرکد فارسی رایگان است؟
باز کردن و خواندن مثالها رایگان است؛ ماژول کارت SD جزو ماژولهای حرفهای است و اجرایش اشتراک Plus میخواهد. در ووکوی هم با شناسهی wokwi-microsd-card هست.