子供と一緒に始める マイコンプログラム Arduino 入門 LCD モジュール編 Lesson 16

Arduino-lesson16-00 学習
スポンサーリンク
「子供と一緒に始める マイコンプログラム Arduino 入門 LCD モジュール編 Lesson 16」

「Arduino」を使ったマイコンプログラミングを子供と一緒に学習するブログ。

少しずつ、子供と一緒に楽しみながら気長にアップしてく予定です。

 

本日はLesson 16 LCD モジュール編です。
※LCD(Liquid Crystal Display)

液晶ディスプレイのことです。

本Lessonでは、液晶ディスプレイをArduinoに接続して文字を表示します。

※画面上に文字や数字などを表示させることからキャラクターディスプレイとも呼ばれます。

 

液晶ディスプレイを使えるようになれば「他の電子機器で取得した値を表示」させるといったことができるようになります。

例えば、温度センサで取得した温度を表示させる。

超音波センサで取得した距離を表示させる。

などなど、電池などでArduinoの電源を確保すればパソコン不要でArduinoに何かをさせてデータを確認できます。

色んな応用ができます、ぜひみなさんも使用してみてください。

 

本Lesson解説で使用しているのはArduino互換品です。

互換品とは言え、Arduinoはオープンソースであり複製して販売するのもライセンス的に問題なし。

そのため互換品の品質も悪くなく、それでいて値段は安いです。

正規品本体の値段程度で豊富な部品が多数ついています。

 

はじめに

本Lessonで使用する液晶ディスプレイは「1602 LCD モジュール」を利用します。

 

1602 LCD」で検索すれば探すことができます。

ちなみに1602には、しっかりと意味があります。

16文字、2行の表示ができるということを示しています。

 

1602 LCDモジュールはHD44780相当のLCDコントローラを内蔵したモジュールとなります。

HD44780のコントローラについて詳しく知りたい方は下記のサイトが参考になります。

キャラクタLCDモジュールの使いかた

詳細を知らなくても、遊ぶことはできます!

 

1602 LCD」はAmazonで購入できます。

確認してみてください。

 

学術的に「液晶ディスプレイ」とは何か?

ここは、Wikipediaにおまかせします。

Wikipedia 液晶ディスプレイ

液晶ディスプレイ(えきしょうディスプレイ、liquid crystal display、LCD)は、液晶組成物を利用する平面状で薄型の視覚表示装置をいう。それ自体発光しない液晶組成物を利用して光を変調することにより表示が行われている。

 

Lesson 16 目標

液晶ディスプレイの「使い方を理解」します。

また、「液晶ディスプレイに文字を表示させることを理解」します。

最後に、本Lessonも、「遊ぶというところが一番大事」なところです。

 

今回は「標準ライブラリ」を使用します。

ArduinoのIDEには標準で「LiquidCrystalライブラリ」が付属しています。

このライブラリを使うことで、いとも簡単に液晶ディスプレイを扱うことができます。

 

ライブラリは本当に便利です。

プログラムの知識が、それほどない方でもライブラリを使うことで簡単に遊ぶことができます。

 

学習の一番大切なことは遊ぶこと!と考えています。

いきなり難しいことに挑戦するのではなくできることから始めて遊ぶ。

 

本Lessonでいえば、まずはライブラリを使って遊んでみる。

それから、いったいどういう仕組み?と疑問に思ったところを学習する。

この繰り返しが、学習を続けられる秘訣かなと考えます。

 

準備

ではLessonの準備に取り掛かりましょう。

今回も部品は多くないので、すぐに実践に移ることができます。

部品は多くないですが配線が多めに必要です。

 

必要なもの

※ポテンショメータはなくても表示させられます。
ない場合は直接、VDDにつないでください。

Jumper wireは今後も頻繁に利用します。

できれば、「オス-メス オス-オス メス –メス」の3種類を揃えておくことをお勧めします。

 

ポテンショメータ(可変抵抗器)に関しえはこちらを確認ください。

 

使用部品説明

1602 LCD モジュールについて説明していきます。

 

すぐに実践して遊びたい方は飛ばしてください。

しくみを知らなくても遊べるところががArduinoの良いところです。

 

液晶モジュールの通信方式には、パラレル通信方式やI2C通信方式があります。

本Lessonで使用する方式は「パラレル通信方式」です。

パラレル通信方式はディスプレイに表示させるための接続配線が多くなります。

Arduino-lesson16-01

 

1602 LCD モジュール仕様

