検索コード

LM75A温度センサー(LCD1602 I2C付き)

LM75A温度センサー(LCD1602 I2C付き)

このチュートリアルでは、I2C通信を使ってLM75A温度センサーを用い、温度をLCD1602ディスプレイに摂氏(°C)および華氏(°F)の両方で表示する方法を学びます。LM75Aは-55°Cから+125°Cまでの温度を測定でき、さまざまな用途に適しています。セットアップが完了すると、LCDディスプレイでリアルタイムの温度表示を確認できるようになります。

LCD1602-I2C display module with 4 wires

このプロジェクトでは、LM75AセンサーとI2C接続のLCD1602モジュールを使用します。これにより配線が簡素化され、Arduinoで使用するピン数を減らせます。目的は温度を継続的に読み取り、それをLCDに表示するシステムを作ることです。手順のどの部分についても不明な点があれば、ビデオチュートリアル(動画の00:00)を必ず確認してください。

ハードウェアの解説

このプロジェクトの主な構成要素は、LM75A温度センサーとLCD1602ディスプレイです。LM75Aは正確な温度測定を提供するI2C温度センサーで、SDA(データ線)とSCL(クロック線)のわずか2本の配線でArduinoと通信し、プロジェクトへの統合が容易です。

LCD1602は16×2の文字表示モジュールで、一度に最大32文字を表示できます。I2Cインターフェースを使用することで、追加の配線はわずか2本で制御でき、配線作業が大幅に簡素化されます。LCDのバックライト機能は、暗所での視認性も向上させます。

データシートの詳細

製造業者テキサス・インスツルメンツ
部品番号LM75A
ロジック/IO電圧2.7V~5.5V
電源電圧2.7 V から 5.5 V
出力電流(チャンネルあたり)該当なし
ピーク電流(チャンネルあたり)該当なし
PWM周波数に関するガイダンス該当なし
入力論理の閾値0.3×Vcc(低)、0.7×Vcc(高)
電圧降下 / Rドレイン・ソース(オン)/ 彩度該当なし
熱限界動作温度:-55°C〜+125°C
パッケージSOT-23
備考/バリエーション複数のI2Cアドレスで利用可能

  • 適切な電源(2.7 V〜5.5 V)を確保してください。
  • 必要に応じてSDAおよびSCLラインにプルアップ抵抗を使用してください。
  • 複数のデバイスのI2Cアドレス設定を確認してください。
  • 干渉を最小限に抑えるため、配線は短くしてください。
  • 監視温度範囲:-55°C~+125°C。
  • 温度の読み取りをデバッグするにはシリアルモニタを使用してください。
  • コード内のエラー状態を効果的に処理する。
  • ディスプレイの電源要件には注意してください。

配線手順

Arduino_wiring_LM75A_LCD_bb

LM75A温度センサーとLCD1602を配線するには、まず電源を接続します。LM75AとLCD1602の両方のVCCピンをArduinoの5Vピンに接続します。次に、両モジュールのグラウンド(GND)ピンをArduinoのGNDピンに接続します。

次に、I2C通信ラインを接続します。LM75AのSDAピンはArduinoのA4ピンに、SCLピンはA5ピンに接続してください。これによりセンサーとArduinoの間でI2C通信が行えます。通信エラーを防ぐため、接続が確実であることを確認してください。

コード例と解説

コードでは、まずLM75AセンサーとLCD1602ディスプレイ用の必要なライブラリをインクルードします。以下の抜粋はLM75Aセンサーのインスタンスを作成する方法を示しています:

LM75A lm75a_sensor(false, false, false);

この行でLM75Aセンサーオブジェクトを初期化します。ブール値のパラメータはLM75AのA0、A1、A2ピンに対応しており、必要に応じて異なるI2Cアドレスを割り当てられます。

次に、シリアルモニターを設定し、LCDディスプレイを初期化します:

void setup(void) {
  Serial.begin(9600);
  lcd.begin();  
  lcd.backlight();
  lcd.print("Robojax LM75A");
}

ここでは、シリアル通信を9600ボーで開始し、LCDディスプレイを初期化します。バックライトが点灯し、初期メッセージが画面に表示されます。

メインループでは、温度を継続的に読み取り、それを表示します:

float temperature_in_degrees = lm75a_sensor.getTemperatureInDegrees();
if (temperature_in_degrees == INVALID_LM75A_TEMPERATURE) {
  Serial.println("Error while getting temperature");
}

