تسجيل البيانات مع Arduino ووحدة بطاقة SD

Data Logging with Arduino and an SD Card Module

يعد تسجيل البيانات جانبًا مهمًا للعديد إنترنت الأشياء والمراقبة البيئية والمشاريع القائمة على المستشعرات. مع 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. تثبيت المكتبة المطلوبة

  1. يفتح Arduino IDE.
  2. اذهب إلى رسم ← تضمين مكتبة ← إدارة المكتبات.
  3. بحث عن 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، يمكنك بسهولة اقرأ وكتابة الملفاتمما يجعلها مثالية ل مشاريع إنترنت الأشياء والأتمتة.

اترك تعليقًا

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.