DHT11 Humidity + Temperature Sensor with 16x2 LCD display
สถานที่ที่ผมอาศัยอยู่ค่อนข้างร้อนชื้นเกือบตลอดทั้งปีครับ เมื่อไม่กี่วันก่อนผมเลยหงุดหงิดว่าทำไมสภาพอากาศถึงได้แย่ขนาดนี้แม้จะเข้าสู่ช่วงกลางเดือนกันยายนแล้วก็ตาม และนั่นก็เป็นที่มาของโปรเจกต์นี้ครับ นอกจากนี้ ผมยังไม่เคยมีโอกาสได้ทดลองใช้ Sensor ตัวนี้จริงๆ จังๆ มาก่อนเลย ถือเป็นข้ออ้างที่ดีในการลงมือทำครับ
อย่างไรก็ตาม ผมตั้งใจทำให้โปรเจกต์นี้เรียบง่ายที่สุดเท่าที่จะทำได้ หวังว่าสิ่งนี้จะช่วยให้คุณคุ้นเคยกับการเขียนโปรแกรม (และ Arduino โดยทั่วไป) นะครับ!
การรับรู้สภาพแวดล้อมสำหรับผู้เริ่มต้น
DHT11 Weather Station เป็นหนึ่งในโปรเจกต์ระดับเริ่มต้นที่ได้รับความนิยมมากที่สุดด้วยเหตุผลที่ดี: เป็นโปรเจกต์ที่ใช้งานได้จริงอย่างเหลือเชื่อและให้ข้อมูลในโลกแห่งความเป็นจริงได้ทันที ด้วยการรวม Digital humidity and temperature sensor ที่เชื่อถือได้เข้ากับ Character LCD แบบคลาสสิก คุณจะได้สร้างเครื่องมือเฉพาะสำหรับการตรวจสอบสภาพอากาศภายในอาคาร โปรเจกต์นี้เป็นการแนะนำที่สมบูรณ์แบบสำหรับ Digital Sensor Protocols และ Display Interfacing
โครงสร้าง Hardware
- Arduino UNO: ทำหน้าที่เป็นตัวควบคุมหลัก อ่าน Data pulses จาก Sensor และจัดรูปแบบสำหรับแสดงผลบน Display
- DHT11 Sensor: Digital sensor ราคาประหยัดที่ใช้ Capacitive humidity sensor และ Thermistor ในการวัดอากาศโดยรอบ โดยจะส่งสัญญาณ Digital ออกมาที่ Data pin เพียงเส้นเดียว ซึ่งมีความทนทานมากกว่า Analog sensor ทั่วไป
- 16x2 Character LCD: จอแสดงผลที่เป็นที่นิยมในโลกอิเล็กทรอนิกส์ หน้าจอนี้แสดงผลได้สองบรรทัด บรรทัดละ 16 อักขระ ทำให้คุณสามารถแสดงทั้ง Temperature และ Humidity ได้พร้อมกัน
- Potentiometer (ตัวเลือกเสริม/รวมอยู่ใน Jumper wires): โดยทั่วไปใช้สำหรับปรับ Contrast ของ LCD เพื่อให้ข้อความชัดเจน
ตรรกะทางเทคโนโลยีและการไหลของข้อมูล
ระบบทำงานเป็นรอบซ้ำๆ ผ่านฟังก์ชัน loop():
- การร้องขอ: Arduino ส่ง Start signal ไปยัง DHT11 sensor
- การส่งข้อมูล: DHT11 ตอบกลับด้วย Data packet ขนาด 40-bit ที่ประกอบด้วยค่า Relative humidity และ Temperature
- การตรวจสอบ Checksum: Arduino library จะตรวจสอบความถูกต้องของข้อมูลเพื่อให้แน่ใจว่าไม่มีข้อผิดพลาดในการส่งข้อมูล
- การอัปเดต Display:
- Code จะล้างข้อมูลบน LCD
- แสดงผล "Temp: [Value] C" บนบรรทัดบนสุด
- แสดงผล "Humidity: [Value] %" บนบรรทัดล่างสุด
- การหน่วงเวลาเพื่อความเสถียร: DHT11 ต้องใช้เวลาอย่างน้อย 1-2 วินาทีระหว่างการอ่านข้อมูลเพื่อให้ได้ความแม่นยำ ดังนั้น Code จึงมีการหน่วงเวลาสั้นๆ ก่อนการอัปเดตครั้งถัดไป
ทำไมโปรเจกต์นี้จึงสำคัญ
นอกเหนือจากการรู้ว่าอากาศร้อนแค่ไหน โปรเจกต์นี้ยังสอนคุณเกี่ยวกับ Library Management ใน Arduino IDE และ String Manipulation อีกด้วย โปรเจกต์นี้เป็นรากฐานสำคัญสำหรับระบบที่ซับซ้อนยิ่งขึ้น เช่น โรงเรือนอัตโนมัติ (automated greenhouses), Smart thermostat หรือ IoT weather station ที่อัปโหลดข้อมูลไปยัง Internet เป็นโปรเจกต์ที่เรียบง่าย มีประสิทธิภาพ และน่าพึงพอใจอย่างยิ่งที่ได้เห็นข้อมูลแบบ Real-time จากสภาพแวดล้อมของคุณเอง