กลับไปหน้ารวมไฟล์
temperature-and-humidity-logger-using-arduino-8ebe7a.md

ในอดีต การบันทึกค่าอุณหภูมิและความชื้นในห้องเซิร์ฟเวอร์หรือห้องควบคุมระบบคอมพิวเตอร์มักจะใช้เครื่องบันทึกแบบกลไก (Mechanical Thermohygrographs) ที่ใช้ปากกาสองด้ามขีดเขียนกราฟลงบนกระดาษกราฟวงกลมหรือแบบม้วน แต่เทคโนโลยีเก่าเหล่านี้มาพร้อมกับข้อจำกัดมากมาย ไม่ว่าจะเป็นความจำเป็นในการสอบเทียบ (Calibration) ที่บ่อยครั้ง, การต้องคอยเปลี่ยนปากกาและกระดาษตามรอบ, ไปจนถึงความยุ่งยากในการจัดเก็บเอกสารย้อนหลังให้เป็นระเบียบ

ด้วยเหตุนี้ ผมจึงพัฒนาโปรเจค Digital Data Logger ขึ้นมาเพื่อแก้ไขปัญหาเหล่านี้ โดยอาศัยความสามารถของ Microcontroller สมัยใหม่และเซนเซอร์ที่ราคาประหยัดแต่มีความเชื่อถือได้สูง เพื่อบันทึกข้อมูลพร้อมระบุเวลา (Timestamp) ลงใน SD Card ซึ่งสามารถจัดเก็บข้อมูลได้ยาวนานหลายปีในรูปแบบดิจิทัลที่นำไปวิเคราะห์ต่อได้ทันที

รายการอุปกรณ์ที่ใช้ในโปรเจค (Hardware Components)

  1. Arduino Uno R3: บอร์ดควบคุมหลักที่ประมวลผลลอจิกทั้งหมด
  2. Adafruit Data Logging Shield: อุปกรณ์สำคัญที่ประกอบด้วยอินเทอร์เฟซ SD Card และชิป RTC (Real Time Clock) สำหรับรักษาเวลาให้เที่ยงตรงแม้ไม่มีไฟเลี้ยง
  3. Adafruit RGB LCD Shield (16x2): หน้าจอแสดงผลที่รองรับการสื่อสารผ่านโปรโตคอล I2C ช่วยประหยัดพินบนบอร์ด Arduino
  4. DHT11 Sensor: เซนเซอร์วัดอุณหภูมิและความชื้นสัมพัทธ์
  5. LDR (Light Dependent Resistor): (อุปกรณ์เสริม) สำหรับตรวจวัดความเข้มแสงในพื้นที่ เพื่อตรวจสอบว่ามีการเปิด-ปิดไฟหรือมีการเปิดตู้คอนโทรลทิ้งไว้หรือไม่
  6. Voltage Divider Circuit: (อุปกรณ์เสริม) วงจรแบ่งแรงดันเพื่อตรวจวัดแรงดันจากแหล่งจ่ายภายนอก (Vin) สำหรับตรวจจับสภาวะไฟตกหรือไฟดับ
DATA LOGGING SHIELD

รายละเอียดการเชื่อมต่อพิน (Pin Mapping)

เพื่อให้การจัดการข้อมูลเป็นไปอย่างเป็นระบบ เราได้กำหนดการใช้งานพินต่างๆ ดังนี้:

Digital Pins:

  • 02: อินพุตข้อมูลจากเซนเซอร์ DHT11
  • 03: สัญญาณไฟ LED สีเขียว (แสดงสถานะปกติ/การอ่านค่า)
  • 04: สัญญาณไฟ LED สีแดง (แสดงสถานะผิดปกติ หรือ SD Card Error)
  • 10: SD Card Chip Select (CS) สำหรับการสื่อสารผ่าน SPI
  • 11: SD Card MOSI
  • 12: SD Card MISO
  • 13: SD Card SCK (Clock)

