تسجيل البيانات هو جانب بالغ الأهمية في العديد من إنترنت الأشياء، مراقبة البيئة، والمشاريع المعتمدة على المستشعرات. مع أردوينو و وحدة بطاقة SD، يمكنك تخزين بيانات المستشعر والطوابع الزمنية وقراءات أخرى لتحليل مستقبلي. سيوضح لك هذا الدليل كيفية اتصل ب وحدة بطاقة SD إلى Arduino، كتابة وقراءة البيانات، واستكشاف المشكلات الشائعة وإصلاحها.
1. ما الذي تحتاجه
✅ لوحة Arduino (Uno، Mega، Nano، إلخ.)
✅ صغير وحدة بطاقة SD (قائم على SPI)
✅ بطاقة MicroSD (مهيّأة بنظام FAT32، يُوصى بسعة 2GB–32GB)
✅ أسلاك وصل
✅ حساسات (اختياري، مثلًا: DHT11، BMP280`, etc.)`
🔹 ملاحظة: يتواصل módulo SD مع Arduino باستخدام SPI (واجهة المحيط التسلسلي).
2. توصيل وحدة بطاقة SD إلى Arduino
| وحدة بطاقة SD دبوس | دبوس Arduino Uno | دبوس Arduino Mega |
|---|---|---|
| VCC | 5V | 5V |
| الأرض | أرضي | الأرضي |
| ميسو | 12 (SPI MISO) | 50 (منفذ SPI MISO) |
| موسي | 11 (SPI MOSI) | 51 (SPI MOSI) |
| SCK | 13 (SPI SCK) | 52 (SPI SCK) |
| CS (اختيار الشريحة) | 10 (SPI CS) | 53 (SPI CS) |
3. تثبيت المكتبة المطلوبة
- افتح Arduino IDE.
- اذهب إلى Sketch → تضمين المكتبة → إدارة المكتبات.
- ابحث عن SD وتثبيت الـ مكتبة SD من Arduino.
4. تهيئة بطاقة SD (اختبر ما إذا كان يعمل módulo SD)
استخدم ما يلي رمز اختبار أساسي للتحقق مما إذا كانت وحدة SD تعمل:
#include
#include
const int chipSelect = 10; // Set CS pin for SD card
void setup() {
Serial.begin(115200);
Serial.print("Initializing SD card...");
if (!SD.begin(chipSelect)) {
Serial.println("SD card initialization failed!");
return;
}
Serial.println("SD card is ready.");
}
void loop() {
// Nothing here
}
ما الذي يفعله هذا الكود:
✔ يهيّئ الـ وحدة SD.
✔ يطبع "بطاقة SD جاهزة" إذا تم الكشف.
✔ مطبوعات "فشل تهيئة بطاقة SD!" إذا كان هناك خطأ.
🔹 استكشاف الأخطاء وإصلاحها
✅ تحقق من أن بطاقة SD هي مهيأ بصيغة FAT32.
✅ تأكَّد توصيل صحيح (MISO، MOSI، SCK، وCS).
✅ جرّب خيارًا آخر دبوس CS (على سبيل المثال، 4 بدلاً من 10) وتحديث الكود
5. كتابة البيانات إلى بطاقة SD
هذا المثال ينشئ ملفًا (data.txt) ويكتب قراءات المستشعر عليه.
#include
#include
const int chipSelect = 10;
void setup() {
Serial.begin(115200);
if (!SD.begin(chipSelect)) {
Serial.println("SD card initialization failed!");
return;
}
File dataFile = SD.open("data.txt", FILE_WRITE);
if (dataFile) {
dataFile.println("Hello, this is a test log!");
dataFile.close();
Serial.println("Data written to SD card.");
} else {
Serial.println("Failed to open file.");
}
}
void loop() {
// Nothing here
}
ما يفعله هذا الكود:
✔ ينشئ أو يفتح data.txt.
✔ يكتب "مرحبًا، هذا سجل اختبار!" إلى الملف.
✔ يغلق الملف بعد الكتابة.
🔹 دوال التعامل مع الملفات:
✔ SD.open("filename.txt", FILE_WRITE); → افتح الملف للكتابة.
✔ dataFile.println("نص"); → اكتب البيانات إلى الملف.
` dataFile.close(); → أغلق الملف لحفظ البيانات.
6. قراءة البيانات من بطاقة SD
استخدم هذا الرمز لـ قراءة وعرض البيانات من بطاقة SD.
#include
#include
const int chipSelect = 10;
void setup() {
Serial.begin(115200);
if (!SD.begin(chipSelect)) {
Serial.println("SD card initialization failed!");
return;
}
File dataFile = SD.open("data.txt");
if (dataFile) {
Serial.println("Reading file...");
while (dataFile.available()) {
Serial.write(dataFile.read()); // Print file content
}
dataFile.close();
} else {
Serial.println("Failed to open file.");
}
}
void loop() {
// Nothing here
}
ما الذي يفعله هذا الكود:
✔ يفتح data.txt للقراءة.
✔ يطبع محتويات الملف إلى شاشة المراقبة التسلسلية.
🔹 نصيحة: تأكد من الملف يوجد قبل القراءة لتجنب الأخطاء.
7. تسجيل بيانات المستشعر على بطاقة SD
يسجل هذا المثال بيانات درجة الحرارة والرطوبة من حساس DHT11.
المكوّنات المطلوبة
✅ مستشعر درجة الحرارة والرطوبة DHT11
`
✅ مكتبة DHT (مكتبة مستشعر Adafruit DHT)
توصيلات مستشعر DHT11
| دبوس DHT11 | دبوس Arduino |
|---|---|
| VCC | 5V |
| الأرضي | أرضي |
| البيانات | 2 |
الشفرة: تسجيل بيانات DHT11 على بطاقة SD
#include
#include
#include
#define DHTPIN 2 // Pin connected to DHT sensor
#define DHTTYPE DHT11 // Define sensor type (DHT11 or DHT22)
DHT dht(DHTPIN, DHTTYPE);
const int chipSelect = 10;
void setup() {
Serial.begin(115200);
dht.begin();
if (!SD.begin(chipSelect)) {
Serial.println("SD card initialization failed!");
return;
}
}
void loop() {
float temp = dht.readTemperature();
float humidity = dht.readHumidity();
if (isnan(temp) || isnan(humidity)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
File dataFile = SD.open("log.txt", FILE_WRITE);
if (dataFile) {
dataFile.print("Temperature: ");
dataFile.print(temp);
dataFile.print(" °C, Humidity: ");
dataFile.print(humidity);
dataFile.println(" %");
dataFile.close();
} else {
Serial.println("Failed to write to SD card.");
}
Serial.print("Logged: Temp = ");
Serial.print(temp);
Serial.print(" °C, Humidity = ");
Serial.println(humidity);
delay(2000); // Log every 2 seconds
}
ما الذي يفعله هذا الكود:
✔ يقرأ الحرارة والرطوبة من الـ مستشعر DHT11.
✔ يسجل البيانات في log.txt على بطاقة SD.
✔ يطبع القيم إلى مُراقِب تسلسلي.
8. نصائح استكشاف الأخطاء وإصلاحها
المشكلة: هل لم يتم اكتشاف بطاقة SD؟
✅ تأكد من أن بطاقة SD هي مهيأ بنظام FAT32.
✅ تحقّق مزدوج توصيل الأسلاك MISO وMOSI وSCK وCS.
✅ جرّب بطاقة SD مختلفة (بعض البطاقات غير متوافقة).
المشكلة: لا يتم حفظ البيانات؟
✅ دائمًا أغلق الملف باستخدام dataFile.close();.
✅ تأكد مساحة تخزين كافية متاح على بطاقة SD.
9. التطبيقات العملية
✔ نظام مراقبة الطقس – سجّل درجة الحرارة والرطوبة وضغط الهواء.
✔ مراقبة الطاقة – تسجيل الجهد والتيار قراءات بمرور الوقت.
✔ تتبع GPS – المتجر خط العرض وخط الطول بيانات من وحدة GPS.
✔ تسجيل الأحداث – سجّل تشغيلات المستشعر أو ضغطات الأزرار.
10. الخاتمة
باستخدام وحدة بطاقة SD مع Arduino هي طريقة رائعة لـ تخزين بيانات المستشعر، وتسجيل الأحداث، أو إنشاء جهاز تسجيل بيانات محمول. مع اتصال SPI، يمكنك بسهولة قراءة وكتابة الملفات، مما يجعله مثاليًا لـ مشاريع إنترنت الأشياء والأتمتة.
