ものづくりブログ

ゼロからスタートして何かを作って世に出すまでのことを書くブログです.

Raspberry PiでLチカしてみる 解説編

f:id:daisukekmr:20150123005318j:plain

 

こんにちは.

 

前回コマンドラインを使ってLEDの点灯と消灯を制御しました.でもイマイチどういう命令を出してどういう仕組で制御したのかがわからなかったと思います.

 

今回はその辺りの解説です.

 

はじめにラズパイのGPIOのそれぞれのPIN(針山のような部分)の役割を説明します.

 

 出展: Design Spark BLOG「Raspberry Pi B+のご紹介」(http://www.rs-online.com/designspark/electronics/jpn/blog/introducing-the-raspberry-pi-b-plus)

 

この図はラズパイのUSBコネクタやLANコネクタを下に見たときのGPIOのPIN配置に対応しています.

 

この中で,3.3Vや5Vと書かれているPINは電源を供給するPINです.回路に電源を供給する際に,別途電池などを用意する必要が無く,これらのPINから供給できるということです.

 

次に,GNDと書かれているPINですが,これはグラウンドと言って電流が逃げていく道を表しています.回路と言うと下記のような図を思い浮かべますが,

 

f:id:daisukekmr:20150126002058p:plain

 

これとまったく同じ意味で以下のようにも表すことが出来ます.

 

f:id:daisukekmr:20150126002112p:plain

 

この図の中でVCC1 3Vと言う文字の左上にある素子が電源で,長い方が+,短い方が-側を表しています.

また,長さの異なる3本の平行線がグラウンドを表しています.

  

電流と言うのは電源の+側からグラウンドに流れていき,その途中にある素子はその電流の作用により仕事をするのです.

 

上の図で説明すると,スイッチがONになると,電源の+から流れた電流は抵抗でその流れを妨げられ,LEDを光らせ,電源の−側(グラウンド)に流れていきます.

 

電圧や電流については目に見えないためなかなか理解しづらいと思います.同様にグラウンドという概念も少し理解しづらいものです.そこで,機を改めてこの辺りは説明したいと思いますので,今日のところは電流は電源の+からグラウンドに向かって流れていくのだということを覚えていただければOKです.

 

上記の理屈で考えると,ラズパイの3.3Vや5VのPINとGNDのPINを接続すると電流が流れるのですが,その間に何も抵抗が無い場合ものすごい大電流が流れてしまい,最悪の場合ラズパイを破壊してしまいます.

 

そこで,その間に抵抗となるものを挟んで回路を作るのですが,それが前回の記事で最初に行った実験です.

 

PIN1 => 抵抗 => LED => PIN9

 

上記の順で接続したところ、ラズパイの電源が入ると同時にLEDが点灯しました.これはラズパイから回路に電源が供給されたことを表しています.

 

次に,前回の記事ではPIN1に接続していたケーブルをPIN7に接続しました.図でPIN7を見ると、GPIO 4と書かれています.これは4番目のGPIO PINと言う意味です.

 

ここに接続してラズパイの電源を入れても,それだけではLEDは点灯しませんでした.その後コマンドラインで下記のコマンドを実行してLEDの点灯/消灯をコントロールすることが出来ました[1].

 

echo 4 > /sys/class/gpio/export

echo out > /sys/class/gpio/gpio4/direction

echo 1 > /sys/class/gpio/gpio4/value

echo 0 > /sys/class/gpio/gpio4/value

echo 4 > /sys/class/gpio/unexport

 

それぞれの行でラズパイにどのような命令を出しているのか解説していきます[1].

 

echo 4 > /sys/class/gpio/export

ラズパイのgpioにgpio4という一時ファイルを作成する命令を出しています.このgpio4というファイルは,GPIO 4 PINの動作を司る情報が書き込まれるファイルです.

 

echo out > /sys/class/gpio/gpio4/direction

次に,作成したgpio4の方向を定めています.今回は電流を出力したいのでoutとしています.逆にセンサの信号を読み取るときはinとするはずです(未確認).

 

echo 1 > /sys/class/gpio/gpio4/value

ここでgpio4の値を1と書き込んでいます.GPIOはデジタル入出力なので,1か0の2通りの値しかありません.

ここで1とするとGPIO 4 PINの電圧が3.3Vになり,GND側に向かって回路中を電流が流れます.この作用によりLEDが点灯しました.なぜ3.3Vかというと、ラズパイの仕様でONは3.3V,OFFは0Vと決まっているためです.

 

echo 0 > /sys/class/gpio/gpio4/value

また、gpio4の値を0にすると,GPIO 4 PINの電圧が0Vになり,GND側と同じ電圧になるため,電流が流れなくなります.このためLEDは消灯します.

 

echo 4 > /sys/class/gpio/unexport

作成した一時ファイルを削除して終了です.こういうファイルを残しておくとどんどんメモリカード内が汚れていくのでずっと使うものでなければ削除してしまうのが賢明です.

 

 

 

以上が前回の記事で行ったことです.結構やっていることはシンプルだと思うのですが,やはり電圧や電流関連のイメージがつきづらいかもしれないですね.

 

次はWiring Piを使ってLチカをプログラムによって制御しようと思うのですが,その前にもしかすると電気理論の基本について書くかもしれません.

 

参考文献

[1]Raspberry Piで遊ぼう! 改訂第3版 〜 モデルB+完全対応