Kod Ara

Ders 35-2: HTU21D Sıcaklık Sensörü Özel Kodunu Kullanma

Ders 35-2: HTU21D Sıcaklık Sensörü Özel Kodunu Kullanma

Bu derste, HTU21D sıcaklık sensörünü Arduino ile kullanarak sıcaklık ve nem ölçmeyi keşfedeceğiz. HTU21D, I2C üzerinden iletişim kuran güvenilir, düşük güç tüketimli bir sensördür ve projelerinize entegre etmeyi kolaylaştırır. Bu dersin sonunda, Celsius, Fahrenheit ve Kelvin cinsinden sıcaklığı ve bağıl nemi okuyan çalışan bir özel kodunuz olacak.

HTU21D module

Kablolama ve koda dalmadan önce, ilgili bileşenleri anlamak önemlidir. HTU21D sensörü minimum bağlantı gerektirir: güç, toprak ve veri aktarımı için iki I2C kablosu. Bu basitlik, onu hava istasyonlarından akıllı ev cihazlarına kadar çeşitli uygulamalar için mükemmel bir seçim haline getirir. Görsel bir rehber için videonun 03:45 zaman damgasına bakın.

Donanım Açıklaması

Bu projedeki ana bileşen, sıcaklık ve nemi ölçen HTU21D sensörüdür. Bu sensör, 1.5V ile 3.6V arasındaki voltajlarda çalışabilir ve bu da onu farklı uygulamalar için çok yönlü kılar. -40°C ile +125°C arasında değişen sıcaklık ölçümleri ve %0.04 çözünürlükte nem okumaları ile yüksek çözünürlüklü sonuçlar sağlar.

Ayrıca sensör, iki pin gerektiren I2C iletişimini kullanır: SDA (veri hattı) ve SCL (saat hattı). Bu, karmaşık kablolama gerektirmeden Arduino ve diğer mikrodenetleyicilerle kolay entegrasyon sağlar. Adafruit kütüphanesi, sensörle etkileşimi basitleştirir ve veri alımını ve iletişim protokollerini sorunsuz bir şekilde yönetir.

Veri Sayfası Detayları

Üretici TE Connectivity
Parça numarası HTU21D-F
Mantık/G/Ç voltajı 1.5 – 3.6 V
Besleme voltajı 3.3 V
Akım tüketimi (boşta) 0.02 µA (tipik)
Akım tüketimi (aktif) 450 µA (tipik)
Sıcaklık aralığı -40 ile +125 °C
Nem aralığı 0 ile 100 %RH
Çözünürlük 0.04 %RH; 0.01 °C
Paket 6 pinli DFN

 

  • Sensör hasarını önlemek için doğru güç kaynağını sağlayın.
  • Entegre değilse SDA ve SCL hatlarında pull-up dirençleri kullanın.
  • Gürültüyü en aza indirmek için sensör bağlantılarını kısa tutun.
  • Stabiliteyi korumak için çalışma sırasında voltajı izleyin.
  • Güç pinlerinin yakınında ayrıştırma için bir kapasitör kullanmayı düşünün.

Kablolama Talimatları

Arduino wiring for HTU21DF light intesity sensor
Arduino wiring for HTU21DF light intesity sensor

HTU21D sıcaklık sensörünü bağlamak için güç ve toprağı bağlayarak başlayın. Sensörün sol pinini, gerekli voltajı karşılayabilecek bir 3.3V kaynağa bağlayın. Genellikle kırmızı ile işaretlenen ikinci pin toprağa gitmelidir.

Ardından, sensörün SDA pinini Arduino'daki I2C iletişimi için veri hattı görevi gören A4 pinine bağlayın. Sonra, SCL pinini saat hattı görevi gören A5 pinine bağlayın. Bu bağlantıların güvenli olduğundan emin olun, çünkü gevşek kablolar aralıklı okumalara veya sensörle iletişim hatasına yol açabilir.

Kod Örnekleri ve Açıklama

Kodda, gerekli kütüphaneleri dahil ederek ve sensörü başlatarak başlıyoruz. Adafruit_HTU21DF htu = Adafruit_HTU21DF(); satırı, sensör sınıfının bir örneğini oluşturur. setup() fonksiyonunda, seri iletişimi başlatır ve sensörün doğru şekilde bağlı olup olmadığını kontrol ederiz.

void setup() {
  Serial.begin(9600);
  if (!htu.begin()) {
    Serial.println("Sensör bulunamadı!");
    while (1);
  }
}

Bu kod parçası, sensörün doğru çalışıp çalışmadığını kontrol eder. Değilse, bir hata mesajı yazdırır ve programı durdurur. loop() fonksiyonunda, sıcaklık ve nem değerlerini sürekli olarak okuruz.

void loop() {
    Serial.print(getHTU('C'));
    Serial.print("C");
    Serial.print(getHTU('H'));
    Serial.println("%");
    delay(1000);
}

Burada, getHTU() fonksiyonu, Celsius cinsinden sıcaklığı ve nemi almak için farklı parametrelerle çağrılır. Gecikme, okumaların her saniye alınmasını sağlayarak seri monitörde düzgün bir çıktı verir. Tam kod, makalenin altında referans olarak mevcuttur.

