おもしろ工作・プログラミング動画配信中!せでぃあのYouTube

ArduinoでLCD(液晶ディスプレイ)を制御する!ブロックプログラミング(スクラッチベースmBlock)【Lesson16】

ArduinoでLCD(液晶ディスプレイ)を制御する!ブロックプログラミング(スクラッチベースmBlock)
  • URLをコピーしました!

この記事内には、プロモーションが含まれます。

こんにちは、せでぃあ(@cediablog)です。

ArduinoプログラミングLESSON16は「明るさセンサを使った、LCD(液晶ディスプレイ)の表示制御」です。

今回は、明るさセンサ(CdSセル)が検出した明るさ値(0~1023)をディスプレイに表示させるプログラムの作り方を紹介します。

明るさセンサを使った、LCD(液晶ディスプレイ)の表示制御の配線完了後の状態写真
本LESSONテーマの配線完了状態

本LESSON記事は、プログラミングと電子パーツの知識が習得できるプログラミング初心者にも安心して読んでいただける内容になっています。

小学生、中学生も安心してプログラミングができるように、文字列を使わないブロックプログラミング方法についても動画付きで紹介しています。

せでぃあ

表示を制御するプログラムは、見ていても楽しいですよね!

本記事では、スクラッチベースのビジュアルプログラミングツールmBlockとArduinoIDEプログラムどちらも紹介しています

本記事ではmBlockのアップロードモード「オン」でのプログラム例を紹介しています

無料のブロックプログラミングツールmBlockのインストール方法については、こちらの記事を参照してください。

この記事を読んでわかること
  • LCD(液晶ディスプレイ)とCdSセルの機能について
  • LCD1602のディスプレイ表示制御方法
  • Arduino IDEでのプログラミング方法
  • mBlockを使ったビジュアルプログラミング方法
この記事を書いた人
せでぃあ

せでぃあはこんな人物です

✅プライム企業に勤める電気・機械設計エンジニア

✅親子の絆を深めるため、夏休みに子供と一緒に電子工作を製作

✅Arduinoプログラミングを用いて作ったプログラミング電子工作「信GO機」が市の発明くふう展で「優秀賞」を受賞

✅本ブログにてArduinoスクラッチプログラミングLESSON記事投稿中

✅YouTubeチャンネル「せでぃあブログちゃんねる」運営中

目次

LCD(液晶ディスプレイ)について

LCD1602の概要説明

液晶ディスプレイ「LCD1602」の外観写真
液晶ディスプレイ「LCD1602」の外観

LDCとは「Liquid Crystal Display」の略で、液晶ディスプレイのことを言います。

今回使用するのは「LCD1602」という機器で、ELEGOO社のスーパースターターキットに含まれている機器です。

2行×16文字列の表示が可能です。

LCD1602の裏側には16本のピンがはんだ付けされています
液晶ディスプレイ「LCD1602」の裏側

モジュール基板の裏側には、16本のピンが付いています。

今回はブレッドボードに直接差し込んで使用します。

LCD1602の制御方法

液晶ディスプレイ「LCD1602」の外観写真
LCD1602のピン端子機能説明図
LCD1602のピン端子機能説明図

LCD1602には16本のピンが付いており、この16本のピンを使って制御します。

LCD1602にできること
  • 任意の文字列を表示させる(英数字)
  • バックライト表示ON-OFF
  • 表示文字のコントラスト調節
せでぃあ

配線方法は、このあと詳しく説明していきます

明るさセンサー(CdSセル)の仕組み

明るさセンサー(CdSセル)とは?

明るさセンサー(CdSセル)の写真
明るさセンサー(CdSセル)の写真

CdSセルとは、材料に硫化カドミウムが使用されている素子のことです。

光がセルに当たることで、内部の抵抗値が小さくなるという特性を持っています。

素子には極性はありませんので、どちら側に配線接続してもOKです

明るさに対する抵抗値の変化特性について

