\ 限定の返礼品あり! /
ArduinoでLCD(液晶ディスプレイ)を制御!ビジュアルプログラミング(スクラッチベースmBlock)【Lesson16】
こんにちは、せでぃあ(@cediablog)です。
ArduinoプログラミングLESSON16は「明るさセンサを使った、LCD(液晶ディスプレイ)の表示制御」です。
今回は、明るさセンサ(CdSセル)が検出した明るさ値(0~1023)をディスプレイに表示させるプログラムの作り方を紹介します。
本LESSON記事は、プログラミングと電子パーツの知識が習得できるプログラミング初心者にも安心して読んでいただける内容になっています。
小学生、中学生も安心してプログラミングができるように、文字列を使わないブロックプログラミング方法についても動画付きで紹介しています。
表示を制御するプログラムは、見ていても楽しいですよね!
本記事では、スクラッチベースのビジュアルプログラミングツールmBlockとArduinoIDEプログラムどちらも紹介しています
無料のブロックプログラミングツールmBlockのインストール方法については、こちらの記事を参照してください。
- LCD(液晶ディスプレイ)とCdSセルの機能について
- LCD1602のディスプレイ表示制御方法
- Arduino IDEでのプログラミング方法
- mBlockを使ったビジュアルプログラミング方法
せでぃあはこんな人物です
✅プライム企業に勤める電気・機械設計エンジニア
✅親子の絆を深めるため、夏休みに子供と一緒に電子工作を製作
✅Arduinoプログラミングを用いて作ったプログラミング電子工作「信GO機」が市の発明くふう展で「優秀賞」を受賞
✅本ブログにてArduinoスクラッチプログラミングLESSON記事投稿中
✅YouTubeチャンネル「せでぃあブログちゃんねる」運営中
LCD(液晶ディスプレイ)について
LCD1602の概要説明
LDCとは「Liquid Crystal Display」の略で、液晶ディスプレイのことを言います。
今回使用するのは「LCD1602」という機器で、ELEGOO社のスーパースターターキットに含まれている機器です。
2行×16文字列の表示が可能です。
モジュール基板の裏側には、16本のピンが付いています。
今回はブレッドボードに直接差し込んで使用します。
LCD1602の制御方法
LCD1602には16本のピンが付いており、この16本のピンを使って制御します。
- 任意の文字列を表示させる(英数字)
- バックライト表示ON-OFF
- 表示文字のコントラスト調節
配線方法は、このあと詳しく説明していきます
明るさセンサー(CdSセル)の仕組み
明るさセンサー(CdSセル)とは?
CdSセルとは、材料に硫化カドミウムが使用されている素子のことです。
光がセルに当たることで、内部の抵抗値が小さくなるという特性を持っています。
素子には極性はありませんので、どちら側に配線接続してもOKです
明るさに対する抵抗値の変化特性について
上記特性表により、赤帯の間が明るさ値(lux:ルクス)に対する、おおよその抵抗値になります。
明るさ値(横軸:lux)が多くなる=明るくなるにつれて、赤帯が下方に下がっている=抵抗値が低くなる特性であることがわかります。
明るさセンサ(CdSセル)の制御方法を詳しく知りたい方はこちらの記事もおすすめです!
明るさセンサ(CdSセル)による明るさ検出の考え方
アナログ入力機能
ArduinoUnoR3ではA0~A5のアナログ入力ソケットにかかる電圧「0V~5V」の範囲をアナログ入力値「0~1023」の値として識別することができます。
アナログ入力機能を使用するには、明るさセンサ検出値等の変化内容を0~5Vの電圧変化に変換してアナログ入力ソケットに取り込む必要があります。
明るさセンサの検出値をアナログ入力値に変換する
今回のLESSONでは、明るさセンサの明るさ検出値を電圧に変換しています。
明るさ検出値が大きい(明るい側)のときに、アナログ入力電圧値は5Vに近づきます。
アナログ入力値は電圧0V入力のとき0で、5V入力のとき最大値1023となります。
CdSセルについては、こちらの記事にて詳しく説明しています。
LCD1602制御動作の説明
今回紹介する「明るさセンサを使った、LCD1602の表示制御動作」について説明します。
- 明るさセンサの検出値は、アナログ入力値(0~1023)の範囲
- 明るいときは数値が高く、暗くなると数値が0に近づく
- 液晶ディスプレイ「LCD1602」の機器説明
- 明るさセンサを使った、LCD表示制御動作
- mBlockを使ったプログラミングの解説
まずは動画を見て、今回のLESSON16で実行させたい動作内容を確認してください。
また、mBlockを使ったスクラッチプログラミングや動作確認方法についても解説しています。
ブロックプログラミングなら、簡単にプログラムが作れちゃいますよ!
明るさセンサを使った、LCD表示制御回路の作り方
プログラミングするために、パソコンが必要です。
電子部品等の必要な機器については、このあと説明します。
パソコンに統合開発ソフトウェア「ArduinoIDE」のインストールを行います。
Arduinoのセットアップ方法については、以下の記事にて詳しく説明しています。
Arduino IDEでの言語プログラミングも勉強したい方は、プログラミングの流れを理解しておいてください。
以下の記事にて、プログラミングから動作確認までの流れを詳しく説明しています。
mBlockでプログラミングする場合は、ArduinoIDEのインストールは不要です
パソコンにスクラッチベースのビジュアルプログラミングツール「mBlock」のインストールを行います。
以下の記事にて詳しく説明しています。
ArduinoIDEでプログラミングする場合は、mBlockのインストールは不要です
電子部品とジャンパーワイヤの差し込みだけで配線が可能です。
専用開発ソフトウェア「Arduino IDE」を使います。
私が作成したプログラムをコピペして使ってください。
Arduino IDEプログラミングの基本操作については、こちらの記事にて詳しく説明しています。
mBlockでプログラミングする場合は、ArduinoIDEプログラミングは不要です
スクラッチベースのビジュアルプログラミングツールmBlockを使ってプログラムを作成します
プログラム内容については、後述するプログラミング例を参考にしてください。
ArduinoIDEでプログラミングする場合は、mBlockプログラミングは不要です
プログラムが完成したら動作確認を行います。
- 明るさ検出状態に応じて、LCDに表示される数値が変動するか?
- 明るいときは数値が大きく、暗いときは数値が小さくなるか?
明るさセンサを使った、LCD表示制御回路で使うもの
- パソコン
- Arduino本体
- USBケーブル
- ブレッドボード
- 明るさセンサ(CdSセル)
- 抵抗(10kΩ)
- 抵抗(1kΩ)
- LCD1602モジュール
- ジャンパー線(オスーオス)×15本
今回はELEGOO社のスーパースターターキットに含まれる部品で作ることができますが、Arduino裏面のショート対策としてクリアケースも併せて準備することをおすすめします。
パソコン
プログラムを作成するために必要です。
プログラム制御の演算はArduino側で行うため、パソコンのSPECは一般的なモデルで十分対応可能です。
パソコンのOSはWindows、Macどちらでも対応可能です。
Arduino本体【キット】
基本的なエディション「Arduino Uno」の互換機である、ELEGOO社のUNO R3を使用しています。
Arduino本体裏面のショート対策に、別売りのクリアケースの購入をおすすめしています。
各ソケットの役割など、Arduino本体の機能について以下の記事にて詳しく説明しています。
USBケーブル【キット】
パソコンとArduinoを接続してプログラムデータのやり取りをするために必要です。
ブレッドボード【キット】
たくさんの穴が開いていて、部品の端子を穴に差し込むだけで電気的に接続が可能な板です。
説明図は30列のショート版ですが、スーパースターターキットに含まれる63列タイプでも機能は同じです
明るさセンサ(CdSセル)【キット】
明るさを検出するために、CdSセルを使います。
今回使用する明るさセンサは、材料に硫化カドミウム(CdS)が使われていて、光が当たると内部の抵抗値が小さくなる特性を持ちます。
- 検出する明るさが明るいほど、内部抵抗が小さくなる
- 素子に極性がなくどちらの方向に接続しても問題なし
上記がセンサの検出明るさと抵抗値の関係性グラフになります。
抵抗(10kΩ)【キット】
10kΩの抵抗を1本使用し、明るさセンサーに直列接続します。
抵抗を接続するのは、Arduino本体に明るさセンサが検出した明るさを電圧をアナログ値として入力させるためです。
今回使用する明るさセンサー(CdSセル)は電気を発生しないため抵抗直列接続による分圧回路が必要となります。
この分圧回路を作るために、10kΩの抵抗を用います。
抵抗(1kΩ)【キット】
1kΩの抵抗を1本使用します。
今回は、液晶ディスプレイの文字表示コントラスト調節に使います。
LCD1602モジュールには可変抵抗器を使って、コントラスト調節ができる機能がありますが、今回は1kΩ抵抗器を接続してコントラストを固定しています。
LCD1602モジュール【キット】
液晶ディスプレイ「LCD(Liquid Crystal Display)」モジュールになります。
数字や文字などを表示させることが可能です。
ジャンパー線(オスーオス)【キット】
ジャンパー線を15本使用します。
Arduino本体とブレッドボードの接続や、ブレッドボードの共通電源ライン(GNDまたは5V)からブレッドボード内の配線系統穴に差し込んで接続するのに使います。
スターターキットに含まれる機器に関しては、以下の記事にて詳しく紹介しています。
配線のやり方
上図が配線説明図となりますので、これと同じ配線をすれば完成します。
配線数が多いので、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を使って、文字列プログラミングを行います。
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型」を指定します。
データ型 | 説明 | 扱える範囲 |
---|---|---|
int | 2バイトの整数を代入可能。 | -32768~32767 |
long | 4バイトの整数を代入可能 | -2,147,483,648~2,147,483,647 |
float | 4バイトの小数を代入可能。 | 3.4028235×1038~-3.4028235×1038 |
char | 1バイトの値を代入可能。文字列の代入に利用されます。 | -128~127 |
boolean | 0または1のみ代入可能。フラグのON-OFFなどに利用されます。 | 0,1 |
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)
パラメータの説明
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を使ったプログラムの作り方を解説します。
- デバイスにArduino Uno R3を追加する
- 接続モードを「アップロードモードON」にする
- mBlockプログラムを作成する
- プログラムをArduino本体に転送する
これらの基本操作方法については、こちらの記事を参照してください。
動画を参考にプログラミングしてみよう
LCD制御ブロックの追加方法
LCDを制御(LCD画面クリア、カーソル位置を指定、LCDへの文字列表示など)するために必要な、専用ブロックを追加する必要があります。
①拡張ボタンをクリックします。
②検索窓に「LCD」と入力して検索します。
③LCDと書かれた拡張ブロックを追加します。
④LCDブロックが追加されます。
変数の作り方
今回演算処理した値を代入するための変数が必要になります。
mBlockでの変数作成方法について紹介します。
①カテゴリエリアの「変数」をクリックします。
②ブロックエリアの「変数を作る」をクリックします。
③変数名をキーボード入力します。
④「このスプライトのみ」を選択します。
⑤「はい」をクリックしてウインドウを閉じます。
作った変数がブロックとして表示されたら、作成完了です。
今回作成する変数は「Brightness」になります
mBlockを使ったプログラム内容
今回は「アップロードモード オン」でのプログラム作成例を紹介しています。
プログラム開始条件が「Arduino Unoが起動したとき」になっている点に注意してください。
以下のプログラムが動作プログラムになります。
mBlockのArduino専用ブロックについては、こちらの記事にて詳しく説明しています。
動作確認方法
- 明るさ検出状態に応じて、LCDに表示される数値が変動するか?
- 明るいときは数値が大きく、暗いときは数値が小さくなるか?
上記項目について確認していきましょう。
なるべく明るい部屋で動作確認してください。
明るさ検出状態に応じて、LCDに表示される数値が変動するか?
明るさセンサ(CdSセル)の検出面(上面)を手で覆ったり、ペンのキャップをかぶせたりして検出明るさを暗くしてみてください。
アナログ入力値は0~1023の範囲となります。
この範囲内で数値が変動することを確認してください。
明るいときは数値が大きく、暗いときは数値が小さくなるか?
LCDに表示される数値が0~1023の範囲内で変動することが確認できたら、明るいときは数値が大きく、暗いときは数値が小さくなることを確認してください。
検出明るさに連動して、数値が増減していくことを確認してください
LCD1602を使った検出明るさ表示制御のまとめ
- LCD(液晶ディスプレイは16本のピンへの配線で制御できる
- 専用ライブラリ、ブロックを使うことで簡単にLCD制御できる
- mBlockを使ったブロックプログラミングが簡単でおすすめ
小学生のお子様には断然、ブロックプログラミングがおすすめです!
mBlockはプログラム学習ロボットmBotにも使われています!
最後まで読んでいただき、ありがとうございました。
子供の成長を育む!小学生のお子様にぴったりなプログラミング教室が見つかるように厳選しました!
Arduinoスクラッチプログラミングのおすすめ参考書について詳しく説明しています。
Arduinoプログラミング(スクラッチも)を使った電子工作を紹介しています。
コメント