สารบัญ:

DHT12 (i2c เซ็นเซอร์ความชื้นและอุณหภูมิราคาถูก) ใช้งานง่ายรวดเร็ว: 14 ขั้นตอน
DHT12 (i2c เซ็นเซอร์ความชื้นและอุณหภูมิราคาถูก) ใช้งานง่ายรวดเร็ว: 14 ขั้นตอน

วีดีโอ: DHT12 (i2c เซ็นเซอร์ความชื้นและอุณหภูมิราคาถูก) ใช้งานง่ายรวดเร็ว: 14 ขั้นตอน

วีดีโอ: DHT12 (i2c เซ็นเซอร์ความชื้นและอุณหภูมิราคาถูก) ใช้งานง่ายรวดเร็ว: 14 ขั้นตอน
วีดีโอ: สอนใช้งาน Arduino DHT12 Sensor เซ็นเซอร์ความชื้นและอุณหภูมิ แบบ I2C พร้อม PCB 2024, พฤศจิกายน
Anonim
DHT12 (เซ็นเซอร์ความชื้นและอุณหภูมิราคาถูก i2c) ใช้งานง่ายรวดเร็ว
DHT12 (เซ็นเซอร์ความชื้นและอุณหภูมิราคาถูก i2c) ใช้งานง่ายรวดเร็ว

คุณสามารถค้นหาการอัปเดตและอื่น ๆ บนเว็บไซต์ของฉัน

ฉันชอบเซ็นเซอร์ที่สามารถใช้กับ 2 สาย (โปรโตคอล i2c) แต่ฉันชอบเซ็นเซอร์ราคาไม่แพง

นี่คือไลบรารี Arduino และ esp8266 สำหรับเซ็นเซอร์อุณหภูมิ/ความชื้นในซีรีส์ DHT12 ที่มีต้นทุนต่ำมาก (น้อยกว่า 1$) ที่ทำงานร่วมกับ i2c หรือการเชื่อมต่อแบบสายเดียว

มีประโยชน์มากหากคุณต้องการใช้ esp01 (หากคุณใช้ซีเรียล คุณมีเพียง 2 พิน) เพื่ออ่านความชื้นและอุณหภูมิ และแสดงบน i2c LCD

AI อ่านว่าบางครั้งดูเหมือนว่าต้องมีการสอบเทียบ แต่ฉันมีต้นไม้นี้และได้รับค่าที่คล้ายกับ DHT22 มาก หากคุณมีการปรับเทียบปัญหานี้ เปิดปัญหาบน github และฉันเพิ่มการนำไปใช้

ขั้นตอนที่ 1: I2c ทำงานอย่างไร

I2c ทำงานอย่างไร
I2c ทำงานอย่างไร

I2C ใช้งานได้กับสองสายคือ SDA (สายข้อมูล) และ SCL (สายนาฬิกา)

ทั้งสองเส้นนี้เป็นท่อระบายน้ำแบบเปิด แต่ถูกดึงขึ้นด้วยตัวต้านทาน

โดยปกติจะมีเจ้านายหนึ่งคนและทาสหนึ่งคนหรือหลายคนในบรรทัด แม้ว่าจะมีเจ้านายหลายคน แต่เราจะพูดถึงเรื่องนี้ในภายหลัง

ทั้งมาสเตอร์และสเลฟสามารถส่งหรือรับข้อมูลได้ ดังนั้นอุปกรณ์สามารถอยู่ในสถานะใดสถานะหนึ่งจากสี่สถานะเหล่านี้: การส่งสัญญาณหลัก, การรับมาสเตอร์, การส่งสัญญาณสเลฟ, การรับสเลฟ

ขั้นตอนที่ 2: ห้องสมุด

คุณสามารถหาห้องสมุดของฉันได้ที่นี่

ดาวน์โหลด

คลิกปุ่มดาวน์โหลดที่มุมบนขวา เปลี่ยนชื่อโฟลเดอร์ที่ไม่บีบอัด DHT12

ตรวจสอบว่าโฟลเดอร์ DHT มี DHT12.cpp และ DHT12.h

วางโฟลเดอร์ไลบรารี DHT ของคุณ /libraries/ โฟลเดอร์

คุณอาจต้องสร้างโฟลเดอร์ย่อยของไลบรารีหากเป็นไลบรารีแรกของคุณ

รีสตาร์ท IDE

ขั้นตอนที่ 3: พฤติกรรม

libray นี้พยายามเลียนแบบพฤติกรรมของเซ็นเซอร์ไลบรารี DHT มาตรฐาน (และคัดลอกโค้ดจำนวนมาก) และฉันเพิ่มโค้ดเพื่อจัดการ i2c olso ในลักษณะเดียวกัน

วิธีการนี้เหมือนกันกับเซ็นเซอร์ไลบรารี DHT โดยมีการเพิ่มฟังก์ชันจุดน้ำค้าง

ขั้นตอนที่ 4: การใช้งาน I2c

หากต้องการใช้กับ i2c (ที่อยู่เริ่มต้นและพิน SDA SCL เริ่มต้น) ตัวสร้างคือ:

DHT12 dht12;

และใช้ค่าเริ่มต้นสำหรับพิน SDA SCL

(สามารถกำหนดใหม่ด้วยตัวสร้างที่ระบุสำหรับ esp8266 ซึ่งจำเป็นสำหรับ ESP-01) หรือ

DHT12 dht12 (ที่อยู่ uint8_t OrPin)

addressOrPin -> ที่อยู่

เพื่อเปลี่ยนที่อยู่

ขั้นตอนที่ 5: การใช้สายเดียว

ในการใช้สายเดียว:

DHT12 dht12 (ที่อยู่ uint8_t OrPin จริง)

ที่อยู่OrPin -> pin

ค่าบูลีนคือการเลือกโหมด oneWire หรือ i2c

ขั้นตอนที่ 6: การอ่านโดยปริยาย

คุณสามารถใช้กับ "implicit", "simple read" หรือ "fullread": Implicit เฉพาะการอ่านครั้งแรกที่อ่านเซ็นเซอร์อย่างแท้จริง ส่วนการอ่านอื่น ๆ จะใช้เวลา 2 วินาที ช่วงเวลาคือค่าที่เก็บไว้ของการอ่านครั้งแรก

// การอ่านของเซ็นเซอร์มีเวลา 2 วินาที เว้นแต่คุณจะผ่านพารามิเตอร์แรง

// อ่านอุณหภูมิเป็นเซลเซียส (ค่าเริ่มต้น) float t12 = dht12.readTemperature(); // อ่านอุณหภูมิเป็นฟาเรนไฮต์ (isFahrenheit = true) float f12 = dht12.readTemperature(true); // ค่าที่อ่านได้จากเซนเซอร์อาจถึง 2 วินาที 'เก่า' (ซึ่งเป็นเซ็นเซอร์ที่ช้ามาก) float h12 = dht12.readHumidity(); // คำนวณดัชนีความร้อนในฟาเรนไฮต์ (ค่าเริ่มต้น) float hif12 = dht12.computeHeatIndex(f12, h12); // คำนวณดัชนีความร้อนในเซลเซียส (isFahreheit = false) float hic12 = dht12.computeHeatIndex(t12, h12, false); // คำนวณจุดน้ำค้างในฟาเรนไฮต์ (ค่าเริ่มต้น) float dpf12 = dht12.dewPoint(f12, h12); // คำนวณจุดน้ำค้างในเซลเซียส (isFahreheit = false) float dpc12 = dht12.dewPoint(t12, h12, false);

ขั้นตอนที่ 7: อ่านง่าย

อ่านง่ายเพื่อรับสถานะการอ่าน

// การอ่านของเซ็นเซอร์มีเวลา 2 วินาที เว้นแต่คุณจะผ่านพารามิเตอร์แรง

บูล chk = dht12.read(); // อ่านจริงก็โอเค ปัญหาอ่านผิด

// อ่านอุณหภูมิเป็นเซลเซียส (ค่าเริ่มต้น)

ลอย t12 = dht12.readTemperature(); // อ่านอุณหภูมิเป็นฟาเรนไฮต์ (isFahrenheit = true) float f12 = dht12.readTemperature(true); // ค่าที่อ่านได้จากเซนเซอร์อาจถึง 2 วินาที 'เก่า' (ซึ่งเป็นเซ็นเซอร์ที่ช้ามาก) float h12 = dht12.readHumidity(); // คำนวณดัชนีความร้อนในฟาเรนไฮต์ (ค่าเริ่มต้น) float hif12 = dht12.computeHeatIndex(f12, h12); // คำนวณดัชนีความร้อนในเซลเซียส (isFahreheit = false) float hic12 = dht12.computeHeatIndex(t12, h12, false); // คำนวณจุดน้ำค้างในฟาเรนไฮต์ (ค่าเริ่มต้น) float dpf12 = dht12.dewPoint(f12, h12); // คำนวณจุดน้ำค้างในเซลเซียส (isFahreheit = false) float dpc12 = dht12.dewPoint(t12, h12, false);

