Mündəricat:

DHT12 (i2c Ucuz Nəmlik və İstilik Sensoru), Tez Asan İstifadə: 14 Addım
DHT12 (i2c Ucuz Nəmlik və İstilik Sensoru), Tez Asan İstifadə: 14 Addım

Video: DHT12 (i2c Ucuz Nəmlik və İstilik Sensoru), Tez Asan İstifadə: 14 Addım

Video: DHT12 (i2c Ucuz Nəmlik və İstilik Sensoru), Tez Asan İstifadə: 14 Addım
Video: LoRa ile 5 Km'den Röle Kontrolü | Kendin Yap | Arduino | Fixaj 2024, Iyul
Anonim
DHT12 (i2c Ucuz Rütubət və İstilik Sensoru), Sürətli Asan İstifadə
DHT12 (i2c Ucuz Rütubət və İstilik Sensoru), Sürətli Asan İstifadə

Yeniləməni və digərlərini https://www.mischianti.org/2019/01/01/dht12-library-en/ saytımda tapa bilərsiniz.

2 telli (i2c protokolu) istifadə edilə bilən sensoru sevirəm, amma ucuz olanı sevirəm.

Bu, i2c və ya bir tel bağlantısı ilə işləyən çox aşağı qiymətli temperatur/rütubət (1 dollardan aşağı) DHT12 seriyası üçün bir Arduino və esp8266 kitabxanasıdır.

Nəmliyi və temperaturu oxumaq və i2c LCD -də göstərmək üçün esp01 istifadə etmək istəyirsinizsə (serialdan istifadə edirsinizsə yalnız 2 pininiz var) çox faydalıdır.

AI oxudu ki, nə vaxtsa kalibrləməyə ehtiyac var, amma bunun ağacı var və DHT22 -yə çox oxşar dəyər alıram. Bu problemi kalibr edirsinizsə, github -da problemi açın və tətbiqini əlavə edin.

Addım 1: I2c necə işləyir

I2c necə işləyir
I2c necə işləyir

I2C iki tel ilə işləyir: SDA (məlumat xətti) və SCL (saat xətti).

Bu xətlərin hər ikisi açıq drenajdır, lakin rezistorlar ilə çəkilir.

Adətən xətdə bir usta və bir və ya birdən çox qul var, baxmayaraq ki, birdən çox usta ola bilər, amma bu barədə sonra danışacağıq.

Həm ustalar, həm də qullar məlumatları ötürə və ya ala bilərlər, buna görə də bir cihaz bu dörd vəziyyətdən birində ola bilər: usta ötürmə, usta qəbulu, kölə ötürmə, kölə qəbulu.

Addım 2: Kitabxana

Kitabxanamı burada tapa bilərsiniz.

Yükləmək üçün

Sağ üst köşedeki YÜKLƏMƏ düyməsini basın, sıxılmamış qovluğun adını DHT12 adlandırın.

DHT qovluğunda DHT12.cpp və DHT12.h olduğunu yoxlayın.

DHT kitabxana qovluğunu / libraries / qovluğunuza yerləşdirin.

İlk kitabxananız varsa, kitabxanalar alt qovluğunu yaratmağınız lazım ola bilər.

IDE -ni yenidən başladın.

Addım 3: Behaivor

Bu kitabxana standart DHT kitabxana sensorlarının davranışını təqlid etməyə çalışır (və bir çox kodu kopyalayır) və i2c olso -nu eyni qaydada idarə etmək üçün kodu əlavə edirəm.

Metod DHT kitabxana sensoru ilə eynidir, bəziləri çiy nöqtəsi funksiyasını əlavə edir.

Addım 4: I2c İstifadəsi

İ2c ilə (standart ünvan və standart SDA SCL pin) istifadə etmək üçün konstruktor:

DHT12 dht12;

və SDA SCL pin üçün standart dəyəri götürün.

(ESP-01 üçün lazım olan esp8266 üçün müəyyən edilmiş konstruktorla yenidən təyin etmək mümkündür). və ya

DHT12 dht12 (uint8_t addressOrPin)

addressOrPin -> ünvan

ünvanı dəyişdirmək üçün.

Addım 5: Bir Tel İstifadəsi

Bir tel istifadə etmək üçün:

DHT12 dht12 (uint8_t addressOrPin, doğru)

addressOrPin -> pin

boolean dəyər, OneWire və ya i2c rejiminin seçilməsidir.

Addım 6: Gizli Oxu

Bunu "örtük", "sadə oxumaq" və ya "tam oxu" ilə istifadə edə bilərsiniz: Gizli, yalnız ilk oxuyucunun həqiqi oxunuşu, digər oxunuş 2 saniyəyə çevrilir. interval ilk oxunuşun saxlanılan dəyəridir.

// Sensorun oxunması, güc parametrini keçməyincə, 2 saniyə keçən vaxta malikdir

// İstiliyi Celsius olaraq oxuyun (standart) float t12 = dht12.readTemperature (); // İstiliyi Fahrenheit (isFahrenheit = true) float f12 = dht12.readTemperature (doğru) olaraq oxuyun; // Sensor oxunuşları 2 saniyəyə qədər də ola bilər (çox yavaş bir sensordur) float h12 = dht12.readHumidity (); // Fahrenheit -də istilik indeksini hesablayın (standart) float hif12 = dht12.computeHeatIndex (f12, h12); // İstilik indeksini Selsi ilə hesablayın (isFahreheit = false) float hic12 = dht12.computeHeatIndex (t12, h12, false); // Fahrenheitdəki çiy nöqtəsini hesablayın (standart) float dpf12 = dht12.dewPoint (f12, h12); // Celsiusda çiy nöqtəsini hesablayın (isFahreheit = false) float dpc12 = dht12.dewPoint (t12, h12, false);