下の写真が、1602 LCD モジュールです。

型番としては1602Aとなります。

私が購入したELEGOO UNO キットには、合わせて梱包されています。

 

表面

Arduino-lesson16-02

 

裏面

Arduino-lesson16-03

 

◆電気的特性(温度 25℃想定)メーカーによって多少異なります。

項目記号仕様単位
LCD動作電圧VDD-VO4.5V
電源電圧VDD-VSS4.7~5.3V
消費電流IDD2~4mA
入力電圧※1VIH12.2~VDDV
VIL10~0.6V
出力電圧※2VOH22.4以上V
VOL20.4以下V

※1 DB0~DB7、E、R/W、RS端子に適用
※2 DB0~DB7端子に適用

 

◆端子構成

No.区分け記号レベル機能
電源
※1
VSS0VGND電源
VDD5V電源電圧
VOコントラスト調整(可変抵抗に接続)
可変抵抗器により入力電圧を調整することで
コントラストを調整します。
制御RSH/Lレジスター選択
R/WH/LRead/Write選択(基本はGND接続)
EH,H→L動作起動信号
データDB0H/LData Bit 0(4bitモードでは使用しない)
DB1H/LData Bit 1(4bitモードでは使用しない)
DB2H/LData Bit 2(4bitモードでは使用しない)
10DB3H/LData Bit 3(4bitモードでは使用しない)
11DB4H/LData Bit 4
12DB5H/LData Bit 5
13DB6H/LData Bit 6
14DB7H/LData Bit 7
15バック
ライト
※2
※3
A5VLED POWER(液晶バックライト)
16KLED POWER(液晶バックライト)

※1 ※2 電源、VO、A、Kの接続を図にしめしておきます。

Arduino-lesson16-04

 

※3 私が使用しているモジュールには100Ωのチップ抵抗がついていました。
電流制限抵抗としてついているものと思います。
4.2V程度以上の電圧がかかればよいようです。

 

1602 LCDモジュールしくみ

◆ブロック図

Arduino-lesson16-05

 

電源端子として、5V電源(VDD)、GND(VSS)、コントラスト調整電店(VO)があります。

使用する「1602 LCD モジュール」はLEDバックライト付きのためアノード端子(A)、カソード端子(K)もあります。

 

また、8ビットのデータバス信号(DB0~DB7)、動作起動信号(E)、読み出し/書き込みの選択信号(R/W)、レジスタ選択信号(RS)があります。

 

LCDコントローラからLCDパネルへコモン信号(COM:16本)、セグメント信号(SEG:40本)が接続されています。

またLCDコントローラからLCDセグメントドライバへ、1本のシリアルデータ信号と3本のタイミング信号が合わせて4本接続されています。

LCDセグメントドライバからLCDパネルへセグメント信号(SEG:40本)が接続されています。

 

これらをArduinoからのコマンドで制御することで文字を表示させることになります。

 

◆タイミングチャート(参考)

下記にタイミングチャートを示します。

下図に示す制御によって液晶モジュールを制御することとなります。

といっても、ライブラリを使用するのでタイミングチャートを意識することはありません。

Arduino-lesson16-06

Arduino-lesson16-07

 

◆文字コード表(参考)

参考に文字コード表も載せておきます。

こちらもライブラリを使用する場合、意識する必要はありません。

Arduino-lesson16-08

 

◆インストラクションによる液晶表示の設定

液晶表示は、インストラクションと呼ばれるデータコードを使用することで制御します。

文字を表示するだけでなく、インストラクションによりカーソルを表示したり、文字を点滅することもできます。

参考に概要を表にしておきます。

こちらに関してもライブラリを使用する場合は意識する必要はありません。

ライブラリに感謝です!!

Arduino-lesson16-09

 

実践 回路作成とコード作成

ではさっそく動かしていきましょう。

最初に回路図を確認してください。

次に、回路図に合わせて部品を接続します。

最後にコードを書いて、ディスプレイに文字を表示しましょう。

 

Arduinoのピン配置を確認したい方は番外編02を参照してください。

 

回路図

回路図がこちら。

部品は「1602 LCD モジュール」と「ポテンショメータ」です。

今回は、4bitモードとして動作させるためDB0~DB3は使用しません。

Arduino-lesson16-10

 

こちらがブレッドボード図。

Arduino-lesson16-11

 

回路図は「fritzing」を利用しています。

「fritzing」の使い方は下記を参照してください。

 

接続

下図に示すように、用意した部品を使用して接続しましょう。