Gösterim / Ne Beklemeli

Her şey doğru bağlandığında ve kod yüklendiğinde, seri monitörde sıcaklık ve nem okumalarının yazdırıldığını görmelisiniz. Sıcaklık, Celsius cinsinden ve ardından karşılık gelen nem yüzdesi olarak görüntülenecektir. Sensöre ısı uygularsanız, sıcaklığın buna göre arttığını gözlemlemelisiniz (videoda 10:15'te).

Sensörün sınırlarına dikkat edin; sıcaklık 125°C'yi aşarsa, yanlış bir okuma döndürebilir veya sıfır gösterebilir. Çalışma sırasında herhangi bir sorunu önlemek için bağlantılarınızın güvenli olduğundan ve sensörün doğru beslendiğinden her zaman emin olun.

Video Zaman Damgaları

  • 00:00 Giriş
  • 03:45 Sensörün Kablolanması
  • 05:30 Kod Açıklaması
  • 10:15 Gösterim
  • 12:00 Sonuç

Görseller

Arduino wiring for HTU21DF light intesity sensor
Arduino wiring for HTU21DF light intesity sensor
HTU21D module
HTU21D module
HTU21D module-back
HTU21D module-back
513-Lesson 35: Using HTU21D Temperature Sensor (F, C, K, RH)
Dil: C++
/*
 * Robojax Arduino Step-by-Step Course
 * Part 4: Temperature Sensors
 * Lesson 35: HTU21D Temperature Sensor Custom code
 
 * Written/Updated by Ahmad Shamshiri on July 13, 2019
 * in Ajax, Ontario, Canada

 
  Please watch video instructions here https://youtu.be/LyA0yAKlf9E
 This code is available at http://robojax.com/course1/?vid=lecture35
 
with over 100 lectures free on YouTube. Watch it here http://robojax.com/L/?id=338
Get the code for the course: http://robojax.com/L/?id=339  
If you found this tutorial helpful, please support me so I can continue creating.
Make a donation using PayPal http://robojax.com/L/?id=64

 * Code is available at http://robojax.com/learn/arduino

 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>. 
    
	
 */ 
 /*

 
**************************************************
*
  This is an example for the HTU21D-F Humidity & Temperature Sensor

  Designed specifically to work with the HTU21D-F sensor from Adafruit
  ----> https://www.adafruit.com/products/1899

  These displays use I2C to communicate; 2 pins are required to
  interface
 ***************************************************
*/

#include <Wire.h>
#include "Adafruit_HTU21DF.h"

// Connect Vin to 3-5VDC
// Connect GND to ground
// Connect SCL to I2C clock pin (A5 on UNO)
// Connect SDA to I2C data pin (A4 on UNO)

Adafruit_HTU21DF htu = Adafruit_HTU21DF();

void setup() {
//Get the code for the course: http://robojax.com/L/?id=339  	
  Serial.begin(9600);
  Serial.println("Robojax.com");
  Serial.println("HTU21D-F test");

  if (!htu.begin()) {
    Serial.println("Couldn't find sensor!");
    while (1);
  }
}

void loop() {
//Get the code for the course: http://robojax.com/L/?id=339  
    Serial.print(getHTU('C'));
    printDegree();
    Serial.println("C");
    
    Serial.print(getHTU('F'));
    printDegree();
    Serial.println("F");

    Serial.print(getHTU('K'));
    Serial.println("K");    
    Serial.println(" ");  

    Serial.print("Humidity:");
    Serial.print(getHTU('H'));
    Serial.println("%");

    if(getHTU('C') <81)
    {
      //digitalWrite(5, LOW);
          
    }
    delay(1000);
}


/*
 * @brief returns temperature or relative humidity
 * @param "type" is character
 *     C = Celsius
 *     K = Kelvin
 *     F = Fahrenheit
 *     H = Humidity
 * @return returns one of the values above
 * Usage: to get Fahrenheit type: getHTU('F')
 * to print it on serial monitor Serial.println(getHTU('F'));
 * Written by Ahmad Shamshiri on July 13, 2019
 * in Ajax, Ontario, Canada
 * www.Robojax.com 
 */
float getHTU(char type)
{
	//Get the code for the course: http://robojax.com/L/?id=339  
  float value;
    float temp = htu.readTemperature();
    float rel_hum = htu.readHumidity();
   if(type =='F')
   {
    value = temp *9/5 + 32;//convert to Fahrenheit 
   }else if(type =='K')
   {
    value = temp + 273.15;//convert to Kelvin
   }else if(type =='H')
   {
    value = rel_hum;//return relative humidity
   }else{
    value = temp;// return Celsius
   }
   return value;
}//


/*
 * @brief prints degree symbol on serial monitor
 * @param none
 * @return returns nothing
 * Written by Ahmad Shamshiri on July 13, 2019
 * for Robojax Tutorial Robojax.com
 */
 void printDegree()
{
    Serial.print("\xC2"); 
    Serial.print("\xB0");  
}

İhtiyacın olabileceğini düşünüyor

Dosyalar📁

Veri Sayfası (pdf)