วันพฤหัสบดีที่ 10 มีนาคม พ.ศ. 2559

DHT11 Temperature and Humidity Sensor with Arduino

การใช้งาน DHT11 Humidity and Temperature Sensor กับบอร์ด Arduino


Specification ของ DHT11
  • ย่านวัดความชื่น 20-90% RH   โดยมีค่าความแม่นยำ +- 5% RH  ความละเอียดในการวัด 1 % แสดงผลแบบ 8 บิต
  • ย่านวัดอุณหภูมิ 0 -50 องศาเซลเซียส โดยมีค่าความแม่นยำ +- 2 องศาเซลเซียส  ความละเอียดในการวัด 1 องศาเซลเซียส แสดงผลแบบ 8 บิต
  • มิ PIN 4 ขาประกอบด้วย Vdd, Data, NC, Gnd
  • กินกระแส 0.5 - 2.5 mA (ขณะทำการวัดค่า) ที่ระดับแรงดัน 3 - 5.5 VDC
  • อ่านค่าสัญญาณ (Sample Rate) ทุก 1 วินาที

การการต่อวัดแบบปกติ คือระยะห่างระหว่าง Sensor กับตัว Arduino ห่างกันไม่เกิน 20 เมตร จะต้องใช้ Pull up resistor ขนาด 5.1kohm  (ว่าง่ายๆ คือต่อ R 5.1k ไว้กับแหล่งจ่ายแรงดันและต่อเข้าไปที่ขา DATA ด้วย)  
   Pin 1  ต่อกับ VDD
   Pin 2  ต่อเป็นขา DATA
   Pin 3  ไม่ได้ใช้
   Pin 4  ลงกราวด์
โดยใช้แหล่งจ่ายแรงดัน VDD ขนาด 3-5.5 VDC ซึ่งข้อดีคือจะทำให้ DHT11 นี้สามารถใช้งานได้กับ Arduino หลายรุ่น ทั้งรุ่นที่มีแรงดัน 3.3 VDC อย่าง Arduino Due หรือรุ่นยอดฮิตอย่าง UNO และ Mega/Mega ADK
วิธีการส่งข้อมูลของ DHT11 อุปกรณ์ตัวนี้ใช้การสื่อสารกับ MCU ด้วยวิธี Single-wire Two-way Serial interface คือ การสื่อสารอนุกรมสองทางโดยใช้สายเส้นเดียว (การสื่อสารแบบนี้จะใช้สายสื่อสารเพียงเส้นเดียวและส่งข้อมูลได้ทั้งจาก MCU ไปที่ตัว DHT11 และในทางกลับกันก็ได้ครับ)
เราจะเรียก DHT11 ว่า Slave และ Arduino ว่า Master การใช้ pull up resistor นั้นหมายถึงเราต้องการให้เวลาทำงานปกติในขณะที่ไม่มีอุปกรณ์ทีต่ออยู่กับสายสื่อสารของเรา ระดับแรงดันของสัญญาณในสาย Data คึอแรงดันระดับ "สูง"   และจะมีแรงดันในระดับต่ำเมื่อมีอุปกรณ์ (จะเป็น Master หรือ Slave ก็ได้) ดึงสัญญาณลงในระดับ "ต่ำ" ดังนั้นหากเรามี Scope วัดระดับสัญญาณได้เป็น "สูง" ตลอดเวลา ก็หมายความว่าอุปกรณ์ของเราอาจจะผิดปกติ
ในการสื่อสารโดยใช้สายเส้นเดียวนั้น จำเป็นต้องใช้โปรโตคอลที่ตกลงกันไว้ระหว่างตัว MCU และ อุปกรณ์ที่ต้องการสื่อสารด้วย (Slave)   อันดับแรก Master หรือ Arduino จะส่ง Start signal ที่เป็นแรงดันไฟฟ้าระดับต่ำอย่างน้อย 18 ไมโครวินาที ไปที่ Slave เพื่อให้ Slave เข้าใจว่าจะเริ่มสั่งแล้วนะ แล้วรอไป 20-40 ไมโครวินาทีเพื่อรอ Slave ตอบกลับ ทีนี้เพื่อให้ Master รู้ว่า Slave ก็พร้อม Slave จะส่งแรงดันระดับต่ำกลับไปบ้าง การส่งแรงดันจาก Slave กลับไปจะนาน 80 ไมโครวินาที   จากนั้นจะรออีก 80 ไมโครวินาที ก่อนที่จะส่งข้อมูลบิตแรกมาบอกว่าพร้อมจะส่งแล้ว




ส่งบิต "0" กับ บิต "1" อย่างไร สำหรับการส่งบิตเป็น "0" ตัว Slave จะดึงระดับแรงดันลงต่ำนาน 50 ไมโครวินาที และปล่อยเป็นระดับ "สูง" นาน 26-28 ไมโครวินาที ดังรูปด้านด้านบน (ดูช่วง Sending 0)
แต่ถ้าเป็นการส่งข้อมูลเป็น "1"  ตัวส่งจะดึงสายสัญญาณลงระดับต่ำ 50 ไมโครวินาที และปล่อยให้เป็นระดับสูงนาน 70 ไมโครวินาที (ดูช่วง Sending 1) เมื่อส่งข้อมูลครบหนึ่งชุดแล้วในแต่ละชุดของข้อมูลที่ส่งมาจาก DH11 ตัว MCU รับข้อมูลแล้วจะต้องเอามาแปลงต่อโดยมีรูปแบบดังนี้


อ้างอิงข้อมูลจาก Website Arduitronics:
และ Datasheet AOSONG:
และ Datasheet SUNROM Technologies:

http://robocraft.ru/files/datasheet/DHT11.pdf


Schemetic และ Block Diagram 





Flowchart แสดงการทำงานของโปรแกรม


ภาพการทดลอง





วีดิโอสาธิตการทำงาน
Youtube: DHT11 Show Temperature&Humidity on LCD display 16x2 by Arduino Uno R3
URL: https://youtu.be/_aJizdPq4JA






ไม่มีความคิดเห็น:

แสดงความคิดเห็น