Posted in

โปรเจกต์ Arduino Temperature Logger: บันทึกอุณหภูมิลง SD Card พร้อมวันที่และเวลา

โปรเจกต์ Arduino Temperature Logger: บันทึกอุณหภูมิลง SD Card พร้อมวันที่และเวลา

เรียนรู้วิธีการสร้างเครื่องบันทึกข้อมูล (Data Logger) ด้วย Arduino เพื่อวัดอุณหภูมิและความชื้นโดยใช้เซนเซอร์ DHT11 แล้วบันทึกค่าลงใน SD Card ในรูปแบบไฟล์ CSV ที่สามารถนำไปเปิดวิเคราะห์ต่อใน Microsoft Excel ได้ทันที


🛠 อุปกรณ์ที่ต้องใช้


📝 รายละเอียดและจุดเด่นของโปรเจกต์

ข้อมูลที่บันทึกได้จะถูกเก็บไว้ใน SD Card ซึ่งคุณสามารถนำไปเสียบกับคอมพิวเตอร์เพื่อเปิดดูผ่าน Excel ได้อย่างง่ายดาย โดยเราจะใช้โมดูล DS3231 เพื่อรักษาความถูกต้องของวันที่และเวลาแม้ไม่มีไฟเลี้ยง และใช้ DHT11 ในการดึงค่าสภาพอากาศ

สิ่งที่คุณจะได้เรียนรู้จากโปรเจกต์นี้:

  • วิธีการบันทึกข้อมูล (Data Logging) ลง SD Card พร้อมระบุ วันที่, เวลา และค่าจากเซนเซอร์
  • การสื่อสารผ่าน Serial เพื่อส่งข้อมูลเข้าสู่ Excel บน PC โดยตรง
  • การทำงานกับ Library ต่างๆ เพื่อจัดการโครงสร้างไฟล์ใน SD Card

📚 การเตรียมตัวก่อนเริ่ม

ก่อนการอัปโหลดโค้ด คุณต้องติดตั้ง Library ที่จำเป็นผ่าน Arduino Library Manager หรือดาวน์โหลดจาก GitHub ดังนี้:

  1. DHT Sensor Library (โดย Adafruit)
  2. RTClib (โดย Adafruit เพื่อใช้งาน DS3231)
  3. 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 เรียบร้อย");
  }
}

💡 สรุปขั้นตอนการทำงาน

  1. เริ่มต้น: Arduino จะตรวจสอบว่าพบ RTC และ SD Card หรือไม่
  2. สร้างไฟล์: โปรแกรมจะสร้างไฟล์ชื่อ DATA.txt และเขียนหัวตารางเตรียมไว้
  3. บันทึกวนลูป: ทุกๆ 5 วินาที โปรแกรมจะดึงวันที่และเวลาปัจจุบัน และอ่านค่าอุณหภูมิจาก DHT11
  4. เขียนข้อมูล: ข้อมูลทั้งหมดจะถูกเขียนต่อท้ายเข้าไปในไฟล์เดิม และปิดไฟล์ทุกครั้งเพื่อป้องกันข้อมูลสูญหาย

เพียงเท่านี้คุณก็ได้ระบบ Data Logger ราคาประหยัดไว้ใช้งานเองแล้วครับ! คุณสามารถปรับเปลี่ยน delay(5000) เป็นเวลาที่ต้องการ เช่น 60000 เพื่อบันทึกข้อมูลทุก 1 นาทีได้ตามความเหมาะสมของงาน