line monitor
http://qiita.com/7of9/items/028556c5a819a6a8de96
http://qiita.com/7of9/items/69763fc0c0634e7dd687
の続き
Raspberry Pi2
7セグメントLED : C-361SR
抵抗 : 1.1kΩ
やりたいこと
7segment LEDにて0から9の数値とdecimal pointを表示したい。
考慮点
- C-361SRをRPi2に接続するときに、C-361SRのピン番号を若い値(2)から順番に接続する
- RPi2への接続もGPIOの左上(Pin#03)から下方向に接続する
上記について、記憶に頼らずに接続できるように実装を試みる。そうすることで、C-361SRの接続と取り外しが気軽にできるようになる。
なおRPi2に接続時はGND(Pin# 09)と3.3V(Pin# 17)を飛ばさないといけない。この点については、ダミーコネクタをあらかじめRPi2に挿しておくことで、誤接続を回避できるようになる。
GPIOテーブル
上記の接続に関する考慮点とC-361SRのデータシートから以下のようにテーブルを作成した
7seg a..DP | 7seg Pin# | RPi2 GPIO Pin# |
---|---|---|
a | 10 | 21 |
b | 9 | 19 |
c | 8 | 15 |
d | 5 | 11 |
e | 4 | 07 |
f | 2 | 03 |
g | 3 | 05 |
DP(h) | 7 | 13 |
7seg Pin# の1,6はコモン。
プログラム
プログラムは以下から成り立つ
- IPadrDisplay.py : メインプログラム
- dummyGPIO.py : RPi2コードをCentOS上で実行するためのダミー
- util7SegLED.py : 7segmend LED関連のコード
メインプログラム
from util7SegLED import info7seg_init, info7seg_on
import time
'''
v0.1 2015/11/28
- display 0..9 and decimal point
'''
while True:
info7seg_init()
for idx in range(0, 11):
info7seg_on(idx)
time.sleep(2)
2秒おきに、0..9とdecimal pointを表示する。
7segment LED display
# import time
# --- selection of import based on the package ---
''' 1. with RPi.GPIO'''
import RPi.GPIO as GPIO
''' 2. without RPi.GPIO'''
# from dummyGPIO import CDummyGPIO
# GPIO = CDummyGPIO()
# -----------------
GPIO.setmode(GPIO.BOARD)
# -------------------
# [User Configuration]
# (Change according to the cable connections)
#
# Pin # of RPi2
# to Pin# of 7seg LED a..h
#
# > case.1 assignment so that user can connect starting from #2
# of C-361SR to left upper pin of RPi2 GPIO port
pinnum=[21, 19, 15, 11, 07, 03, 05, 13]
# -------------------
# [Do no change followings]
# onoff bit (7segment led > a..g)
onoff=[
[True, True, True, True, True, True, False, False ], # disp 0
[False, True, True, False, False, False, False, False ], # disp 1
[True, True, False, True, True, False, True, False ], # disp 2
[True, True, True, True, False, False, True, False], # disp 3
[False, True, True, False, False, True, True, False ], # disp 4
[True, False, True, True, False, True, True, False], # disp 5
[True, False, True, True, True, True, True, False], # disp 6
[True, True, True, False, False, True, False, False], # disp 7
[True, True, True, True, True, True, True, False], # disp 8
[True, True, True, True, False, True, True, False], # disp 9
[False, False, False, False, False, False, False, True], # disp .
]
# TODO: 0z > add out of range display
# TODO: 0z > add all off function
# -------------------
def info7seg_init():
for idx in range(0, len(pinnum)):
GPIO.setup(pinnum[idx], GPIO.OUT) # a..h
def info7seg_on(number):
for idx in range(0, len(pinnum)): # a..h
GPIO.output(pinnum[idx], onoff[number][idx])
上記においてユーザが変更するとしたら、pinnum[]への割り当て。
onoff[]は7segment LEDのaからgとDPのON,OFF割当て。こちらはC-361SR(
と同等品)を使う限りは変更しなくていい。
写真
RPi2接続部分
7segument LED
1.1kΩを接続
表示例(5)
"5"を表示している。ただし、ケーブルが2本足りなかったので、右上と上部は点灯しない状態。
(追記)
シールドタイプ
ケーブルをはやしても見にくいため、シールドタイプにした。
使用したもの
- 7セグメントLED : C-361SR
- 抵抗 : 1.1kohm x 8
- 基盤 : ICB-88 (Sunhayato)
- ピンヘッダ : MIL規格、I型20P
シールドタイプにしたところ、ケースの上蓋がしまらなくなった。
また、抜き差しは確かにできるが、ケースがついたままだと抜きにくいため、抜くときはケースをバラすことになる。
以下のページのようなピンヘッダを間にかませば、シールドそのものをケースの外に出せるかも。
http://cranberrytree.blogspot.jp/2014/12/raspberry-pi-b40.html
そうなるとシールドを抜き差ししやすいだろうか。
シールドタイプ v0.2
(追記 2015/11/29)
ピンヘッダを間に入れる方法に変更した。
また、GNDピンをジャンパで切断できるように変更。これで、LEDを表示しない時はジャンパをずらせばいい。
ピンヘッダでオス・メス変換した後。
ケースの上部に出ていて、シールドを抜き差ししやすい。
また、クリアケースの蓋の開け閉めにも支障がない。
7セグLED接続の3形態。
上から順番に作成してきた。
裏返した所。
もうちょっと細い線で実装してもよかったかもしれない。
使用した線はAWG24.