Arduinoビジュアルプログラミングで4桁7セグメントディスプレイの点灯を制御【Lesson12】
こんにちは、せでぃあ(@cediablog)です。
ArduinoプログラミングLESSON12は「4桁7セグメントディスプレイの点灯制御」です。
可変抵抗器のボリューム状態に応じたアナログ入力値(0~1023)を、4桁7セグメントディスプレイに表示させるプログラミングの作り方を紹介します。
本LESSON記事は、プログラミングの学習と電子パーツ「4桁7セグメントLED」の知識を習得するプログラムになっています。
小学生、中学生も安心してプログラミングができるように、スクラッチでのプログラミング方法についても動画付きで紹介しています。
4桁表示の仕組みは意外な方法なんですよ!
本記事では、スクラッチとArduinoIDEプログラムどちらも紹介しています
- 4桁7セグメントLEDとはどんな機器なのか
- Arduino IDEでの7セグメントLED点灯プログラミング方法
- スクラッチ(Scrattino3)を使った4桁7セグメントLED点灯プログラミング方法
せでぃあはこんな人物です
✅プライム企業に勤める電気・機械設計エンジニア
✅親子の絆を深めるため、夏休みに子供と一緒に電子工作を製作
✅Arduinoプログラミングを用いて作ったプログラミング電子工作「信GO機」が市の発明くふう展で「優秀賞」を受賞
✅本ブログにてArduinoスクラッチプログラミングLESSON記事投稿中
✅YouTubeチャンネル「せでぃあブログちゃんねる」運営中
子供の成長を育む!小学生のお子様にぴったりなプログラミング教室が見つかるように厳選しました!
4桁7セグメントLEDディスプレイについて
4桁7セグメントLEDの説明
4桁7セグメントLEDディスプレイとは、7セグメントLEDディスプレイが4桁連結した電子パーツです。
今回使用する機器は、7つのLEDとドット表示のついた8つのLEDを搭載したものが4つ並んだものになります。
今回はカソードコモン(GNDラインが各LEDに対して共通線になるタイプ)仕様の機器となります。
アノードコモンタイプとは、共通線の極性が異なるので注意してください
1桁の7セグメントLEDディスプレイについて知りたい方は、こちらのLESSON11記事を参照してください。
4桁7セグメントLEDの点灯動作の仕組み
この4桁のディスプレイですが、4桁同時に点灯させるわけではなく1桁ずつ順番に点灯させます。
高速で点灯切り替えすることで、残像効果により4桁同時に点灯しているように見えるのです。
マイコン単独で演算できるArduinoIDEに比べて、PCと通信接続するScrattino3は演算周期が遅いため点灯ちらつきが生じます
スクラッチベースのビジュアルプログラミングツールmBlockを使えば、点灯ちらつき対策が可能です。
ピン割り当て
上下に6本ずつ配線用のピンが搭載されており、上記のようになっています。
- LED点灯用(A~G、D.P)
- 表示桁選択用(DIG1~4)
ピンの役割は大きく分けると「LED点灯表示用」と「表示桁選択用」の2つになります。
1桁目が「DIG4」、4桁目が「DIG1」であることに注意してください
内部配線図
内部配線は、各セグメントLEDの配線(A~G,D.P)は4桁分共通線になっています。
DIG1~DIG4がそれぞれGND接続となるときに、該当する桁のセグメントLEDが点灯します。
LED点灯用(A~G)
各セグメントに対するA~Gの割り当ては、どの桁も共通の割り当てになっています。
今回のLESSONでは、ドット表示「D.P」は点灯させないため省略しています
4桁7セグメントLEDにアナログ入力値を表示させる動作の説明
今回の説明する「4桁7セグメントLEDに可変抵抗器のアナログ入力値を表示させる動作」は、以下になります。
- 可変抵抗器のボリューム状態に応じて「0~1023」の値を表示する
- 可変抵抗器のボリューム左周りで最小0、右回りで最大1023に近い表示となる
- 4桁7セグメントLEDディスプレイの機器説明
- 可変抵抗器のボリューム状態に応じた4桁7セグメントLEDディスプレイ表示動作
- スクラッチを使ったプログラミングの解説
まずは動画を見て、可変抵抗器のボリューム状態に応じたディスプレイ表示動作を確認してください。
また、スクラッチを使ったプログラミングをするためには準備作業が必要です。
動画にて準備作業に必要な手順をくわしく説明しています。
可変抵抗器の機能については、こちらの記事にて詳しく説明しています。
4桁7セグメントLED点灯制御回路の作り方
プログラミングするために、パソコンが必要です。
電子部品等の必要な機器については、このあと説明します。
パソコンに統合開発ソフトウェア「ArduinoIDE」のインストールを行います。
Arduinoのセットアップ方法については、以下の記事にて詳しく説明しています。
Arduino IDEでの言語プログラミングも勉強したい方は、プログラミングの流れを理解しておいてください。
以下の記事にて、プログラミングから動作確認までの流れを詳しく説明しています。
パソコンにスクラッチでプログラミングするためのソフトウェア「Scrattino3(スクラッチーノ3)」のインストールを行います。
以下の記事にて詳しく説明しています。
電子部品とジャンパーワイヤの差し込みだけで配線が可能です。
専用開発ソフトウェア「Arduino IDE」を使います。
私が作成したプログラムをコピペして使ってください。
スクラッチプログラミングについては、動画または後述するプログラミング例を参考にしてください。
プログラムが完成したら動作確認を行います。
- 可変抵抗器のボリューム状態に応じてディスプレイ表示が変化するか?
- 表示される数値は左周りで最小0、右回りで最大1023に近い数値になるか?
動作確認方法については、以下の記事にて詳しく説明しています。
アナログ入力値を4桁7セグメントLEDに表示させる回路で使うもの
- パソコン
- Arduino本体
- USBケーブル
- ブレッドボード
- 4桁7セグメントLEDディスプレイ
- 抵抗(220Ω)×7本
- 可変抵抗器
- ジャンパー線(オスーオス)×18本
今回はELEGOO社のスーパースターターキットに含まれる部品で作ることができますが、Arduino裏面のショート対策としてクリアケースも併せて準備することをおすすめします。
パソコン
プログラムを作成するために必要です。
プログラム制御の演算はArduino側で行うため、パソコンのSPECは一般的なモデルで十分対応可能です。
パソコンのOSはWindows、Macどちらでも対応可能です。
Arduino本体【キット】
基本的なエディション「Arduino Uno」の互換機である、ELEGOO社のUNO R3を使用しています。
Arduino本体裏面のショート対策に、別売りのクリアケースの購入をおすすめしています。
各ソケットの役割など、Arduino本体の機能について以下の記事にて詳しく説明しています。
USBケーブル【キット】
パソコンとArduinoを接続してプログラムデータのやり取りをするために必要です。
ブレッドボード【キット】
たくさんの穴が開いていて、部品の端子を穴に差し込むだけで電気的に接続が可能な板です。
説明図は30列のショート版ですが、スーパースターターキットに含まれる63列タイプでも機能面は同じです
4桁7セグメントLEDディスプレイ【キット】
キットに含まれる機器は、カソードコモンの4桁7セグメントLEDディスプレイとなります。
抵抗(220Ω)【キット】
220Ωの抵抗を使用し、各セグメントLEDに接続します。
LEDは流せる電流値に制約があるため、抵抗を直列つなぎすることでLEDに流れる電流を調節します。
抵抗は極性がないので、配線時に方向を気にする必要はありません。
VF(順電圧):1.85V
IF(順電流):20mA
LEDを点灯させるために接続する抵抗の選び方については、こちらの記事で詳しく説明しています。
可変抵抗器【キット】
今回使用する可変抵抗器はツマミを回転させることで、10kΩまで変化させることができるものです。
極性はありませんが、ツマミを左右どちらに回転させたときにどういった動作をさせたいか?によって各固定端子への配線が変わります。
ジャンパー線(オスーオス)【キット】
ジャンパー線を18本使用します。
Arduino本体とブレッドボードの接続や、ブレッドボードの共通電源ライン(GNDまたは5V)からブレッドボード内の配線系統穴に差し込んで接続するのに使います。
スターターキットに含まれる機器に関しては、以下の記事にて詳しく紹介しています。
配線のやり方
上図が配線説明図となりますので、これと同じ配線をすれば完成します。
配線数が多いので、1本ずつ落ち着いて配線してください
- 4桁7セグメントLEDをブレッドボードに差し込む
- 可変抵抗器をブレッドボードに差し込む
- 220Ω抵抗をブレッドボードに差し込む
- ジャンパー線をブレッドボードとArduinoソケットに差し込む
- ジャンパー線をブレッドボード内で配線する
4桁7セグメントLEDや抵抗、ジャンパー線はArduinoのソケットやブレッドボード穴に差し込むだけでOKです。
抵抗は極性がありませんのでどちら側のピンを挿入してもOKです。
機器故障させないためにも、USBケーブルを抜いた「通電OFF」状態にて配線を行ってください
プログラミングのやり方
Arduino IDEとスクラッチの両方について、プログラミング方法とプログラムを説明します。
2つのプログラミングの特徴は以下の通り。
ArduinoIDE:文字列による命令語形式
スクラッチ:ブロックによるビジュアル形式
文字列を使わないスクラッチの方が、直感的で分かりやすく小学生におすすめのプログラミング方法になります。
スクラッチを使ってプログラミングをする方は、スクラッチの説明まで読み飛ばしてください。
Arduino IDE
Arduino IDEとは統合開発ソフトウェアで、C言語のような文字列を用いたプログラミング方法です。
プログラミングするにあたり、ある程度の命令語を知っておく必要があります。
Arduino IDEのインストール方法については、以下の記事で詳しく説明しています。
プログラミング方法
Arduino IDEを使って、文字列プログラミングを行います。
Arduino IDEを使ったプログラミング~動作確認方法については、以下の記事で詳細説明しています。
Arduino IDEプログラム
/* 作品名:LESSON12 */
/* 作成者:せでぃあ https://cediablog.com */
/* 4ケタ7セグメントLEDディスプレイ */
int SEG_A_SOCKET = 2; //セグメントA(7)の出力ソケット番号
int SEG_B_SOCKET = 3; //セグメントB(6)の出力ソケット番号
int SEG_C_SOCKET = 4; //セグメントC(4)の出力ソケット番号
int SEG_D_SOCKET = 5; //セグメントD(2)の出力ソケット番号
int SEG_E_SOCKET = 6; //セグメントE(1)の出力ソケット番号
int SEG_F_SOCKET = 7; //セグメントF(9)の出力ソケット番号
int SEG_G_SOCKET = 8; //セグメントG(10)の出力ソケット番号
int SEG1_SOCKET = 9; //4桁目のセグメント点灯出力ソケット番号
int SEG2_SOCKET = 10; //3桁目のセグメント点灯出力ソケット番号
int SEG3_SOCKET = 11; //2桁目のセグメント点灯出力ソケット番号
int SEG4_SOCKET = 12; //1桁目のセグメント点灯出力ソケット番号
int VOLUME_SOCKET = 0; //可変抵抗器のアナログ入力ソケット番号
int SEGNUM; //セグメント点灯数字
int SEGNUM1; //セグメント1桁目点灯数字
int SEGNUM2; //セグメント2桁目点灯数字
int SEGNUM3; //セグメント3桁目点灯数字
int SEGNUM4; //セグメント4桁目点灯数字
int ANALOGIN; //アナログ入力値
void setup() {
// put your setup code here, to run once: プログラム起動時1回だけ処理される回路
//入出力の割り当て
pinMode(SEG_A_SOCKET, OUTPUT); //2番ピンは出力として使用
pinMode(SEG_B_SOCKET, OUTPUT); //3番ピンは出力として使用
pinMode(SEG_C_SOCKET, OUTPUT); //4番ピンは出力として使用
pinMode(SEG_D_SOCKET, OUTPUT); //5番ピンは出力として使用
pinMode(SEG_E_SOCKET, OUTPUT); //6番ピンは出力として使用
pinMode(SEG_F_SOCKET, OUTPUT); //7番ピンは出力として使用
pinMode(SEG_G_SOCKET, OUTPUT); //8番ピンは出力として使用
pinMode(SEG1_SOCKET, OUTPUT); //9番ピンは出力として使用
pinMode(SEG2_SOCKET, OUTPUT); //10番ピンは出力として使用
pinMode(SEG3_SOCKET, OUTPUT); //11番ピンは出力として使用
pinMode(SEG4_SOCKET, OUTPUT); //12番ピンは出力として使用
}
void loop() {
// put your main code here, to run repeatedly: プログラム起動後ループ処理される回路
ANALOGIN = analogRead(VOLUME_SOCKET); //アナログ入力値を格納
SEGNUM4 = ANALOGIN / 1000; //4桁目(DIG1)数字の抽出
SEGNUM3 = (ANALOGIN - SEGNUM4*1000) /100; //3桁目(DIG2)数字の抽出
SEGNUM2 = (ANALOGIN - SEGNUM4*1000 - SEGNUM3*100) / 10; //2桁目(DIG3)数字の抽出
SEGNUM1 = ANALOGIN - SEGNUM4*1000 - SEGNUM3*100 - SEGNUM2*10; //1桁目(DIG4)数字の抽出
for(int i = 1; i <= 4; i++){ //1~4桁の数字表示を順番に出力する
if(i == 1){ //1桁目(DIG4)の数字表示出力
SEGNUM = SEGNUM1; //セグメント表示数字に1桁目数字を代入
digitalWrite(SEG1_SOCKET , HIGH); //4桁目(DIG1)表示OFF
digitalWrite(SEG2_SOCKET , HIGH); //3桁目(DIG2)表示OFF
digitalWrite(SEG3_SOCKET , HIGH); //2桁目(DIG3)表示OFF
digitalWrite(SEG4_SOCKET , LOW); //1桁目(DIG4)表示ON
}else if(i == 2){ //2桁目(DIG3)の数字表示出力
SEGNUM = SEGNUM2; //セグメント表示数字に2桁目数字を代入
digitalWrite(SEG1_SOCKET , HIGH); //4桁目(DIG1)表示OFF
digitalWrite(SEG2_SOCKET , HIGH); //3桁目(DIG2)表示OFF
digitalWrite(SEG3_SOCKET , LOW); //2桁目(DIG3)表示ON
digitalWrite(SEG4_SOCKET , HIGH); //1桁目(DIG4)表示OFF
}else if(i == 3){ //3桁目(DIG2)の数字表示出力
SEGNUM = SEGNUM3; //セグメント表示数字に3桁目数字を代入
digitalWrite(SEG1_SOCKET , HIGH); //4桁目(DIG1)表示OFF
digitalWrite(SEG2_SOCKET , LOW); //3桁目(DIG2)表示ON
digitalWrite(SEG3_SOCKET , HIGH); //2桁目(DIG3)表示OFF
digitalWrite(SEG4_SOCKET , HIGH); //1桁目(DIG4)表示OFF
}else if(i == 4){ //4桁目(DIG1)の数字表示出力
SEGNUM = SEGNUM4; //セグメント表示数字に4桁目数字を代入
digitalWrite(SEG1_SOCKET , LOW); //4桁目(DIG1)表示ON
digitalWrite(SEG2_SOCKET , HIGH); //3桁目(DIG2)表示OFF
digitalWrite(SEG3_SOCKET , HIGH); //2桁目(DIG3)表示OFF
digitalWrite(SEG4_SOCKET , HIGH); //1桁目(DIG4)表示OFF
}
if(SEGNUM == 0){ //セグメントディスプレイ表示「0」
digitalWrite(SEG_A_SOCKET , HIGH); //セグメントAの出力をON
digitalWrite(SEG_B_SOCKET , HIGH); //セグメントBの出力をON
digitalWrite(SEG_C_SOCKET , HIGH); //セグメントCの出力をON
digitalWrite(SEG_D_SOCKET , HIGH); //セグメントDの出力をON
digitalWrite(SEG_E_SOCKET , HIGH); //セグメントEの出力をON
digitalWrite(SEG_F_SOCKET , HIGH); //セグメントFの出力をON
digitalWrite(SEG_G_SOCKET , LOW); //セグメントGの出力をOFF
}
else if(SEGNUM == 1){ //セグメントディスプレイ表示「1」
digitalWrite(SEG_A_SOCKET , LOW); //セグメントAの出力をOFF
digitalWrite(SEG_B_SOCKET , HIGH); //セグメントBの出力をON
digitalWrite(SEG_C_SOCKET , HIGH); //セグメントCの出力をON
digitalWrite(SEG_D_SOCKET , LOW); //セグメントDの出力をOFF
digitalWrite(SEG_E_SOCKET , LOW); //セグメントEの出力をOFF
digitalWrite(SEG_F_SOCKET , LOW); //セグメントFの出力をOFF
digitalWrite(SEG_G_SOCKET , LOW); //セグメントGの出力をOFF
}
else if(SEGNUM == 2){ //セグメントディスプレイ表示「2」
digitalWrite(SEG_A_SOCKET , HIGH); //セグメントAの出力をON
digitalWrite(SEG_B_SOCKET , HIGH); //セグメントBの出力をON
digitalWrite(SEG_C_SOCKET , LOW); //セグメントCの出力をOFF
digitalWrite(SEG_D_SOCKET , HIGH); //セグメントDの出力をON
digitalWrite(SEG_E_SOCKET , HIGH); //セグメントEの出力をON
digitalWrite(SEG_F_SOCKET , LOW); //セグメントFの出力をOFF
digitalWrite(SEG_G_SOCKET , HIGH); //セグメントGの出力をON
}
else if(SEGNUM == 3){ //セグメントディスプレイ表示「3」
digitalWrite(SEG_A_SOCKET , HIGH); //セグメントAの出力をON
digitalWrite(SEG_B_SOCKET , HIGH); //セグメントBの出力をON
digitalWrite(SEG_C_SOCKET , HIGH); //セグメントCの出力をON
digitalWrite(SEG_D_SOCKET , HIGH); //セグメントDの出力をON
digitalWrite(SEG_E_SOCKET , LOW); //セグメントEの出力をOFF
digitalWrite(SEG_F_SOCKET , LOW); //セグメントFの出力をOFF
digitalWrite(SEG_G_SOCKET , HIGH); //セグメントGの出力をON
}
else if(SEGNUM == 4){ //セグメントディスプレイ表示「4」
digitalWrite(SEG_A_SOCKET , LOW); //セグメントAの出力をOFF
digitalWrite(SEG_B_SOCKET , HIGH); //セグメントBの出力をON
digitalWrite(SEG_C_SOCKET , HIGH); //セグメントCの出力をON
digitalWrite(SEG_D_SOCKET , LOW); //セグメントDの出力をOFF
digitalWrite(SEG_E_SOCKET , LOW); //セグメントEの出力をOFF
digitalWrite(SEG_F_SOCKET , HIGH); //セグメントFの出力をON
digitalWrite(SEG_G_SOCKET , HIGH); //セグメントGの出力をON
}
else if(SEGNUM == 5){ //セグメントディスプレイ表示「5」
digitalWrite(SEG_A_SOCKET , HIGH); //セグメントAの出力をON
digitalWrite(SEG_B_SOCKET , LOW); //セグメントBの出力をOFF
digitalWrite(SEG_C_SOCKET , HIGH); //セグメントCの出力をON
digitalWrite(SEG_D_SOCKET , HIGH); //セグメントDの出力をON
digitalWrite(SEG_E_SOCKET , LOW); //セグメントEの出力をOFF
digitalWrite(SEG_F_SOCKET , HIGH); //セグメントFの出力をON
digitalWrite(SEG_G_SOCKET , HIGH); //セグメントGの出力をON
}
else if(SEGNUM == 6){ //セグメントディスプレイ表示「6」
digitalWrite(SEG_A_SOCKET , HIGH); //セグメントAの出力をON
digitalWrite(SEG_B_SOCKET , LOW); //セグメントBの出力をOFF
digitalWrite(SEG_C_SOCKET , HIGH); //セグメントCの出力をON
digitalWrite(SEG_D_SOCKET , HIGH); //セグメントDの出力をON
digitalWrite(SEG_E_SOCKET , HIGH); //セグメントEの出力をON
digitalWrite(SEG_F_SOCKET , HIGH); //セグメントFの出力をON
digitalWrite(SEG_G_SOCKET , HIGH); //セグメントGの出力をON
}
else if(SEGNUM == 7){ //セグメントディスプレイ表示「7」
digitalWrite(SEG_A_SOCKET , HIGH); //セグメントAの出力をON
digitalWrite(SEG_B_SOCKET , HIGH); //セグメントBの出力をON
digitalWrite(SEG_C_SOCKET , HIGH); //セグメントCの出力をON
digitalWrite(SEG_D_SOCKET , LOW); //セグメントDの出力をOFF
digitalWrite(SEG_E_SOCKET , LOW); //セグメントEの出力をOFF
digitalWrite(SEG_F_SOCKET , LOW); //セグメントFの出力をOFF
digitalWrite(SEG_G_SOCKET , LOW); //セグメントGの出力をOFF
}
else if(SEGNUM == 8){ //セグメントディスプレイ表示「8」
digitalWrite(SEG_A_SOCKET , HIGH); //セグメントAの出力をON
digitalWrite(SEG_B_SOCKET , HIGH); //セグメントBの出力をON
digitalWrite(SEG_C_SOCKET , HIGH); //セグメントCの出力をON
digitalWrite(SEG_D_SOCKET , HIGH); //セグメントDの出力をON
digitalWrite(SEG_E_SOCKET , HIGH); //セグメントEの出力をON
digitalWrite(SEG_F_SOCKET , HIGH); //セグメントFの出力をON
digitalWrite(SEG_G_SOCKET , HIGH); //セグメントGの出力をON
}
else if(SEGNUM == 9){ //セグメントディスプレイ表示「9」
digitalWrite(SEG_A_SOCKET , HIGH); //セグメントAの出力をON
digitalWrite(SEG_B_SOCKET , HIGH); //セグメントBの出力をON
digitalWrite(SEG_C_SOCKET , HIGH); //セグメントCの出力をON
digitalWrite(SEG_D_SOCKET , HIGH); //セグメントDの出力をON
digitalWrite(SEG_E_SOCKET , LOW); //セグメントEの出力をOFF
digitalWrite(SEG_F_SOCKET , HIGH); //セグメントFの出力をON
digitalWrite(SEG_G_SOCKET , HIGH); //セグメントGの出力をON
}
delay(5); //0.005秒ウェイト
}
}
上記が可変抵抗器のボリューム状態に応じた、4桁7セグメントディスプレイ表示回路のプログラムになります。
Arduino IDEのプログラム画面にコピーアンドペーストすることで、動作確認まで進めることができます。
各プログラム列の右側にプログラム内容をコメント記入してありますので参考にしてください。
プログラムのボリュームは大きいけど、落ち着いてプログラミングしよう
命令語の解説
今回のプログラムで使用した命令文について、解説します。
変数のデータ型指定
変数のデータ型を指定するものです。
今回はピンソケット番号を代入するので整数を扱う「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 |
pinMode(入出力番号,INPUTまたはOUTPUT)
指定したデジタル入出力ソケット番号の機能を指示します。
入力として使用する場合は「INPUT」、出力の場合は「OUTPUT」を指定します。
digitalWrite(入出力ソケット番号,HIGHまたはLOW)
指定したデジタル入出力ソケット番号の電圧をON、またはOFFします。
ONさせたいときは「HIGH」、OFFさせたいときは「LOW」を指定します。
analogRead(入出力番号)
指定したアナログ入力ソケット番号の状態を確認します。
状態は0V~5Vの範囲で、0~1023の値に変換されて返ってきます。
delay(時間)
()内で指定した時間(単位はmsec)だけ、プログラム実行を待たせます。
if else文
条件式が成立しているか否かで、どちらの命令文を実行するか振り分けます。
if( 条件 ){
条件成立時に実行する文 ;
} else {
条件不成立時に実行する文 ;
}
比較演算子
比較演算子 | 説明 |
---|---|
A == B | AとBが等しい場合に成立 |
A != B | AとBが等しくない場合に成立 |
A < B | AがBより小さい場合に成立 |
A <= B | AがB以下の場合に成立 |
A > B | AがBより大きい場合に成立 |
A >= B | AがB以上の場合に成立 |
プログラミング初心者の方に、おすすめなArduinoの参考書を紹介しています!
スクラッチ
Scrattino3(スクラッチーノ3)というソフトウェアを使って、プログラミングする方法です。
Scrattino3のインストール方法やプログラミング、動作確認方法については、以下の記事にて詳しく説明しています。
動画を参考にプログラミングしてみよう
スクラッチプログラミングに関する注意事項
LESSON12の内容をスクラッチーノ3を使ってプログラミングするにあたり、2つの注意事項があります。
- 演算速度が遅いのでディスプレイ表示がちらつく
- 特定の文字列を取り出すときは「左から〇番目」の文字になる
演算速度が遅いのでディスプレイ表示がちらつく
マイコン単独で演算できるArduinoIDEに比べて、PCと通信接続するScrattino3は演算周期が遅いため点灯ちらつきが生じます
ちらつきを長時間見つめると、目に悪影響を及ぼす可能性があるかもしれませんので十分ご注意ください。
特定の文字列を取り出すときは「左から〇番目」の文字になる
Arduino内部のアナログ入力値の特定ケタ数値を取り出すときには注意が必要です。
例えば1のときのArduino内部数値は「0001」ではなく「1」となります。
スクラッチの特定文字列を取り出すブロックの機能が「左から〇番目の文字を代入する」ため、下記に示すような現在値のケタ数に応じた取り出し位置の切り替えが必要になります。
- 1 ⇒ 左から1番目
- 10 ⇒ 左から2番目
- 100 ⇒ 左から3番目
- 1000 ⇒ 左から4番目
スクラッチプログラム(Scrattino3|スクラッチーノ3)
上記がスクラッチのプログラミングとなります。
各桁の表示切替を0.005秒周期で行うプログラムになりますが、実際はそこまで早い演算周期で演算できないためディスプレイ表示にちらつきが目立ちます
Scrattino3(スクラッチーノ3)でのスクラッチプログラミングの作り方について、本記事冒頭の動画にて詳しく説明しています。
Arduino専用ブロックについては、以下の記事にて詳しく説明しています。
Scrattino3での変数指定方法
- アナログ入力値
- セグメント表示桁数
- セグメント1桁目数字
- セグメント2桁目数字
- セグメント3桁目数字
- セグメント4桁目数字
- セグメント点灯数字
上記説明手順に沿って、変数を作成してください。
動作確認方法
- 可変抵抗器のボリューム状態に応じてディスプレイ表示が変化するか?
- 表示される数値は左周りで最小0、右回りで最大1023に近い数値になるか?
上記項目について確認していきましょう。
可変抵抗器のボリューム状態に応じてディスプレイ表示が変化するか?
可変抵抗器のボリュームツマミを左右に回してみて、ディスプレイ表示される数値が変化することを確認してください。
表示される数値は左周りで最小0、右回りで最大1023に近い数値になるか?
可変抵抗器のボリュームツマミを左にめいっぱい回したときには「0付近」、右にめいっぱい回したときは「1023」付近になることを確認してください。
アナログ入力値の範囲は「0~1023」のため、1024以上の数値が表示されたら異常動作です。
動作がうまくいかないときは、冷静になってプログラムを見直してみよう
スクラッチーノ3によるプログラム動作確認時は、ディスプレイ表示のちらつきが発生します
LESSON12:4桁7セグメントLED制御回路のまとめ
- 4桁7セグメントLEDディスプレイは1桁ずつ切り替えて表示させる
- 数字を表すためのセグメント点灯方法は、1桁タイプと同じ
- スクラッチーノ3でのプログラム動作は、ArduinoIDEより演算周期が遅いため表示のちらつきが目立つ
小学生のお子様には断然、スクラッチでのプログラミングがおすすめです!
慣れてきたら、ディスプレイ表示させる数値をアレンジしてみよう!
最後まで読んでいただき、ありがとうございました。
子供の成長を育む!小学生のお子様にぴったりなプログラミング教室が見つかるように厳選しました!
スクラッチベースのビジュアルプログラミングツールmBlockを使えば、点灯ちらつき対策が可能です。
Arduinoスクラッチプログラミングのおすすめ参考書について詳しく説明しています。
Arduinoプログラミング(スクラッチも)を使った電子工作を紹介しています。
コメント