Arduinoと戯れてみる!

Arduino 入門 Lesson 25 【4桁7セグメントLED編】

arduino-lesson25-00Arduino入門編
スポンサーリンク
子供と一緒に始める マイコンプログラム
Arduino 入門
Lesson 25
【4桁7セグメントLED編】

「Arduino」を使ったマイコンプログラミングを子供と一緒に学習するブログ。

少しずつ、子供と一緒に楽しみながら気長にアップしてく予定です。

更新情報:回路図を掲載しました。

 

本記事はLesson 25 【4桁7セグメントLED編】です。

4桁7セグメントLEDは、Lesson 24で説明した7セグメントLEDが1つのモジュールとなったものです。

そのため、基本原理は1桁の7セグメントLEDと同じです。

 

数字情報の表示に特化したデジタル表示モジュール。

4桁あれば、デジタル時計を作れそうですね。

 

本Lesson解説で使用しているのはArduino互換品です。

互換品とは言え、Arduinoはオープンソースであり複製して販売するのもライセンス的に問題なし。

そのため互換品の品質も悪くなく、それでいて値段は安いです。

正規品本体の値段程度で豊富な部品が多数ついています。

 

スポンサーリンク

はじめに

4桁7セグメントLEDは1桁7セグメントLEDを4つをあわせてモジュール化したものです。

1桁の場合と違い、制御方法にちょっとしたコツが・・・

おそらく力技だな~と思う方法で4桁を表示させています。

 

その制御方法が「ダイナミック点灯方式」。

LED を 1Hz 程度の周波数で点滅させると人の目には LED の点滅が認識できます。

しかし、点滅周波数を100Hz 程度にあげると、人の目には LED が連続して点灯しているように見えます。
※要は点滅せずに、ず~っと点灯しているように見えるということです。

ダイナミック点灯方式は、このような人の目の性質を利用した点灯方式です。

 

4桁の7セグメントLEDを1桁づつ高速で繰り返し点灯させることで、あたかも4桁全てが同時に見えるようにしているのです。

ダイナミック点灯方式のメリット
複数桁の7セグメントLEDを少ないポート数で制御できる!

 

別の表現をすると「残存効果」と呼ばれるものです。

Wikipedia 残存効果

残像効果(ざんぞうこうか)は、主に人の視覚で光を見たとき、その光が消えた後も、それまで見ていた光や映像が残って見えるような現象のこと。

 

1桁の7セグメントLED同様にアノードコモンとカソードコモンがあります。

個人的な好みとしては、カソードコモンです。
点灯させたい箇所に信号を与えたいため。

 

4桁7セグメントLED、1桁と同様に日本製は割高です。

手持ちがなく、遊びで使う程度であれば以下などいかがでしょうか。

Amazonにて探したのですが4桁セグメントLEDの種類があまりありません・・・。

下記であれば、Amazon発送で1個あたり、180円程度と安価です。

カソードコモンなので、私の好みです。

 

Lesson 25 目標

1.「4桁7セグメントLED」の原理を理解します。
2.「ダイナミック点灯方式」の制御方法を理解します。
3.8bitシフトレジスタの使い方を思い出す。

今回も遊ぶことを最大の目標に楽しみましょう!

 

項目3の8bitシフトレジスタに関しては、Lesson 20をお読みいただく理解が深まります。

 

8bitシフトレジスタを使用したくない。

または、持っていない方。

Aruduinoのデジタル入出力ピンで同じことができます。

ぜひ、挑戦してみてください。

 

また、4桁の前に1桁で動作を確認した方がより理解が深まると考えます。

 

準備

ではLessonの準備に取り掛かりましょう。

今回も8個×4のLEDを制御することから部品が多めです。

頑張って組み上げていきましょう。

 

必要なもの

Lesson 24と違いは4桁7セグメントLEDのみです。

 

7セグメントLEDはアノードコモン、カソードコモンの2種類があります。

本Lessonで使用しているのは、カソードコモン
※本記事、原理の項目で違いを詳しく説明します。

 

Jumper wire、抵抗は今後も頻繁に利用します。

Jumper wireはできれば、「オス-メス オス-オス メス –メス」の3種類を揃えておくことをお勧めします。

 

