検索コード

HTU21Dからの温度をLCDにバーグラフとして表示する

HTU21Dからの温度をLCDにバーグラフとして表示する

このチュートリアルでは、HTU21D温度湿度センサーからの温度測定値をLCDスクリーンに棒グラフの形式で表示する方法を学びます。測定値には摂氏、華氏、ケルビン、相対湿度の値が含まれ、環境条件の包括的な概要を提供します。このプロジェクトは、コンポーネントを正しく配線する方法と、すべてをシームレスに動作させるために必要なコードを実装する方法を理解するのに役立ちます。

HTU21D module

このチュートリアルに関連するビデオ(00:00のビデオ)を必ずチェックしてください。視覚的なガイドを求めている方におすすめです。

ハードウェアの説明

このプロジェクトの主なコンポーネントには、HTU21DセンサーとLCD 1602ディスプレイが含まれています。HTU21DはI2Cを介して通信するデジタル湿度および温度センサーです。温度と湿度の正確な測定値を提供し、そのライブラリを通じて簡単にアクセスできます。一方、LCD 1602ディスプレイは、人間が読みやすい形式で測定値を表示し、環境条件を迅速に評価できるようにします。

HTU21DはシンプルなI2Cインターフェースを使用しているため、Arduinoのようなマイクロコントローラーとの接続と通信が簡単です。LCD 1602ディスプレイもI2Cを使用しており、Arduinoに接続するために必要なピンの数を減らすことで配線を簡素化します。これにより、クリーンなセットアップが実現でき、なおかつ明確な視覚出力を提供します。

データシートの詳細

メーカーアダフルート
部品番号HTU21D
論理/入出力電圧3.3 V(典型)
供給電圧1.5 - 3.6 V
温度範囲-40から125 °C
湿度範囲0から100%RH
解像度0.01 °C / 0.04 %RH
コミュニケーションI2C
パッケージ4ピンLGA

  • HTU21Dを動作させるには3.3 Vを使用してください; 5 Vに接続すると故障する可能性があります。
  • I2Cライン(SDAおよびSCL)には、適切なプルアップ抵抗が使用されていることを確認してください。
  • テスト中はセンサーを熱源から遠ざけてください。
  • I2Cスキャナースケッチを使用して、正しいI2Cアドレスを確認してください。
  • LCDが正しいアドレスで適切に初期化されていることを確認してください。

配線指示

Arduino wiring for HTU21DF light intesity sensor with LCD
Arduino wiring for HTU21DF light intesity sensor with LCD

HTU21DセンサーとLCD 1602ディスプレイを配線するには、以下の手順に従ってください。

まず、HTU21Dセンサーを接続します。最初のピン(VCC)をArduinoの3.3 Vピンに接続します。2番目のピン(GND)はArduinoのグラウンド(GND)に接続する必要があります。3番目のピン(SDA)はArduinoのA4ピンに接続し、4番目のピン(SCL)はA5ピンに接続します。明確さのために正しいワイヤーカラーを使用してください。VCCには赤、GNDには黒、SDAにはオレンジ、SCLには黄色を使用します。

次に、LCD 1602ディスプレイについて、VCCピンをArduinoの5 Vピンに接続し、GNDピンをグラウンドに接続します。LCDのSDAピンはHTU21Dで使用するA4ピンに接続し、SCLピンはA5ピンに接続します。この設定により、センサーとディスプレイはI2Cプロトコルを介して通信できるようになります。

コード例とウォークスルー

コードでは、最初のステップはセンサーとLCDに必要なライブラリを含めることです。#include I2C通信には不可欠です。#include "Adafruit_HTU21DF.h"HTU21Dセンサーを初期化します。次の行はHTU21Dクラスのインスタンスを作成します:

Adafruit_HTU21DF htu = Adafruit_HTU21DF();

この行はプログラムで使用するためにセンサーを設定し、後で温度と湿度の値を読み取るためにそのメソッドを呼び出すことを可能にします。

内でsetup()関数では、シリアルモニターとLCDディスプレイを初期化します。次の行では、センサーが正しく機能しているかどうかを確認します。

if (htu.begin()) {
    lcd.print("HTU21DF Bargraph");  
} else {
    lcd.print("missing HTU21DF"); 
    while(1); // Pause forever.
}

センサーの初期化に失敗した場合、プログラムはエラーメッセージを表示し、実行を停止します。これはデバッグにとって重要であり、センサーが正しく接続されていることを確認します。

In theloop()機能として、温度測定値が取得され表示されます。その行float T = getHTU('H');パラメーターに基づいて温度または湿度を取得します。取得した値はLCDに表示されます:

lcd.setCursor (0,1); 
lcd.print(T); // print  
lcd.print((char)223); // prints degree symbol
lcd.print("C"); //

このコードはカーソルをLCDの2行目に配置し、温度値と度の記号を印刷します。使用する(char)223LCD上に度記号を表示する便利な手段です。

デモンストレーション / 期待されること

すべてが設定され、コードがアップロードされると、LCDに温度測定値がバーグラフとして表示されるはずです。測定値は継続的に更新され、現在の温度と湿度を反映します。センサーに熱い空気を吹きかけると、温度が急速に上昇し、システムが期待通りに動作していることが確認できます。極性の逆転や誤配線には注意してください。これらは故障や損傷を引き起こす可能性があります(動画の02:30)。

動画のタイムスタンプ

  • 00:00- イントロダクション
  • 01:30- 配線の説明
  • 02:30- コードウォークスルー
  • 04:00- デモンストレーション
  • 05:30- 結論

画像

Arduino wiring for HTU21DF light intesity sensor with LCD
Arduino wiring for HTU21DF light intesity sensor with LCD
HTU21D module
HTU21D module
HTU21D module-back
HTU21D module-back
214-Arduino code using HTU21D-F Humidity & Temperature on LCD bargraph
言語: C++
/* 
 *  Display Temperature from HTU21D(F) on LCD as bargraph
 *  Written and Updated by Ahmad Shamshiri on July 18, 2019
 *  for Robojax in Ajax, Ontario, Canada
  Watch Video tutorial for this code: https://youtu.be/kpGvzNWLHuk

  Must watch: 
  1- Introduction to HTU21DF
  https://youtu.be/Q5y18rgTAhA
  2- LCD1602-I2C video: https://youtu.be/q9YC_GVHy5A
  
 *  Original Sources: 
 *  LCD library: https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
 *  Bargraph library from https://playground.arduino.cc/Code/LcdBarGraph/
 *  
 *  


- (GND) to GND
+ (VDD) to 3.3V

(WARNING: Do not connect + to 5V or the sensor will be damaged!)

*/

#include <Wire.h>
#include "Adafruit_HTU21DF.h"
Adafruit_HTU21DF htu = Adafruit_HTU21DF();

#define maxValue 160 // is the value in celsius or fahrenheit set in line above

// LCD settings
#include <LiquidCrystal_I2C.h>
byte lcdNumCols = 16; // -- number of columns in the LCD
byte lcdLine = 2; // -- number of lines in the LCD

LiquidCrystal_I2C lcd(0x3f,lcdNumCols,lcdLine); //0x3f is address for I2C
                  // to get I2C address, run I2C Scanner. 
                  //Link is provided (in same page as this code) at http://robojax.com/learn/arduino
// bargraph settings
#include <LcdBarGraphRobojax.h>
LcdBarGraphRobojax robojax(&lcd, 16, 0, 0);  // -- creating 16 character long bargraph starting at char 0 of line 0 (see video)



void setup()
{
  Serial.begin(9600);//initialize serial monitor
 // -- initializing the LCD
  lcd.begin();
  lcd.clear();
  lcd.print("Robojax"); 
   
 
  // Initialize the sensor (it is important to get calibration values stored on the device).

  if (htu.begin())
  {
   lcd.setCursor (0,1); //  
    lcd.print("HTU21DF Bargraph");  
  }else {
    lcd.setCursor (0,1); //  
    lcd.print("missing HTU21DF"); 
    while(1); // Pause forever.
  }
  // -- give user some time to read the text above
  delay(2000);
  lcd.clear();  
}// setup

void loop()
{
 // Robojax HTU21DF Bargraph main loop

 robojax.clearLine(1);// clear line 1 to display fresh temperature
 float T = getHTU('H');// get the temperature
 float Tgraph=T;

     if( Tgraph > maxValue){   
        Tgraph =0;
     }
        robojax.drawValue( Tgraph, maxValue);// draw the bargraph     
      // Print out the measurement:
      Serial.print("temperature: ");
      Serial.print(T,2);


      lcd.setCursor (0,1); //
      if(T< maxValue){       
       lcd.print("Temp.:"); 
       //lcd.print("Humi.:"); 
      }else{
       lcd.print("Max.:"); 
      }
      lcd.setCursor (7,1); //
      lcd.print(T); // print  
      lcd.print((char)223);// prints degree symbol
      //lcd.print("%");// prints degree symbol      
      lcd.print("C");//

 
delay(500);
}


/*
 * @brief returns temperature or relative humidity
 * @param "type" is a 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 the 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)
{
  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')
   {
    if(rel_hum<0){rel_hum =0;}//prevents it from negative value
    value = rel_hum;//return relative humidity
   }else{
    value = temp;// return Celsius
   }
   return value;
}//

ファイル📁

Arduinoライブラリ(zip)

データシート(pdf)