このセクションではセンサーから温度を取得します。読み取りが無効な場合、エラーメッセージがシリアルモニタに送信されます。そうでなければ、温度を処理してLCDに表示できます。

デモ/期待できること

配線とコードの書き込みが完了すると、LCD1602ディスプレイに温度が表示され、摂氏と華氏が交互に切り替わります。LM75Aセンサーが正常に動作していれば、表示される温度は1秒ごとに更新されます。極性の逆接続や配線ミスなど問題がある場合は、配線を確認し、正しいピンが使われていることを確認してください(ビデオの00:00参照)。

画像

LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LM75a-1
LM75a-1
LM75a-3
LM75a-3
LM75a-12
LM75a-12
Arduino_wiring_LM75A_LCD_bb
Arduino_wiring_LM75A_LCD_bb
129-LM75A temperature sensor with LCD1602 I2C
言語: C++
/*
 * \brief Show temperature in degrees Celsius and Fahrenheit every second
 *
 * \author Quentin Comte-Gaz <quentin@comte-gaz.com>
 * \date 8 July 2016
 * \license MIT License (contact me if too restrictive)
 * \copyright Copyright (c) 2016 Quentin Comte-Gaz
 * \version 1.0
 * 
 * Modified by Ahmad Shamshiri on July 12, 2018 at 22:40 for Robojax.com
 * in Ajax, Ontario, Canada
 * Watch video instructions for this code: https://youtu.be/hVo_msVMlaI
For this sketch, you need to connect:
VCC to 3.3V or 5V and GND to GND of the Arduino
SDA to A4 and SCL to A5

 */

#include <LM75A.h>

// Create I2C LM75A instance
LM75A lm75a_sensor(false,  //A0 LM75A pin state
                   false,  //A1 LM75A pin state
                   false); //A2 LM75A pin state
// Equivalent to "LM75A lm75a_sensor;"


// start of settings for LCD1602 with I2C
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
// end of settings for LCD1602 with I2C

void setup(void)
{
  Serial.begin(9600);
  Serial.println("Robojax LM75A Test");
  // initialize the LCD
  lcd.begin();  
  lcd.backlight();
  lcd.print("Robojax LM75A");
  lcd.setCursor(0,1);
  lcd.print("Demo"); 
  delay(2000); 
}

void loop()
{
   lcd.clear();// clear previous values from screen
  // Robojax.com LM75A Test
  float temperature_in_degrees = lm75a_sensor.getTemperatureInDegrees();

  if (temperature_in_degrees == INVALID_LM75A_TEMPERATURE) {
    Serial.println("Error while getting temperature");
  } else {
    Serial.print("Temp: ");
    Serial.print(temperature_in_degrees);
    Serial.print(" C (");
    float tmpF = LM75A::degreesToFahrenheit(temperature_in_degrees);
    Serial.print(tmpF);
    Serial.println(" F)");
  lcdDisplay(
             // to print Celsius:
             0, // character 0 
             0, // line 0
             "Celsius: ", 

             // to print Celsius
             11, // character 10
             0, // line 0
             temperature_in_degrees 
             );  

  lcdDisplay(
             // to print Fahrenheit:
             0, // character 0 
             1, // line 1
             "Fahrenheit: ", 

             // to print Fahrenheit
             11, // character 9
             1, // line 0
             tmpF   
             );                 
  }

  delay(1000);
}


/*
 * lcdDisplay(int tc, int tr, String title, int vc, int vr, float value)
 * displays value and title on LCD1602
 * How to use:
 * If you want to display: "Voltage: 13.56mV" starting from the first character
 * on the second row.
 * use:
 * lcdDisplay(0, 1, "Voltage: ", 13.56)
 *   
 * tc  is the character number  (0)
 * tr is the row number in the LCD (1)
 * title is the text ("Voltage:")
 * vc is the character number for the value
 * vr is the row number for the value
 * value is the value (13.56)
 */
void lcdDisplay(int tc, int tr, String title, int vc, int vr, float value)
{
   // Robojax.com LCD1602 for LM75A Demo
   lcd.setCursor (tc,tr); //
   lcd.print(title);
   
   lcd.setCursor (vc,vr); //
   lcd.print(value);
 
}

必要かもしれないもの

リソースと参考文献

ファイル📁

フリッツィングファイル

他のファイル