Mundarija:

DHT12 (i2c arzon namlik va harorat sensori), tez ishlatish: 14 qadam
DHT12 (i2c arzon namlik va harorat sensori), tez ishlatish: 14 qadam

Video: DHT12 (i2c arzon namlik va harorat sensori), tez ishlatish: 14 qadam

Video: DHT12 (i2c arzon namlik va harorat sensori), tez ishlatish: 14 qadam
Video: DHT12 I2C Temperature - Relative Humidity Sensor Demo 2024, Noyabr
Anonim
DHT12 (i2c arzon namlik va harorat sensori), tez ishlatish
DHT12 (i2c arzon namlik va harorat sensori), tez ishlatish

Yangilanish va boshqalarni mening saytimda topishingiz mumkin

Menga 2 simli (i2c protokoli) ishlatilishi mumkin bo'lgan sensor yoqadi, lekin men arzonini yaxshi ko'raman.

Bu i2c yoki bitta simli ulanish bilan ishlaydigan DHT12 seriyali juda past narxli (1 $ dan kam) Arduino va esp8266 kutubxonasi.

Agar siz namlik va haroratni o'qish va uni i2c LCD displeyda ko'rsatish uchun esp01 dan foydalanmoqchi bo'lsangiz (agar siz ketma -ket ishlatsangiz, faqat 2 pinli).

AI o'qidi, ba'zida kalibrlash kerak ko'rinadi, lekin menda bu daraxt bor va DHT22 ga juda o'xshash qiymatga ega bo'laman. Agar sizda bu muammoni kalibrlash bo'lsa, github -da muammoni oching va men dasturni qo'shaman.

1 -qadam: I2c qanday ishlaydi

I2c qanday ishlaydi
I2c qanday ishlaydi

I2C ikkita sim bilan ishlaydi: SDA (ma'lumotlar liniyasi) va SCL (soat chizig'i).

Bu ikkala chiziq ham ochiq-oydin, lekin rezistorlar yordamida tortilgan.

Odatda chiziqda bitta xo'jayin va bitta yoki bir nechta qul bo'ladi, garchi bir nechta xo'jayin bo'lishi mumkin, lekin biz bu haqda keyinroq gaplashamiz.

Xo'jayinlar ham, qullar ham ma'lumotlarni uzatishi yoki qabul qilishi mumkin, shuning uchun qurilma ushbu to'rt holatning birida bo'lishi mumkin: asosiy uzatish, master qabul qilish, qul uzatish, qul qabul qilish.

2 -qadam: kutubxona

Bu erda mening kutubxonamni topishingiz mumkin.

Yuklab olish uchun

O'ng yuqori burchakdagi YUKLASH tugmasini bosing, siqilmagan papkaning nomini o'zgartiring DHT12.

DHT papkasida DHT12.cpp va DHT12.h borligini tekshiring.

DHT kutubxona papkasini / libraries / papkasini joylashtiring.

Agar siz birinchi kutubxonangiz bo'lsa, kutubxonalar pastki papkasini yaratishingiz kerak bo'lishi mumkin.

IDE -ni qayta ishga tushiring.

3 -qadam: Behaivor

Bu kutubxona standart DHT kutubxona datchiklarining xatti -harakatlarini taqlid qilishga harakat qiladi (va ko'p kodni nusxa ko'chiradi) va men shu tarzda i2c olso -ni boshqarish uchun kod qo'shaman.

Usul DHT kutubxonasi sensori bilan bir xil, ba'zilari shudring nuqtasi funktsiyasini qo'shadi.

4 -qadam: I2c -dan foydalanish

I2c (standart manzil va standart SDA SCL pin) bilan foydalanish uchun konstruktor:

DHT12 dht12;

va SDA SCL pin uchun standart qiymatni oling.

