บทที่ 12: การเขียนโปรแกรมอ่านค่าอุณหภูมิและความชื้นเซนเซอร์ DHT22
เซนเซอร์ DHT22 คือเซนเซอร์สำหรับวัดอุณหภูมิและความชื้นสัมพัทธ์ (Temperature & Relative Humidity Sensor) เป็นอุปกรณ์ที่สามารถนำมาประยุกต์ใช้งานทางด้านระบบสมองกลฝังตัวได้หลากหลาย เช่น การวัดและควบคุมอุณหภูมิและความชื้น ระบบบันทึกข้อมูลเกี่ยวกับอุณหภูมิและความชื้นในห้อง เป็นต้น อุปกรณ์ประเภทนี้แตกต่างกันตามผู้ผลิต ราคา ความแม่นยำ ความละเอียดในการวัด

ในการติดต่อสื่อสารกับ DHT22 จะใช้ขาสัญญาณดิจิทัลเพียงเส้นเดียว(onewire bus)ในการเชื่อมต่อแบบบิตอนุกรมสองทิศทาง (serial data, bi-directional) โดยนำมาเชื่อมต่อกับขา Arduino เพื่ออ่านค่าจากเซนเซอร์

คุณสมบัติของอุปกรณ์
-
ใช้แรงดันไฟเลี้ยงได้ในช่วง: 3.3V ถึง 5.5V DC (ดังนั้นจึงใช้ได้กับ 3.3V และ 5V)
-
วัดอุณหภูมิได้ในช่วง: -40 to 80 °C (±0.5 °C accuracy)
-
วัดความชื้นสัมพัทธ์ได้ในช่วง: 0 – 100 RH% (2 – 5% accuracy)
-
อัตราการวัดสูงสุด: 0.5Hz
-
คอนเนกเตอร์แบบ 4 ขา ( 0.1″ / 2.54mm spacing)
Pin 1 = VCC
Pin 2 = SDA (Serial data, bidirectional)
Pin 3 = N.C. (Not Connect)
Pin 4 = GND

บอร์ด Arduino Learning Kit ตัวเซ็นเซอร์ DHT22 ได้ถูกติดตั้งอยู่บนบอร์ดอยู่แล้ว แต่ขาสัญญาณที่ใช้ติดต่อกับไมโครคอนโทรลเลอร์จะใช้ร่วมกับเซนเซอร์ DS18B20 ซึ่งเป็นเซนเซอร์วัดค่าอุณหภูมิอีกตัวหนึ่งสื่อสารแบบ onewire bus เช่นกัน ซึ่งในการใช้งานเราต้องเลือกจั๊มเปอร์ว่าต้องการติดต่อกับเซนเซอร์ตัวไหน
| ขาสัญญาณที่ต่อกับ DHT22 | |
|---|---|
| Arduino Uno | 4 |
| Arduino Nano | 4 |
| ESP32(ESP-WROM-32) | 23 |
ตารางที่ 12. 1 ขาที่ต่อใช้งานกับเซนเซอร์ DHT22
เขียนโปรแกรมสำหรับอ่านค่าอุณหภูมิและความชื้นจากเซนเซอร์ DHT22
-
เปิดโปรแกรม Arduino IDE ขึ้นมา เลือกบอร์ดเป็นชนิด Arduino Uno, Nano หรือ ESP32 จากนั้นทำการ ดาวน์โหลดไลบรารี่ DHT22 คลิกที่ Sketch -> Include Library -> Manage Libraries ดังตัวอย่างรูปด้านล่าง ทำการติดตั้งให้เรียบร้อย (ไลบรารี่นี้สามารถใช้ได้กับ Arduino Uno, Nano และ ESP32)

-
เปิด Example sketch โดยทำการเปิดตัวอย่างโปรแกรมที่มีชื่อว่า DS3231_test โดยคลิกที่ File -> Examples -> SimpleDHT->DHT22Default


-
ที่บรรทัดที่ 7 ทำการเปลี่ยนขาสัญญาณที่ต่อกับเซนเซอร์ DHT22 จากนั้นทดลองรันโปรแกรม และดูผลจาก Serial Monitor
อธิบายการทำงานของโค้ด

-
บรรทัดที่ 7-8 เป็นการกำหนดขาที่ติดต่อกับเซนเซอร์ DHT22 และประกาศตัวแปร object
-
บรรทัดที่ 22-24 เป็นการประกาศตัวแปรเอาไว้รองรับค่าอุณหภูมิ ความชื้นและค่า error
-
บรรทัดที่ 25-28 จะเป็นการตรวจสอบว่าเจอเซนเซอร์ DHT22 หรือไม่ ถ้าไม่เจอก็ให้แสดงข้อความบน Serial Monitor “Read DHT22 failed, err=” ตามด้วย error code
-
บรรทัดที่ 30-32 จะทำการแสดงค่าอุณหภูมิและความชื้นทาง Serial Monitor
แบบฝึกหัดสำหรับทบทวนความเข้าใจ
-
เขียนโปรแกรมโดยใช้ ESP32(ESP-WROM-32) ให้แสดงค่าบนหน้าจอ LCD16x2 โดย
-
บรรทัดแรกให้แสดงค่าอุณหภูมิ T: xx.x C
-
บรรทัดที่สองให้แสดงค่าความชื้นสัมพัทธ์ H: xx.x %
-
-
จากโปรแกรมในข้อที่ 1 ให้เขียนเงื่อนไขโดยใช้ความรู้เรื่องการควบคุมรีเลย์ โดย
-
ถ้าอุณหภูมิสูงกว่าอุณหภูมิปัจจุบันไป 2 องศา (ยกตัวอย่างเช่น ตอนนี้อุณหภูมิที่วัดได้ 25 องศา ให้เซตไว้ที่ 27 องศา) ให้รีเลย์ตัวที่ 1 ทำการเปิด และเมื่ออุณหภูมิกลับมาค่าเดิม ให้รีเลย์ตัวที่ 1 ปิด
-
ถ้าความชื้นสัมพัทธ์สูงกว่าความชื้นสัมพัทธ์ปัจจุบันไป 10% (ยกตัวอย่างเช่น ตอนนี้ความชื้นสัมพัทธ์ที่วัดได้ 70% ให้เซตไว้ที่ 80 องศา) ให้รีเลย์ตัวที่ 2 ทำการเปิด และเมื่อความชื้นสัมพัทธ์กลับมาค่าเดิม ให้รีเลย์ตัวที่ 2 ปิด
-
เมื่อเขียนเสร็จ ให้ทำการทดลองโดยการเพิ่มและลดอุณหภูมิและความชื้นสัมพัทธ์ให้กับเซนเซอร์
-
-
จากโปรแกรมข้อที่ 2 ให้เพิ่มส่วนของการแสดงสถานะรีเลย์ โดยให้แสดงออกที่หน้าจอ OLED128x64 โดย บรรทัดแรกให้แสดงสถานะรีเลย์ตัวที่ 1 และบรรทัดที่สอง ให้แสดงสถานะรีเลย์ตัวที่ 2




Leave a Reply