抵抗も単品で揃えるよりはセットをおすすめします。

 

使用部品説明

新たに登場した部品について説明していきます。

本Lessonで新しく登場するのは、4桁セグメントLEDのみです。

 

4桁7セグメントLED 実物写真

下の写真が、4桁7セグメントLEDです。
※表面のフィルムを剥がしていない状態です。

 

表面

arduino-lesson25-01

 

裏面

arduino-lesson25-02

 

ちなみに、ELEGOO UNO キットには合わせて梱包されています。

4桁7セグメントLEDはLEDですから向きがあります。
アノードコモン、カソードコモンどちらなのか確認して購入してください。
詳しくは原理の項目にて説明します。

 

4桁7セグメントLED 仕様

本Lessonで仕様について説明しておきます。

型名は5461AS。

まずは絶対最大定格から。

これを超えると壊れる可能性がありますっていう値です。

絶対最大定格(@25℃)単位
Forward current30mA / seg
Peak forward current(1/10 Duty Cycle)120mA / seg
Reverse voltage5V / seg
Power consumrtion80mW / seg

 

続いて電気的特性

7セグメントLEDの特性です。

電気的特性(25℃)単位
Wavelength at peak emission635nm
Forward voltage(Typ.)2.1V(@IF = 20mA)
Reverse current20μA

 

本Lessonで気にするべきところは、絶対最大定格値の30mAです。

これを超えると壊れますので、抵抗にて調整しましょう。

 

輝度に関しては、20mAで最大輝度に近い値を得ることができます。

といっても、それより低い値でも十分です。

この型番の電流に対する輝度のグラフを確認したところ、5mA程度でも1/3程度の輝度が得られると考えます。

 

4桁7セグメントLED 原理

4桁7セグメントLEDの1桁部分は、1桁7セグメントLEDと原理は同じです。

8個のLEDが表示部にそれぞれ割り当てられているだけの単純なもの。
※割り当てられている番号が異なるだけです。

 

下図に4桁7セグメントLEDの原理とピン配置を示します。

図に示すように、「アノードコモン」と「カソードコモン」の2種類のタイプがあります。

それぞれ、アノード(+)が共通のもの、カソード(-)が共通のものになります。

1桁7セグメントLEDとの違いは、コモン端子が各桁に1本づつあるというだけです。
※割り当てられている番号は異なりますが原理は同じ。

 

1桁7セグメントLEDで4桁7セグメントLEDを作ることも可能です。
①1桁7セグメントLEDを4つ並べる。
②a~D.P端子を各桁で共通にする。

 

arduino-lesson25-03

 

 

 

管理人はコードを書くときに「カソードコモン」の方がイメージしやすいと考えます。

1.カソード(-)側をGNDで共通。
2.光らせたいLEDにデジタルピンから5Vを供給。

という使い方がイメージしやすいですよね。

電圧を与えることで、電流が流れてLEDが光るというイメージです。

 

絶対定格、順方向電圧、光度など詳細を知りたい方は、購入した4桁7セグメントLEDの仕様書を確認ください。

仕様書がない場合、秋月電子などで確認することができます。

下記「秋月電子」TOPページのキーワード検索にて、通販コード「I-03955」で検索ください。
※あくまでも一例です。値はご自身が購入したものの仕様に従ってください。

秋月電子通商 - 電子部品・半導体 【通販・販売】

 

0から9の数字の表現方法

0~9の表現方法は1桁7セグメントLEDと同じです。

下記に、表を掲載しておきます。

表の数字
1:電流を流してLED点灯

0:電流を流さずLED消灯

 

DisplayとLEDの関係が下記表となります。

Displaya(11)b(7)c(4)d(2)e(1)f(10)g(5)
01111110
10110000
21101101
31111001
40110011
51011011
61011111
71110010
81111111
91111011

上記の他に、右下のドット(D.P)があります。

ドッドのみ表示させたい場合は

a~gを「0」、D.P(3)を「1」で点灯します。

消灯は「0」となります。

 

使用する抵抗について

LEDが焼き切れないようにするため、LEDと直列につなぐ電流制限抵抗は220Ωとします。

こちらは、LEDが焼き切れない抵抗値であれば220Ωである必要はありません。

 

