يعد تسجيل البيانات جانبًا مهمًا للعديد إنترنت الأشياء والمراقبة البيئية والمشاريع القائمة على المستشعرات. مع Arduino ووحدة بطاقة SD، أنت تستطيع تخزين بيانات المستشعر ، الطوابع الزمنية ، وغيرها من القراءات للتحليل المستقبلي. سيوضح لك هذا الدليل كيفية ذلك قم بتوصيل وحدة بطاقة SD إلى Arduinoوكتابة وقراءة البيانات ، واستكشاف الأخطاء وإصلاحها المشكلات الشائعة.
1. ما تحتاجه
✅ لوحة أردوينو (Uno ، Mega ، Nano ، إلخ)
✅ وحدة بطاقة SD Micro (تعتمد على SPI)
✅ بطاقة microSD (تنسيق FAT32 ، 2GB - 32GB الموصى بها)
✅ الأسلاك الطائر
✅ مستشعرات (اختياري ، على سبيل المثال ، DHT11 ، BMP280 ، إلخ)
🔹 ملحوظة: تتصل وحدة SD باستخدام Arduino باستخدام SPI (الواجهة الطرفية التسلسلية).
2. توصيل وحدة بطاقة SD إلى Arduino
دبوس وحدة بطاقة SD | Arduino Uno Pin | Arduino Mega Pin |
---|---|---|
VCC | 5V | 5V |
GND | GND | GND |
ميسو | 12 (SPI MISO) | 50 (SPI MISO) |
موسي | 11 (SPI Mosi) | 51 (SPI Mosi) |
SCK | 13 (SPI SCK) | 52 (SPI SCK) |
CS (Chip Select) | 10 (spi cs) | 53 (spi cs) |
3. تثبيت المكتبة المطلوبة
- يفتح Arduino IDE.
- اذهب إلى رسم ← تضمين مكتبة ← إدارة المكتبات.
- بحث عن SD وتثبيت مكتبة SD بواسطة Arduino.
4. تهيئة بطاقة SD (اختبار إذا كانت وحدة SD تعمل)
استخدم ما يلي رمز الاختبار الأساسي للتحقق مما إذا كانت وحدة SD تعمل:
#include <SPI.h>
#include <SD.h>
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 منسقة.
✅ يضمن الأسلاك الصحيحة (ميسو ، موسي ، SCK ، و CS).
✅ جرب آخر دبوس CS (على سبيل المثال ، 4 بدلاً من 10) وتحديث الرمز.
5. كتابة البيانات إلى بطاقة SD
هذا المثال ينشئ ملف (data.txt
) ويكتب قراءات المستشعر لها.
#include <SPI.h>
#include <SD.h>
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("Text");
→ اكتب البيانات للملف.
✔ dataFile.close();
→ أغلق الملف لحفظ البيانات.
6. قراءة البيانات من بطاقة SD
استخدم هذا الرمز إلى قراءة وعرض البيانات من بطاقة SD.
#include <SPI.h>
#include <SD.h>
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 | دبوس أردوينو |
---|---|
VCC | 5V |
GND | GND |
بيانات | 2 |
الرمز: تسجيل بيانات DHT11 إلى بطاقة SD
#include <SPI.h>
#include <SD.h>
#include <DHT.h>
#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 منسقة.
✅ تحقق مزدوج ميسو ، موسي ، SCK ، و CS الأسلاك.
✅ يحاول بطاقة SD مختلفة (بعض البطاقات غير متوافقة).
مشكلة: البيانات لا تحفظ؟
✅ دائماً أغلق الملف استخدام dataFile.close();
.
✅ يضمن مساحة تخزين كافية متوفر على بطاقة SD.
9. التطبيقات العملية
✔ نظام مراقبة الطقس - سجل درجة الحرارة والرطوبة وضغط الهواء.
✔ مراقبة الطاقة - سِجِلّ الجهد والتيار قراءات مع مرور الوقت.
✔ تتبع GPS - محل خط العرض وخط الطول بيانات من وحدة GPS.
✔ تسجيل الحدث - سجلات مستشعر التسجيل أو الضغط على الزر.
10. الخلاصة
باستخدام وحدة بطاقة SD مع Arduino هو وسيلة رائعة ل تخزين بيانات المستشعر أو أحداث السجل أو إنشاء مسجل بيانات محمول. مع اتصال SPI، يمكنك بسهولة اقرأ وكتابة الملفاتمما يجعلها مثالية ل مشاريع إنترنت الأشياء والأتمتة.