NOBのArduino日記!

NOBのArduino日記!

趣味は車・バイク・自転車・ラジコン・電子工作です。

7セグメントLEDの使い方の使い方!(LB-303VK)

イメージ 1
7セグメントLED(LB-303VK)

 サーミスタで測った温度の値を表示できないかと言う事で、「7セグメントLED」を使ってみました!

 いつもの事ながら脱線が始まりました「ペルチェ素子を使ったロケットストーブ発電をしたい」→「ペルチェ素子の実験でサーミスタで温度測定したい」→「サーミスタで測った温度を7セグメントLEDに表示したい」←今ココ

1. 7セグメントLEDとは?

 7セグメントLED(英:seven-segment display、和:7セグメントLED、7セグLED、7セグメントディスプレイ)とは、複数のLEDを1つのパッケージに収めたもので、英数字やバーグラフを表示するためのLEDです。
 種類として「アノードコモン」と「カソードコモン」タイプが有り、回路図をFritzingを使って描いたものを図1に示します。
 アノードコモンとは、その名の通りアノード(陽極)をコモン(共通)としたものです。
 カソードコモンとは、その名の通りアノード(陰極)をコモン(共通)としたものです。

イメージ 10
図1:7セグメントLED及び周辺回路略式図

1.1 LB-303VKとは
 今回使用する「LB-303VK」とは、7セグメントLED「LB-303AKシリーズ」の一つです。
 シリーズの特徴として、図2に示す通り文字高さ8mmの高効率小型パッケージで、図3に示す11本に配線しダイナミック点灯※1する事で、3桁の英数字を表示出来ます
 また、LB-303AKシリーズは4種類有り、LEDの色が「Red」(型番末尾がV〇)及び「Green」(型番末尾がM〇)、また「アノードコモン」(型番末尾が〇A)もしくは「カソードコモン」(型番末尾が〇K)から選択できます。
 今回使用する「LB-303VK」は赤色LED(V)のカソードコモン(K)タイプです。

※1:ダイナミック点灯(ダイナミック・ドライブ)とは、人の目に有る残像現象(約100msec程度)を利用して、10msec程度の短時間1つの桁を光らせたら、すぐ次の桁を光らせるということを高速に繰り返して複数桁を表示する方式の事。ダイナミック点灯の利点として、通常のスタティック点灯で7セグメントLED(D.P含む)を点灯させると、3桁で8×3桁=24本の制御信号が必要となりますが、ダイナミック点灯で行うと11本の制御信号で済みます。

イメージ 2
図2:7セグメントLED「LB-303AKシリーズ」の寸法

イメージ 3
図3:7セグメントLED「LB-303AKシリーズ」共通のピン配置図

1.2 仕様
 7セグメントLED「LB-303AKシリーズ」仕様は図4の通りです。

イメージ 4
イメージ 5
図4:7セグメントLED「LB-303AKシリーズ」の仕様

LB-303AKシリーズのSDSより引用させて頂きました

2. ライブラリの導入!

 複数桁の7セグメントLEDをダイナミック点灯するには、十数本の信号端子を高速で制御する必要があります。
 一番手っ取り早い方法が・・・ライブラリです!( ;∀;)
 公認のライブラリが良さそうなのでArduinoのホームページを探してみると、2014年にDean Readingさんが公開した「SevSeg Library」を発見!ありがたいです!
 ライブラリのダウンロードは「GitHub」から以下図5~7の通り行いました。
イメージ 6
図5:「Seven segment display controller library for Arduino」からダウンロード

イメージ 7
図6:ArduinoIDEでインクルード選択

イメージ 8
図7:「SevSeg-master.zip」をArduinoIDEにインクルード!以上

3. 実験回路!

 表1の部品を使って、7セグメントLEDの点灯実験をしてみました

表1:使った部品

3.1 接続
 回路接続図をFritzingを使って図8の様に書いてみました。
 また図8の通り実際に繋げた状態を図9に示します。
