8.LCDモジュールを使う (2024.2.6-2024.2.14)

RasPiとArduinoを連携して使う一環として、Arduino側の状態を確認しやすいようArduinoにLCDを付加します。ArduinoとはI2C通信でやりとりするので、以前使ったADコンバーターの延長と考えれば良いでしょう。LCDは良く使われる1602と呼ばれる16桁、2行表示のモジュールを使います。市販のLCDモジュールはパラレルでも使えますが、より簡単に扱えるようにI2Cモジュールが付いたタイプを使用します。今回使用する製品もその一つで、I2Cモジュールを組み込んだ新しいタイプです。amazonで2個セットが1480円(税込)でした。


1602 LCDモジュール

接続は下図の通りです。このLCDの電源は5Vを使用するため、Arduinoにそのまま接続して使えます。I2Cレベルも5Vなので、RasPiで使ったようにレベル変換は必要ありません。接続は電源(5V)、GND、SDA、SCLの4本だけで済みます。


LCD接続図

まずは簡単な表示テストを行います。特定の文字列を各行に表示するのが次のサンプルです。LiquidCrystal_I2C.hが必要なので、あらかじめライブラリにインストールしておきます。これをインクルードすれば、LCDに簡単に文字表示ができます。プログラム内ではあらかじめLCDをセットアップし、後は行を選択して文字列を書き込むだけの簡単な操作で済みます。バックライトの操作を確認するため、文字を表示して5秒後にバックライトを消灯してみました。色々文字列を変更して表示を試して見ましょう。
●LCD表示テスト

文字表示が確認できたところで、次はアナログ入力の電圧値を読み取ってLCDに表示してみます。Arduinoには電圧を入力すると値に応じてデジタル値に変換する機能がある(AD変換)ので、ボリューム(可変抵抗器)を使って任意の電圧を入力してみます。結果はLCDの2行を使って、上段にはデジタル値(0~1023)、下段には電圧値(0.00~5.00V)を表示します。アナログ入力端子はA0からA5までありますが、今回はA0端子を使います。ボリュームの両端のピンはそれぞれ5VとGNDに、中央のピンはArduinoのA0に接続します。Arduinoは電源端子が少ないため、図ではブレッドボードを追加して分岐しました。


接続図(ボリュームを追加)

ボリュームを左右に回せば、LCDに表示されるデジタル値と電圧値が変化することが分かるでしょう。
●アナログ入力電圧表示テスト

これを応用すれば、Arduinoがセンサー等から得た値をLCDに表示することができます。手元にDHT11と呼ばれる温度/湿度センサーモジュールがあるので、これを使ってデータを取得してLCDに表示してみましょう。DHT11はRasPiでも実験に使い、オリジナルのSAIBAI-TECやGARDEM-TECで採用しました。その際にライブラリを利用しましたが、Arduinoにもライブラリが用意されています。ライブラリを使えば比較的簡単にプログラミングできるので、試しに今回はそれを使ってスケッチを作成します。DHT11を使うには「DHT sensor library」が必要なので、Arduino IDEから[スケッチ]→[ライブラリをインクルード]→[ライブラリを管理]へと進みます。そして「dht」で検索すると候補の中に出てきますから、それをインストールします。他に関連するライブラリがあれば選択肢が出てくるため、念のため全てインストールしておきます。

DHT11センサーモジュールとArduinoは次のように結線します。DHT11は電源が5VなのでArduinoからそのまま供給します。データピンはモジュール内部にて10キロオームでプルアップされているため、そのままArduinoのデジタルピン(今回はD7を使用)に接続できます。モジュールに端子名が刻印されいて、左から+(5V)、out(D7)、-(GND)の3本を結線します。なお、図では簡略化してLCDが入っていませんが、上記と同様に結線しておきます。


接続図(LCDはボリューム使用時の結線を流用)

DHT11で得られた温度/湿度データをLCDに表示します。方法は上記のAD変換と同様で、一定時間おきにセンサーの値をLCDに表示するだけです。DHT11はデータ取得に時間がかかるようで、読み出す度にディレイで2秒間の時間待ちを入れています。
●LCD表示テスト(DHT11センサーデータ)

LCDに文字を表示する場合、温度を表すCの前の小さい○が表示できないため、LCD内に登録されている文字コードを調べて、直接コード番号を書き込みます。この場合の文字コードは0xdfで、少し表示部のプログラムがややこしくなっていますが、単に順番に文字を出力しているに過ぎません。データは少数以下1桁までしか有効では無いので、数値を丸めています。

Arduinoに使えるセンサーは多種多様に存在するので、色々なものを試してみると良いと思います。本項の締めくくりとして、得られたデータをI2Cを使って出力するセンサーに着目します。手元にあったBH1750FVI(照度センサー)もその一つで、広く使われているセンサーです。RasPiコーナーでも何度か使用しました。この照度センサーを使って環境光を測定し、LCDに値を表示してみましょう。マスターであるArduinoからは、LCD同様にスレーブとして扱います。I2Cは最大112個まで接続(マスターを除くとスレーブ111個まで)できるため、他にも多くのI2C機器を接続して同時に使うことができます。
●LCD表示テスト-2(BH1750FVIセンサーデータ)

このスケッチにはセンサーデータをシリアル送信するコードが含まれています。丁度RasPiとの連携を模索しているところだったので、USBで接続したRasPiに照度データを送り続けるようにしています。「3.Raspberry Piの実践」コーナーの「53.Arduinoとの連携」で色々と実験していますので参考にして下さい。