İçindekiler:

DHT12 (i2c Ucuz Nem ve Sıcaklık Sensörü), Hızlı Kolay Kullanım: 14 Adım
DHT12 (i2c Ucuz Nem ve Sıcaklık Sensörü), Hızlı Kolay Kullanım: 14 Adım

Video: DHT12 (i2c Ucuz Nem ve Sıcaklık Sensörü), Hızlı Kolay Kullanım: 14 Adım

Video: DHT12 (i2c Ucuz Nem ve Sıcaklık Sensörü), Hızlı Kolay Kullanım: 14 Adım
Video: Robotics Video Course with Arduino - Light follower robot (Hindi) Chapter6 2024, Kasım
Anonim
DHT12 (i2c Ucuz Nem ve Sıcaklık Sensörü), Hızlı Kolay Kullanım
DHT12 (i2c Ucuz Nem ve Sıcaklık Sensörü), Hızlı Kolay Kullanım

Güncelleme ve diğerlerini sitemde bulabilirsiniz https://www.mischianti.org/2019/01/01/dht12-library-en/.

2 telli (i2c protokolü) kullanılabilen sensörü seviyorum ama ucuz olanı seviyorum.

Bu, i2c veya tek kablolu bağlantı ile çalışan çok düşük maliyetli sıcaklık/nem sensörlerinin (1$'dan az) DHT12 serisi için bir Arduino ve esp8266 kütüphanesidir.

Nem ve sıcaklığı okumak ve i2c LCD'de görüntülemek için esp01 (seri kullanıyorsanız sadece 2 pininiz var) kullanmak istiyorsanız çok kullanışlıdır.

AI, bazen kalibrasyona ihtiyaç duyduğunu okudu, ancak bunun ağacına sahibim ve DHT22'ye çok benzer bir değer elde ettim. Bu sorunu kalibrasyonunuz varsa, github'da sorunu açın ve uygulama eklerim.

Adım 1: I2c Nasıl Çalışır?

I2c Nasıl Çalışır?
I2c Nasıl Çalışır?

I2C, SDA(veri hattı) ve SCL(saat hattı) olmak üzere iki kablosuyla çalışır.

Bu hatların her ikisi de açık drenajdır, ancak dirençlerle çekilir.

Genellikle hatta bir master ve bir veya daha fazla slave bulunur, ancak birden fazla master olabilir, ancak bunu daha sonra konuşacağız.

Hem master hem de slave'ler veri iletebilir veya alabilir, bu nedenle bir cihaz şu dört durumdan birinde olabilir: ana iletim, ana alma, bağımlı iletim, köle alma.

2. Adım: Kitaplık

Kütüphaneme buradan ulaşabilirsiniz.

İndirmek

Sağ üst köşedeki DOWNLOADS düğmesine tıklayın, sıkıştırılmamış DHT12 klasörünü yeniden adlandırın.

DHT klasörünün DHT12.cpp ve DHT12.h içerdiğini kontrol edin.

DHT kütüphane klasörünü /libraries/ klasörünüze yerleştirin.

İlk kitaplığınızsa, kitaplıklar alt klasörünü oluşturmanız gerekebilir.

IDE'yi yeniden başlatın.

Adım 3: Davranış

Bu kitaplık, standart DHT kitaplığı sensörlerinin davranışını taklit etmeye çalışır (ve birçok kodu kopyalar) ve ben de aynı şekilde i2c'yi yönetmek için kodu ekliyorum.

Yöntem, DHT kütüphane sensörünün aynısıdır, bazıları çiy noktası işlevi gibi ekler.

Adım 4: I2c Kullanımı

i2c (varsayılan adres ve varsayılan SDA SCL pini) ile kullanmak için yapıcı:

DHT12 dht12;

ve SDA SCL pini için varsayılan değeri alın.

(ESP-01 için gerekli olan esp8266 için belirtilen kurucu ile yeniden tanımlamak mümkündür). veya

DHT12 dht12(uint8_t addressOrPin)

addressOrPin -> adres

adresi değiştirmek için.

Adım 5: Tek Tel Kullanımı

Bir tel kullanmak için:

DHT12 dht12(uint8_t addressOrPin, true)

addressOrPin -> pin

boole değeri, oneWire veya i2c modunun seçimidir.

Adım 6: Örtülü Okuma

"Örtük", "basit okuma" veya "tam okuma" ile kullanabilirsiniz: Örtük, yalnızca sensörün gerçek okumasını yapan ilk okuma, 2 saniye içinde olan diğer okuma. aralık, ilk okumanın saklanan değeridir.

// Force parametresini geçmediğiniz sürece sensörün okuması 2 saniyelik bir süreye sahiptir.

// Sıcaklığı Celsius (varsayılan) olarak oku float t12 = dht12.readTemperature(); // Sıcaklığı Fahrenheit olarak oku (isFahrenheit = true) float f12 = dht12.readTemperature(true); // Sensör okumaları 2 saniyeye kadar da olabilir 'eski' (çok yavaş bir sensör) float h12 = dht12.readHumidity(); // Isı endeksini Fahrenhayt cinsinden hesapla (varsayılan) float hif12 = dht12.computeHeatIndex(f12, h12); // Isı endeksini Celsius cinsinden hesaplayın (isFahreheit = false) float hic12 = dht12.computeHeatIndex(t12, h12, false); // Çiy noktasını Fahrenhayt cinsinden hesapla (varsayılan) float dpf12 = dht12.dewPoint(f12, h12); // Çiy noktasını Celsius cinsinden hesapla (isFahreheit = false) float dpc12 = dht12.dewPoint(t12, h12, false);

7. Adım: Basit Okuma

Okuma durumu almak için basit okuma.

// Force parametresini geçmediğiniz sürece sensörün okuması 2 saniyelik bir süreye sahiptir.

bool chk = dht12.read(); // doğru okuma tamam, yanlış okuma sorunu

// Sıcaklığı Celsius olarak oku (varsayılan)

float t12 = dht12.readTemperature(); // Sıcaklığı Fahrenheit olarak oku (isFahrenheit = true) float f12 = dht12.readTemperature(true); // Sensör okumaları 2 saniyeye kadar da olabilir 'eski' (çok yavaş bir sensör) float h12 = dht12.readHumidity(); // Isı endeksini Fahrenhayt cinsinden hesapla (varsayılan) float hif12 = dht12.computeHeatIndex(f12, h12); // Isı endeksini Celsius cinsinden hesaplayın (isFahreheit = false) float hic12 = dht12.computeHeatIndex(t12, h12, false); // Çiy noktasını Fahrenhayt cinsinden hesapla (varsayılan) float dpf12 = dht12.dewPoint(f12, h12); // Çiy noktasını Celsius cinsinden hesapla (isFahreheit = false) float dpc12 = dht12.dewPoint(t12, h12, false);

Adım 8: Tam Okuma

Belirtilen durumu elde etmek için tam okuma.

// Force parametresini geçmediğiniz sürece sensörün okuması 2 saniyelik bir süreye sahiptir.

DHT12::ReadStatus chk = dht12.readStatus(); Serial.print(F("\nOkuma sensörü: ")); switch (chk) { case DHT12::OK: Serial.println(F("OK")); kırmak; case DHT12::ERROR_CHECKSUM: Serial.println(F("Kontrol toplamı hatası")); kırmak; case DHT12::ERROR_TIMEOUT: Serial.println(F("Zaman aşımı hatası")); kırmak; case DHT12::ERROR_TIMEOUT_LOW: Serial.println(F("Düşük sinyalde zaman aşımı hatası, yüksek çekme direnci koymayı deneyin")); kırmak; case DHT12::ERROR_TIMEOUT_HIGH: Serial.println(F("Düşük sinyalde zaman aşımı hatası, düşük çekme direnci koymayı deneyin")); kırmak; case DHT12::ERROR_CONNECT: Serial.println(F("Bağlantı hatası")); kırmak; case DHT12::ERROR_ACK_L: Serial.println(F("AckL hatası")); kırmak; case DHT12::ERROR_ACK_H: Serial.println(F("AckH hatası")); kırmak; case DHT12::ERROR_UNKNOWN: Serial.println(F("Bilinmeyen hata ALGILANDI")); kırmak; case DHT12::NONE: Serial.println(F("Sonuç yok")); kırmak; varsayılan: Serial.println(F("Bilinmeyen hata")); kırmak; }

// Sıcaklığı Celsius olarak oku (varsayılan)

float t12 = dht12.readTemperature(); // Sıcaklığı Fahrenheit olarak oku (isFahrenheit = true) float f12 = dht12.readTemperature(true); // Sensör okumaları 2 saniyeye kadar da olabilir 'eski' (çok yavaş bir sensör) float h12 = dht12.readHumidity(); // Isı endeksini Fahrenhayt cinsinden hesapla (varsayılan) float hif12 = dht12.computeHeatIndex(f12, h12); // Isı endeksini Celsius cinsinden hesaplayın (isFahreheit = false) float hic12 = dht12.computeHeatIndex(t12, h12, false); // Çiy noktasını Fahrenhayt cinsinden hesapla (varsayılan) float dpf12 = dht12.dewPoint(f12, h12); // Çiy noktasını Celsius cinsinden hesapla (isFahreheit = false) float dpc12 = dht12.dewPoint(t12, h12, false);

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

Örneklerle, bağlantı şeması var, doğru çekme direncini kullanmak önemlidir.

Bobadas, dplasa ve adafruit sayesinde kodu github'da (bazı kod ve fikirleri aldığım yer) paylaşmak için.

Adım 10: Arduino: OneWire

Arduino: Tek Tel
Arduino: Tek Tel

Adım 11: Arduino: I2c

Arduino: I2c
Arduino: I2c

Adım 12: Esp8266 (D1Mini) OneWire

Esp8266 (D1Mini) OneWire
Esp8266 (D1Mini) OneWire

Adım 13: Esp8266 (D1Mini) I2c

Esp8266 (D1Mini) I2c
Esp8266 (D1Mini) I2c

Adım 14: Teşekkürler

Arduino oyun alanı (https://playground.arduino.cc/Main/DHT12SensorLibrary)

i2c proje serisi (Koleksiyon):

  • Sıcaklık nem sensörü
  • Analog genişletici
  • Dijital genişletici
  • LCD ekran

Önerilen: