「AE-AQM1602A」の小型版「AE-AQM0802」が有ったので試しに使ってみました!
1. LCDとは
液晶組成物自体は発光しませんが光を変調する性質を持っています。この性質使い光の透過量を調整する事で表示が行われます。
1.1 AE-AQM0802とは
8文字×2行の計32文字を表示する事が出来る小型液晶モジュールです。
秋月電子通商さんの2.54mmピッチ変換基板もセットになっています。
参考に「AE-AQM0802」の仕様を表1に、外観及び寸法を図1に、KIT変換基板回路を図2に、ピン端子の内訳及びArduinoUNOとの接続を表2に示します。
2. 組み立て
AE-AQM0802(KIT)に付属の2.54mmピッチ変換基板を図3の通りはんだ付けしてみました!
裏側のはんだ付け間隔が1.27mm(図1参照)しかないのでハンダが隣とくっ付かない様に注意が必要です。
図3:付属の基盤をLCDに半田付け
3. 実験!
AE-AQM0802は8文字×2行の計16文字表示出来ます。
今回の実験では乱数を1秒毎に発生しLCD上に表示してみました。
3.1 接続
図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 プログラム
//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二行目に変数を出力する
#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二行目に変数を出力する
図6:ArduinoIDE「AE-AQM0802」表示プログラム
3.3 実験!