จะเจ๋งแค่ไหนถ้าบอร์ด Arduino ของเราสามารถ "รู้สึก" ถึงสภาพแวดล้อมรอบตัวและตีความสภาพอากาศในห้องออกมาได้? ในบทเรียนนี้เราจะมาสร้างสถานีวัดอากาศ (Weather Station) แบบง่ายๆ ด้วยเซนเซอร์ DHT11 และแสดงผลผ่านหน้าจอ I2C LCD กันครับ
แต่เดี๋ยวก่อน! เราจะไม่ใช่แค่จับสายไฟมาเสียบๆ แล้วก๊อปแปะโค้ดให้จบๆ ไป แต่เราจะเจาะลึกเข้าไปดูว่า "ข้างในเซนเซอร์" มันทำงานยังไงในระดับกายภาพ นี่คือเป้าหมายของการเรียนรู้ที่จะเปลี่ยนคุณจากการเป็นแค่คนทำตามคู่มือ ให้กลายเป็นคนที่เข้าใจระบบจริงๆ
อุปกรณ์ที่ต้องใช้ (Supplies)
- บอร์ด Arduino UNO
- แผ่นขยายพอร์ต (I/O Expansion Shield)
- เซนเซอร์วัดอุณหภูมิและความชื้น DHT11
- หน้าจอ I2C LCD
- สายไฟจัมเปอร์ (Jumper wires)
- (อ้างอิงจากชุด DFRobot MindPlus Arduino Coding Kit)
คลิกเพื่อดูรูปภาพอุปกรณ์เพิ่มเติม (View More)
Step 1: วิดีโอสอนแบบละเอียดยิบ
Step 2: เจาะลึกการทำงานของ DHT11
ข้างในเซนเซอร์สีฟ้าๆ ตัวนี้ มีชิ้นส่วนรับรู้ 2 ตัวและมีไมโครชิปเล็กๆ ที่คอยประมวลผลข้อมูลส่งให้ Arduino ครับ
การวัดความชื้น (Humidity):
ใช้หลักการของ Capacitive Sensing โดยมีขั้วไฟฟ้าสองขั้วคั่นด้วยชั้นโพลิเมอร์ที่ไวต่อความชื้น เมื่ออากาศชื้นขึ้น โพลิเมอร์จะดูดซับไอน้ำ ทำให้ค่าคงที่ไดอิเล็กทริกเปลี่ยนไป (ความสามารถในการเก็บประจุเปลี่ยน) วงจรข้างในก็จะจับการเปลี่ยนแปลงนี้แล้วแปลงเป็นค่าความชื้นสัมพัทธ์ครับ
การวัดอุณหภูมิ (Temperature):
ใช้ตัวต้านทานที่เรียกว่า NTC (Negative Temperature Coefficient) thermistor อธิบายง่ายๆ คือ "ยิ่งร้อน ความต้านทานยิ่งลดลง" ชิปข้างในจะวัดค่าความต้านทานนี้ แล้วเอาไปเทียบกับค่าที่ปรับเทียบมาจากโรงงาน เพื่อแปลงเป็นอุณหภูมิครับ
การประมวลผลและข้อจำกัด:
ข้อดีของ DHT11 คือมีชิปประมวลผลแปลงสัญญาณอนาล็อกเป็นดิจิทัลมาให้เสร็จสรรพ ต่อแค่สาย Data เส้นเดียวก็ใช้ได้เลย สเปกคร่าวๆ คือวัดอุณหภูมิได้ 0-50°C (แม่นยำ ±2°C) และความชื้น 20-80% (แม่นยำ ±5%) แม้จะไม่ใช่เกรดห้องแล็บ แต่เหมาะกับการเรียนรู้สุดๆ ข้อควรระวังคือมันอ่านค่าได้แค่ "วินาทีละ 1 ครั้ง" เท่านั้น (ในโปรเจกต์นี้เราจะตั้งให้อ่านทุกๆ 5 วินาทีเพื่อให้จอแสดงผลนิ่งครับ)
คลิกเพื่อดูรูปโครงสร้างภายใน DHT11 เพิ่มเติม (View More)
Step 3: ผู้สนับสนุนโปรเจกต์
บทเรียนนี้ได้รับการสนับสนุนจาก DFRobot ผู้จัดจำหน่ายฮาร์ดแวร์ Open-source ระดับโลก โดยชุดที่ใช้คือ MindPlus Arduino Coding Kit ซึ่งคัดสรรเซนเซอร์มาให้แล้ว การใช้ชุดคิทที่มีมาตรฐานช่วยให้เราโฟกัสกับการเรียนรู้โค้ดดิ้งได้เต็มที่ โดยไม่ต้องเสียเวลาแก้ปัญหาเรื่องเซนเซอร์พังหรือไม่เข้ากันครับ
คลิกเพื่อดูรูปภาพชุดอุปกรณ์ (View More)
Step 4: ภาพรวมและการต่อสายไฟ
เริ่มจากประกบแผ่น I/O expansion shield ลงบนบอร์ด Arduino UNO เพื่อให้ต่อสายได้ง่ายขึ้น จากนั้น:
- ต่อเซนเซอร์ DHT11 เข้าที่ Digital Pin 2
- ต่อหน้าจอ LCD (แบบ I2C) โดยให้สาย SCL เข้าที่ A5 และ SDA เข้าที่ A4 ส่วน VCC ต่อไฟ 5V และ GND ลงกราวด์
อย่าลืมติดตั้งไลบรารี Adafruit DHT sensor และ DFRobot RGBLCD1602 ใน Arduino IDE ก่อนอัปโหลดโค้ดนะครับ
คลิกเพื่อดูรูปภาพการต่อสายไฟเพิ่มเติม (View More)
Step 5: อธิบายหลักการของโค้ด
ในโค้ดจะเริ่มต้นด้วยการดึงไลบรารีเข้ามาใช้งานและกำหนดค่าตัวแปรต่างๆ ในส่วนของ setup() โปรแกรมจะเริ่มเชื่อมต่อกับจอ LCD, เซนเซอร์ DHT11 และ Serial Monitor
ส่วนหัวใจหลักคือ loop() โปรแกรมจะเช็กเวลาว่าผ่านไป 5 วินาทีหรือยัง ถ้าใช่ ก็จะสั่งอ่านค่าอุณหภูมิและความชื้น พร้อมตรวจสอบว่าอ่านค่าได้สำเร็จไหม ถ้าเซนเซอร์เอ๋อ มันจะส่งข้อความ Error ขึ้นจอและ Serial Monitor แต่ถ้าอ่านผ่าน ก็จะปรินต์ข้อมูลสวยๆ ขึ้นจอ LCD เลยครับ (การแยกส่วนดึงข้อมูล ตรวจสอบ และแสดงผลแบบนี้ เป็นแพทเทิร์นการเขียนโค้ดที่ดีมากสำหรับทำระบบใหญ่ๆ ในอนาคต)
คลิกเพื่อดูรูปตัวอย่างโค้ดส่วนที่ 2 (View More)
Step 6: สรุปผล
ในโปรเจกต์นี้ คุณไม่ได้แค่เสียบสายไฟตามรูป แต่คุณได้เข้าใจถึงกลไกการวัดระดับกายภาพของ DHT11 การแปลงสัญญาณภายใน และโครงสร้างซอฟต์แวร์ที่เปลี่ยนข้อมูลดิบให้กลายเป็นสิ่งที่คนอ่านรู้เรื่อง ถือเป็นการก้าวข้ามจากการ "ต่อของเล่น" ไปสู่การ "ออกแบบระบบ (Engineering Systems)" อย่างแท้จริงครับ!
คลิกเพื่อดูรูปผลลัพธ์บนจอ LCD (View More)
อยากเริ่มต้นสร้างโปรเจกต์ IoT เจ๋งๆ แบบนี้ไหม?
คำเตือน: เนื้อหานี้เป็นการสรุปและเรียบเรียงจากบทความต้นฉบับภาษาอังกฤษ ข้อมูลฉบับภาษาไทยอาจมีความคลาดเคลื่อนบางประการจากการตีความหรือย่อเนื้อหา