4桁7セグメントLEDの使い方 [Arduino]
この4桁7セグはアノードコモンで「4つのアノード」(桁毎)と「1つの共通セグメント」(A,B,C,D,E,F,G,DP)の計12ピンで構成されています。
今回のスケッチでは1つの桁毎に数字を切り替えて表示しています。ですが、一つ一つ数字を表示しても4つの数字が同時に表示されているように見えます。これは「ダイナミック点灯方式」と呼ばれ、高速でHIGH/LOWを繰り返す事によってLEDを点滅させると発生する「残像現象」を利用しています。
OSL40562-IRの表示例
アノードコモン、カソードコモンとは
種類 | 共通 | 点灯 |
---|---|---|
アノードコモン | +側の電源がコモン(共通) | セグをLOWで点灯 |
カソードコモン | -側の電源がコモン(共通) | セグをHIGHで点灯 |
使用部品・材料
総額で約470円です。(Arduino本体の値段を除く)
部品/材料 | 値段 | 備考 |
---|---|---|
ブレッドボード | ¥270 | 秋月電子の通販コード(P-00315) |
ダイナミック接続4桁高輝度赤色7セグメントLED表示器 アノードコモン アノード共通接続 | ¥200 | 秋月電子の通販コード(I-03672) |
カーボン抵抗器 | 数円 | 470Ω(4個)を使用。 |
配線図
Arduinoのデジタル1-4ピンはOSL40562-IRの4つのアノードに470Ωでプルアップをしています。5-12ピンはOSL40562-IRの1,2...の順番で使用しています。
次の2枚は公式データシートより引用(OSL40562-IR.pdf)
OSL40562-IRのピン配置は部品裏面に「1」と「12」が印字されています。ピン番号は1から半時計周りとなります。
スケッチ(プログラム)
スケッチを実行すると7セグに左から1,2,3,4を表示します。
const int dig1 = 1; const int dig2 = 2; const int dig3 = 3; const int dig4 = 4; const int a = 12; const int b = 10; const int c = 8; const int d = 6; const int e = 5; const int f = 11; const int g = 9; const int dp = 7; // 全てのDIG(桁)をクリア void clearDigit(){ for(int i = 0; i < 4; i++){ digitalWrite((i+1),LOW); } } // 全てのセグ(A-G,DP)をクリア void clearSegment(){ for(int i = 5; i < 13; i++){ digitalWrite(i,HIGH); } } void setup() { // 全てのピンを出力にする for(int i =0; i < 13; i++){ pinMode((i+1),OUTPUT); } // 全てのDIG(桁)をクリア clearDigit(); // 全てのセグ(A-G,DP)をクリア clearSegment(); } void loop() { // DIG.1(桁数1) → 1を表示 clearSegment(); clearDigit(); digitalWrite(dig1,HIGH); digitalWrite(b,LOW); digitalWrite(c,LOW); delayMicroseconds(50); // DIG.2(桁数2) → 2を表示 clearSegment(); clearDigit(); digitalWrite(dig2,HIGH); digitalWrite(a,LOW); digitalWrite(b,LOW); digitalWrite(d,LOW); digitalWrite(e,LOW); digitalWrite(g,LOW); delayMicroseconds(50); // DIG.3(桁数3) → 3を表示 clearSegment(); clearDigit(); digitalWrite(dig3,HIGH); digitalWrite(a,LOW); digitalWrite(b,LOW);digitalWrite(c,LOW); digitalWrite(d,LOW); digitalWrite(g,LOW); delayMicroseconds(50); // DIG.4(桁数4) → 4を表示 clearSegment(); clearDigit(); digitalWrite(dig4,HIGH); digitalWrite(b,LOW); digitalWrite(c,LOW);digitalWrite(f,LOW); digitalWrite(g,LOW); delayMicroseconds(50); }
抵抗値の計算
Arduinoの電源は5V(V)。順方向電圧(DC Forward Voltage/VF)は標準2.0V。電流(DC Forward Current)の絶対最大定格(Absolute Maximum Rating)は20mA(IF)。オームの法則で算出すると最低でも150Ωは必要となります。
電流は5mAでも十分な輝度を得られるみたいです。その場合の抵抗値は640Ω。手元にありませんので470Ωを使用しました。(電流は約6.8mA)
掲示板
ArduinoやRaspberry Piなどの電子工作の掲示板を作成しました。質問やわからない事は電子工作 (Arduino・ラズパイ等)でユーザー同士で情報を共有して下さい。