この抵抗ですが、カソード側のコモン端子に抵抗を入れることで4本にすることも可能です。

どちらに入れるにしても、電流値は計算しましょう。

例えば、LEDの絶対最大定格は30mA程度だとした場合、それ以下にする必要があります。

 

電流計算時の注意点
本Lessonでは、同時に4桁を点灯させることはしません。
ダイナミック点灯方式を利用します。
点灯するのは、あくまでも一桁のみです。
計算する電流値は上記が前提となります。

 

単純に計算してみます。

シフトレジスタの出力は5V。

LEDと220Ωの抵抗が直列につながっていますので

5V  / 220Ω = 約22.7mA

となり、最大でも30mA以下であることから壊れることはありません。

 

ダイオードの順方向電圧を考慮した場合以下となります。

仕様から2.1V(Typ.)となっています。

これを考慮すると・・・

( 5V – 2.1V ) / 220Ω = 約13.2mA

となり、220Ωで問題ないことがわかります。

 

あくまでも、点灯するのは1桁ということに注意してください。

 

SN74HC595N 8bitシフトレジスタ 出力の割り当て

下の写真が、8bitシフトレジスタ「SN74HC595N」です。

Lesson 20にて詳細を説明しています。

Arduino-lesson20-01

 

端子は全部で16ピンあります。

メーカのデータシートによって端子名は異なります。

Arduino-lesson20-02

 

本記事のコードは、「SN74HC595N」の出力QA~QH7セグメントLEDに対して以下の割り当てをしました。

SN74HC595N7セグメントLED
QA(Q0)a(11)
QB(Q1)b(7)
QC(Q2)c(4)
QD(Q3)d(2)
QE(Q4)e(1)
QF(Q5)f(10)
QG(Q6)g(5)
QH(Q7)D.P(3)
桁の選択6,8,9,12
Arduinoで制御する場合はデジタルピンなどに接続

QA~QHの出力が「1」となることでLEDに電流を流して4桁7セグメントLEDを点灯させます。

()内の表記は、次に示す回路図での番号となります。

 

実践 回路作成とコード作成

最初に回路図を確認してください。

次に、回路図に合わせて部品を接続します。

最後にコードを書いて、4桁7セグメントLEDを動かしていきましょう。

 

Arduinoのピン配置を確認したい方は番外編02を参照してください。

 

回路図

4桁7セグメントLEDとの間に抵抗が直列に接続されていることで電流を制限しLEDが焼損するのを防いでいます。

回路図がこちら。

カソードコモン(GND)になっていることに注意してください。

 

arduino-lesson25-04

 

こちらがブレッドボード図。
※M-M jumper wireのみで結線できます。

 

arduino-lesson25-05

 

4桁7セグメントLEDのパーツがないため作成中です。
少々お待ちください。

 

 

回路図は「fritzing」を利用しています。

「fritzing」の使い方は下記を参照してください。

 

接続

下図に示すように、用意した部品を使用して接続しましょう。

部品は4桁7セグメントLED抵抗シフトレジスタとなります。

M-M jumper wireを使用してUNOと接続しましょう。

 

使用するポートは、デジタルピンの「1,2,3,4,9,11,12」、電源の「5V」、「GND」です。

穴に挿入しづらいときは、ラジオペンチなどを使用してください。

arduino-lesson25-06

 

 

コードの書き込み

接続が終わったら、USBケーブルを使用してUNOにプログラムを書き込んで行きましょう。

コードを書き終えたら、いつでも利用できるように「ファイル」⇒「名前を付けて保存」で保存しておきましょう。

 

コマンド説明

特に新しくでてきたコマンドはありませんが、重要コマンドを復習しておきましょう。

コマンド説明
shiftOut(dataPin, clockPin, bitOrder, value)1バイト分のデータを1ビットずつ「シフトアウト」する。
最上位ビット(MSB)と最下位ビット(LSB)のどちらからもスタート可能。
各ビットはまずdataPinに出力され、その後clockPinが反転して、そのビットが有効になったことが示されます。
dataPin:各ビットを出力するピン
clockPin:
クロックを出力するピン。
dataPinに正しい値がセットされたら、このピンが1回反転します
bitOrder:
MSBFIRSTまたはLSBFIRSTを指定。
Most Significant Bit Firstは最上位ビットから送ること、Least Significant Bit Firstは最下位ビットから送ることを示す。
value:送信したいデータ (byte)
戻り値:なし

 