Analog Pins:

  • A0: รับค่าแรงดันจากวงจรแบ่งแรงดัน (Vin Measurement)
  • A3: รับค่าจากเซนเซอร์แสง LDR
  • A4: I2C SDA (สำหรับเชื่อมต่อ RTC และ LCD Shield)
  • A5: I2C SCL (สำหรับเชื่อมต่อ RTC และ LCD Shield)

เจาะลึกการทำงานของเซนเซอร์และวงจร (Engineering Details)

1. การวัดอุณหภูมิและความชื้นด้วย DHT11

DHT11 เป็นเซนเซอร์ดิจิทัลที่รวมการวัดความชื้นแบบ Capacitive และการวัดอุณหภูมิแบบ Thermistor ไว้ในตัวเดียวกัน มีความคลาดเคลื่อนด้านความชื้นที่ ±5% และอุณหภูมิที่ ±2°C แม้ความละเอียดจะไม่สูงมาก แต่เพียงพอสำหรับการเฝ้าระวังเบื้องต้น หากคุณต้องการความแม่นยำที่สูงขึ้น (±0.5°C) สามารถเปลี่ยนไปใช้ DHT22 แทนได้โดยการปรับเปลี่ยน Library เล็กน้อยใน Code

ศึกษาข้อมูลเพิ่มเติมเกี่ยวกับเซนเซอร์ตระกูล DHT ได้ที่:

DHT11 Sensor

2. การตรวจวัดแสง (Light Sensing)

เราต่อ LDR ในรูปแบบวงจรแบ่งแรงดัน (Voltage Divider) ร่วมกับ Resistor ขนาด 10K Ohm โดยต่อ LDR ระหว่าง 5V กับพิน A3 และต่อ 10K Resistor ลง Ground เมื่อความเข้มแสงเปลี่ยน ความต้านทานของ LDR จะเปลี่ยนไป ทำให้แรงดันที่ตกคร่อมพิน A3 เปลี่ยนแปลงตาม (Analog Voltage) ซึ่ง Arduino จะแปลงค่านี้เป็นค่าตัวเลข 0-1023

3. การตรวจวัดแรงดันอินพุต (Voltage Monitoring)

เพื่อความปลอดภัย บอร์ด Arduino ไม่สามารถรับแรงดันโดยตรงที่เกิน 5V ได้ เราจึงใช้วงจรแบ่งแรงดันที่ประกอบด้วย Resistor 100K และ 10K ต่ออนุกรมกันระหว่างแหล่งจ่าย Vin และ Ground โดยดึงสัญญาณจากจุดกึ่งกลางเข้าที่พิน A0 วิธีนี้ช่วยให้เราสามารถคำนวณหาค่าแรงดันจริงที่จ่ายเข้าเครื่องได้ และบันทึกลงใน Log เมื่อเกิดเหตุการณ์ไฟดับหรือไฟกระชาก

Sensor connection diagram

ระบบแสดงผลและการควบคุม (Display Interface)

ผมเลือกใช้ RGB LCD Shield จาก Adafruit เพราะมีข้อดีในเชิงวิศวกรรมคือใช้ตัวขยายพิน (I/O Expander) ผ่านโปรโตคอล I2C ทำให้เราสามารถควบคุมหน้าจอตัวอักษร 16x2 และปุ่มกดอีก 5 ปุ่ม ได้โดยใช้สายสัญญาณเพียง 2 เส้น (SDA/SCL) เท่านั้น ช่วยให้เราเหลือพิน Digital อื่นๆ ไว้ใช้งานกับเซนเซอร์ได้มากขึ้น

การประกอบ Shield นี้ทำได้ง่ายเพียงเสียบลงบนบอร์ด Arduino Uno แบบ Stackable หรือหากต้องการแยกตำแหน่งติดตั้ง ก็สามารถเดินสายไฟเพียง 4 เส้น (VCC, GND, SDA, SCL) เท่านั้น

