Arduino ile Sıcaklık ve Nem Sensörü Kullanımı
DHT22 veya DHT11 sıcaklık ve nem sensörü serisinin iki versiyonu var. Biraz benziyorlar ve aynı pinouta sahipler ama farklı özelliklere sahipler. DHT22, açıkça daha iyi özelliklere sahip olan daha pahalı versiyondur. Sıcaklık ölçüm aralığı -40 ° C ile + 125 ° C arasında + -0.5 derece hassasiyetle, DHT11 sıcaklık aralığı +2 derece hassasiyetle 0 ° C ile 50 ° C arasındadır. Ayrıca DHT22 sensörü daha iyi nem ölçüm aralığına sahiptir, % 0 - 100 arasında% 2-5 doğrulukla, DHT11 nem aralığı ise% 5 ile% 20 doğrulukla ölçüm yapmaktadır.
DHT22 ve DHT11 Arasındaki Farklar
Her ne kadar DHT22 daha doğru sonuç verse de DHT11'in DHT22'den üstün olduğu üç şey var. Daha ucuz, daha küçük ve daha yüksek örnekleme oranına sahip. DHT11'in örnekleme hızı 1Hz, yani her saniye bir okuma, DHT22 örnekleme hızı ise 0,5Hz'dir, yani her iki saniyede bir okuma. Bununla birlikte, her iki sensörün çalışma voltajı 3 ile 5 volt iken dönüşüm sırasında kullanılan maksimum akım 2,5mA'dir. Ve her iki sensörün de (DHT11 ve DHT22) 'değiştirilebilir' olması önemlidir. Yani, projeniz de sensörler de bir problem olsa veya değiştirmek isteseniz, fişini çekip başka birini kullanabilirsiniz. Örnek kodları kendinize göre biraz ayarlamak zorunda kalabilirsiniz ama en azından kablo bağlantısı aynı! Biraz daha fazla bilgi için, lütfen DHT11 ve DHT22 / AM2302 sensörü için aşağıdaki veri sayfalarına bakınız.
DHT22 ve DHT11 İç Yapısı
Şimdi hem DHT11 hem de DHT22 sıcaklık ve nem sensörlerini söküp içeride ne olduğunu görelim. Muhafaza iki parça halinde olduğundan açabilmek için keskin bir bıçak almak ve kasayı ayırmak yeterlidir. Kasanın içinde, algılama tarafında, bir NTC sıcaklık sensörü (veya termistör) ile birlikte bir nem algılama bileşeni vardır.
Tabii ki, aralarında nem bulunan, nem tutma substratı (genellikle bir tuz veya iletken plastik polimer) bulunan iki elektrot içeren nemi ölçmek için nem algılama bileşeni kullanılır. İyonlar substrat tarafından su buharı emildiği için serbest kalır, bu da elektrotlar arasındaki iletkenliği arttırır. İki elektrot arasındaki direncin değişimi bağıl neme orantılıdır. Daha yüksek bağıl nem, elektrotlar arasındaki direnci azaltırken, düşük bağıl nem, elektrotlar arasındaki direnci arttırır.
Sıcaklık ve nem sensörü ile sıcaklığı ölçmek için bir NTC sıcaklık sensörü / termistörden oluşurlar. Bir termistör, bir termal dirençtir - direncini sıcaklıkla değiştiren bir dirençtir. Teknik olarak, tüm dirençler termistördür - dirençleri sıcaklığın artması ve azalmasına bağlı olarak değişir - ancak değişiklik genellikle çok küçük ve ölçülmesi zordur. Termistörler, direnç değişimini fark ettirecek bir şekilde üretilir. Böylece derece başına 100 ohm veya daha fazla değişiklik olabilir! “NTC” terimi, “Negatif Sıcaklık Katsayısı” anlamına gelir; bu, direncin sıcaklığın artmasıyla azaldığı anlamına gelir.
NTC Termistörü
Diğer taraftan, 8 bit SOIC-14 paketlenmiş IC içeren küçük bir PCB vardır. Bu IC depolanan kalibrasyon katsayıları ile analog sinyali ölçer ve işler, dijital dönüştürmeyi analog olarak yapar. Sıcaklık ve nem ölçümünü dijital bir sinyal olarak verir.
DHT11 ve DHT22 Pin Çıkışı
DHT11, DHT22 sensörlerini bağlamak oldukça kolaydır. Dört pimleri vardır:
1- VCC; pimi sensör için güç sağlar. Besleme gerilimi 3.3V ile 5.5V arasında değişmesine rağmen, 5V besleme önerilir. 5V güç kaynağı olması durumunda, sensörü 20 metre kadar uzak bağlantı ile kullanabilirsiniz. Bununla birlikte, 3.3V besleme voltajı ile kablo uzunluğu 1 metreden büyük olmamalıdır. Aksi takdirde, voltaj düşüşü hatalı ölçümlere yol açacaktır.
2- Veri pini(Data); Sensör ve mikrodenetleyici arasındaki iletişimi sağlamak için kullanılır. 3- NC (Boş) 4- GND; Arduino topraklarına bağlanmalıdır.
DHT11 ve DHT22 Arduino UNO'ya Bağlama
Artık DHT sensörlerinin nasıl çalıştığını tam olarak anlayabildiğimize göre, onu Arduino'muza takmaya başlayabiliriz! DHT11, DHT22 sensörlerini Arduino'ya bağlamak çok önemlidir. Oldukça uzun 0.1 ¨ -pitch pinleri vardır, böylece onları herhangi bir breadboard'a kolayca takabilirsiniz. Sensörü 5V ile çalıştırın ve toprağı toprağa bağlayın. Son olarak Veri pimini bir dijital pime # 2 bağlayın. Unutmayın, bu yazımız da daha önce anlattığımız gibi, sensör ve MCU arasında doğru iletişim YÜKSEK kalması için VCC ile veri hattı arasına 10K?'luk bir direnç direnci yerleştirmemiz gerekir. Sensörde bir koparma panosu varsa, herhangi bir harici çekme eklemeniz gerekmez. Dahili bir pull-up rezistörü ile birlikte gelir.
Arduino Kod Yükleme - 16x2 LCD Üzerinde Değerleri Yazdırma
DHT11, DHT22 sıcaklık ve nem sensörleri, verileri aktarmak için kullanılan kendi tek kablolu protokollere sahiptir. Bu protokol kesin zamanlama gerektirir. Neyse ki, bu konuda çok fazla endişelenmemize gerek yok çünkü DHT kütüphanesini kullanacağız. Önce kütüphaneyi, GitHub ziyaret ederek indirin. Eğer Arduino ile Lcd Ekran Nasıl Kullanılır Öğrenmek İsterseniz Hemen Buraya Tıklayın. Kurmak için Arduino IDE'yi açın, Kitaplık Ekle> .ZIP Kitaplığı Ekle'ye gidin ve daha sonra indirdiğiniz DHTlib ZIP dosyasını seçin. Kütüphaneyi kurduktan sonra, aşağıdaki kodları Arduino IDE'ye kopyalayabilirsiniz. Aşağıdaki test kodları, seri monitördeki sıcaklık ve bağıl nem değerlerini gösterecektir.
#include <dht.h>
#define dataPin 8 // Defines pin number to which the sensor is connected
dht DHT; // Creats a DHT object
void setup()
{
Serial.begin(9600);
}
void loop()
{
//Uncomment whatever type you’re using!
int readData = DHT.read22(dataPin); // DHT22/AM2302
//int readData = DHT.read11(dataPin); // DHT11
float t = DHT.temperature; // Gets the values of the temperature
float h = DHT.humidity; // Gets the values of the humidity
// Printing the results on the serial monitor
Serial.print(“Temperature = “);
Serial.print(t);
Serial.print(” “);
Serial.print((char)176);//shows degrees character
Serial.print(“C | “);
Serial.print((t * 9.0) / 5.0 + 32.0);//print the temperature in Fahrenheit
Serial.print(” “);
Serial.print((char)176);//shows degrees character
Serial.println(“F “);
Serial.print(“Humidity = “);
Serial.print(h);
Serial.println(” % “);
Serial.println(“”);
delay(2000); // Delays 2 secods
}
DHT Arduino Bağlantı Kodları
Kodlar, DHT kütüphanesi dahil edilerek başlar. Daha sonra, sensörümüzün Veri pininin bağlı olduğu Arduino pin numarasını tanımlamamız ve bir DHT nesnesi oluşturmamız gerekiyor. Böylece kütüphaneyle ilgili özel fonksiyonlara erişebiliriz.
#include <dht.h>
#define dataPin 8 // Defines pin number to which the sensor is connected
dht DHT; // Creats a DHT object
‘Setup’ fonksiyonunda; Sonuçları yazdırmak için 16×2 lcd monitör kullanacağımızdan seri iletişimi başlatmamız gerekir.
void setup() {
Serial.begin(9600);
}
‘Döngü’ fonksiyonunda; DHT22’den verileri okuyan read22 () işlevini kullanacağız. Sensör, veri pin numarasını parametre olarak alır. DHT11 ile çalışıyorsanız, read11()
işlevini kullanmanız gerekir. Bunu ikinci satırı yorumlayarak yapabilirsiniz.
//Uncomment whatever type you’re using!
int readData = DHT.read22(dataPin); // DHT22/AM2302
//int readData = DHT.read11(dataPin); // DHT11
Nem ve sıcaklık değerleri hesaplandıktan sonra bunlara şu yollardan erişebiliriz:
float t = DHT.temperature; // Gets the values of the temperature
float h = DHT.humidity; // Gets the values of the humidity
Normalde DHT sensörler Santigrat (° C) cinsinden sıcaklık değerini ölçer. Basit bir formül kullanarak Fahrenheit’e (° F) dönüştürebilirsiniz:
T (° F) = T (° C) × 9/5 + 32
//print the temperature in Fahrenheit
Serial.print((t * 9.0) / 5.0 + 32.0);
Sonunda lcd ekranımız da sıcaklık ve nem değerlerini görebileceğiz.
Arduino Projesi Olarak 16×2 LCD’li DHT11 ve DHT22
Sıcaklık ve nem seviyelerini izlemek istediğiniz bir fikriniz m var? Tam olarak doğru projeyi okuyorsunuz. Bu örnekte, LCD’yi DHT11, DHT22 sensörüyle birlikte Arduino’ya bağlayacağız.
Aşağıdaki çizim, 16 × 2 karakter LCD’deki sıcaklık ve bağıl nem değerlerini yazdıracaktır. Değerleri LCD’de görüntülememiz dışında aynı kodu kullanacağız.
#include <LiquidCrystal.h> // includes the LiquidCrystal Library
#include <dht.h>
#define dataPin 8
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7)
dht DHT;
bool showcelciusorfarenheit = false;
void setup()
{
lcd.begin(16,2); // Initializes the interface to the LCD screen, and specifies the dimensions (width and height) of the display
}
void loop()
{
int readData = DHT.read22(dataPin);
float t = DHT.temperature;
float h = DHT.humidity;
lcd.setCursor(0,0); // Sets the location at which subsequent text written to the LCD will be displayed
lcd.print(“Temp.: “); // Prints string “Temp.” on the LCD
//Print temperature value in Celcius and Fahrenheit every alternate cycle
if(showcelciusorfarenheit)
{
lcd.print(t); // Prints the temperature value from the sensor
lcd.print(” “);
lcd.print((char)223);//shows degrees character
lcd.print(“C”);
showcelciusorfarenheit = false;
}
else
{
lcd.print((t * 9.0) / 5.0 + 32.0); // print the temperature in Fahrenheit
lcd.print(” “);
lcd.print((char)223);//shows degrees character
lcd.print(“F”);
showcelciusorfarenheit = true;
}
lcd.setCursor(0,1);
lcd.print(“Humi.: “);
lcd.print(h);
lcd.print(” %”);
delay(5000);
}