การบันทึกข้อมูลเป็นสิ่งสำคัญของหลาย ๆ คน 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. การติดตั้งไลบรารีที่ต้องการ
- เปิด 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 จัดรูปแบบ.
✅ ทำให้มั่นใจ แก้ไขสายไฟ (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 และระบบอัตโนมัติ.