明るさ値に対する抵抗値特性表
明るさ値に対する抵抗値特性表

上記特性表により、赤帯の間が明るさ値(lux:ルクス)に対する、おおよその抵抗値になります。

明るさ値(横軸:lux)が多くなる=明るくなるにつれて、赤帯が下方に下がっている=抵抗値が低くなる特性であることがわかります。

明るさセンサ(CdSセル)の制御方法を詳しく知りたい方はこちらの記事もおすすめです!

明るさセンサ(CdSセル)による明るさ検出の考え方

アナログ入力機能

Arduino本体上のソケット機能説明図
Arduino本体上のソケット機能説明図(fritzingを用いて作成)

ArduinoUnoR3ではA0~A5のアナログ入力ソケットにかかる電圧「0V~5V」の範囲をアナログ入力値「0~1023」の値として識別することができます。

アナログ入力機能を使用するには、明るさセンサ検出値等の変化内容を0~5Vの電圧変化に変換してアナログ入力ソケットに取り込む必要があります。

明るさセンサの検出値をアナログ入力値に変換する

センサの明るさ検出値と電圧、アナログ値の説明図
センサの明るさ検出値と電圧、アナログ値の説明図

今回のLESSONでは、明るさセンサの明るさ検出値を電圧に変換しています。

明るさ検出値が大きい(明るい側)のときに、アナログ入力電圧値は5Vに近づきます。

アナログ入力値は電圧0V入力のとき0で、5V入力のとき最大値1023となります。

CdSセルについては、こちらの記事にて詳しく説明しています。

LCD1602制御動作の説明

今回紹介する「明るさセンサを使った、LCD1602の表示制御動作」について説明します。

LCD1602制御動作の説明
  • 明るさセンサの検出値は、アナログ入力値(0~1023)の範囲
  • 明るいときは数値が高く、暗くなると数値が0に近づく
動作説明とブロックプログラミング手順の解説動画
動画での解説内容
  • 液晶ディスプレイ「LCD1602」の機器説明
  • 明るさセンサを使った、LCD表示制御動作
  • mBlockを使ったプログラミングの解説

まずは動画を見て、今回のLESSON16で実行させたい動作内容を確認してください。

また、mBlockを使ったスクラッチプログラミングや動作確認方法についても解説しています。

せでぃあ

ブロックプログラミングなら、簡単にプログラムが作れちゃいますよ!

明るさセンサを使った、LCD表示制御回路の作り方

STEP
必要なものを準備

プログラミングするために、パソコンが必要です。

電子部品等の必要な機器については、このあと説明します。

STEP
Arduinoを使うためのセットアップ(Arduino IDEプログラミング時のみ)

パソコンに統合開発ソフトウェア「ArduinoIDE」のインストールを行います。

Arduinoのセットアップ方法については、以下の記事にて詳しく説明しています。

Arduino IDEでの言語プログラミングも勉強したい方は、プログラミングの流れを理解しておいてください。

以下の記事にて、プログラミングから動作確認までの流れを詳しく説明しています。

mBlockでプログラミングする場合は、ArduinoIDEのインストールは不要です

STEP
mBlockでプログラミングするためのセットアップ(mBlockプログラミング時のみ)

パソコンにスクラッチベースのビジュアルプログラミングツール「mBlock」のインストールを行います。

以下の記事にて詳しく説明しています。

ArduinoIDEでプログラミングする場合は、mBlockのインストールは不要です

STEP
電気配線

電子部品とジャンパーワイヤの差し込みだけで配線が可能です。

STEP
Arduino IDEプログラミング

専用開発ソフトウェア「Arduino IDE」を使います。

私が作成したプログラムをコピペして使ってください。

Arduino IDEプログラミングの基本操作については、こちらの記事にて詳しく説明しています。

mBlockでプログラミングする場合は、ArduinoIDEプログラミングは不要です

STEP
mBlockプログラミング

スクラッチベースのビジュアルプログラミングツールmBlockを使ってプログラムを作成します

プログラム内容については、後述するプログラミング例を参考にしてください。

ArduinoIDEでプログラミングする場合は、mBlockプログラミングは不要です

STEP
動作確認

プログラムが完成したら動作確認を行います。

動作確認チェックリスト
  • 明るさ検出状態に応じて、LCDに表示される数値が変動するか?
  • 明るいときは数値が大きく、暗いときは数値が小さくなるか?

明るさセンサを使った、LCD表示制御回路で使うもの

明るさセンサを使った、LCD表示制御回路で使うもの
配線が完了しプログラム転送できる状態写真
準備するもの
  1. パソコン
  2. Arduino本体
  3. USBケーブル
  4. ブレッドボード
  5. 明るさセンサ(CdSセル)
  6. 抵抗(10kΩ)
  7. 抵抗(1kΩ)
  8. LCD1602モジュール
  9. ジャンパー線(オスーオス)×15本

今回はELEGOO社のスーパースターターキットに含まれる部品で作ることができますが、Arduino裏面のショート対策としてクリアケースも併せて準備することをおすすめします。

パソコン

プログラムを作成するために必要です。

プログラム制御の演算はArduino側で行うため、パソコンのSPECは一般的なモデルで十分対応可能です。

パソコンのOSはWindows、Macどちらでも対応可能です。

Arduino本体【キット】

Arduino本体
Arduino本体

基本的なエディション「Arduino Uno」の互換機である、ELEGOO社のUNO R3を使用しています。

Arduino本体裏面のショート対策に、別売りのクリアケースの購入をおすすめしています。

各ソケットの役割など、Arduino本体の機能について以下の記事にて詳しく説明しています。

USBケーブル【キット】

必要なUSBケーブルの説明写真
USBケーブル

パソコンとArduinoを接続してプログラムデータのやり取りをするために必要です。

ブレッドボード【キット】

ブレッドボードの機能説明図
ブレッドボードの機能説明図

たくさんの穴が開いていて、部品の端子を穴に差し込むだけで電気的に接続が可能な板です。

説明図は30列のショート版ですが、スーパースターターキットに含まれる63列タイプでも機能は同じです

明るさセンサ(CdSセル)【キット】

明るさセンサの説明
明るさセンサの説明

明るさを検出するために、CdSセルを使います。

今回使用する明るさセンサは、材料に硫化カドミウム(CdS)が使われていて、光が当たると内部の抵抗値が小さくなる特性を持ちます。

明るさセンサの特徴
  • 検出する明るさが明るいほど、内部抵抗が小さくなる
  • 素子に極性がなくどちらの方向に接続しても問題なし
明るさ検出値と抵抗値の関係
キット付帯のデータシートより

上記がセンサの検出明るさと抵抗値の関係性グラフになります。

抵抗(10kΩ)【キット】

10kΩ抵抗と色による見分け方
10kΩ抵抗と色による見分け方

10kΩの抵抗を1本使用し、明るさセンサーに直列接続します。

抵抗を接続するのは、Arduino本体に明るさセンサが検出した明るさを電圧をアナログ値として入力させるためです。

今回使用する明るさセンサー(CdSセル)は電気を発生しないため抵抗直列接続による分圧回路が必要となります。

この分圧回路を作るために、10kΩの抵抗を用います。

抵抗(1kΩ)【キット】

1kΩ抵抗と色による見分け方
1kΩ抵抗と色による見分け方

1kΩの抵抗を1本使用します。

今回は、液晶ディスプレイの文字表示コントラスト調節に使います。

LCD1602モジュールには可変抵抗器を使って、コントラスト調節ができる機能がありますが、今回は1kΩ抵抗器を接続してコントラストを固定しています。

LCD1602モジュール【キット】

LCD1602モジュール
LCD1602モジュール

液晶ディスプレイ「LCD(Liquid Crystal Display)」モジュールになります。

数字や文字などを表示させることが可能です。

ジャンパー線(オスーオス)【キット】

