Arduinoで7セグLEDを使ってみた!

今回はArduinoを用いて7セグLEDの使い方について説明します。7セグはディスプレイではありませんが0~9の数字をLEDを点灯させて表示します。今回のプログラムの内容はカウントダウンです。それではやっていきましょう!

使用するもの

使用するものは下記のリストの物です。購入先は秋月電子通商とAmazonです。同じもの購入したい方はリストのリンクより購入してください。

7セグメントの仕組み

端子について

7セグメントの端子は合計で10本の端子があります。今回使用するのはコモンカソードという7セグメントのため以下のような配線になっています。

7セグメントは、8個のLEDのHIGH、LOWの操作で各数字を表示していきます。上下の真ん中の端子(3、8)はGNDの役割をしています。その他の端子はそれぞれ一つのLEDの+側になっています。

7segment_circuit

抵抗の計算

今回使用する7セグメントの抵抗の計算を行います。

抵抗の計算をするには購入した7セグメントのデータシートを用いる必要があります。データシートには、7セグメントのLEDの定格電圧や定格電流などLEDを使用するための様々な情報が記載されています。今回購入先はAmazonで購入したためデータシートがなく正確な値を求められませんが、秋月電子通商で販売されている7セグメントを参考にしてみました。

使用する値は下記のものです。

  • 電源電圧[V]
  • 順法呼応電圧降下[V]
  • 順方向電流[A]

この3つのあ値から使用する抵抗値を求めます。

一つずつ用語を説明していきます。

【電源電圧】
その名の通り電源の電圧です。今回はArduinoから出力される5Vです。
【順方向電圧】
LEDにかかる電圧のこと意味します。記号では”VF”と表します。この値は、LEDのデータシートを見ていただくとVFの最小値(Min)から最大値(Max)、代表値(Typ.)が記載されているので、今回は、代表値(Typ.)より1.8Vとします。
【順方向電流】
LEDに流したい電流のことを意味します。記号では”IF”と表します。この値も同様にデータシートを見ていただくとIFの値が記載されています。今回は、20mA(0.02A)とします。

上記の値より計算をします。計算式は下記の通りです。

(電源電圧[V]ー順方向電圧[V])/順方向電流[A]

上記の式に代入すると今回使用する抵抗値は、

(5ー1.8)/0.02=160

となります。今回は160Ωとします。

7セグの点灯

回路

回路は以下のように作成します。配線が複雑ですが間違えないよ注意してください。使用しているピンはD2~D9とGNDです。7セグメントの端子と接続しているArduinoの端子は下記の表で確認してください。

7segment_breadboard
Arduino7セグメントLED
D21E
D32D
GND3GND
D44C
D55DP
D66B
D77A
GND8GND
D89F
D910G

プログラム

プログラムは以下の通りです。ArduinoIDEにコピペして使用してください。

 

プログラムについて説明します。boolean Num_Array[10][8]は、10通りの点灯方法があり、点灯させることができるLEDは合計で8個あるので8個の要素を持った配列を10個宣言しています。8個の配列の要素は使用するデジタルピンの番号である{2,3,4,5,6,7,8,9}です。1はHIGHでその端子を点灯させ、0はLOWでその端子を消灯です。今回のプログラムでは、左から順に0,1,2,3,4,5,6,7,8,9と点灯するように配列を宣言しています。各数字の表示方法は下記の表を参考にしてください。

7segment_table_1
7segment_table_2

setup文では、使用するデジタルピンをfor文を用いて全てをOUTPUTに設定しています。D2~D9までのデジタルピンを使用するので、for文は、iの値が9以下になるまで繰り返すという意味です。また、iの初期値は2で、繰り返されるたびに+1しています。

void LightNumber(int number)という独自関数の中身について説明します。この関数は、指定した数字(0~9)を表示します。digitalWriteの「t+2」は、tに0から繰り返すたびに「+1」ずつ加算されD2~D9までの端子のHIGHかLOWを設定します。Num_Array[number][t]の「number」は表示したい数字が入ります。この配列は0~9の順に表示できるようにしているので、指定すれば指定した数字を表示させるための8個の要素の入った配列が指定されます。「t」には先ほど述べたように0~7に順に値が入ります。8個の要素を指定するために代入していますが、なぜ0からと思う方もいると思います。配列は、0、1、2、3……と数えるので0から代入します。

loop文では0~9の数字が1秒毎に表示させます。delayは単位がミリ秒なので1000を入れています。

最後に

説明した文章の中でわからない言葉があった際は、問い合わせ又はSNSでの連絡してください。

今回の記事を読んで気になった方は下記よりSNSのフォローをよろしくお願いいたします。また、YouTubeにも様々な動画を載せているのでご覧ください!

コメント