ขั้นตอนที่ 8: อ่านแบบเต็ม

อ่านแบบเต็มเพื่อรับสถานะที่ระบุ

// การอ่านของเซ็นเซอร์มีเวลา 2 วินาที เว้นแต่คุณจะผ่านพารามิเตอร์แรง

DHT12::ReadStatus chk = dht12.readStatus(); Serial.print(F("\nเซ็นเซอร์อ่าน: ")); สวิตช์ (chk) { กรณี DHT12::OK: Serial.println (F ("OK")); หยุดพัก; กรณี DHT12::ERROR_CHECKSUM: Serial.println(F("Checksum error")); หยุดพัก; กรณี DHT12::ERROR_TIMEOUT: Serial.println(F("Timeout error")); หยุดพัก; กรณี DHT12::ERROR_TIMEOUT_LOW: Serial.println(F("ข้อผิดพลาดการหมดเวลาของสัญญาณต่ำ ลองใส่ความต้านทาน pullup สูง")); หยุดพัก; กรณี DHT12::ERROR_TIMEOUT_HIGH: Serial.println(F("ข้อผิดพลาดการหมดเวลาของสัญญาณต่ำ ลองใส่ความต้านทาน pullup ต่ำ")); หยุดพัก; กรณี DHT12::ERROR_CONNECT: Serial.println(F("Connect error")); หยุดพัก; กรณี DHT12::ERROR_ACK_L: Serial.println(F("AckL error")); หยุดพัก; กรณี DHT12::ERROR_ACK_H: Serial.println(F("AckH error")); หยุดพัก; กรณี DHT12::ERROR_UNKNOWN: Serial.println(F("ตรวจพบข้อผิดพลาดที่ไม่รู้จัก")); หยุดพัก; กรณี DHT12::NONE: Serial.println(F("No result")); หยุดพัก; ค่าเริ่มต้น: Serial.println(F("Unknown error")); หยุดพัก; }

// อ่านอุณหภูมิเป็นเซลเซียส (ค่าเริ่มต้น)

ลอย t12 = dht12.readTemperature(); // อ่านอุณหภูมิเป็นฟาเรนไฮต์ (isFahrenheit = true) float f12 = dht12.readTemperature(true); // ค่าที่อ่านได้จากเซนเซอร์อาจถึง 2 วินาที 'เก่า' (ซึ่งเป็นเซ็นเซอร์ที่ช้ามาก) float h12 = dht12.readHumidity(); // คำนวณดัชนีความร้อนในฟาเรนไฮต์ (ค่าเริ่มต้น) float hif12 = dht12.computeHeatIndex(f12, h12); // คำนวณดัชนีความร้อนในเซลเซียส (isFahreheit = false) float hic12 = dht12.computeHeatIndex(t12, h12, false); // คำนวณจุดน้ำค้างในฟาเรนไฮต์ (ค่าเริ่มต้น) float dpf12 = dht12.dewPoint(f12, h12); // คำนวณจุดน้ำค้างในเซลเซียส (isFahreheit = false) float dpc12 = dht12.dewPoint(t12, h12, false);

ขั้นตอนที่ 9: แผนภาพการเชื่อมต่อ

จากตัวอย่าง มีแผนภาพการเชื่อมต่อ สิ่งสำคัญคือต้องใช้ตัวต้านทานแบบดึงขึ้นที่ถูกต้อง

ขอบคุณ Bobadas, dplasa และ adafruit ที่แบ่งปันรหัสใน github (ที่ฉันใช้รหัสและแนวคิดบางอย่าง)

ขั้นตอนที่ 10: Arduino: OneWire

Arduino: OneWire
Arduino: OneWire

ขั้นตอนที่ 11: Arduino: I2c

Arduino: I2c
Arduino: I2c

ขั้นตอนที่ 12: Esp8266 (D1Mini) OneWire

Esp8266 (D1Mini) OneWire
Esp8266 (D1Mini) OneWire

ขั้นตอนที่ 13: Esp8266 (D1Mini) I2c

Esp8266 (D1Mini) I2c
Esp8266 (D1Mini) I2c

ขั้นตอนที่ 14: ขอบคุณ

สนามเด็กเล่น Arduino (https://playground.arduino.cc/Main/DHT12SensorLibrary)

ชุดโครงการ i2c (คอลเลกชัน):

  • เซ็นเซอร์ความชื้นอุณหภูมิ
  • เครื่องขยายสัญญาณอนาล็อก
  • เครื่องขยายสัญญาณดิจิตอล
  • จอ LCD

แนะนำ: