NOBのArduino日記!

NOBのArduino日記!

趣味は車・バイク・自転車・ラジコン・電子工作です。

LCDの使い方(AE-AQM0802)

イメージ 1
I2C接続小型キャラクLCDモジュール(8×2行・3.3V/5V)ピッチ変換キット

 サーミスタを接続するArduinoUNOシールドに、7セグメントLEDを付けて温度表示しようと思ってましたが、想像以上に7セグLEDのダイナミック点灯の負荷が高く、測定と表示の掛け持ちが厳しそうです
 既に使ったことのあるモノクロディスプレイ(AE-AQM1602A)なら測定も表示も余裕でできるので試しにシールドに載せた所デカすぎてハミ出ます
 「AE-AQM1602A」の小型版「AE-AQM0802」が有ったので試しに使ってみました

1. LCDとは

 LCD(英:liquid crystal display)とは、液晶組成物を利用した薄型平面の視覚表示装置(液晶ディスプレイ)です。
 液晶組成物自体は発光しませんが光を変調する性質を持っています。この性質使い光の透過量を調整する事で表示が行われます。

1.1 AE-AQM0802とは
 8文字×2行の計32文字を表示する事が出来る小型液晶モジュールです。
 秋月電子通商さんの2.54mmピッチ変換基板もセットになっています。
 この基盤にはLCDの外部に必要な抵抗コンデンサー等も一体になっている事から、そのままユニバーサル基盤ブレッドボードに挿して簡単に使える様になります!
 参考に「AE-AQM0802」の仕様を表1に、外観及び寸法を図1に、KIT変換基板回路を図2に、ピン端子の内訳及びArduinoUNOとの接続を表2に示します。

表1:LCDAE-AQM0802」の仕様一覧
項目内容
電源2.7~5.5V(1mA@3.3V)
低消費電流1mA(3.3V時,プルアップ抵抗消費除く)
表示文字数8文字×2行
本体サイズ30.0×19.5mm
画面サイズ27.0×10.5mm
備考画面コントラストはコマンドで設定可能
「AE-AQM0802」のコントロールIC「ST7032」SDSより引用させて頂きました。
秋月電子さんの紹介では電源電圧3.3Vとなっていますが、ICは5.5V迄対応

イメージ 2
図1:LCDAE-AQM0802」の外観及び寸法

イメージ 3
図2:KIT変換基板回路

表2:「LCD⇔ArduinoUNO」ピンへの割り当て一覧
LCD変換基板 端子 No.LCD変換基板ArduinoUNO
1VDD5V
2RESET5V(LOWでリセット)
3SCLA5(SCL)
4SDAA4(SDA)
5GNDGND

2. 組み立て

 AE-AQM0802(KIT)に付属の2.54mmピッチ変換基板を図3の通りはんだ付けしてみました!
 裏側のはんだ付け間隔が1.27mm(図1参照)しかないのでハンダが隣とくっ付かない様に注意が必要です。
イメージ 4
図3:付属の基盤をLCDに半田付け

3. 実験!

 AE-AQM0802は8文字×2行の計16文字表示出来ます。
 今回の実験では乱数を1秒毎に発生しLCD上に表示してみました。

3.1 接続
 Arduino UNOを使用してLCD(AE-AQM0802)に文字を表示します。
 ピッチ変換基盤のお陰で接続は僅か5本(1本リセット)と超お手軽です!
 接続はI2C※1通信を使います。Arduino UNOをマスター※2LCDモジュール(AE-AQM0802)をスレーブ※2として表2の内訳で接続します。
 ブレッドボードを使用した上記内容の回路図をFritzingを使って図4の様に書いてみました。 また図4の通り実際に繋げた状態を図5に示します。
イメージ 5
図4:ブレッドボード回路図

イメージ 6
図5:実際に作ったもの

以下補足です

※1:I2C
 I2C(Inter-Integrated Circuit、アイ・スクエアド・シー)はフィリップス社で開発されたシリアルバスです。

※2:マスター・スレーブ・SDA・SCL
 I2Cインターフェースは1対n(1以上)の同期式シリアル通信で、1がマスターでnがスレーブとなっています。※伝送距離は装置内程度と非常に短い。
 I2Cは通信する相手のアドレスをデータとして送りスレーブとの通信(送受信)を確立します、つまりI2Cはマスターからアクションを起こさないとスレーブとは送受信が出来ません。
 送受信に使う配線が1本(SDA)、マスターと同期を取る為に送信するクロック信号が1本(SCL)の計2本と、配線が少なくて済むのがI2C通信による最大のメリットです


3.2 プログラム
 図6プログラムは、ランダムに生成した-100.0~+100.0の値を1秒毎にLCD上段右側に表示して、ついでに「NOB」を上段左側、「Arduino!」を下段に表示するプログラムです!
//NOBのArduino日記!_AE-AQM0802の使い方_(20180828)
#include <Wire.h>//関数読み込み
String LCD_STRING;char s[8];double SET;//変数の宣言

//コマンド書き込み
void writeCommand(byte command){
Wire.beginTransmission(0x3E);
Wire.write(0x00);
Wire.write(command);
Wire.endTransmission();delay(10);}

//データ書き込み
void writeData(byte data){
Wire.beginTransmission(0x3E);
Wire.write(0x40);
Wire.write(data);
Wire.endTransmission();delay(1);}

//LCDの1行目にデータ書き込み
void LCD_DISP_8_1(void){
writeCommand(0x80);//DDRAMアドレスを2行目先頭にセット
for(int i = 0; i < 8; i++){writeData(LCD_STRING[i]);}}

//LCDの2行目にデータ書き込み
void LCD_DISP_8_2(void){
writeCommand(0x40+0x80);//DDRAMアドレスを2行目先頭にセット
for(int i = 0; i < 8; i++){writeData(LCD_STRING[i]);}}

//液晶初期化
void setup() {
Wire.begin();delay(100);
writeCommand(0x38);delay(20);
writeCommand(0x39);delay(20); 
writeCommand(0x14);delay(20);
writeCommand(0x75);delay(20);//3.3V=0x73, 5V=0x7A(コントラスト調整しました)
writeCommand(0x54);delay(20);//3.3V=0x56, 5V=0x54
writeCommand(0x6C);delay(20);
writeCommand(0x38);delay(20);
writeCommand(0x01);delay(20);
writeCommand(0x0C);delay(20);}

//無限ループ
void loop() {
LCD_STRING=String("Nob"+String(dtostrf(random(-1000.0,1000.0)/10.0,5,1,s)));//乱数代入
LCD_DISP_8_1();//LCD一行目に変数を出力する
LCD_STRING = "Arduino!";//「NobArduinoDiary!」代入
LCD_DISP_8_2();delay(1000);}//LCD二行目に変数を出力する
イメージ 1
図6:ArduinoIDE「AE-AQM0802」表示プログラム
 図5の回路で図6プログラムをArduino UNOに書き込み実行した所、図7の様に上段に「Nob〇○○.○」・下段にはArduino!」とLCD文字が表示出来ました!
イメージ 7

4. まとめ

 これで「ArduinoUNO」と「サーミスタ」と「AE-AQM0802」を使った温度測定シールドが作れます!

イメージ 1イメージ 3
励みになりますのでよければクリック下さい(^o^)/