shiftOut関数を理解すると、何かと便利です。

理解しておくことをお勧めします。

 

サンプルコード

サンプルコードを下記に示します。

Lesson 24のコードを改良して作成しました。

デジタル入出力ピンの1,2,3,4を利用して点灯させる桁を選択しています。

 

//Lesson 25 4桁7セグメントLED ダイナミック点灯方式を体感
//https://omoroya.com/


// 74HC595 pin        QA,QB,QC,QD,QE,QF,QG,QH 
// 7segment Mapping   a, b, c, d, e, f, g ,D.P

int tDelay = 100;   // 100ms遅延設定←ここの時間を短くしていく。
int rclkPin = 11;   // (11) ST_CP [RCLK] on 74HC595
int srclkPin = 9;   // (9)  SH_CP [SRCLK] on 74HC595
int dsPin = 12;     // (12) DS [SER] on 74HC595
int dig1 = 1;       // DIG1を1番ピンに割り当て
int dig2 = 2;       // DIG2を2番ピンに割り当て
int dig3 = 3;       // DIG3を3番ピンに割り当て
int dig4 = 4;       // DIG4を4番ピンに割り当て

// seven_ledsをbyte型として定義
// 配列にDisplay表示用のデータ0~9と全消灯を設定
// 1 = LED on, 0 = LED off
byte seven_leds[12] =       { B11111100,  // 0
                              B01100000,  // 1
                              B11011010,  // 2
                              B11110010,  // 3
                              B01100110,  // 4
                              B10110110,  // 5
                              B10111110,  // 6
                              B11100000,  // 7
                              B11111110,  // 8
                              B11100110,  // 9
                              B00000001,  // D.P 
                              B00000000,  // OFF
                             };

//シフトレジスタ部分を関数化
void funcShiftReg(int x)
{
  digitalWrite(rclkPin, LOW);                         //送信中のRCLKをLowにする
  shiftOut(dsPin, srclkPin, LSBFIRST, seven_leds[x]); //シフト演算を使って点灯するLEDを選択
  digitalWrite(rclkPin, HIGH);                        //送信終了後RCLKをHighにする
}
  
void setup() 
{
  pinMode(rclkPin, OUTPUT);   //11番ピンをOUTPUTとして定義
  pinMode(dsPin, OUTPUT);     //12番ピンをOUTPUTとして定義
  pinMode(srclkPin, OUTPUT);  //9番ピンをOUTPUTとして定義
  pinMode(dig1, OUTPUT);      //1番ピンをOUTPUTとして定義
  pinMode(dig2, OUTPUT);      //2番ピンをOUTPUTとして定義
  pinMode(dig3, OUTPUT);      //3番ピンをOUTPUTとして定義
  pinMode(dig4, OUTPUT);      //4番ピンをOUTPUTとして定義
  digitalWrite(dig1, LOW);    //1番ピンをLOW DI1 OFF
  digitalWrite(dig2, LOW);    //2番ピンをLOW DI2 OFF
  digitalWrite(dig3, LOW);    //3番ピンをLOW DI3 OFF
  digitalWrite(dig4, LOW);    //4番ピンをLOW DI4 OFF
  funcShiftReg(12);           //信号初期化
}

void loop() 
{
  //DIG1の表示
  delay(tDelay);
  digitalWrite(dig1, LOW); 
  digitalWrite(dig2, HIGH);
  digitalWrite(dig3, HIGH);
  digitalWrite(dig4, HIGH);
  //DIG1に1を表示
  funcShiftReg(1);
  delay(tDelay);

  
  //DIG2の表示
  delay(tDelay);
  digitalWrite(dig1, HIGH); 
  digitalWrite(dig2, LOW);
  digitalWrite(dig3, HIGH);
  digitalWrite(dig4, HIGH);
  //DIG2に2を表示
  funcShiftReg(2);
  delay(tDelay);


  //DIG3の表示
  delay(tDelay);
  digitalWrite(dig1, HIGH); 
  digitalWrite(dig2, HIGH);
  digitalWrite(dig3, LOW);
  digitalWrite(dig4, HIGH);
  //DIG2に3を表示
  funcShiftReg(3);
  delay(tDelay);


  //DIG4の表示
  delay(tDelay);
  digitalWrite(dig1, HIGH); 
  digitalWrite(dig2, HIGH);
  digitalWrite(dig3, HIGH);
  digitalWrite(dig4, LOW);
  //DIG2に4を表示
  funcShiftReg(4);
  delay(tDelay);

}

 

