フィジカル・コンピューティングにおいてLCDディスプレイというものはあまり利用されることはありません。
しかしロボットや、自作3Dプリンターなど、ある状態、数値を検知して確認する・特定の数値を入力するなどが必要な場合、常にPCと接続(通信)していない場合、具体的な文字や数字を表示出来るLCDディスプレイを搭載するだけでぐっと操作が行いやすくなります。
簡単な文字や数字を表示するために使用できるLCDディスプレイですが、小型で安価な”LCD104B6B”というものがseeedstudioで販売されています。日本では千石電商で取り扱いがあります。今回はこちらを使用してArduinoから文字と数字を表示させてみたいと思います。(データシートはこちら)
ピン
1 :VSS – GND(0V)
2 :VDD – ロジック用の電源電圧(+ 5V)
3:VO – LCD駆動電圧(コントラスト調整用)
4:RS
5:R/W
6:E
7:DB0 データバスライン
8:DB1 データバスライン
9: DB2 データバスライン
10: DB3 データバスライン
11:DB4 データバスライン
12:DB5 データバスライン
13: DB6 データバスライン
14:DB7データバスライン
15:LEDA – LEDバックライト電源
16:LEDK -LEDバックライト電源
このモジュールの扱いやすいところはLiquidCrystalという公式のArduinoライブラリが使用できるところです。試しにwikiに記載してある下記のサンプルコードをアップロードしてみます。
#include <LiquidCrystal.h> //8 bit: RS, RW, EN, D0, D1, D2, D3, D4, D5, D6, D7 //RS-->PC0 //RW-->PC1 //EN-->PC2 LiquidCrystal lcd(14, 15, 16, 8, 9, 10, 11, 4, 5, 6, 7); void setup() { lcd.begin(8,2); } void loop() { delay(1000); lcd.clear(); lcd.setCursor(0,0); lcd.print("hello"); lcd.setCursor(0,1); lcd.print("world!"); }
LCD = Arduino
1 :VSS = GND
2 :VDD = 5V
3:VO - = GND(コントラスト調整用)
4:RS = 14(A0)
5:R/W = 15(A1)
6:E = 16(A2)
7:DB0 = 8
8:DB1 = 9
9: DB2 = 10
10:DB3 = 11
11:DB4 = 4
12:DB5 = 5
13: DB6 = 6
14:DB7 = 7
15:LEDA = 5V
16:LEDK = GND
どうでしょうか?うまく表示されましたか?
これでセンサーの値を表示したり、幾つかの用意したモードを切り替えたりいろいろ出来そうですね。
さて、このまま利用しても良いのですが、LCDの表示だけでかなりArduinoのピンを占領してしまっていますので、節約してみます。
まず「5:R/W=15(A1)」ですが、ArduinoのLiquidCrystalライブラリはWriteしか行わずReadは行っていないので、常にW(LOW)で問題ありません。そのため「1 :VSS – GND」と繋げてしまいましょう。
DB0〜DB7までの8つのピンは8bitのデータの受け渡しを行いますが、DB4~DB7の4つのピンを使い4bitの受け渡しを2回行うことでピンの節約をすることが出来ます
「15:LEDA、16:LEDK」のバックライトの点灯はLCDモジュール本体のJP2とJP3をショートさせることで内部の電源からの供給が可能になるようです。
LCD = Arduino
1 :VSS = GND
2 :VDD = 5V
3:VO - = (GND)(コントラスト調整用)
4:RS = 14(A0)
6:E = 16(A2)
11:DB4 = 4
12:DB5 = 5
13: DB6 = 6
14:DB7 = 7
かなり節約出来ました。
#include <LiquidCrystal.h> //8 bit: RS, EN, D4, D5, D6, D7 //RS-->PC0 //RW-->PC1 //EN-->PC2 LiquidCrystal lcd(14, 16, 4, 5, 6, 7); void setup() { lcd.begin(8,2); } void loop() { delay(1000); lcd.clear(); lcd.setCursor(0,0); lcd.print("hello"); lcd.setCursor(0,1); lcd.print("world!"); }
先ほどよりもArduinoに挿しているピンが少なくても同じように表示されました。
また、「3:VO」はコントラスト調整用で、GNDに繋ぐとコントラストが最も強くなるようです。ここに可変抵抗をつけることでコントラストを調整することが出来るようになります。
試しに10Kの可変抵抗を付けてコントラストの調整をしてみました。
これでひとまずLCDに文字を表示させることが出来るようになりました。あとはアナログ端子の値を表示させたり、特殊文字を表示させたりなどをしてゆきますが、次の機会にします。
(参考)