ラズパイ5で7セグメントLEDに数字を表示する

ラズパイ5で7セグメントLEDに数字を表示する

電子工作をあまりやったことない私が、7セグメントLEDでLチカ、もといセグチカをするという内容です

動作環境

  • 使用機器:ラズパイ5 (8GB RAM)
  • OS:bookworm

使用する7セグメントLED

今回使用するのは5161ASのLEDです

以下がピン配置となっています


7セグメントLEDのピン配置
引用元: https://docs.sunfounder.com/projects/3in1-kit-v2/ja/latest/components/component_7_segment.html

カソードコモンとなっているので、各セグメントに対応したピンの電圧をHighにすれば、任意の場所を点灯させることができます。

抵抗の計算

モチロンそのまま電流を流す訳にもいかず、抵抗が必要になります。


そんな時はデータシートを見ましょう。以下のような記述があると思います。

順方向電圧(Forward Voltage)1.8V
最大電流(Continuous Forward Current Per Dice)30mA

ラズパイのGPIOピンからは3.3Vの電圧が出力され、20mAの電流を流したいと考えると、抵抗は、以下のように計算できます。

( 3.3 - 1.8 ) 0.02 = 75 [Ω]

このように、LEDに対しては、75Ωの抵抗があれば良いのですが、GPIO的には、最大で20[mA]×8=160[mA]の電流が流れちゃって、コレは大きい気がするので、220Ωの抵抗を使うことにしましょう


セグメント×7+ドットで、抵抗は8個必要になります。

カソードに一つではダメな理由

カソード側に一つ抵抗があれば良いのでは?と思うかもしれませんが、そうしてしまうとどこのピンをHighにするかで、各ピンに流れる電流の値が変わってきますので、表示する数字によって明るさが変わってしまうという事態が発生してしまいます。


ですので、面倒ですが、抵抗は8個必要になってくる訳ですね。。

配線図

配線図は以下です。配線は、、あんまりうまくないですね!

7seg配線

回路図も載せたかったけど、作り方がわからなかったよ。

プログラム

以下が、0から9までの数字を表示するプログラムです。


seg_numに、各数字に対応するセグメントのピン番号をリストで格納して、GPIOライブラリを用いてfor文で順番に光らせています。


しかしなんと、現在はRPi.GPIOは互換ライブラリでしか使えず、今後新しく開発する場合は、gpiozeroの使用が推奨されているみたいです!

segment-led.py

結果

実行結果です。0.5秒ごとに数字が切り替わってます。ヤッタネ٩( ᐖ )٩

まとめ

こうして、無事に数字を表示させることができました。

やる前は、一個のピンに対し適当に信号を流せば、簡単に表示できると思ってましたが、想像以上にピン数が多くて配線も複雑でした。