Adafruit RGB LCD Shield connections (https://learn.adafruit.com/assets/1439)

ศึกษาข้อมูลเพิ่มเติมเกี่ยวกับ RGB LCD Shield ได้ที่:


ลอจิกการทำงานของโปรแกรม (Program Logic)

โปรแกรมถูกออกแบบมาให้ทำงานวนลูป (Main Loop) อย่างต่อเนื่อง โดยมีขั้นตอนการทำงานหลักดังนี้:

  1. Initialization: เมื่อเปิดเครื่อง ระบบจะทำการตรวจสอบการเชื่อมต่อของ SD Card และ RTC หากไม่พบการเชื่อมต่อ ไฟ LED สีแดงจะติดค้างเพื่อแจ้งเตือน
  2. Data Acquisition: ทุกๆ ช่วงเวลาที่กำหนด (เช่น 1 นาที) บอร์ดจะอ่านค่าจากเซนเซอร์ DHT11, LDR และวัดแรงดันที่พิน A0
  3. Timestamping: ดึงค่า วัน/เดือน/ปี และ เวลาปัจจุบันจากชิป RTC เพื่อนำมาประทับตราข้อมูลแต่ละชุด
  4. Logging: ข้อมูลจะถูกเขียนลงในไฟล์ CSV (Comma Separated Values) ใน SD Card ซึ่งไฟล์รูปแบบนี้สามารถเปิดใช้งานได้ง่ายผ่านโปรแกรม Microsoft Excel หรือ Google Sheets เพื่อทำกราฟวิเคราะห์ผลภายหลัง
  5. Display Update: แสดงค่าอุณหภูมิและความชื้นแบบ Real-time บนหน้าจอ LCD และใช้ปุ่มกดเพื่อเปลี่ยนหน้าจอแสดงค่าแสงหรือแรงดันไฟฟ้า
  6. Visual Feedback: ทุกครั้งที่มีการบันทึกข้อมูลลง SD Card สำเร็จ ไฟ LED สีเขียวจะกะพริบเพื่อบอกให้ผู้ใช้งานทราบว่าระบบยังทำงานปกติดี

ด้วยโครงสร้างระบบนี้ ทำให้เราได้เครื่องบันทึกข้อมูลที่มีประสิทธิภาพสูง แม่นยำกว่าระบบกลไก และที่สำคัญที่สุดคือไม่ต้องกังวลเรื่องการเปลี่ยนกระดาษหรือปากกาอีกต่อไป!

ข้อมูล Frontmatter ดั้งเดิม

title: "Temperature and Humidity Logger (Using Arduino)"
description: "Reads and stores in SD card, the temperature and humidity values over time."
author: "lmsousa"
category: "Sensors & Environment"
tags:
  - "environmental sensing"
  - "data collection"
views: 37175
likes: 26
price: 699
difficulty: "Intermediate"
components:
  - "1x LCD Shield Kit w/ 16x2 Character Display - Only 2 pins used!"
  - "1x DHT11 Temperature & Humidity Sensor (4 pins)"
  - "1x Soldering iron (generic)"
  - "1x Arduino UNO"
  - "1x Adafruit Data Logger Shield"
tools: []
apps:
  - "1x Arduino IDE"
downloadableFiles: []
documentationLinks: []
passwordHash: "0c4690748ac9ab036b52557025166a9234dfc5dcfc78b657d0710d71d009f426"
encryptedPayload: "U2FsdGVkX1+e4yRCqWf5qoVxQtZU8zR1DLT/d80IxHcUHatouzHw0/Le+T8TxaBcy3h0hC3Kdxxpa7yb//c6YgyMedZV3hWlJdiP2u8NFLk="
seoDescription: "Build a Temperature and Humidity Logger using Arduino to store data on an SD card for long-term monitoring."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/temperature-and-humidity-logger-using-arduino-8ebe7a_cover.jpg"
lang: "en"