温度を測る その2 キャラクタ表示LCDへ温度を表示①

温度などを表示するLCDには1行16文字は欲しい

 前回、ArduinoにBlinkというLEDを点滅させるスケッチを書き込んで実行しました。開発ですから、USBケーブルでPCとArduino UNOをつないでいました。Arduino UNOはUSBの配給する5Vで動作しています。

 このUSBへモバイル・バッテリの5Vをつないでみましょう。LEDが点滅します。Arduino UNOのマイコンへ書き込んだスケッチは、プログラムの実行するフラッシュ・メモリに書き込まれていたので、電源が入ると動き出したのです。

 つまり、一度開発したスケッチは、電源さえあれば動かせます。温度を測定した結果は、PCのシリアル・モニタへ表示しました。PCをつながないのであれば、温度をどこかに表示できるようにします。一番利用の多いのが「キャラクタ表示LCD」です。温度だけでなく、将来表示したいものが多くなると、1行16文字、2行表示が便利です。

インターフェースには二通りあって

 Arduinoの標準ライブラリにキャラクタ表示LCDがありますが、これは使いません。古い入門書はみなこのライブラリを使うのですが、最大の欠点が配線するケーブル数が大変多いことです。

  ArduinoにLCDキャラクタ・ディスプレイ・モジュールを接続する(1)

 配線はとても大変なので、間違いも起こりやすいです。さらに、ディジタル・ポートの空きがほとんどなくなります。パラレル接続と呼ばれます。

 最近は、I2C接続のキャラクタ表示LCDが増えてきました。複数のライブラリが利用できのですが、海外で入手しやすいモデルと国内では、言い換えると、秋月電子通商で購入できるモデルが異なるのです。そのうえ、動作電圧が3.3Vと表記されていたので、Arduino UNOでは選択肢があまりありませんでした。

 早くから販売されていたACM1602NIは、パラレル接続LCDにPICマイコンでI2Cインターフェースを追加(筆者推定)したモデルで、5Vで動きました。

 AQM1602AQM0802はI2Cインターフェースをもち、従来のパラレル接続時代と同等の制御を可能としたコントローラを搭載していましたが、動作電圧は3.3Vでした。しかし、絶対最大規格では6Vなので、Arduino UNOの5Vで利用できます。

 AQM1602は1行16文字、2行表示ですが、形状をコンパクトにしたAQM1602Y-RN-GBW、AQM1602Y-NLW-FBW、AQM1602Y-NLW-BBWが2017年秋口から販売されています。

一番手間のかからないAE-AQM1602A(KIT)

 はんだ付けは必要ですが、AE-AQM1602A(KIT)

 I2C接続小型キャラクタLCDモジュール(16x2行・3.3V/5V)ピッチ変換キット

を使うと、配線の手間が一番少なくて済みます。

 AQM1602Y-RN-GBW、AQM1602Y-NLW-FBW、AQM1602Y-NLW-BBWは、コンデンサを二つ追加しなければなりませんが、ブレッドボードを使った配線では、手間は少ないです。

 はんだ付けをしなくて済むモデルは、1行8文字のモデルで2品種あります。

  I2C接続小型LCDモジュール(8x2行)ピッチ変換モジュール(完成品)
  I2C接続の小型LCD搭載ボード(5V版)

 表示文字数が少ないだけで、温度の表示には十分使えます。

I2Cバスとは

 スマホには加速度センサを含めたくさんのセンサが搭載されていますが、ほとんどはI2Cバスにつながっています(推測)。2本の信号線だけで、数十個のデバイスをつないでデータのやり取りができる優れたインターフェース規格です。

 もとはフィリップスの作った規格で、今はNXPから仕様書が出ています。PCのPCIeバスの5,6番の2ピンに用意されているsmbusは、ほぼI2Cバスと同じ規格です。

 クロックのSCLとデータのSDAによって、データの転送を行います。とても利用価値が高いので、Arduino UNOは現行バージョンのR3からピンを独立させました。とはいえ、SDAがA4ピン、SCLがA5ピンと兼用しているので、同時には利用できません。

 I2Cバスのプロトコル(通信手順)は単純そうでじつはとてもたくさんのパターンがあり、デバイスごとに対応がまちまちです。>詳細

  • Arduino UNOがマスタ、センサがスレーブという関係
  • Arduino UNOがスレーブ・アドレス+Writeをバスに出すと、アドレスの一致するセンサはACKで返事を出す。

というところから通信が始まります。したがって、I2Cバスにつながっているセンサは、アドレスがすべて異なる必要があります。AQMシリーズは0x3eです。

 ArduinoではWireというライブラリがあり、多くのI2Cデバイスと通信できます。

AQMシリーズ対応のライブラリを利用する

  I2C接続AQMシリーズのキャラクタ表示LCDをArduinoで使う

という連載をしています。ここでは、Arduino IDEに登録されているFaBo_213_LCD_mini_AQM0802Aライブラリを利用して、ライブラリの中身を強引に修正しながら使っています。

  I2CインターフェースLCDモジュール用のライブラリを作る

 こちらのライブラリは本Webオリジナルで、AQMシリーズにも対応しています。LCDの操作コマンドはパラレル接続の純正のLCDライブラリに準拠しています。

STEP1 ライブラリの導入手順

 I2CインターフェースLCDモジュール用のライブラリを作る(7)ライブラリ完成

から i2clcd.zip をダウンロードします。

  Libraries -> Customのタブをクリックします。

  Importボタンをクリックして、ライブラリをアップロードします。

  PCのダウンロード・フォルダに入っているi2clcd.zipを指定します。

 インポートできました。

STEP2 i2clcdをプログラムの中で記述

 ライブラリを利用するときは、include文でライブラリを指定します。スレーブ・アドレス=0x3e、電圧=5Vを指定してlcdというインスタンスでアクセスします。
 setup()内で初期化します。
 loop()内では、LCDの画面をクリア、i2cprint()で文字を表示します。この関数は文字を表示するので、温度という数値はString()関数で文字に変換します。

#include <i2clcd.h>
i2clcd lcd(0x3e, 5);

void setup() {
Serial.begin(9600);
lcd.init_lcd();
}

void loop() {
lcd.lcdclear();
int sensorValue = analogRead(A0);
float voltage = sensorValue * (5.09 / 1023.0);
Serial.println( voltage*100);
lcd.i2cprint( "Temp="+String(voltage*100) +"'C" );
delay(1000);
}

 AdruinoのUSBケーブルをいったん抜いて、LCDをつなぎます。今回も空中配線です。

 「」をクリックしてプログラムをArduinoのマイコンに書き込みます。実行画面です。A0端子には何もつないでいないので、でたらめな電圧が読み取られています。

 LCD表示の確認ができました。

(※1)ここでは電源電圧が5VのArduino UNOを使う前提です。3.3Vで利用できるArduinoもあります。電源電圧が5Vのとき、ピンヘッダのI/Oは5Vが扱えるものをつなぎます。

(※2)ここではLCD(液晶ディスプレイ)を使っていますが、OLED(有機ELディスプレイ)も、同様のプログラムで動く場合があります。ただし、消費電流は多めです。

(※3)AQM1602やAQM0802は複数の製品が販売されています。ピンピッチが狭いので、2.54mmピッチに変換するプリント基板付きのモデルが使いやすいです。このプリント基板には、プルアップ抵抗や必要なコンデンサが実装されています。

(※4)プログラム・リストは、表示の関係でTabキーが無視されるので、スペースに代えてあります。また、リスト中を2回クリックすると全選択になるので、CTRL-Cでコピーし、テキスト・エディタにCTRL-Vで貼り付けて利用してください。エディタに持っていくと、スペースやリターン・コードなどが化けていることがあるので、一度消して、Arduino IDEのテキスト・エディタで修正してください。

前へ

温度を測る その1 アナログ・センサLM35DZを利用

次へ

温度を測る その3 キャラクタ表示LCDへ温度を表示②