2016/07/17(日) [n年前の日記]
#1 [raspberrypi] Raspberry Pi3でLチカ
「Lチカ」とは、「LEDをチカチカと光らせる」の略、でしょうか。分かりませんが。
先日、秋月電子通商さんから、赤いLEDやら、ブレッドボートやら、色々購入したので、Raspberry Pi3 で光らせてみようかと。
「はぁ? LEDが光ったとして、ソレが何なの?」
「LEDなんか周りで光りまくりじゃん」
「そんなもんを今更わざわざ光らせるとか、意味わかんない。バカなの?」
…などと言われるかもしれんけど。LEDという電子部品をコンピュータから制御できるってことは、その延長線上で、モータを制御したり等、色んなモノを制御できる道筋が見えてくるわけで。プログラミングで言うところの「Hello World」ですよ。「Hello World」が表示できれば最低限の環境構築は完了で、後はひたすらソースを書くだけ、てな状態になるわけで。Lチカも似たようなもんです。
先日、秋月電子通商さんから、赤いLEDやら、ブレッドボートやら、色々購入したので、Raspberry Pi3 で光らせてみようかと。
「はぁ? LEDが光ったとして、ソレが何なの?」
「LEDなんか周りで光りまくりじゃん」
「そんなもんを今更わざわざ光らせるとか、意味わかんない。バカなの?」
…などと言われるかもしれんけど。LEDという電子部品をコンピュータから制御できるってことは、その延長線上で、モータを制御したり等、色んなモノを制御できる道筋が見えてくるわけで。プログラミングで言うところの「Hello World」ですよ。「Hello World」が表示できれば最低限の環境構築は完了で、後はひたすらソースを書くだけ、てな状態になるわけで。Lチカも似たようなもんです。
◎ LEDと抵抗値。 :
今回購入したLEDは、
_3mm赤色LED LT3U31P 250mcd
。秋月電子さんのサイトには、
_LT3U31Pのデータシート(pdf)
も載っている。それによると、順電圧 1.85V、電流 20mA を流すと、250mcd の明るさで光るよ、と書いてあるように見える。自信無いけど。
LEDを光らせるためには、えてして直列に抵抗を繋いで、電圧や電流を調整しないといけない。抵抗値の求め方は、これも秋月電子さんのサイトで、親切にも計算の仕方が載っている。
_抵抗の計算方法(led-r-calc.pdf)
例えば、電源電圧が3.3Vと仮定すると、繋げる抵抗値は…。
待て。あわてるな。これは孔明の罠だ。
単に光らせるだけなら、その抵抗値でいいのだろうけど。今回は Raspberry Pi の GPIO を使って光らせたいわけで。しかし、Raspberry Pi の GPIO には、流せる電流の制限があるから…。
_ツール・ラボ >> 第22回 Raspberry PiのGPIO概要
_Raspberry Pi LED点滅(Lチカ) 抵抗の決め方 : 電子工作と3DCAD
ということで、「データシートに書いてあるから」と、20mA を流したらマズイ。GPIOに合わせて、ココは 3mA程度を流すことにする。
「ちょっと待てよブラザー。データシート上では20mA流すことになってるのに、3mA程度を流しても光ってくれるのかい?」
ソレは…ぶっちゃけ試してみないと分からない。LEDの各製品によってスペックが違うので。その程度でも電流の大きさに応じて光ってくれるヤツも居れば、最小でもンmAは流してくれないと俺は光らないぜ、ってヤツも居るので。
LEDを光らせるためには、えてして直列に抵抗を繋いで、電圧や電流を調整しないといけない。抵抗値の求め方は、これも秋月電子さんのサイトで、親切にも計算の仕方が載っている。
_抵抗の計算方法(led-r-calc.pdf)
LED抵抗の基本的な計算式は次のようになります。あるいは、 _ツール・ラボ >> 第20回 LEDに接続する抵抗値を計算する も参考になるかと。
(電源電圧[V] - 順方向電圧降下[V]) ÷ 順方向電流[A] = 抵抗値[Ω]
例えば、電源電圧が3.3Vと仮定すると、繋げる抵抗値は…。
(3.3V - 1.85V) / 0.02A = 72.5Ωつまり、72.5Ωの抵抗を繋いでやれば、このLEDは定格で光ってくれるはず。ということで、72.5Ωぐらいの抵抗を探して…。
待て。あわてるな。これは孔明の罠だ。
単に光らせるだけなら、その抵抗値でいいのだろうけど。今回は Raspberry Pi の GPIO を使って光らせたいわけで。しかし、Raspberry Pi の GPIO には、流せる電流の制限があるから…。
_ツール・ラボ >> 第22回 Raspberry PiのGPIO概要
- GPIOピン1本あたりの最大電流は16mA
- 複数本のGPIOピンを使用する場合、同時に流せる電流の合計は50mAまで
_Raspberry Pi LED点滅(Lチカ) 抵抗の決め方 : 電子工作と3DCAD
Raspberry Piクックブックによれば、出力ピン1本あたり3mAを超える電流を流すと、寿命を縮めるおそれがあるそうです。
なので、電流制限抵抗も3mAとなるように抵抗値を選ぶほうが良いと思われる。
ということで、「データシートに書いてあるから」と、20mA を流したらマズイ。GPIOに合わせて、ココは 3mA程度を流すことにする。
(3.3V - 1.85V) / 0.003A = 約483Ω483Ωより大きい抵抗を繋げてやればいい、ということになる。
「ちょっと待てよブラザー。データシート上では20mA流すことになってるのに、3mA程度を流しても光ってくれるのかい?」
ソレは…ぶっちゃけ試してみないと分からない。LEDの各製品によってスペックが違うので。その程度でも電流の大きさに応じて光ってくれるヤツも居れば、最小でもンmAは流してくれないと俺は光らないぜ、ってヤツも居るので。
◎ 抵抗値の見方。 :
ひとまず、工具箱の中を漁ってヨサゲな抵抗を探したり。「青灰茶金」の抵抗が見つかった。…ところで、最近自分も老眼が進んだようで、眼鏡を外さないと近い距離が見えないんですよね。探すのに10分ぐらいかかった。それはともかく。
抵抗器は、一般的には表面に4本の線が塗られていて、その線の色で抵抗値が分かるようになってる。 _抵抗のカラーコード や、 _抵抗器のカラーコード を眺めれば分かるだろうか…。左から順番に、2桁の数字、10のn乗、誤差、を表してる。
色と数値の対応は以下の通り。
なので、「青灰茶金」の抵抗は、68(青灰) × 10の1乗(茶) = 680Ω、誤差は±5%(金)、の抵抗値のはず。なんだけど。ホントに合ってるのかな。自信が無い。抵抗値を読んだのなんて、下手すると高校以来だし…。不安になったのでテスターを持ち出してきて測ってみたら 650Ωぐらいの表示になったので、まあ、おおよそ合ってるのではないかと…。
計算で求めた483Ωより大きいけど、抵抗が大きければ流れる電流は少なくなるので、GPIOが壊れにくくなるはず。なので、これでいいやと。
抵抗器は、一般的には表面に4本の線が塗られていて、その線の色で抵抗値が分かるようになってる。 _抵抗のカラーコード や、 _抵抗器のカラーコード を眺めれば分かるだろうか…。左から順番に、2桁の数字、10のn乗、誤差、を表してる。
色と数値の対応は以下の通り。
黒 茶 赤 橙 黄 緑 青 紫 灰 白 0 1 2 3 4 5 6 7 8 9
金 : 10の-1乗 = 0.1、あるいは、誤差±5% 銀 : 10の-2乗 = 0.01、あるいは、誤差±10%
なので、「青灰茶金」の抵抗は、68(青灰) × 10の1乗(茶) = 680Ω、誤差は±5%(金)、の抵抗値のはず。なんだけど。ホントに合ってるのかな。自信が無い。抵抗値を読んだのなんて、下手すると高校以来だし…。不安になったのでテスターを持ち出してきて測ってみたら 650Ωぐらいの表示になったので、まあ、おおよそ合ってるのではないかと…。
計算で求めた483Ωより大きいけど、抵抗が大きければ流れる電流は少なくなるので、GPIOが壊れにくくなるはず。なので、これでいいやと。
◎ 回路図。 :
_Fritzing
というツールを使うと回路図っぽいものがサクサク作れるらしいので試しに導入。起動してから…。
こんな感じになった。
Fritzingの使い方が今一つ分かってないので謎の色がついてるけど、どういう繋ぎ方をしているのかは分かるだろうから、まあいいか…。
とりあえず、GPIO 18番とGNDに繋いでみたり。
- 上のほうの「ブレッドボード」を選ぶ。
- 画面に表示されてるブレッドボードを選択。右下のインスペクター欄で「full+」→「half+」に変更。
- 右上のパーツ欄で検索。「raspberry」で検索すると「RP3」もリストアップされるので画面にD&D。
- 右上のパーツ欄で「CORE」を選べば、抵抗やLEDが選べる。画面にD&D。
- 端子の上でマウスボタンを押してドラッグすると配線ができる。
こんな感じになった。
Fritzingの使い方が今一つ分かってないので謎の色がついてるけど、どういう繋ぎ方をしているのかは分かるだろうから、まあいいか…。
とりあえず、GPIO 18番とGNDに繋いでみたり。
◎ Pythonモジュールをインストール。 :
今回は Python でスクリプトを書いてLチカさせたい。なので、Raspberry Pi3 上で、PythonからGPIOにアクセスできるようにするためのモジュールをインストール。
sudo aptitude install python-rpi.gpioむ。既にインストール済みだった。最近の Raspberry Pi のOSは、至れり尽くせりってことでしょうか…。
◎ Pythonスクリプトを書く。 :
あちこちのサイトを眺めながらコピペ。led_flashing.py というファイル名で保存。
実行してみる。
光ったね! 親父にも光ったことないのに! などと1stガンダムのアムロになったつもりで意味不明な台詞を叫びたくなるぐらいにちょっとだけテンション上がってきました。
#!/usr/bin/env python # -*- coding: utf-8 -*- import RPi.GPIO as GPIO from time import sleep GPIO.setmode(GPIO.BCM) GPIO.setup(18, GPIO.OUT) for i in [1, 1, 1, 2, 2, 2, 4, 8, 16, 32]: t = 0.01 * i for j in range(4): GPIO.output(18, GPIO.HIGH) sleep(t) GPIO.output(18, GPIO.LOW) sleep(t) GPIO.cleanup()
実行してみる。
sudo python led_flashing.py
光ったね! 親父にも光ったことないのに! などと1stガンダムのアムロになったつもりで意味不明な台詞を叫びたくなるぐらいにちょっとだけテンション上がってきました。
[ ツッコむ ]
以上です。