การวัดอุณหภูมิและความชื้นเป็นเรื่องปกติมาก ในโครงการผู้ผลิตอิเล็กทรอนิกส์มากมาย ใน DIY เป็นเรื่องปกติที่จะต้องวัดค่าพารามิเตอร์เหล่านี้เพื่อควบคุมระบบบางอย่าง ตัวอย่างเช่นเพื่อให้สามารถสร้างเครื่องทำความเย็นการดูแลพืชหรือระบบปรับอากาศที่เริ่มทำงานหากอุณหภูมิหรือความชื้นถึงค่าที่กำหนด แต่เพื่อให้เป็นไปได้คุณต้องมีเซ็นเซอร์เช่น DHT11
ในตลาด มีเซ็นเซอร์มากมาย ช่วงอุณหภูมิที่แตกต่างกันมากโดยมีช่วงอุณหภูมิที่รองรับหรือปริมาณที่แตกต่างกัน ตัวอย่างนี้คือ LM35 หนึ่งในเครื่องใช้ไฟฟ้าที่ได้รับความนิยมและใช้งานมากที่สุด. นอกจากนี้ยังมีเซ็นเซอร์ความชื้นอื่น ๆ ที่ทำงานโดยการแปรผันของการนำไฟฟ้าเช่น AD22103KTZ จากอุปกรณ์อนาล็อก แต่ถ้าคุณต้องการวัดทั้งสองพารามิเตอร์บางทีอุปกรณ์ที่เราพูดถึงในบทความนี้วันนี้น่าสนใจกว่ามาก ...
DHT11 คืออะไร?
El DHT11 เป็นเซ็นเซอร์อย่างง่ายที่ใช้วัดอุณหภูมิและความชื้น, ทั้งหมดในอย่างเดียว. A) ใช่ คุณจะไม่ต้องซื้อเซ็นเซอร์สองตัว แยกกัน ราคาอยู่ที่ประมาณ€ 2 ดังนั้นจึงค่อนข้างถูกแม้ว่าคุณจะพบว่ามันติดตั้งบนโมดูล (ติดตั้งบน PCB เพื่อความสะดวกในการใช้งาน) ตามปกติในส่วนประกอบอิเล็กทรอนิกส์ประเภทนี้สำหรับ Arduino ในกรณีของบอร์ดประกอบด้วยตัวต้านทานแบบดึงขึ้น 5 กิโลโอห์มและ LED ที่เตือนเราถึงการทำงาน
DHT11 มี ความน่าเชื่อถือและเสถียรภาพสูงเนื่องจากสัญญาณดิจิตอลที่ปรับเทียบแล้ว. นอกจากนี้หากคุณดูแผ่นข้อมูลคุณจะเห็นว่ามีคุณสมบัติที่น่าสนใจดังที่คุณจะเห็นในส่วนต่อ ๆ ไป
ผลิตภัณฑ์ที่คล้ายกัน
มีผลิตภัณฑ์ที่คล้ายกับ DHT11 ที่คุณอาจสนใจ มันคือ DHT22. นอกจากนี้ยังเป็นเซ็นเซอร์อุณหภูมิและความชื้นในตัว แต่ในกรณีนี้ราคาจะสูงขึ้นเล็กน้อยประมาณ 4 ยูโร ความแม่นยำในการวัดอุณหภูมิคือการเปลี่ยนแปลง 5% เช่นเดียวกับ DHT11 แต่ต่างกันตรงที่วัดความชื้นเกินช่วงระหว่าง 20 ถึง 80% ดังนั้นคุณอาจสนใจ DHT22 สำหรับโครงการที่คุณต้องการวัดความชื้นตั้งแต่ 0 ถึง 100%
La ความถี่ในการรวบรวมข้อมูล นอกจากนี้ยังเป็นสองเท่าของ DHT11 ใน DHT22 2 ตัวอย่างต่อวินาทีแทนที่จะเป็น 1 ตัวอย่างต่อวินาทีของ DHT11 สำหรับอุณหภูมินั้นสามารถวัดได้ตั้งแต่-40ºCถึง + 125ºCโดยมีความแม่นยำมากขึ้นเนื่องจากสามารถวัดเศษส่วนขององศาได้โดยเฉพาะอย่างยิ่งมันสามารถชื่นชมการเปลี่ยนแปลงของบวก / ลบ0,5ºC
Pinout คุณสมบัติและแผ่นข้อมูล
คุณสามารถค้นหาข้อมูลทางเทคนิคเกี่ยวกับไฟล์ DHT11 ในเอกสารข้อมูลของคุณ. ผู้ผลิตอุปกรณ์นี้แต่ละรายสามารถให้ค่าบางอย่างที่อาจแตกต่างกันไปดังนั้นฉันขอแนะนำให้อ่าน PDF ของผู้ผลิตอุปกรณ์ที่คุณซื้อไว้ แม้ว่าค่าส่วนใหญ่อาจดูเหมือนกับคุณ แต่อาจมีการเปลี่ยนแปลงเล็กน้อยจากค่าหนึ่งไปอีกค่าหนึ่ง ลักษณะทางเทคนิคที่สำคัญที่สุดคือ:
- แหล่งจ่ายไฟ 3,5v ถึง 5v
- 2,5mA การบริโภคในปัจจุบัน
- สัญญาณเอาท์พุตดิจิตอล
- ช่วงอุณหภูมิตั้งแต่0ºCถึง50ºC
- ความแม่นยำในการวัดอุณหภูมิที่25ºCของการเปลี่ยนแปลงประมาณ2ºC
- ความละเอียดในการวัดอุณหภูมิคือ 8 บิต1ºC
- ความชื้นสามารถวัดได้ตั้งแต่ 20% RH ถึง 90% RH
- แม่นยำสำหรับความชื้น 5% RH สำหรับอุณหภูมิระหว่าง0-50ºC
- ความละเอียด 1% RH ไม่สามารถเลือกรูปแบบที่ต่ำกว่านั้นได้
- เอกสารข้อมูลของ Mouser
เกี่ยวกับข้อมูล ออกอากาศในรูปแบบดิจิทัล. ดังนั้นจึงไม่จำเป็นต้องเปลี่ยนจากอนาล็อกเป็นดิจิตอลเหมือนเซ็นเซอร์อื่น ๆ รหัสนั้นซับซ้อนในการเขียน Arduino IDE แต่ในกรณีนี้ไม่จำเป็นและง่ายกว่ามาก แม้ว่าเซ็นเซอร์จะเป็นแบบอนาล็อก แต่ก็มีระบบสำหรับทำการแปลงและสามารถเชื่อมต่อโดยตรงกับอินพุตดิจิทัลของ Arduino
สัญญาณแอนะล็อกซึ่งเป็นรูปแบบของแรงดันไฟฟ้าจากเซ็นเซอร์จะถูกแปลงเป็นรูปแบบดิจิทัลเพื่อส่งไปยังไมโครคอนโทรลเลอร์ Arduino มันถูกส่งเข้ามา เฟรม 40 บิต ที่สอดคล้องกับข้อมูลความชื้นและอุณหภูมิที่บันทึกโดย DHT11 8 บิตสองกลุ่มแรกมีไว้สำหรับความชื้นนั่นคือ 16 บิตที่สำคัญที่สุดของเฟรมนี้ จากนั้นอีก 2 กลุ่มที่เหลือ 8 บิตสำหรับอุณหภูมิ นั่นคือมันมีสองไบต์สำหรับความชื้นและสองไบต์สำหรับอุณหภูมิ ตัวอย่างเช่น:
0011 0101 0000 0010 0001 1000 0000 0000 0011 1001
ในกรณีนี้ 0011 0101 0000 0010 คือค่าความชื้นและ 0001 1000 0000 0000 คืออุณหภูมิ ส่วนแรกใช้สำหรับส่วนจำนวนเต็มและส่วนที่สองสำหรับทศนิยม สำหรับ 0011 1001 นั่นคือ 8 บิตสุดท้ายเป็นความเท่าเทียมกัน เพื่อหลีกเลี่ยงข้อผิดพลาด ด้วยวิธีนี้คุณสามารถตรวจสอบว่าทุกอย่างถูกต้องในระหว่างการส่งสัญญาณ มันสอดคล้องกับผลรวมของบิตก่อนหน้าดังนั้นหากผลรวมเท่ากับพาริตีก็จะถูกต้อง ในตัวอย่างที่ฉันวางไว้คงไม่เป็นเช่นนั้นเพราะอย่างที่คุณเห็นมันไม่สอดคล้องกัน ... นั่นจะบ่งบอกถึงความล้มเหลว
เมื่อทราบแล้วระดับเทคนิคถัดไปของ DHT11 ที่ควรสังเกตคือหมุด ผู้ติดต่อหรือพินเอาต์ ของอุปกรณ์นี้เป็นเรื่องง่ายเนื่องจากมีเพียง 4 เครื่องเท่านั้น หมุดตัวหนึ่งมีไว้สำหรับจ่ายไฟหรือ Vcc อีกหมุดหนึ่งสำหรับ I / O ในการส่งข้อมูลพิน NC ที่ไม่เชื่อมต่อและ GND สำหรับการเชื่อมต่อกราวด์
บูรณาการกับ Arduino
เมื่อคุณทราบ pinout ของ DHT11 แล้ว บอร์ด Arduino การเชื่อมต่อนั้นง่ายมาก. โปรดจำไว้ว่าหากคุณเลือกโมดูล DHT11 ที่รวมอยู่ใน PCB หมุดจะเป็นสามตัวเนื่องจาก NC จะถูกลบออกเพื่อให้ง่ายขึ้น สิ่งที่คุณต้องทำคือเชื่อมต่อพินกราวด์กับหนึ่งในการเชื่อมต่อ GND ของ Arduino ตามที่ปรากฏในแผนภาพในภาพก่อนหน้า
ในทางกลับกันขาเพาเวอร์ควรเชื่อมต่อกับ การเชื่อมต่อ 5v จาก Arduino ดังนั้นเซ็นเซอร์จะขับเคลื่อนอย่างเต็มที่ด้วย GND และ Vcc แต่ตอนนี้ข้อมูลหายไป ในการส่งข้อมูลจากเซ็นเซอร์ DHT11 ไปยังบอร์ด Arduino คุณสามารถใช้อินพุตดิจิทัลใดก็ได้เช่น 7 ที่ปรากฏในภาพ ... ตอนนี้คุณมีทุกอย่างพร้อมใช้งานเมื่อคุณสร้าง Arduino IDE ที่จำเป็นแล้ว รหัส ...
หากเซ็นเซอร์อยู่ไกลในโปรเจ็กต์ของคุณและคุณกำลังจะใช้สายเคเบิลที่ยาวกว่า 20 เมตรให้ใช้ตัวต้านทานแบบดึงขึ้น 5k สำหรับสายเคเบิลขนาดใหญ่ควรมีสัดส่วนที่มากกว่า โปรดทราบว่าหากคุณใช้ไฟ 3,5v แทน 5v สายเคเบิลไม่ควรยาวเกิน 20 ซม. เนื่องจากแรงดันไฟฟ้าลดลง
โปรดจำไว้ว่าสิ่งที่พวกเขาแนะนำคือ ทำการวัดทุกๆ 5 วินาที แม้ว่าความถี่ในการสุ่มตัวอย่างที่ DHT11 สามารถทำงานได้จะสูงกว่า แต่ถ้าทำบ่อยขึ้นก็อาจไม่แม่นยำเท่า
รหัสใน Arduino IDE
ตรงไปที่รหัสบอกว่าใน Arduino IDE คุณสามารถใช้ไลบรารีที่มีอยู่จำนวนมากพร้อมคุณสมบัติที่จะทำให้ชีวิตของคุณง่ายขึ้นด้วย DHT11 ตัวอย่างเช่นหนึ่งในนั้นคือสิ่งที่ ให้ Adafruit. โปรดจำไว้ว่าเรามีคำแนะนำสำหรับผู้เริ่มต้นที่เริ่มต้นด้วย Arduino ในรูปแบบ PDF ที่คุณสามารถทำได้ ดาวน์โหลดฟรีจากที่นี่ และสามารถช่วยคุณได้
เมื่อคุณติดตั้งไลบรารีที่เกี่ยวข้องแล้วคุณสามารถแสดงความคิดเห็นได้ ใส่รหัส เพื่อควบคุมเซ็นเซอร์อุณหภูมิและความชื้น DHT11 สำหรับโครงการของคุณด้วย Arduino ตัวอย่างเช่น:
#include "DHT.h" const int DHTPin = 7; DHT dht(DHTPin, DHTTYPE); void setup() { Serial.begin(9600); Serial.println("Midiendo..."); dht.begin(); } void loop() { delay(2000); float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(h) || isnan(t)) { Serial.println("Fallo en la lectura del sensor DHT11"); return; } Serial.print("Humedad relativa: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperatura: "); Serial.print(t); Serial.print(" ºC "); }