Arduinoで遊ぶページ
Arduinoで遊んだ結果を残すページです
液晶ディスプレイ
UNO

概要

Arduinoに液晶ディスプレイをつないで、文字を表示させます。

SUNLIKE社製のSC2004Cという20文字x4行表示の液晶ディスプレイを買ったので、それに、Arduinoから文字を表示させます。Hitachi HD44780互換の液晶ディスプレイであれば、プログラムの考え方は基本的に同じです。

作るもの

Arduinoソフトウェアについてくる、HelloWorldをほぼそのまま動かします。

最初に一度、hello, world! と表示した後、Arduinoをリセットしてからの秒数を、液晶ディスプレイの2行目の先頭に表示し続けます。

用意するもの

以下のものを用意します。

  • Arduino Uno
  • 液晶ディスプレイ(SUNLIKE社製SC2004C)
  • 可変抵抗10kΩ(液晶ディスプレイの輝度調整に使います)
  • (PC)
  • (USBケーブル)
  • (ブレッドボード)
  • (ジャンプワイヤ)

利用機器

文字の表示に液晶ディスプレイを利用します。Arduinoでは、液晶ディスプレイを利用するためのライブラリがすでに用意されています。

基本的な考え方

機器操作

Arduinoから送られてきた文字列を液晶ディスプレイに表示します。

設計

ハードウェアの設計

基本的には、液晶ディスプレイをそのまま使うだけです。ジャンパーワイヤを接続するために、液晶ディスプレイに付属のピンソケットをはんだ付けしました。

プログラムの設計

液晶ディスプレイを利用するために、Arduinoに標準でついているLiquidCrystalライブラリを利用します。

初期設定

液晶ディスプレイを使うためには、いくつかの初期設定が必要です。具体的には、以下の作業が必要です。

液晶ディスプレイ制御用オブジェクトの生成

以下のコンストラクタを用いて、液晶ディスプレイ制御用のオブジェクト(変数)を作成します。setup()とloop()の両方で変数を使うため、グローバル変数として、関数の外で宣言します。これで、lcdという変数で液晶ディスプレイを操作することが可能になります。

1
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);

このオブジェクト(変数)の初期化には、4パターンありますが、例題では上記のパターンを使っていたので、そのまま使いました。コンストラクタに与えている引数は、液晶ディスプレイとArduinoとの接続方法を示しています。引数の左から、液晶ディスプレイの、rs, rw, enable, d4, d5, d6, d7に接続するArduinoのデジタルピンの番号を示します。上記の例では、Arduinoの12番を、液晶ディスプレイのrs(4番)に接続することを意味しています。

液晶ディスプレイの初期化

液晶ディスプレイの表示サイズを指定します。20文字x4行の液晶ディスプレイを利用するためには、以下のLiquidCrystal::begin()を、setup()の中で実行します。lcdは、先に生成したオブジェクトです。

1
lcd.begin(20, 4);

データの表示

データを表示するには、表示させたい場所を指定した後、データを表示させます。

場所の指定

場所の指定には、setCursor(列、行)というメソッドを利用します。列は、X軸で、一番左が0で、一番右が、今回の液晶ディスプレイでは、19です。行は、Y軸で、一番上が0で、一番下が、今回の液晶ディスプレイでは3です。

2行目の先頭を指定するためには、以下のようなコードを用います。

1
lcd.setCursor(0, 1);

データの表示

データの表示は、printというメソッドを使います。

秒数の取得

次は、Arduinoをリセットしてからの秒数の取得です。これにも、millis()とい関数が用意されています。ただし、ミリ秒単位で取得されるので、1000で割って、秒に変換します。これを液晶ディスプレイに表示するためには、さきほどの、printと組み合わせて、以下のようにします。

1
lcd.print(millis()/1000);

スケッチ

基本的には、Arduinoソフトウェアの、File > Examples > LiquidCrystal > HelloWorld をそのまま利用します。ただし、サンプルのプログラムは、16文字x2行表示の液晶ディスプレイ用なので、これを、20文字x4行表示の液晶ディスプレイ用に、修正します。具体的には、setup()中の、lcd.begin(16, 2); を、lcd.begin(20, 4); に書き換えるだけです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <LiquidCrystal.h>
 
// Arduino    LCD
//  D2        14(DB7)
//  D3        13(DB6)
//  D4        12(DB5)
//  D5        11(DB4)
//  D10        6(E)
//  D11        5(R/W)
//  D12        4(RS)
//             3(VLC)
//             2(Vdd)
//             1(Vss)
 
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);
 
void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(20, 4);
  // Print a message to the LCD.
  lcd.print("hello, world!");
}
 
void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  lcd.print(millis()/1000);
}

組立

LCDディスプレイとArduinoとを以下のように接続します。可変抵抗で輝度調整用の電圧を適切に設定しないと液晶に文字がうまく表示されません(正確に言うと文字が見えません)。

LCDディスプレイのピン Arduinoのピン
1 5V
2 GND
3 (コントラスト調整用の可変抵抗)
4 D12
5 D11
6 D10
11 D5
12 D4
13 D3
14 D2

動作している様子

バージョン

Hardware:Arduino Uno
Software:Arduino 0022

最終更新日

June 10, 2020

inserted by FC2 system