イメージ 11
図8:ブレッドボード回路図

イメージ 9
図9:実際に作ったもの

3.2 プログラム
 図9回路で、7セグメントLEDを駆動するプログラムを図10の通り書きました
 プログラムをArduinoUNOに書き込む際の注意点として、前に書かれていたプログラムが回路をショートする原因にも成りかねませんので、7セグメントLEDを抜いてからPCにUSBを接続し書き込みます。
 プログラムの内容としては、最初に「SevSeg.h」ライブラリのインクルードと初期化を行い、loop関数中で英字「NOB」を表示します。
 最後に、「-99~-10」「-9.90.0」「0.199.9」「100999」と、4段階に分けて「マイナス」「小数点」を含む、3桁で表示可能な数値を全て表示します。
#include "SevSeg.h"
SevSeg sevseg; //7つのセグメントコントローラオブジェクトをインスタンス化する

void setup() {
 byte numDigits = 3;//7SegLedの桁数を入力します。
 byte digitPins[] = {6, 5, 3};//Com1~3の順にArduinoが接続されているピン番号を順に記入します。
 byte segmentPins[] = {10, 8, 2, 4, 11, 9, 12, 7};// 7Segのa~g,D.pの順にArduinoが接続されているピン番号を記入します。
 bool resistorsOnSegments = false; //  'false'はレジスタが桁のピンにあることを意味します
 byte hardwareConfig = N_TRANSISTORS; //[COMMON_CATHODE][COMMON_ANODE][N_TRANSISTORS]
 bool updateWithDelays = false;//デフォルトは「false;」
 bool leadingZeros = false; //先行ゼロを保持する場合は 'true'を使用します
 sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros);
 //sevseg.setBrightness(100);
}

void loop() {

 //NOBと表示
 for (long k = 0; k < 100000; k++) {//10000
   sevseg.setChars("NOB");
   sevseg.refreshDisplay();
 }

 //-99~-10迄(小数点0桁)でカウントアップ
 for (float i = -99.0; i < -10; i = i + 0.1) {
   for (long j = 0; j < 50; j++) {
     sevseg.setNumber(i, 0);
     sevseg.refreshDisplay();
   }
 }
 //-9.9~0迄小数点1桁でカウントアップ
 for (float i = -9.9; i < 0.0; i = i + 0.1) {
   for (long j = 0; j < 500; j++) {
     sevseg.setNumber(i, 1);
     sevseg.refreshDisplay();
   }
 }
 //0.0~99.9迄小数点1桁でカウントアップ
 for (float i = -0.0; i < 99.9; i = i + 0.1) {
   for (long j = 0; j < 50; j++) {
     sevseg.setNumber(i, 1);
     sevseg.refreshDisplay();
   }
 }
 //100~999迄小数点0桁でカウントアップ
 for (float i = 99.9; i < 999; i = i + 0.1) {
   for (long j = 0; j < 5  ; j++) {
     sevseg.setNumber(i, 0);
     sevseg.refreshDisplay();
   }
 }
}
イメージ 1
図10:プログラムの内容

3.3 実験!
 と言う事で、図9の回路で図10のプログラムを実行した結果を動画1にまとめてみました
動画1:7セグメントLED点灯!

4. まとめ

 7セグメントLEDをArduinoUNOで制御してみた結果、少しでも負荷の掛かる処理を加えると・・・表示文字のチラツキが激しく出ます(;'∀')
 最終的にはif文4個と計算式少々で表示文字が読めなくなりました
 ダイナミック点灯の宿命ですが、「sevseg.refreshDisplay関数」などの方法で表示文字を一定間隔(10ms以下)で更新し続けないといけません!と言う事が分かりましたArduino一個で測定と7セグLED表示するのは厳しいですね・・・。

イメージ 1イメージ 3
励みになりますのでよければクリック下さい(^o^)/



この商品は、Amazon.co.jp が販売、発送します。 ギフトラッピングを利用できます。