โปรเจกต์ Arduino Temperature Logger: บันทึกอุณหภูมิลง SD Card พร้อมวันที่และเวลา
เรียนรู้วิธีการสร้างเครื่องบันทึกข้อมูล (Data Logger) ด้วย Arduino เพื่อวัดอุณหภูมิและความชื้นโดยใช้เซนเซอร์ DHT11 แล้วบันทึกค่าลงใน SD Card ในรูปแบบไฟล์ CSV ที่สามารถนำไปเปิดวิเคราะห์ต่อใน Microsoft Excel ได้ทันที
🛠 อุปกรณ์ที่ต้องใช้
- Arduino Uno R3 x 1 เครื่อง https://shopee.co.th/product/243007968/5725582932
- DS3231 RTC Module (โมดูลนาฬิกา Real-Time Clock) x 1 ตัว https://shopee.co.th/product/243007968/3425679127
- SD Card Module + SD Card x 1 ชุด https://shopee.co.th/product/243007968/3826288197
- DHT11 Sensor (เซนเซอร์วัดอุณหภูมิและความชื้น) x 1 ตัว https://shopee.co.th/product/243007968/7425582166
- สายจัมเปอร์และ Breadboard https://shopee.co.th/product/243007968/7225582763 , https://shopee.co.th/product/243007968/7525582748 , https://shopee.co.th/product/243007968/4725583371

📝 รายละเอียดและจุดเด่นของโปรเจกต์
ข้อมูลที่บันทึกได้จะถูกเก็บไว้ใน SD Card ซึ่งคุณสามารถนำไปเสียบกับคอมพิวเตอร์เพื่อเปิดดูผ่าน Excel ได้อย่างง่ายดาย โดยเราจะใช้โมดูล DS3231 เพื่อรักษาความถูกต้องของวันที่และเวลาแม้ไม่มีไฟเลี้ยง และใช้ DHT11 ในการดึงค่าสภาพอากาศ
สิ่งที่คุณจะได้เรียนรู้จากโปรเจกต์นี้:
- วิธีการบันทึกข้อมูล (Data Logging) ลง SD Card พร้อมระบุ วันที่, เวลา และค่าจากเซนเซอร์
- การสื่อสารผ่าน Serial เพื่อส่งข้อมูลเข้าสู่ Excel บน PC โดยตรง
- การทำงานกับ Library ต่างๆ เพื่อจัดการโครงสร้างไฟล์ใน SD Card
📚 การเตรียมตัวก่อนเริ่ม
ก่อนการอัปโหลดโค้ด คุณต้องติดตั้ง Library ที่จำเป็นผ่าน Arduino Library Manager หรือดาวน์โหลดจาก GitHub ดังนี้:
- DHT Sensor Library (โดย Adafruit)
- RTClib (โดย Adafruit เพื่อใช้งาน DS3231)
- SD & SPI Library (มักจะมีติดมากับ Arduino IDE อยู่แล้ว)
💻 Arduino Code
คัดลอกโค้ดด้านล่างนี้ลงในโปรแกรม Arduino IDE:
#include <SPI.h> // สำหรับสื่อสารกับ SD Card
#include <SD.h> // สำหรับจัดการไฟล์ใน SD Card
#include <DHT.h> // สำหรับเซนเซอร์ DHT
#include <RTClib.h> // สำหรับโมดูลนาฬิกา RTC
// ตั้งค่าขา DHT
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
// ตั้งค่าขา CS สำหรับโมดูล SD Card (โดยทั่วไปคือขา 4 หรือ 10)
const int chipSelect = 4;
File myFile;
RTC_DS1307 rtc;
void setup() {
dht.begin();
Serial.begin(9600);
// ตรวจสอบการเชื่อมต่อ RTC
if (!rtc.begin()) {
Serial.println("ไม่พบโมดูล RTC");
while (1);
}
// ตั้งค่าเวลาให้ตรงกับคอมพิวเตอร์ขณะคอมไพล์โค้ด
if (!rtc.isrunning()) {
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
// เริ่มต้นการทำงาน SD Card
Serial.print("กำลังเชื่อมต่อ SD card...");
if (!SD.begin(chipSelect)) {
Serial.println("การเชื่อมต่อล้มเหลว!");
return;
}
Serial.println("เชื่อมต่อสำเร็จ");
// สร้างไฟล์และเขียนหัวตาราง (Header)
myFile = SD.open("DATA.txt", FILE_WRITE);
if (myFile) {
Serial.println("กำลังสร้างหัวตารางในไฟล์...");
myFile.println("Date,Time,Temperature C");
myFile.close();
}
}
void loop() {
loggingTime();
loggingTemperature();
delay(5000); // บันทึกข้อมูลทุกๆ 5 วินาที
}
void loggingTime() {
DateTime now = rtc.now();
myFile = SD.open("DATA.txt", FILE_WRITE);
if (myFile) {
// เขียนวันที่ลงไฟล์
myFile.print(now.year(), DEC);
myFile.print('/');
myFile.print(now.month(), DEC);
myFile.print('/');
myFile.print(now.day(), DEC);
myFile.print(',');
// เขียนเวลาลงไฟล์
myFile.print(now.hour(), DEC);
myFile.print(':');
myFile.print(now.minute(), DEC);
myFile.print(':');
myFile.print(now.second(), DEC);
myFile.print(",");
myFile.close();
}
// แสดงผลทาง Serial Monitor
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.println(now.day(), DEC);
}
void loggingTemperature() {
float t = dht.readTemperature(); // อ่านค่าอุณหภูมิ
if (isnan(t)) {
Serial.println("ไม่สามารถอ่านค่าจาก DHT ได้!");
return;
}
Serial.print("อุณหภูมิ: ");
Serial.print(t);
Serial.println(" *C");
myFile = SD.open("DATA.txt", FILE_WRITE);
if (myFile) {
myFile.print(t);
myFile.println(""); // ขึ้นบรรทัดใหม่
myFile.close();
Serial.println("บันทึกลง SD Card เรียบร้อย");
}
}
💡 สรุปขั้นตอนการทำงาน
- เริ่มต้น: Arduino จะตรวจสอบว่าพบ RTC และ SD Card หรือไม่
- สร้างไฟล์: โปรแกรมจะสร้างไฟล์ชื่อ
DATA.txtและเขียนหัวตารางเตรียมไว้ - บันทึกวนลูป: ทุกๆ 5 วินาที โปรแกรมจะดึงวันที่และเวลาปัจจุบัน และอ่านค่าอุณหภูมิจาก DHT11
- เขียนข้อมูล: ข้อมูลทั้งหมดจะถูกเขียนต่อท้ายเข้าไปในไฟล์เดิม และปิดไฟล์ทุกครั้งเพื่อป้องกันข้อมูลสูญหาย
เพียงเท่านี้คุณก็ได้ระบบ Data Logger ราคาประหยัดไว้ใช้งานเองแล้วครับ! คุณสามารถปรับเปลี่ยน delay(5000) เป็นเวลาที่ต้องการ เช่น 60000 เพื่อบันทึกข้อมูลทุก 1 นาทีได้ตามความเหมาะสมของงาน