ในบทนี้เราจะมาดูวิธีการเชื่อมต่อเซ็นเซอร์ DHT22 และ DHT11 กับ Arduino Uno กัน เริ่มแรกเราต้องรู้จักอุปกรณ์พวกนี้ให้ละเอียดก่อน งั้นมาเริ่มกันเลย!!!
DHT22 กับ DHT11 นี่คือเซ็นเซอร์วัดอุณหภูมิและความชื้นพื้นฐานสุดๆ ทั้งคู่ใช้เทอร์มิสเตอร์ (Thermistor) และเซ็นเซอร์วัดความชื้นแบบ capacitive ในการวัดค่าอากาศรอบตัว เซ็นเซอร์วัดความชื้นแบบ capacitive ใช้สำหรับวัดความชื้นสัมพัทธ์ (Relative Humidity) ในช่วง 5 ถึง 95% RH ส่วนเทอร์มิสเตอร์คือตัวต้านทานที่ค่าความต้านทานเปลี่ยนไปตามอุณหภูมิ เราวัดค่าความต้านทานของมันได้ด้วยโอห์มมิเตอร์ เซ็นเซอร์ทั้งสองตัวทำงานค่อนข้างช้านะ แต่ข้อดีคือกินไฟน้อยและเสถียรในระยะยาว DHT22 นี่แม่นยำและดีกว่า DHT11 เยอะเลย DHT11 วัดความชื้นได้ในช่วง 5-95% RH ด้วยความแม่นยำ ±5% และวัดอุณหภูมิได้ -20 ถึง 60℃ ด้วยความแม่นยำ ±2% ส่วน DHT22 วัดความชื้นได้ 0 ถึง 99.9% RH แม่นยำ ±2% และวัดอุณหภูมิได้ -40 ถึง 80℃ แม่นยำ ±0.5℃
พื้นฐานการตรวจจับสภาพแวดล้อมแบบดิจิทัล
โปรเจคนี้เป็นคู่มือครบวงจรสำหรับการดึงข้อมูลอุณหภูมิและความชื้นความแม่นยำสูงโดยใช้เซ็นเซอร์ดิจิทัลตระกูล DHT ที่ฮิตกัน เซ็นเซอร์พวกนี้สื่อสารด้วยโปรโตคอลดิจิทัลที่แม่นยำ:
- การจับมือด้วยเวลาแบบ Single-Wire: Arduino จะเริ่มการสื่อสารโดยดึงขา Data ลงลอว์ (Low) เป็นเวลา 1ms (เป็นสัญญาณเริ่มต้น) เซ็นเซอร์ DHT จะตอบกลับด้วยชุดพัลส์ความกว้าง 80µs ฟิร์มแวร์ของ Arduino จะวัดความกว้างของพัลส์เหล่านี้เพื่อถอดรหัสแพ็กเก็ตข้อมูล 40 บิตที่ประกอบด้วยค่าความชื้น, อุณหภูมิ และ checksum
- การตรวจสอบข้อผิดพลาดด้วย CRC: Arduino จะคำนวณ checksum จากบิตข้อมูลความชื้นและอุณหภูมิที่ได้รับ ถ้าผลรวมที่คำนวณได้ไม่ตรงกับ parity byte ที่เข้ามา ฟิร์มแวร์จะเพิกเฉยข้อมูลนั้น ทำให้มั่นใจได้ว่ามีเฉพาะค่าที่แม่นยำเท่านั้นที่จะถูกแสดงผล
- ช่วงเวลาการสุ่มตัวอย่างที่เหมาะสม: โค้ดจะบังคับให้มี "ช่วงพัก (Rest Period)" 2 วินาทีระหว่างการอ่านค่าแต่ละครั้ง ตามที่ระบุใน datasheet ของ DHT เพื่อป้องกันไม่ให้ความร้อนภายในตัวเซ็นเซอร์เอง (self-heating) ส่งผลต่อความแม่นยำของข้อมูลอุณหภูมิห้อง
ขา (Pinout) ของ DHT11 และ DHT22
เซ็นเซอร์ทั้งสองตัวมีขาเรียงคล้ายกันมาก มีทั้งหมด 4 ขา คือ Gnd, Vcc, Analog และ Data
- Gnd ต้องต่อกับกราวด์ (Ground) ของ Arduino หรือวงจร
- Vcc ต่อได้กับไฟเลี้ยง 3.3V หรือ 5V ของ Arduino
- ขา Data จะส่งออกข้อมูลอุณหภูมิและความชื้นผ่านข้อมูลแบบอนุกรม (Serial Data) และต้องต่อกับขา Digital Pin ใดขาหนึ่งของ Arduino ตามที่กำหนดในโค้ด


Arduino Uno
Arduino Uno คือไมโครคอนโทรลเลอร์ที่ใช้ชิป ATmega328p มีขา Digital 14 ขา, ขา Analog 6 ขา, คริสตัลเรโซเนเตอร์ 16 MHz, พอร์ต USB, ช่องเสียบไฟ, เฮดเดอร์ ICSP และปุ่มรีเซ็ต จ่ายไฟได้จากแท็บเล็ต, โน้ตบุ๊ค, มือถือผ่านสาย USB หรือใช้แบตเตอรี่ภายนอก Arduino Uno ถูกโปรแกรมโดยใช้ซอฟต์แวร์ Arduino IDE

มาเริ่มต่อวงจรกันเถอะ การต่อสายมีดังนี้:
- ขา Gnd (-) ของ DHT22/DHT11 ต่อกับ Gnd ของ Arduino Uno
- ขา Data/Out ของ DHT22/DHT11 ต่อกับ ขา Digital Pin 9 ของ Arduino Uno
- ขา Vcc (+) ของ DHT22/DHT11 ต่อกับ 5V ของ Arduino Uno
หมายเหตุ: วงจรที่ให้ด้านล่างเป็นการเชื่อมต่อ DHT22 กับ Arduino Uno ใช้การต่อสายแบบเดียวกันได้เลยสำหรับ DHT11

โค้ดสำหรับโปรเจคอยู่ด้านล่าง ถ้าอยากเชื่อมต่อ Arduino Uno กับ DHT11 ก็แค่เปลี่ยนประเภท DHT จาก DHT22 เป็น DHT11 ในโค้ด บรรทัดที่ 3 ก่อนอัปโหลดโค้ดลงไมโครคอนโทรลเลอร์ ต้องแน่ใจว่าได้ดาวน์โหลดไลบรารีของเซ็นเซอร์มาแล้ว ขั้นตอนการดาวน์โหลดไลบรารีมีดังนี้:
- ไปที่เมนู Tools ในซอฟต์แวร์ IDE
ในเมนู Tools นะน้อง จะมีตัวเลือกนึงชื่อว่า "Manage libraries" อยู่ พอกดเข้าไปแล้ว จะเจอช่องให้ค้นหา (search) ตรงนั้นแหละ หาคำว่า DHT11 หรือ DHT22 ก็เจอไลบรารี่สำหรับเซ็นเซอร์ทั้งสองตัวเลย
ไลบรารี่ของ Adafruit นี่แหละตัวดี ใช้ได้กับทั้ง DHT11 และ DHT22 จัดไปวัยรุ่น