部品は「1602 LCD モジュール」「ポテンショメータ」です。

「ポテンショメータ」がないかたはVOを直接VDDにつないでいただいてもかまいません。

コントラストの調整ができないだけです。

ただし、明るすぎて見えない場合は数kΩ程度の抵抗をつけて調整してください。

Arduino-lesson16-12

 

使用するポートは、デジタル入力ピンの「7,8,9,10,11,12」。

電源の「5V」、「GND」です。

穴に挿入しづらいときは、ラジオペンチなどを使用してください。

 

コードの書き込み

接続が終わったら、USBケーブルを使用してUNOにプログラムを書き込んで行きましょう。

今回は標準ライブラリを利用します。

 

標準ライブラリ設定

LiquidCrystal.h」を下記のいずれかで使えるようにしてください。

このライブラリを使うことで、HD44780とその互換チップセットを搭載したLCDを制御できるようになります。

4bit、8bit両方のモードをサポートしているライブラリです。

 

標準ライブラリのため、基本は初めから実装されているはずです。

ない場合は、下記を実施ください。

IDEの統合環境から
1.Zip形式のライブラリをインクルード
2.ライブラリの管理
どちらでも可能です。

 

1.Zip形式のライブラリをインクルードする場合
以下から「LiquidCrystal.zip」をダウンロード。
ダウンロードサイト
2.ライブラリの管理からインストールする場合。
タイプArduinoを選択して「LiquidCrystal」で検索。
LiquidCrystalをインストール

 

ライブラリの追加方法の詳細に関しては以下を参照ください。

 

コマンド説明

ここでは、標準ライブラリである「LiquidCrystal.h」のコマンドを解説します。

コマンド説明
LiquidCrystal(引数)
引数
rs,rw,enable,
d0,d1,d2,d3,d4,d5,d6,d7
LiquidCrystal型の変数を生成。

rs:LCDのRSピンに接続するArduino側のピン番号
rw:LCDのRWピンに接続するArduino側のピン番号
enable:LCDのenableピンに接続するArduino側のピン番号
d0~d7:LCDのdataピンに接続するArduino側のピン番号

RWピンをGNDに接続すれば引数を省略できます。

begin(cols, rows)LCDの初期化。
ディスプレイの桁数と行数の指定。cols:桁数(横方向の字数)
rows:行数
clear()LCDの表示を消し、カーソルを左上隅に配置。
home()LCDの左上隅にカーソルを配置。
setCursor(col, row)LCDのカーソルの位置を指定。
write(data)文字をLCDに表示。
print(data)テキストをLCDに表示。
cursor()LCDのカーソルを表示する。
カーソルはアンダーラインで、その位置に次の文字が表示される。
noCursor()LCDのカーソルを表示しない。
blink()LCDのカーソルを点滅させる。
noBlink()LCDのカーソルを点滅を停止。
display()noDisplay()で消したディスプレイを元に戻す。
表示されていた文字やカーソルもリストアされる。
noDisplay()ディスプレイを消す。
表示中の文字は保持される。
scrollDisplayLeft()LCDに表示中の文字とカーソルを1文字分左へずらします。
scrollDisplayRight()LCDに表示中の文字とカーソルを1文字分右へずらします。
autoscroll()LCDの自動スクロールを開始。
noAutoscroll()LCDの自動スクロールを停止。
leftToRight()LCDの文字列の表示方向をデフォルトの「左から右」に設定。
rightToLeft()LCDの文字列の表示方向を「右から左」に設定。
createChar(num, data)ユーザ定義の文字を作成。
最大8文字まで登録可能。

 

ライブラリで定義されているコマンドを使用することでLCDモジュールを簡単に制御できます。

部品説明のところで解説したLCDモジュールのしくみを、まったく知らなくてLCDをコントロールすることができます。

ライブラリに感謝です!!!!!!

 

サンプルコード

サンプルコードを下記に示します。

コマンドをいくつか使ったサンプルを4つ記載しました。

参考にしてください。

 

サンプルコード1

まずは、単純に文字を表示するサンプルです。

//1602 LCD サンプルコード1 文字表示
#include <LiquidCrystal.h>

// 変数の生成とPINの割り当て
// rs:7 en:8 d4:9 d5:10 d6:11 d7:12 に対応
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

void setup() {
// LCDの行と列を設定
lcd.begin(16, 2);
// LCDに文字を表示
lcd.print("omoroya (^^)");
// 2行目の表示
lcd.setCursor(0, 1);
lcd.print("Let's enjoy!");
}

