การบันทึกข้อมูลเป็นส่วนสำคัญอย่างยิ่งของหลาย IoT, การเฝ้าติดตามสิ่งแวดล้อม, และโครงการที่ใช้เซ็นเซอร์. ด้วย Arduino และ โมดูลการ์ด SD, คุณสามารถ จัดเก็บข้อมูลเซ็นเซอร์ ตราประทับเวลา และการอ่านค่าอื่น ๆ สำหรับการวิเคราะห์ในอนาคต คู่มือนี้จะแสดงให้คุณเห็นวิธีการ เชื่อมต่อ โมดูลการ์ด SD ไปยัง Arduino, เขียนและอ่านข้อมูล และแก้ไขปัญหาที่พบบ่อย.
1. สิ่งที่คุณต้องมี
✅ บอร์ด Arduino (Uno, Mega, Nano, ฯลฯ)
✅ ไมโคร โมดูลการ์ด SD (บนพื้นฐานของ SPI)
✅ การ์ด microSD (ฟอร์แมตเป็น FAT32, แนะนำขนาด 2GB–32GB)
✅ สายจัมเปอร์
✅ เซ็นเซอร์ (ไม่จำเป็น เช่น DHT11, BMP280, ฯลฯ)
🔹 หมายเหตุ: โมดูล SD สื่อสารกับ Arduino โดยใช้ SPI (อินเทอร์เฟซอุปกรณ์ต่อพ่วงแบบอนุกรม).
2. การเดินสายไฟของ โมดูลการ์ด SD ไปยัง Arduino
| โมดูลการ์ด SD พิน | พิน Arduino Uno | ขา Arduino Mega |
|---|---|---|
| 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. การติดตั้งไลบรารีที่จำเป็น
- เปิด Arduino IDE.
- ไปที่ สเก็ตช์ → รวมไลบรารี → จัดการไลบรารี.
- ค้นหา SD และติดตั้ง ไลบรารี SD โดย Arduino.
4. การเริ่มต้นการ์ด SD (ทดสอบว่าโมดูล 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 Sensor Library)
การเดินสายสำหรับเซ็นเซอร์ DHT11
| ขา DHT11 | พิน Arduino |
|---|---|
| VCC | 5V |
| GND | GND |
| ข้อมูล | 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, คุณสามารถทำได้อย่างง่ายดาย อ่านและเขียนไฟล์, ทำให้เหมาะสำหรับ โครงการด้าน IoT และระบบอัตโนมัติ.