(ESP-01 uchun zarur bo'lgan esp8266 uchun belgilangan konstruktor bilan qayta aniqlash mumkin). yoki

DHT12 dht12 (uint8_t addressOrPin)

addressOrPin -> manzil

manzilni o'zgartirish uchun.

5 -qadam: bitta simdan foydalanish

Bitta simni ishlatish uchun:

DHT12 dht12 (uint8_t addressOrPin, rost)

addressOrPin -> pin

boolean qiymati - OneWire yoki i2c rejimini tanlash.

6 -qadam: Yashirin o'qish

Siz uni "yopiq", "oddiy o'qish" yoki "to'liq o'qish" bilan ishlatishingiz mumkin: Yopiq, faqat sensorning haqiqiy o'qilishini bajaradigan birinchi o'qish, ikkinchisi 2 soniya ichida o'qiladi. interval - bu birinchi o'qishning saqlangan qiymati.

// Sensor o'qilishi, agar kuch parametrini o'tkazmasangiz, 2 soniya vaqtni oladi

// Haroratni Selsiy bo'yicha o'qing (standart) float t12 = dht12.readTemperature (); // Haroratni Farengeyt sifatida o'qing (isFahrenheit = rost) float f12 = dht12.readTemperature (rost); // Sensor o'qishlari ham 2 soniyagacha bo'lishi mumkin (uning sensori juda sekin) h12 = dht12.readHumidity (); // Farengeytdagi issiqlik indeksini hisoblang (sukut bo'yicha) hif12 = dht12.computeHeatIndex (f12, h12); // Issiqlik indeksini Selsiy bo'yicha hisoblash (isFahreheit = false) float hic12 = dht12.computeHeatIndex (t12, h12, false); // Farengeytdagi shudring nuqtasini hisoblash (standart) float dpf12 = dht12.dewPoint (f12, h12); // Selsiydagi shudring nuqtasini hisoblash (isFahreheit = false) float dpc12 = dht12.dewPoint (t12, h12, false);

7 -qadam: oddiy o'qish

O'qish maqomini olish uchun oddiy o'qish.

// Sensor o'qilishi, agar kuch parametrini o'tkazmasangiz, 2 soniya vaqtni oladi

bool chk = dht12.read (); // haqiqiy o'qish yaxshi, noto'g'ri o'qish muammosi

// Haroratni Selsiy bo'yicha o'qing (standart)

float t12 = dht12.readTemperature (); // Haroratni Farengeyt (isFahrenheit = rost) float f12 = dht12.readTemperature (rost) sifatida o'qing; // Sensor o'qishlari ham 2 soniyagacha bo'lishi mumkin (uning sensori juda sekin) h12 = dht12.readHumidity (); // Farengeytda issiqlik indeksini hisoblang (sukut bo'yicha) hif12 = dht12.computeHeatIndex (f12, h12); // Issiqlik indeksini Selsiy bo'yicha hisoblash (isFahreheit = false) float hic12 = dht12.computeHeatIndex (t12, h12, false); // Farengeytdagi shudring nuqtasini hisoblash (standart) float dpf12 = dht12.dewPoint (f12, h12); // Selsiydagi shudring nuqtasini hisoblash (isFahreheit = false) float dpc12 = dht12.dewPoint (t12, h12, false);

8 -qadam: To'liq o'qish

Belgilangan maqomni olish uchun to'liq o'qing.

// Sensor o'qilishi, agar kuch parametrini o'tkazmasangiz, 2 soniya vaqtni oladi

DHT12:: ReadStatus chk = dht12.readStatus (); Serial.print (F ("\ nO'qish sensori:")); switch (chk) {case DHT12:: OK: Serial.println (F ("OK")); tanaffus; DHT12:: ERROR_CHECKSUM: Serial.println (F ("Checksum error")); tanaffus; DHT12:: ERROR_TIMEOUT: Serial.println (F ("Vaqt tugashi xatosi")); tanaffus; DHT12:: ERROR_TIMEOUT_LOW: Serial.println (F ("Past signalda kutish xatosi, yuqori tortishish qarshiligini qo'yishga harakat qiling")); tanaffus; DHT12:: ERROR_TIMEOUT_HIGH: Serial.println (F ("Past signalda kutish xatosi, past tortishish qarshiligini qo'yishga harakat qiling")); tanaffus; DHT12:: ERROR_CONNECT: Serial.println (F ("Ulanish xatosi")); tanaffus; DHT12:: ERROR_ACK_L: Serial.println (F ("AckL xatosi")); tanaffus; DHT12:: ERROR_ACK_H: Serial.println (F ("AckH xatosi")); tanaffus; DHT12:: ERROR_UNKNOWN: Serial.println (F ("Noma'lum xatolik aniqlandi")); tanaffus; DHT12:: NONE: Serial.println (F ("Natija yo'q")); tanaffus; standart: Serial.println (F ("Noma'lum xato")); tanaffus; }

// Haroratni Selsiy bo'yicha o'qing (standart)

float t12 = dht12.readTemperature (); // Haroratni Farengeyt (isFahrenheit = rost) float f12 = dht12.readTemperature (rost) sifatida o'qing; // Sensor o'qishlari ham 2 soniyagacha bo'lishi mumkin (uning sensori juda sekin) h12 = dht12.readHumidity (); // Farengeytda issiqlik indeksini hisoblang (sukut bo'yicha) hif12 = dht12.computeHeatIndex (f12, h12); // Tselsiy bo'yicha issiqlik indeksini hisoblash (isFahreheit = false) float hic12 = dht12.computeHeatIndex (t12, h12, false); // Farengeytdagi shudring nuqtasini hisoblash (standart) float dpf12 = dht12.dewPoint (f12, h12); // Selsiydagi shudring nuqtasini hisoblash (isFahreheit = false) float dpc12 = dht12.dewPoint (t12, h12, false);

9 -qadam: ulanish diagrammasi

Misollar bilan, ulanish diagrammasi mavjud, to'g'ri tortish qarshiligini ishlatish muhim.

Github -da kodni almashish uchun Bobadas, dplasa va adafruit -ga rahmat (bu erda men ba'zi kod va g'oyalarni olaman).

10 -qadam: Arduino: OneWire

Arduino: OneWire
Arduino: OneWire

11 -qadam: Arduino: I2c

Arduino: I2c
Arduino: I2c

12 -qadam: Esp8266 (D1Mini) OneWire

Esp8266 (D1Mini) OneWire
Esp8266 (D1Mini) OneWire

13 -qadam: Esp8266 (D1Mini) I2c

Esp8266 (D1Mini) I2c
Esp8266 (D1Mini) I2c

14 -qadam: Rahmat

Arduino o'yin maydonchasi (https://playground.arduino.cc/Main/DHT12SensorLibrary)

i2c loyihalar seriyasi (To'plam):

  • Harorat namlik sensori
  • Analog kengaytiruvchi
  • Raqamli kengaytirgich
  • LCD displey

Tavsiya: