7セグメントLEDのお稽古をする。意味のあるなしはどうだってよろしい。レッツゴー。
私は古株ぶっているが、実は若い頃に7セグLEDを扱ったことがない。子供の頃の電子工作はもっぱらラジオなどのトランジスタ回路、長じてからは仕事関係で5極真空管やマイクロ波の発振管などを扱っていた。
数値表示のためには、その頃の仕事関係では「ニキシー管」という数値表示のための真空管を扱っていた。これは放電管で、数字の形をした陰極が赤く光るものだ。
そういうわけで、7セグLEDを知らないのである。いや、無論、当時から7セグメントLEDは世の中にあったが、私の職場が特殊だったのである。
で、これが昨日秋月電子八潮店で買ってきた、1個60円の7セグLEDである。
OSL10561-IRA
さて、まずは点灯からだ。データシートから、抵抗と電流っ。
各素子……とあるから、として、
……まず、200Ωばかりつけておいてやればよいのだろう。この前買った集合抵抗の手持ち、8素子9ピンで330Ωのがあるから、それを付ければ多少暗いが10mA前後で光るだろう。
さっそく、全点灯で光らせてみよう。単に電源をくれてやって、抵抗に結線するだけだ。
回路図
光らせてみると、計算上の抵抗の倍近い抵抗値なのに、なかなかどうして、結構明るく光る。
単純全点灯で光らせてみたところ
次に、Arduinoをつないで、数字を表示させる。全点灯で電流を測ってみると67mAほど流れているので、電源はこのまま別建てのほうがいいだろう。
アノードコモンのLEDであるから、カソード側で制御しなければならない。集合抵抗では一本づつ制御できないので、330Ωの電流制御抵抗をバラで8本とりつける。それぞれの足をArduinoのデジタル2ピンから9ピンまで取り付ける。
スケッチをこう書く。点灯のパターンは配列に書くのが手早いだろう。
// // 7segmentLED_1.ino // 7セグメントLEDを1個動かす。 // 27.08.10(月) 1300~ // 佐藤俊夫 // // LED「OSL10561-IRA」 // LED 1 -> Digital 2 // LED 2 -> Digital 3 // LED 4 -> Digital 4 // LED 5 -> Digital 5 // LED 6 -> Digital 9 // LED 7 -> Digital 8 // LED 9 -> Digital 7 // LED10 -> Digital 6 // void setup() { for(int i = 2; i <= 9; i++){ pinMode(i, OUTPUT); } } void loop() { for(int i = 0; i <= 9; i++){ lighting(i); delay(1000); } } void lighting(int n){ const int pat[10][8] = { { LOW, LOW, LOW, HIGH, HIGH, LOW, LOW, LOW}, // 0 {HIGH, HIGH, LOW, HIGH, HIGH, HIGH, HIGH, LOW}, // 1 { LOW, LOW, HIGH, HIGH, LOW, HIGH, LOW, LOW}, // 2 {HIGH, LOW, LOW, HIGH, LOW, HIGH, LOW, LOW}, // 3 {HIGH, HIGH, LOW, HIGH, LOW, LOW, HIGH, LOW}, // 4 {HIGH, LOW, LOW, HIGH, LOW, LOW, LOW, HIGH}, // 5 { LOW, LOW, LOW, HIGH, LOW, LOW, LOW, HIGH}, // 6 {HIGH, HIGH, LOW, HIGH, HIGH, LOW, LOW, LOW}, // 7 { LOW, LOW, LOW, HIGH, LOW, LOW, LOW, LOW}, // 8 {HIGH, LOW, LOW, HIGH, LOW, LOW, LOW, LOW} // 9 }; int i = 0; for(i = 0; i <= 7; i++){ digitalWrite(i + 2, HIGH); } for(int i = 0; i <= 7; i++){ digitalWrite(i + 2, pat[n][i]); } }
アノードコモンなので、論理は負論理だ。
Arduinoとブレッドボードをこういうふうにする。
動かすと、ゆっくりカウントアップする。