Addım 7: Sadə Oxu

Oxuma statusu əldə etmək üçün sadə oxu.

// Sensorun oxunması, güc parametrini keçməsəniz, 2 saniyə keçən vaxta malikdir

bool chk = dht12.read (); // əsl oxumaq yaxşıdır, yalan oxumaq problemidir

// İstiliyi Selsi olaraq oxuyun (standart)

float t12 = dht12.readTemperature (); // İstiliyi Fahrenheit (isFahrenheit = true) float f12 = dht12.readTemperature (doğru) olaraq oxuyun; // Sensor oxunuşları da 2 saniyəyə qədər ola bilər (çox yavaş bir sensordur) float h12 = dht12.readHumidity (); // Fahrenheit -də istilik indeksini hesablayın (standart) float hif12 = dht12.computeHeatIndex (f12, h12); // İstilik indeksini Selsi ilə hesablayın (isFahreheit = false) float hic12 = dht12.computeHeatIndex (t12, h12, false); // Fahrenheitdəki çiy nöqtəsini hesablayın (standart) float dpf12 = dht12.dewPoint (f12, h12); // Celsiusda çiy nöqtəsini hesablayın (isFahreheit = false) float dpc12 = dht12.dewPoint (t12, h12, false);

Addım 8: Tam Oxu

Müəyyən bir vəziyyət əldə etmək üçün tam oxuyun.

// Sensorun oxunması, güc parametrini keçməyincə, 2 saniyə keçən vaxta malikdir

DHT12:: ReadStatus chk = dht12.readStatus (); Serial.print (F ("\ nOxuyan sensor:")); switch (chk) {case DHT12:: OK: Serial.println (F ("OK")); fasilə; halda DHT12:: ERROR_CHECKSUM: Serial.println (F ("Sağlama məbləği xətası")); fasilə; halda DHT12:: ERROR_TIMEOUT: Serial.println (F ("Zaman aşımı xətası")); fasilə; halda DHT12:: ERROR_TIMEOUT_LOW: Serial.println (F ("Aşağı siqnalda zaman aşımı xətası, yüksək çəkmə müqaviməti qoymağa çalışın")); fasilə; halda DHT12:: ERROR_TIMEOUT_HIGH: Serial.println (F ("Aşağı siqnalda zaman aşımı xətası, aşağı çəkmə müqaviməti qoymağa çalışın")); fasilə; halda DHT12:: ERROR_CONNECT: Serial.println (F ("Bağlama xətası")); fasilə; halda DHT12:: ERROR_ACK_L: Serial.println (F ("AckL xətası")); fasilə; halda DHT12:: ERROR_ACK_H: Serial.println (F ("AckH xətası")); fasilə; hal DHT12:: ERROR_UNKNOWN: Serial.println (F ("Naməlum səhv DETECTED")); fasilə; halda DHT12:: YOX: Serial.println (F ("Nəticə yoxdur")); fasilə; default: Serial.println (F ("Naməlum səhv")); fasilə; }

// İstiliyi Selsi olaraq oxuyun (standart)

float t12 = dht12.readTemperature (); // İstiliyi Fahrenheit (isFahrenheit = true) float f12 = dht12.readTemperature (doğru) olaraq oxuyun; // Sensor oxunuşları 2 saniyəyə qədər də ola bilər (çox yavaş bir sensordur) float h12 = dht12.readHumidity (); // Fahrenheit -də istilik indeksini hesablayın (standart) float hif12 = dht12.computeHeatIndex (f12, h12); // İstilik indeksini Selsi ilə hesablayın (isFahreheit = false) float hic12 = dht12.computeHeatIndex (t12, h12, false); // Fahrenheitdəki çiy nöqtəsini hesablayın (standart) float dpf12 = dht12.dewPoint (f12, h12); // Celsiusda çiy nöqtəsini hesablayın (isFahreheit = false) float dpc12 = dht12.dewPoint (t12, h12, false);

Addım 9: Bağlantı Şeması

Nümunələrlə, əlaqə diaqramı var, düzgün çəkmə rezistorundan istifadə etmək vacibdir.

Github -da kodu paylaşmaq üçün Bobadas, dplasa və adafruit sayəsində (bəzi kod və fikirlər aldığım yer).

Addım 10: Arduino: OneWire

Arduino: OneWire
Arduino: OneWire

Addım 11: Arduino: I2c

Arduino: I2c
Arduino: I2c

Addım 12: Esp8266 (D1Mini) OneWire

Esp8266 (D1Mini) OneWire
Esp8266 (D1Mini) OneWire

Addım 13: Esp8266 (D1Mini) I2c

Esp8266 (D1Mini) I2c
Esp8266 (D1Mini) I2c

Addım 14: Təşəkkürlər

Arduino oyun meydançası (https://playground.arduino.cc/Main/DHT12SensorLibrary)

i2c layihə seriyası (Kolleksiya):

  • Rütubət sensoru
  • Analog genişləndirici
  • Rəqəmsal genişləndirici
  • LCD Ekran

Tövsiyə: