今回は本を頼りに、LED点滅プログラムをつくります。
最後のほうで、電流制限抵抗の決め方にも触れていきます。
IMG_3811

部品・材料

  • 赤色LED 1個
  • 300Ω抵抗器 1個(130Ω以上ならなんでもいい)
  • ジャンパワイヤ 2本
  • ブレッドボード 1個
  • Raspberry Pi model B 1個(ラズパイならなんでもいいと思う)

回路

8
LEDは足の長いほうがプラスですよ、気を付けて。
GPIO 25ピンに抵抗器、LEDをつなぎ、最後はGNDにつなぎます。
9

プログラム

開発環境の起動にはターミナルを使用します。
sudo idle &
これでPythonの開発環境IDLEが実行されます。
管理者権限で実行しないと、GPIOの制御ができないようです。

最初はPython Shellというデバック用の画面が表示される。
このままではプログラムは書けないので、File>New Windowを選択し、エディタ画面を表示する。

import Rpi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(2,GPIO.OUT)

try:
 while True:
  GPIO.output(25,GPIO.HIGH)
  time.sleep(0.5)
  GPIO.output(25,GPIO.LOW)
  time.sleep(0.5)

except KeyboardInterrupt:
 pass

GPIO.cleanup()

プログラムの詳しい説明は、参考書籍がわかりやすい。
参考:Raspberry Piで学ぶ電子工作 超小型コンピュータで電子回路を制御する (ブルーバックス) - Amazon  

1行目はGPIO制御のためのインポート文。
2行目はタイマーのインポート文。
1,2行目は深く考えてもしょうがないおまじない。

4,5行目は初期化命令
疑問に思ったのが、3行目のGPIO.setmode(GPIO.BCM)ですね。
どうやらBCMとBOARDの2種類があるようです。
ボードのピン番号か、GPIOのピン番号のどちらで指定するかを選ぶみたいです。
とりあえずBCMで初期化しておけばいいのでしょう。

5行目はArduinoを触ったことがある人ならすぐわかる。
GPIO25ピンを出力にする文。

プログラムの本体はtryのブロック。
どうもPythonでは{}で囲うのではなく、インデントで区別するようだ。
中身は、whileの無限ループが待っている。
ここでLEDの点滅を繰り返す。

time.sleepは秒単位

except Keyboardinterrupt:のブロックでは、プログラムの終了をするとき用に書かれている。
プログラム実行後は、Ctrl+Cで終了することができるが、プログラムに終了時の処理を何も書かないとエラーが発生するので、書く必要がある。

終了の命令を受けたら、except...のブロックへ処理が移り、pass命令で次の命令に移る。
GPIO.cleanup()によって、GPIOの設定を解除する。
この処理を行わないと、プログラム終了後もGPIOの設定が生き残り、次のプログラム実行時エラーが発生する。

ここまで、書けたらSaveしてRun>Run Moduleでプログラムを実行する。

1_programming
何度も失敗を繰り返しながら、プログラムを成功させた…。
プログラムを実行したあと、やめるときは、Python Shellの画面上でCtrl+Cを押す。

これで問題なく動けば、LEDが点滅する。

動画


すごく短い動画

電流制限抵抗について

今回は、本に従って300Ωの抵抗器を使った。
(本当は330Ωと書いてあったが、探すのがめんどかった)

さて、今回参考にした本にはなぜその抵抗値の抵抗を使ったのかが、書かれていなかった気がするので補完してみる。

まず、回路設計する上での前提条件をあげてみる
  • GPIOピンの電圧は3.3V
  • LEDの電圧降下は2V(色によって変わる、データシートを見よう)
  • LEDの許容電流は20mA(色によって変わる、データシートを見よう)
LEDにかかる電圧は2Vで、流してよい電流は20mAと決まっている。
電流を調整するには抵抗器を使う必要がある。
その抵抗器の抵抗値をオームの法則にしたがって導き出さなくてはいけない。
そのためには、抵抗器にかかる電圧を知る必要がある。
10
まぁ、これはすごく簡単で、LEDにかかる電圧が2Vなのだから、3.3Vから2Vを引けばいい。
残った電圧が抵抗器にかかる。
ということで、抵抗器にかかる電圧は1.3Vとなった。

次に流す電流のことを考えなくてはいけない。
LEDの許容電流は20mAとなっているが、安全をみるために半分の10mA流すことにする。
11
図に書いた通りだが、抵抗器に流れる電流がそのままLEDに流れる。
ということは、抵抗器にかかる電圧と、流したい電流値から、その抵抗値がわかる。
オームの法則にしたがい計算した結果、130Ωとなった。

なので、130Ω以上の抵抗器を使えば安全にLEDを光らせることができる。

まぁ、そもそもGPIOから流すことができる電流値が8mAなので、10mAも流れることはないだろう。

というかGPIOが8mAしか流せないのだから、そこも前提にして考えるべきだったか?(よくわからん)
計算しなおすと
適切な抵抗値は、163Ωとなる。 

とりあえず300Ωぐらいの抵抗器を使えばよいのだ(アマチュア感)
わたしは抵抗器をさがすのがめんどくさいとき、1kΩの抵抗器をぶっさすこともある。
電流は小さくてもLEDは光る。 

追記(2015/12/27):
Raspberry Piクックブックによれば、出力ピン1本あたり3mAを超える電流を流すと、寿命を縮めるおそれがあるそうです。
なので、電流制限抵抗も3mAとなるように抵抗値を選ぶほうが良いと思われる。


Raspberry Piで学ぶ電子工作 超小型コンピュータで電子回路を制御する (ブルーバックス) - Amazon