การบันทึกข้อมูลด้วย Arduino และโมดูลการ์ด SD

Data Logging with Arduino and an SD Card Module

การบันทึกข้อมูลเป็นสิ่งสำคัญของหลาย ๆ คน IoT การตรวจสอบด้านสิ่งแวดล้อมและโครงการที่ใช้เซ็นเซอร์- กับ Arduino และโมดูลการ์ด SDคุณทำได้ เก็บข้อมูลเซ็นเซอร์การประทับเวลาและการอ่านอื่น ๆ สำหรับการวิเคราะห์ในอนาคต คู่มือนี้จะแสดงวิธีการ เชื่อมต่อโมดูลการ์ด SD กับ Arduino, เขียนและอ่านข้อมูลและแก้ไขปัญหาทั่วไป


1. สิ่งที่คุณต้องการ

บอร์ด Arduino (uno, mega, nano ฯลฯ )
โมดูลการ์ด Micro SD (SPI-based)
การ์ด microSD (FAT32 Formatted, 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)
Mosi 11 (Spi Mosi) 51 (Spi Mosi)
SCK 13 (SPI SCK) 52 (SPI SCK)
CS (ชิปเลือก) 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 จัดรูปแบบ.
✅ ทำให้มั่นใจ แก้ไขสายไฟ (MISO, MOSI, SCK และ CS)
✅ ลองอื่น CS PIN (เช่น 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 Sensor Library)

สายไฟสำหรับเซ็นเซอร์ DHT11

PIN DHT11 พิน Arduino
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 จัดรูปแบบ.
✅ ตรวจสอบอีกสองครั้ง MISO, MOSI, SCK และ CS Wiring.
✅ พยายาม การ์ด SD ที่แตกต่างกัน (การ์ดบางใบไม่เข้ากัน)

ปัญหา: ข้อมูลไม่บันทึก?
✅ เสมอ ปิดไฟล์ โดยใช้ dataFile.close();.
✅ ทำให้มั่นใจ พื้นที่จัดเก็บเพียงพอ มีอยู่ในการ์ด SD


9. การใช้งานจริง

ระบบตรวจสอบสภาพอากาศ - อุณหภูมิบันทึกความชื้นและความดันอากาศ
การตรวจสอบพลังงาน - บันทึก แรงดันไฟฟ้าและกระแสไฟฟ้า อ่านเมื่อเวลาผ่านไป
การติดตาม GPS - เก็บ ละติจูดและลองจิจูด ข้อมูลจากโมดูล GPS
การบันทึกเหตุการณ์ - บันทึกเซ็นเซอร์หรือกดปุ่มกด


10. บทสรุป

ใช้ไฟล์ โมดูลการ์ด SD กับ Arduino เป็นวิธีที่ดีในการ จัดเก็บข้อมูลเซ็นเซอร์บันทึกเหตุการณ์หรือสร้างเครื่องบันทึกข้อมูลแบบพกพา- กับ การสื่อสาร SPIคุณสามารถทำได้อย่างง่ายดาย อ่านและเขียนไฟล์ทำให้เหมาะสำหรับ โครงการ IoT และระบบอัตโนมัติ.

แสดงความคิดเห็น

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.