キットに同梱されているジャンパー線(オスーオス)の説明
ジャンパー線

ジャンパー線を15本使用します。

Arduino本体とブレッドボードの接続や、ブレッドボードの共通電源ライン(GNDまたは5V)からブレッドボード内の配線系統穴に差し込んで接続するのに使います。

スターターキットに含まれる機器に関しては、以下の記事にて詳しく紹介しています。

配線のやり方

LCD1602の各ピンへの配線説明表
LCD1602の各ピンへの接続先
明るさセンサを使った、LCD表示制御回路の配線完了状態写真
配線完了時の状態写真
明るさセンサを使った、LCD表示制御回路の配線説明図
LESSON16の配線説明図(fritzingを用いて作成)

上図が配線説明図となりますので、これと同じ配線をすれば完成します。

配線数が多いので、1本ずつ落ち着いて配線してください

機器が故障するおそれがあるので、接続するプラスマイナス極性には十分注意して配線してください。

抵抗や明るさセンサは極性がありませんので、どちら側のピンを挿入してもOKです。

機器故障させないためにも、USBケーブルを抜いた「通電OFF」状態にて配線を行ってください

プログラミングのやり方

本記事では、以下に示す「Arduino IDEプログラミング」と「mBlockプログラミング」の2通りのプログラミング方法について解説しています。

いずれか1つのプログラミング方法を用いることで、LESSON16の制御動作を行うことが可能です。

ArduinoIDE:文字列による命令語形式
mBlock:スクラッチベースのビジュアル形式

文字列を使わないmBlockの方が、直感的で分かりやすく小学生におすすめのプログラミング方法になります。

mBlockを使ってプログラミングをする方は、mBlockの説明まで読み飛ばしてください。

Arduino IDEプログラミング

Arduino IDEとは統合開発ソフトウェアで、C言語のような文字列を用いたプログラミング方法です。

プログラミングするにあたり、ある程度の命令語を知っておく必要があります。

Arduino IDEのインストール方法については、以下の記事で詳しく説明しています。

日本語版のArduino公式リファレンスが付属しているので関数を調べるときに重宝します!(私も所有しています)

プログラミング方法

Arduino IDEでのプログラミング画面(LESSON16)
Arduino IDEでのプログラミング画面

Arduino IDEを使って、文字列プログラミングを行います。

Arduino IDEを使ったプログラミング~動作確認方法については、以下の記事で詳細説明しています。

Arduino IDEプログラム

/* 作品名:LESSON16 */
/* 作成者:せでぃあ https://cediablog.com */
/* パラレル配線によるLCD1602制御プログラム */

#include <LiquidCrystal.h>

const int SENSOR_SOCKET = 0 ;  //明るさセンサーの入力ソケット番号

const int LCD_D4_SOCKET   = 4;   //データビットD4入力ソケット番号
const int LCD_D5_SOCKET   = 5;   //データビットD5入力ソケット番号
const int LCD_D6_SOCKET   = 6;   //データビットD6入力ソケット番号
const int LCD_D7_SOCKET   = 7;   //データビットD7入力ソケット番号
const int LCD_RS_SOCKET   = 8;   //レジスタ選択入力ソケット番号
const int LCD_E_SOCKET    = 9;   //イネーブル入力ソケット番号

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);  //LCD制御ピンの割り当て
  
void setup() {
  // put your setup code here, to run once: プログラム起動時1回だけ処理される回路

  lcd.begin(16, 2);                     //LCDの桁数と行数を指定
  lcd.clear();                          //LCDディスプレイをクリア
  lcd.setCursor(0,0);                   //LCDカーソルを上段一番左に配置
  lcd.print("Brightness");              //文字列「Brightness」を表示

}

void loop() {
  // put your main code here, to run repeatedly: プログラム起動後ループ処理される回路

  float Brightness;                       //変数の宣言

  Brightness = analogRead(SENSOR_SOCKET); //アナログ入力ソケット番号A0データを変数に格納

  lcd.setCursor(0,1);                     //LCDカーソルを下段一番左に配置
  lcd.print(Brightness);                  //変数「Brigntness」の値を表示
  
  delay(100);                             //0.1秒待つ
}