動作確認

では、さっそく動作を確認していきます。

コード内のtDelayの値を変えてみてください。

int tDelay = 100; // 100ms遅延設定←ここの時間を短くしていく。

この時間を、100、5、1と変えてみてください。

実際は、1桁づつ表示していますが時間を速くすることで4桁表示になっているのがわかるはずです。

​今回もgifで動作を掲載してみました。
※サイズを絞るために、画像サイズを小さくしています。

int tDelay = 100; // 100ms遅延設定

arduino-lesson25-07

 

int tDelay = 1; // 1ms遅延設定

arduino-lesson25-08

 

まとめ

今回は以下の内容について理解してもらいました。

今回も項目4の遊ぶことが一番の目標でした。

1.「4桁7セグメントLED」の原理を理解します。
2.「ダイナミック点灯方式」の制御方法を理解します。
3.  8bitシフトレジスタの使い方を思い出す。
4.  楽しんで遊ぶ。

 

いかがだったでしょうか。

ダイナミック点灯方式がどんなものか理解していただけたでしょうか。

実は、1桁づつ表示してたんだな・・・

と街中で見かけたら思い出してみてください!

 

Lesson 25 【4桁7セグメントLED編】 はここまで。

4桁7セグメントLED、デジタル時計などを作って見るのもおもしろそうです。

いずれ挑戦します!

 

疑問点、質問などありましたら気軽にコメントください。

 

次回、Lesson 26は【DCモーター編】 です。

Arduino 入門 Lesson 26 【DCモータ編】
本記事はLesson 26 【DCモーター編】です。DCモーターはミニ4駆やラジコンなど、おもちゃに使われています。モーターそのものですので制御回路などは組み込まれていません。本Lessonでは、DCモーターを制御することでミニ扇風機を作成…

 

最後に

疑問点、質問などありましたら気軽にコメントください。

この電子部品の解説をしてほしい!などなどなんでもOKです。

リンク切れなどあればコメントいただけると助かります。

 

Arduino入門編、番外編、お役立ち情報などなどサイトマップで記事一覧をぜひご確認ください。

 

Arduino入門編で使用しているUNOはAmazonにて購入可能です。

互換品とは言え、Arduinoはオープンソース。

複製して販売するのもライセンス的に問題なし。

 

そのため互換品の品質も悪くなく、それでいて値段は安いです。

正規品本体の値段程度で豊富な部品が多数ついています。

 

学習用、遊び用、お試し用には安価な互換品がおすすめです。

 

Amazon ベストセラーNo.1
ELEGOO UNO キット レベルアップ  チュートリアル付 uno mega2560 r3 nanoと互換 Arduino用

 

上記のものでも十分に多数の部品が入っていますが、最初からもっと多数の部品が入っているこちらもお勧めです。

 

Amazonでお得に買う方法

Amazonでお得に購入するなら、Amazonギフト券がおすすめです。

現金でチャージするたびに、チャージ額に応じたポイントが付与されます。

最大2.5%!!!(Amazonプライム会員ならさらにお得)

チャージ額(一回分)一般プライム会員
5,000円~19,999円0.5%1.0%
2,0000円~39,999円1.0%1.5%
40,000円~89,999円1.5%2.0%
90,000円~2.0%2.5%

さらに、初回チャージで1000ポイントもらえるキャンペーンも実施中!

\Amazonギフト券 1000ポイントキャンペーン/
Amazonチャージ 初回購入で1000ポイントキャンペーン

 

補足情報
コンビニ・ATM・ネットバンクが対象
購入は1円単位で可能

コメント

  1. omoroyaomoroya より:

    1桁を理解したら4桁に挑戦、ダイナミック点灯方式を理解しましょう!

タイトルとURLをコピーしました