検索コード

レッスン20/31:LCD1602に電圧を表示する

レッスン20/31:LCD1602に電圧を表示する

このプロジェクトでは、ArduinoとI2Cインターフェースを備えたLCD1602ディスプレイを使用してデジタル電圧計を構築する方法を紹介します。ポテンショメータからアナログ電圧を読み取り、画面に表示することで、アナログ-デジタル変換、I2C通信、LCD制御の基本的なスキルを学ぶことができます。 

LCD_sunFounder

このプロジェクトは、多くの実用的なアプリケーションへの足がかりとなる優れたステップです。以下に、発展させることができるアイデアをいくつか示します。

  • プロジェクト用のポータブルバッテリー電圧モニターを構築する。
  • 視覚的な電圧表示付きのシンプルな電源を作成する。
  • ソーラーパネルやその他の可変電圧源の出力を監視する。
  • 光依存抵抗器(LDR)などの任意のアナログセンサーの値を、読みやすい数値として表示する。

このガイドの最後には、コンポーネントの接続方法、必要なライブラリの設定方法、独自の電圧表示を作成するためのコードの書き方について明確に理解できるようになります。

potentiometer

ハードウェアコンポーネント

このプロジェクトを構築するには、以下のコンポーネントが必要です。このコースは、これらの部品をすべて含むSunFounder 3-in-1 Arduinoキットに基づいています。

  • Arduinoボード(例:Uno)
  • I2Cモジュール付きLCD1602ディスプレイ
  • ポテンショメータ(10kΩ推奨)
  • ジャンパーワイヤー
  • ブレッドボード

LCD1602とI2Cモジュールの理解

LCD1602は、16列2行の一般的な英数字ディスプレイです。標準的なパラレルLCDでは、制御に多くのデジタルピンが必要です。しかし、このディスプレイには専用のI2Cモジュールが背面に取り付けられています(ビデオの01:30)。このモジュールにより配線が大幅に簡素化され、VCC、GND、SDA、SCLの4本のワイヤーだけの接続に削減されます。これは、I2Cモジュールがブリッジとして機能し、単純なI2Cシリアル信号をLCDが必要とするパラレル信号に変換するためです。

このプロジェクトではI2Cインターフェースを使用します。これは、Arduinoがわずか2本のワイヤーで複数のデバイスと通信できるようにする通信プロトコルです。これは、多くの種類のセンサーやディスプレイを接続するための基本的なスキルです。

配線ガイド

LCD1602_pot_wiring

LCDとポテンショメータをArduinoに接続するのは簡単です。I2Cモジュールには電源と2本の通信ラインが必要です。ポテンショメータは可変電圧分圧器として機能し、ワイパーピンの電圧を調整できます。

詳細な配線設定は次のとおりです。

  • LCD I2CモジュールからArduinoへ:
    • GND をArduinoの GND へ(ビデオの05:38)。
    • VCC をArduinoの 5V へ(ビデオの05:47)。
    • SDA をArduinoの A4 へ(ビデオの05:47)。
    • SCL をArduinoの A5 へ(ビデオの05:57)。
  • ポテンショメータからArduinoへ:
    • 左ピン をArduinoの 5V へ(ビデオの33:39)。
    • 中央ピン(ワイパー) をArduinoの A0 へ(ビデオの33:43)。
    • 右ピン をArduinoの GND へ(ビデオの33:43)。

必要なライブラリのインストール

このプロジェクトでは、I2C経由でLCDを制御するために外部ライブラリが必要です。ビデオで使用されているライブラリは「Arduino Liquid Crystal I2C」ライブラリです。RobojaxリソースページのリンクまたはGitHubからダウンロードできます(ビデオの06:16)。

インストールするには、ライブラリをZIPファイルとしてダウンロードします。次に、Arduino IDEで Sketch > Include Library > Add .ZIP Library... に移動し、ダウンロードしたファイルを選択します(ビデオの06:41)。

LCDのI2Cアドレスを見つける

メインコードをアップロードする前に、特定のLCDモジュールのI2Cアドレスを確認することが重要です。このアドレスは製造元によって異なる場合があります。ビデオでは、I2Cスキャナーを使用してそれを見つける方法を説明しています(ビデオの08:11)。

このスキャナーは、File > Examples > Wire > i2c_scanner に移動して見つけることができます。LCDを接続した状態でこのコードをArduinoにアップロードし、シリアルモニターを開きます。アドレスが表示されます。多くの場合、0x27 または 0x3F です。このアドレスをメインコードで使用する必要があります。

コードの説明

このプロジェクトのコードは、アナログ値を読み取り、表示用にフォーマットすることに焦点を当てています。主要なユーザー設定可能な部分を詳しく見ていきましょう。

1. ライブラリのインクルードとLCDオブジェクト

このセクションでは、必要なライブラリをインクルードし、LCD用のオブジェクトを作成します。ここで最も重要な部分はI2Cアドレスです。これは、前の手順で見つけたものに一致するように変更する必要があります。

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// 16または20文字、2または4行のディスプレイ用にLCDアドレスを0x27に設定
LiquidCrystal_I2C lcd(0x27, 16, 2);
  • #include <Wire.h>: このライブラリはArduinoに組み込まれており、I2C通信に必要です。
  • #include <LiquidCrystal_I2C.h>: これには、先ほどインストールしたライブラリが含まれており、LCDを制御するための関数が提供されます。
  • LiquidCrystal_I2C lcd(0x27, 16, 2);: この行は、lcdという名前のオブジェクトを作成します。最初のパラメータである0x27は、先ほど見つけたI2Cアドレスです。2番目と3番目のパラメータは、LCDの寸法(16列、2行)を定義します。アドレスが異なる場合は、0x27を特定のアドレスに変更する必要があります。

