7セグLEDの使い方・基礎編
7セグLEDを初めて使う人向けに使い方を記事にしてみました。
ちなみに、タイトルに基礎編と書いてますが今のところ応用編リリースは未定です。
対象は4桁表示が一つになったモジュールで小数点表示可能なものです、配線数が12本と多いですが接続は割と簡単でして、むしろ難しい(というか面倒な)のはプログラムの方だと思います。
ということプログラム&ライブラリーの使用方法も十分に説明していきます。
目 次
7セグLEDとは
7個の独立したLEDが内蔵されていて複数のLEDを組み合わせ表示することで数字等を表示させる。
以下の画像はZDS4-G369SRB-7.7(赤色・DP有り)です。
ちなみに、この7セグLEDは秋葉原のaitendoにて購入しました。リンク先はこちらです。
前回購入したBW428G-E1-10MM(緑色・時計表示、DP無し)も同じくaitendoにて購入。リンク先はこちらです。
数字の表示の仕方
下図に数字と英字(一部)の表示パターンを示します。
例えば数字の”3″を表示させるには”a,b,c,d,g”の5セグメントを点灯することになります。
7セグモジュールの種類
桁数、特殊記号表示(コロン、小数点等)などで何種類かあります。
7セグLED内部構造&駆動方式
アノード/カソード・コモン
内部にはLEDが7個(DP付きは8個)内蔵されてますが、カソードまたはアノードは内部で結線されており、それぞれ「カソード・コモン」、「アノード・コモン」と呼ばれる2種類があります。
使用した以下の2タイプは共にカソード・コモンタイプです。
- BW428G-E1-10MM(緑色・時計表示、DP無し)
- ZDS4-G369SRB-7.7(赤色・DP有り)
ダイナミック駆動
ダイナミック駆動とは、全体のピン数を減らす方法として考えられている、すなわち人間の目の残像現象を利用して、同時点灯を1桁のみにし、高速で表示桁を移動させることであたかも同時に複数桁が表示されているように見せる方法を使う。
何故ピン数を減らすのかと言うと、いままでの説明で分かるように7セグLED1桁にピン数が9本必要であり、桁数を増やすと総ピン数は単純計算で9本x桁数となり、4桁だと36本になる。Arduinoのデジタルピンは14本(アナログピンも含めると22本)しかないのでこのままではピン数不足になるからです。
このダイナミック駆動を使えば、必要ピン数=8本(セグメント数)+桁数となり4桁の場合12本ですむことになります。(下記回路図参照)
4桁7セグLEDモジュール構成
各LEDの電流を制限するために各LED素子(8個)に対し直列に抵抗を挿入する必要があるため抵抗(330Ω)を実装したモジュールの形で勉強会時には供給してます。
下図は、その画像です、12ピンコネクタ経由でArduinoと接続します、下図の中でカッコ内の英数字はArduinoの各ピン名称を表します。
<各信号名の意味>
- a,b,s,d,e,f,g:各セグメント名(冒頭の図を参照)
- DP:デシマルポイントの略で小数点のことです。
- C1 ,C2 ,C3 ,C4:各桁のコモン端子、C1が左端桁、C4が右端桁となります。
ArduinoNanoとの接続
以下の画像を参考に接続してください、接続するジャンパー線の数が多いですが、そのうち11本はArduinoのD2~D12まで一列に並ぶので、並びがキチンと整列さえしていればOKです。
尚、画像には温度センサーの配線が残ってますがこちらの配線は無視してください。
7セグLED制御プログラム
細かな点灯制御を実行してくれるライブラリーを使うことで非常に簡単なプログラムを書くだけで表示が可能です。
ライブラリー:「SevenSegment_BW428.h」
これを使うことで、
- 各数字に対応した各セグメント点灯パターン
- ダイナミック駆動制御
等の制御を実行してくれます。
このライブラリーの内部での処理については次回以降の記事に譲るとして、とりあえず使い方だけを説明します。
ちなみに、今使おうとしている7セグLEDの型番がZDS4…なのになぜライブラリー名がBW428…なのかというと、単にBW428の時に作成したライブラリーがそのまま使えるからです。
以下に順を追って使用方法を説明します。
STEP1:ライブラリー使用宣言をする。
#include <SevenSegment_BW428.h> SevenSegment_BW428 sevsegBW428;
とりあえず「このライブラリを使います宣言」と理解してもらってよいです。この通り正確に入力(すべて半角)する必要がありますが、2行目の2文字目”sevsegBW428″は任意の名称でOKです。例えば7segLEDに関係ない”taroLED”とかの変な名前でもOK。(でも自信なければ、とりあえずこの通り入力してください)
それとこの2行の入力する位置はとても重要でして必ずsetup()関数より前に入力するように。
前であればどこでも良くて別のライブラリー用の#include文との位置関係は関係ないです。要するにsetup()関数を実行する前に宣言を終了することが重要なのです。
STEP2:表示する数字を指定する
void loop() { sevsegBW428.disp(num,2); sevsegBW428.refresh(); }
このプログラムリストの2行目の”sevsegBW428.disp(num,2)”が表示文字を設定する関数です。
関数のカッコ内に2つのパラメータ(C言語ではこれを引数(ひきすう)と呼びます)があります、前者(第一引数)のnum変数が表示させる4桁の数字を表し、後者(第二引数)が小数点以下の桁数を表します。
STEP3:表示桁を移動させる(ダイナミック駆動)
STEP2では表示する数字を内部的に設定しただけで、このままでは4桁の数字表示がされません。
ダイナミック駆動なので同時にオンしているLED桁は一桁のみですので、これを順次右の桁までオンしているLEDを移動させる必要があります。
これを実行させのが”sevsegBW428.refresh()”関数です。この関数を実行するとオンしているLED桁が右に一桁移動します。なお、右端桁まで行くと次は左端桁に移動します。
この関数は表示桁移動のみ実行するので引数は必要ないのでカッコ内は空っぽです。(だからと言ってカッコは省略できません、カッコがあるから「これは関数なのだ」とわかるのです。)
表示させるだけの簡単なプログラム
以下に表示させるだけの簡単なプログラムリストを記述します。
表示する4桁の数値はnum変数に入れるようにしています。
delay(100)関数を入れているのはダイナミック駆動で表示桁を移動させる時間をゆっくりにさせて桁移動の具合を目視できるようにしてありますのでこのdelay値をいろいろと変えてみるとか、コメントアウトして無効化してみるとかして、どのように変化するかを確認してみてください。
以下のリストはそのままコピーできますのでArduinoIDEにコピペして使ってください。
#include <SevenSegment_BW428.h> SevenSegment_BW428 sevsegBW428; int num = 8427; //表示テスト用の数字(4桁以下、先頭桁の数字"0"は不可) void setup() { sevsegBW428.init(); } void loop() { sevsegBW428.disp(num, 2);//小数点以下桁数は"2"を指定 sevsegBW428.refresh(); delay(100); }