上記が明るさセンサを使った、LCD表示制御回路のプログラムになります。

Arduino IDEのプログラム画面にコピーアンドペーストすることで、動作確認まで進めることができます。

各プログラム列の右側にプログラム内容をコメント記入してありますので参考にしてください。

せでぃあ

LCD制御ライブラリについては、このあと詳しく説明していきます

命令語の解説

今回のプログラムで使用した命令文について、解説します。

変数のデータ型指定

変数のデータ型を指定するものです。

今回はピンソケット番号を代入するので整数を扱う「int型」を指定します。

またアナログ出力値は「0~255」の整数を扱いますので、同じく「int型」を指定します。

スクロールできます
データ型説明扱える範囲
int2バイトの整数を代入可能。-32768~32767
long4バイトの整数を代入可能-2,147,483,648~2,147,483,647
float4バイトの小数を代入可能。3.4028235×1038~-3.4028235×1038
char1バイトの値を代入可能。文字列の代入に利用されます。-128~127
boolean0または1のみ代入可能。フラグのON-OFFなどに利用されます。0,1
データ型の説明

変数の前に「const」を記載すると、変数の値が「固定値」となり書き換えできない値となります

analogRead(入力ソケット番号)

指定したアナログ入力ソケット番号の状態を確認します。

状態は0V~5Vの範囲で、0~1023の値に変換されて返ってきます。

delay(時間)

()内で指定した時間(単位はmsec)だけ、プログラム実行を待たせます。

マイクロ秒単位で指定したい場合は、delayMcroseconds(時間)を使います。

Liquid Crystalライブラリの説明

今回はLCD1602の制御をするために、「Liquid Crystalライブラリ」を使用します。

このライブラリを使うだけで、簡単にLCD表示を制御できます。

LiquidCrystalライブラリの読み出し

プログラム冒頭の宣言部にてLiquidCrystalライブラリを読み出します。

#include <LiquidCrystal.h>

LiquidCrystal型変数の指定

プログラム冒頭の宣言部にてLiquidCrystal型の変数を定義します。

LiquidCrystal lcd(rs , rw , enable , d4 , d5 , d6 , d7)

液晶ディスプレイ「LCD1602」の外観写真

パラメータの説明

rs:LCDのRSピンに接続するピン番号
rw:LCDのRWピンに接続するピン番号
enable:LCDのenableピンに接続するピン番号
d4~d7:LCDのD4~D7ピンに接続するピン番号

変数「lcd」は例であり、任意の変数文字列を指定してください

begin(桁数 , 行数)

ディスプレイの桁数と行数を指定します。

lcd型変数.begin(桁数、行数)

今回は16桁の2行表示ディスプレイのため、「lcd.begin(16 , 2)」となります。

clear()

LCDの表示内容をクリアし、カーソルを左上に移動させます。

lcd型変数.clear()

setCursor( , )

カーソル位置を指定します。テキスト表示開始位置を指定することができます。

lcd型変数.setCursor(桁、行)

桁は左端が「0」、行は上段が「0=1行目」になります。

print(data)

文字をLCDに表示させます。

lcd型変数.print(表示させたい文字列)

プログラミング初心者の方に、おすすめなArduinoの参考書を紹介しています!

mBlockプログラミング

スクラッチベースのビジュアルプログラミングツールmBlockプログラミングの説明(LESSON16)
mBlockを使ったプログラミング画面

ここからは、mBlockを使ったプログラムの作り方を解説します。

mBlockを使ったプログラムの作り方
  1. デバイスにArduino Uno R3を追加する
  2. 接続モードを「アップロードモードON」にする
  3. mBlockプログラムを作成する
  4. プログラムをArduino本体に転送する

これらの基本操作方法については、こちらの記事を参照してください。

プログラミング、動作確認方法については、本記事の説明動画でも紹介しています

せでぃあ

動画を参考にプログラミングしてみよう

LCD制御ブロックの追加方法

LCDを制御(LCD画面クリア、カーソル位置を指定、LCDへの文字列表示など)するために必要な、専用ブロックを追加する必要があります。

追加が必要なLCD制御用ブロックと機能説明
追加が必要なLCD制御用ブロックと機能説明

①拡張ボタンをクリックします。

①拡張ボタンをクリックします。

②検索窓に「LCD」と入力して検索します。
LCDと書かれた拡張ブロックを追加します。

②検索窓に「LCD」と入力して検索します。
③LCDと書かれた拡張ブロックを追加します。

④LCDブロックが追加されます。

④LCDブロックが追加されます。

変数の作り方

今回演算処理した値を代入するための変数が必要になります。

mBlockでの変数作成方法について紹介します。

①カテゴリエリアの「変数」をクリックします。
②ブロックエリアの「変数を作る」をクリックします。

①カテゴリエリアの「変数」をクリックします。

②ブロックエリアの「変数を作る」をクリックします。

③変数名をキーボード入力します。
④「このスプライトのみ」を選択します。
⑤「はい」をクリックしてウインドウを閉じます。

③変数名をキーボード入力します。

④「このスプライトのみ」を選択します。

⑤「はい」をクリックしてウインドウを閉じます。

作った変数がブロックとして表示されたら、作成完了です。

今回作成する変数は「Brightness」になります

mBlockを使ったプログラム内容

今回は「アップロードモード オン」でのプログラム作成例を紹介しています。

プログラム開始条件が「Arduino Unoが起動したとき」になっている点に注意してください。

以下のプログラムが動作プログラムになります。

mBlockを使った明るさセンサ検出値をLCD表示させる制御プログラム
mBlockによるブロックプログラム(LESSON16)

mBlockのArduino専用ブロックについては、こちらの記事にて詳しく説明しています。

動作確認方法

明るさセンサを使った、LCD表示制御回路で使うもの
配線状態説明図
動作確認チェックリスト
  • 明るさ検出状態に応じて、LCDに表示される数値が変動するか?
  • 明るいときは数値が大きく、暗いときは数値が小さくなるか?

上記項目について確認していきましょう。

なるべく明るい部屋で動作確認してください。

明るさ検出状態に応じて、LCDに表示される数値が変動するか?

明るさセンサ(CdSセル)の検出面(上面)を手で覆ったり、ペンのキャップをかぶせたりして検出明るさを暗くしてみてください。

アナログ入力値は0~1023の範囲となります。

この範囲内で数値が変動することを確認してください。

明るいときは数値が大きく、暗いときは数値が小さくなるか?

LCDに表示される数値が0~1023の範囲内で変動することが確認できたら、明るいときは数値が大きく、暗いときは数値が小さくなることを確認してください。

せでぃあ

検出明るさに連動して、数値が増減していくことを確認してください

LCD1602を使った検出明るさ表示制御のまとめ

この記事の内容をまとめると
  • LCD(液晶ディスプレイは16本のピンへの配線で制御できる
  • 専用ライブラリ、ブロックを使うことで簡単にLCD制御できる
  • mBlockを使ったブロックプログラミングが簡単でおすすめ

小学生のお子様には断然、ブロックプログラミングがおすすめです!

せでぃあ

mBlockはプログラム学習ロボットmBotにも使われています!

最後まで読んでいただき、ありがとうございました。

子供の成長を育む!小学生のお子様にぴったりなプログラミング教室が見つかるように厳選しました!

Arduinoスクラッチプログラミングのおすすめ参考書について詳しく説明しています。

Arduinoプログラミング(スクラッチも)を使った電子工作を紹介しています。

応援ありがとうございます(^^)/

ArduinoでLCD(液晶ディスプレイ)を制御する!ブロックプログラミング(スクラッチベースmBlock)

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次