2016年2月15日月曜日

[Raspberry Pi] LEDの点滅

LEDは電流が流れると点滅します.この点では豆電球と同じですが,流れる電流の向き(極性)があることと,LEDはある程度の抵抗を挟んで電流の量を抑えないと破損する恐れがあるという点が異なります.
LEDには,下図のように,2本のリード線の長さに違いがあり,長い方をアノード,短い方をカソードとよび,電流の流れる方向は,アノードからカソードの方向になります.

LED 右側がアノードで,左側がカソード

今回の例では,LEDのアノードを,Raspberry Pi のGPIO(General Purpose I/O)14というピン(8番ピン)につなぎます.Raspberry Pi のピンヘッダーには40本のピンがありますが,下図のように,左上が1番ピン,その右が2番ピン,その左下が3番ピンという順で続きます(どの番号でも機能は同じになります).カソードにつなぐのは"GND(6番ピン)"です.


GPIO端子がスイッチの役割を果たします(LEDのオンオフ制御はRaspberry Pi で動作するプログラム).Raspberry Pi から電圧をハイ(3.3V)か,ロー(0V)に切り替えることができ,ハイであればLEDが点灯し,ローであれば消灯します.
また,GPIOはハイとローを出力する端子となるほか,入力端子にもなります.入力がハイ(3.3V)なのかロー(0V)なのかを調べて,プログラムに伝えます.GPIOは1(ハイ),もしくは0(ロー)かで動くデジタルI/Oです.

ブレッドボードを使って,下図のように配線します.
 
赤色LED: 3mm, Vf: 1.85V,抵抗: 330Ω*
この状態で,Raspberry Pi の電源を入れ,ターミナルを立ち上げ,以下のように入力していきます.

  $ sudo -s

これは,管理者(root)ユーザーを切り替えるコマンドです.コマンドプロンプトが"#"に切り替わり,管理者になります.このコマンドを実行すると,以下のように表示されます.

  root@raspberrypi:/home/pi#

続いて,今回利用するGPIO 14を有効にして,出力モードにするために,以下のように入力します(入力モードにするためには,"out"ではなく,"in"とします).

  # echo "14" > /sys/class/gpio/export
  # echo "out" > /sys/class/gpio/gpio14/direction

GPIO 14をハイ(1)にして,LEDを点灯させます.
  # echo "1" > /sys/class/gpio/gpio14/value

消灯するには,以下のように入力します.
  # echo "0" > /sys/class/gpio/gpio14/value

これを繰り返せば,LEDを点滅させることができます.

ここでは,シェルスクリプトを書いて,LEDの点滅を行ってみます."exit"コマンドで管理者モードを抜けて,ホームディレクトリに移動した上で,テキストエディタ(nano)を立ち上げます.

  # exit
  exit
  $ cd ~
  $ nano led.sh

立ち上がったテキストエディタ(nano)において,以下のように入力します.

#!/bin/sh
echo "14" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio14/direction

while true      #infinite loop
do
        echo "1" > /sys/class/gpio/gpio14/value
        sleep 0.5       #wait 0.5s
        echo "0" > /sys/class/gpio/gpio14/value
        sleep 0.5       #wait 0.5s

done

テキストエディタのnanoでは,"Control(Ctrl) + O"を押して,"Enter"キーを押すと保存されます.nanoを終了するには,"Ctrl + X"とします.
シェルスクリプトの実行は,ターミナルで,以下のように入力します.なお,GPIOなどを制御するコマンドは管理者権限(sudoコマンド)で実行する必要があります.

  $ chmod +x led.sh
  $ sudo ./led.sh

すると,以下の動画のようにLEDが点滅します.プログラムを終了(点滅を終了)させるには,"Ctrl + C"とします.

* 抵抗を330Ωとしていますが,当然抵抗の値を大きくすれば暗くなります(Raspberry Pi では330〜1kΩ程度の抵抗を挟んでおけば問題ありません).
LEDは,かける電圧を上げていくと,一定の電圧を超えた段階でそれまでに流れなかった電流が一気に流れ出すという性質を持っています.このときの電圧を「順方向電圧」といいます.先のLEDの説明の箇所に"Vf: 1.85V"とありますが,この"Vf"が順方向電圧です.電圧がこの値(1.85V)を超えた段階で大きな電流が流れるので,LEDを破壊しないようにするために,抵抗を挟む必要があります.LEDに流せる最大電流は製品によって異なります.この製品に関する説明のある秋月電気通称のサイトには,


明るさ:250mcd (200〜399mcd)(@20mA

という記載があります.これは,通常は@20mAまでに電流を抑えるようにという意味です.抵抗を330Ωとした場合の電流値を計算すると,以下のようになります.


抵抗にかかる電圧:3.3(V) - 1.85(V) = 1.45(V)
回路に流れる電流:1.45(V) / 330(Ω) = 4.4(mA)**

4.4(mA) < 20mA ですから,LEDの上限に収まっているので,LEDを壊してしまう心配は不要ということになります.
LEDのほとんどの最大電流は20mAですが,20mAの電流を流すと眩しくなりすぎます.また,Raspberry Pi では,1つのGPIO当たりに流される電流量は16mAまでとなっているので,330Ω程度以上の抵抗を挟んでおけば安全ということになります.加えて,Raspberry Pi はピンヘッダー全体で提供できる電流が最大50mA程度とされているので,多くの部品をつなぐときは注意が必要です.

** 1.4(V) / 330(Ω) = 0.00439...(A) ≒ 0.0044(A) = 4.4(mA)

0 件のコメント :

コメントを投稿