2. セットアップ関数とループ関数

setup()関数はLCDを初期化し、バックライトをオンにします。loop()関数には、電圧を読み取って表示するための主要なロジックが含まれています。

void setup()
{
  lcd.begin();
  lcd.backlight();
}

void loop()
{
  int potValue = analogRead(A0);
  float voltage = potValue * (5.0 / 1023.0);
  // ... (LCD表示コード)
  delay(1000);
}
  • lcd.begin(): これによりLCDインターフェースが初期化され、使用準備が整います。
  • lcd.backlight(): これによりディスプレイのバックライトがオンになり、テキストが見えるようになります。
  • int potValue = analogRead(A0);: これは、ポテンショメータのワイパーに接続されたピンA0から生のアナログ値を読み取ります。値は0から1023の整数で、0Vから5Vの電圧を表します。
  • float voltage = potValue * (5.0 / 1023.0);: これは重要な変換ステップです。生のADC値を実際の電圧読み取り値に変換します。この式は、生の値に基準電圧(5.0V)と最大ADC値(1023)の比率を掛けます。ADCは電圧を直接読み取るのではなく、比例した数値を読み取るため、これが必要です。

3. 電圧の表示

コードは画面をクリアし、2行目の特定の位置に電圧値を表示します。

  lcd.clear();
  lcd.print("LCD1602 Tutorial");
  lcd.setCursor (0,1); // 2行目の先頭に移動
  lcd.print("Voltage:");
  lcd.setCursor (9,1); // 2行目の9文字目に設定
  lcd.print(voltage); 
  lcd.setCursor (13,1); // 2行目の14文字目に設定
  lcd.print("V"); 
  • lcd.clear(): 画面から以前のテキストをすべて消去します。
  • lcd.print("LCD1602 Tutorial"): 1行目にタイトルを表示します。
  • lcd.setCursor (0,1): カーソルを2行目の先頭に設定します。最初のパラメータは列(0〜15)、2番目は行(0は1行目、1は2行目)です。
  • lcd.print(voltage): 計算された電圧値を表示します。float変数は、デフォルトで小数点以下2桁で表示されます。
  • lcd.setCursor (13,1): カーソルを2行目の13列に移動し、数字の直後に「V」の文字を配置します。

ライブプロジェクトデモ

コードをアップロードすると、LCDの1行目に「LCD1602 Tutorial」と表示されます。2行目には「Voltage:」の後に現在の電圧読み取り値が表示されます。ポテンショメータのつまみを回すと、表示される電圧がリアルタイムで変化し、約0.00Vから5.00Vの範囲になります(ビデオの35:25で確認できます)。

このプロジェクトは、生のアナログ信号を取得して、明確で人間が読みやすい値に変換する方法の完璧な例です。ここで学んだスキルは、将来使用する他のアナログセンサーにも直接適用できます。

ビデオでは、テキストの表示、スクロール、LCDでのカスタム文字の作成など、他の関連トピックもカバーしています。

このビデオからの関連プロジェクト

チャプター

  • [00:00] LCD1602の紹介とプロジェクト概要
  • [01:30] LCD1602のハードウェアとI2Cモジュールの説明
  • [04:06] ジャンパーでI2Cアドレスを設定
  • [05:28] LCD1602の配線図
  • [07:31] 基本的なテキスト表示のコード説明
  • [11:10] 点滅カーソルの例のデモ
  • [13:46] カスタム文字の作成と使用
  • [18:51] シリアル表示の例の使用
  • [23:16] LCDでのテキストのスクロール
  • [26:13] DHT11からの温度と湿度の表示
  • [33:00] ポテンショメータからの電圧の読み取りと表示
  • [35:56] 超音波センサーからの距離の表示

画像

potentiometer
potentiometer
LCD1602_pot_wiring
LCD1602_pot_wiring
LCD_sunFounder
LCD_sunFounder
912-Lesson 20/31: Displaying voltage on LCD1602
言語: C++
/*
Lesson 20/31: Displaying voltage on LCD1602
Get this code and watch video Download and resource page https://robojax.com/RJT603
YouTube video https://www.youtube.com/watch?v=NXAswOc_2zg
 
  
 * 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 download 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/>.
 */
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 16 or 20 chars and 2 or 4 lines display
LiquidCrystal_I2C lcd(0x27, 16, 2);

int count =700;
void setup()
{
  // Robojax code for LCD with I2C
	// initialize the LCD, 
	lcd.begin();
 
	// Turn on the blacklight and print a message.
	lcd.backlight();
  // Robojax code for LCD with I2C


}

void loop()
{
  int potValue = analogRead(A0);
  float voltage = potValue * (5.0 / 1023.0);
  //start of loop Robojax code for LCD with I2C
  lcd.clear();
  lcd.print("LCD1602 Tutorial");
  lcd.setCursor (0,1); // go to start of 2nd line
  lcd.print("Voltage:");

  lcd.setCursor (9,1); // set to line 2 char 9
  lcd.print(voltage); 

  lcd.setCursor (13,1); // set to line 2 char 14
  lcd.print("V"); 

  //lcd.setCursor (3,3); // set to line 4 character 4
  //lcd.print("Text in line 4"); 
        
  delay(1000);
  count++;
 //end of loopcode Robojax code for LCD with I2C
}

リソースと参考文献

ファイル📁

Arduinoライブラリ(zip)

ユーザーマニュアル