void loop() {
}

 

サンプルコード2

カーソルを表示させたり、非表示にさせたりするコマンドを追加したサンプルコードです。

//1602 LCD サンプルコード2 カーソル点滅
#include <LiquidCrystal.h>

// 変数の生成とPINの割り当て
// rs:7 en:8 d4:9 d5:10 d6:11 d7:12 に対応
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

void setup() {
// LCDの行と列を設定
lcd.begin(16, 2);
// LCDに文字を表示
lcd.print("omoroya (^^)");
// 2行目の表示
lcd.setCursor(0, 1);
lcd.print("Let's enjoy!");
}

void loop() {
// カーソルの点滅表示停止:
lcd.noBlink();
delay(3000);
// カーソル点滅表示開始:
lcd.blink();
delay(3000);
}

 

サンプルコード3

アンダーラインカーソルの表示、非表示の制御を加えたサンプルコードです。

//1602 LCD サンプルコード3 カーソル表示、非表示制御
#include <LiquidCrystal.h>

// 変数の生成とPINの割り当て
// rs:7 en:8 d4:9 d5:10 d6:11 d7:12 に対応
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

void setup() {
// LCDの行と列を設定
lcd.begin(16, 2);
// LCDに文字を表示
lcd.print("omoroya (^^)");
// 2行目の表示
lcd.setCursor(0, 1);
lcd.print("Let's enjoy!");
}

void loop() {
// アンダーラインカーソルを表示停止:
lcd.noCursor();
delay(500);
// アンダーラインカーソルを表示開始:
lcd.cursor();
delay(1000);
}

 

サンプルコード4

ディスプレイの点灯、消灯の制御を追加したサンプルコードです。

ディスプレイを消灯してもデータは保持されています。

//1602 LCD サンプルコード4 ディスプレイの点灯、消灯、データは保持
#include <LiquidCrystal.h>

// 変数の生成とPINの割り当て
// rs:7 en:8 d4:9 d5:10 d6:11 d7:12 に対応
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

void setup() {
// LCDの行と列を設定
lcd.begin(16, 2);
// LCDに文字を表示
lcd.print("omoroya (^^)");
// 2行目の表示
lcd.setCursor(0, 1);
lcd.print("Let's enjoy!");
}

void loop() {
// ディスプレイの非表示:
lcd.noDisplay();
delay(2000);
// ディスプレイの表示:
lcd.display();
delay(1000);
}

 

動作確認

では、さっそく動作を確認していきます。

ディスプレイのコントラストはポテンショメータを動かし調整してください。

 

サンプルコード1 動作

文字が表示されました。

Arduino-lesson16-15

 

サンプルコード2 動作

カーソル点滅の表示、非表示が制御されています。

Arduino-lesson16-16

 

サンプルコード3 動作

アンダーラインのカーソルの表示、非表示が制御されています。

Arduino-lesson16-17

 

サンプルコード4 動作

ディスプレイの表示、非表示の制御がされています。

 

ディスプレイの表示。

Arduino-lesson16-18

 

ディスプレイの非表示

Arduino-lesson16-19

上記、表示、非表示の繰り返しです。

 

まとめ

今回は以下の内容について理解してもらいました。

今回も項目3の遊ぶことが一番の目標でした。

1.液晶ディスプレイの「使い方を理解」する。
2.液晶ディスプレイに文字を「表示させることを理解」する。
3.楽しんで遊ぶ。

 

最後に、本Lessonも、「遊ぶというところが一番大事」なところです。

 

いかがだったでしょうか。

Lesson 16 LCD Display編はここまで。

ぜひ、みなさんも子供と一緒にやられてみることをお勧めします。

 

まだ、全てのコマンドを試していません。

ぜひ、他のコマンドも試して遊んでみてください。

 

次回Lesson 17はLCDモジュール+電子部品を考えています。

例えば、「温度センサをつなげて温度をLCDに表示する」とかどうでしょうか。

 

疑問点、質問などありましたら気軽にコメントください。

 

本Lessonで使用しているUNOはAmazonにて購入可能です。

Amazon ベストセラーNo.1
ELEGOO UNO キット レベルアップ  チュートリアル付 uno mega2560 r3 nanoと互換 Arduino用

 

上記のものでも十分に多数の部品が入っていますが、最初からもっと多数の部品が入っているこちらもお勧めです。

コメント

タイトルとURLをコピーしました