【Raspberry Pi】 スイッチング(トランジスタ)
スイッチを作ろう
スイッチについて、教本のタクトスイッチ等の箇所をすっ飛ばしていましたが、物理的なスイッチを押す事はないというのが理由でした。
しかし電気的なスイッチはあっても良いかと思い、スイッチングの勉強をします。
例えばブレーキランプ。ある特定の状態の時に、スイッチをONにしたり、OFFにしたり出来ると幅が広ります。
物理的なスイッチとしては、タクトスイッチなどがありますが、電気的なスイッチとしては、リレー回路やトランジスタ等が使えます。
ある場所に電流が流れている時、別の場所の電流を流すというものです。
当初はリレー回路を考えていましたが、よりコンパクトなトランジスタを採用することにしました。
トランジスタについては、下記がとても参考になります。
http://www.binzume.net/library/robo/e_tr.html
NPNとかPNPとか何ぞやと思いましたが、スイッチの用途としては、電流を流してONにしたい時はNPN、
電流が流れていないときONにしたければPNPという理解をしております。
トランジスタには、エミッタ(E) コレクタ(C) ベース(B) の3つの足があり、電流の制御によりスイッチングを行います。
NPNでは、ベースの電位を上げると、コレクタからエミッタに電流が流れ、
PNPでは、ベースの電位を下げると、エミッタからコレクタへ電流が流れます。
ベースの電位の制御で、使い分けが出来るという事ですね。
NPNとPNPで逆の動きとなるので、二つ並べて実験してみます。
いつもの秋月商店です。
NPNタイプ トランジスタ2SC1815L-Y
PNPタイプ トランジスタ2SA1015GR
パッと見違いが分からないので、足の形が違うモノを購入しました。
試行錯誤の上、こんなものを作成。
分かりにくいので、fritzingを作成。
・・・あってるかな?
左がNPN、右がPNPです。足は同じ順序で、左から、エミッタ(E) コレクタ(C) ベース(B) となります。
ベースに電流を流すかどうかで、制御するため、ベースをラズパイのGPIOに接続します。(今回はGPIO4)
NPNでは、コレクタからエミッタに向けて電流が流れるため、エミッタ(左側)とLEDを接続し、抵抗を挟んでGNDと繋ぎます。
PMPでは、エミッタからコレクタに向けて電流が流れるため、コレクタ(中央)とLEDを接続し、抵抗を挟んでGNDと繋ぎます。
LEDに流すための電流のプラス側を、電池のプラスと接続します。 LED電源用の電池のプラス極と、NPNのコレクタ(真ん中)、PNPのエミッタ(左側)を接続します。
GPIO4のHIGHとLOWを繰り返す簡単なプログラムを作成し、LEDの挙動を確認してみます。
import RPi.GPIO as GPIO
from time import sleep
LED = 4
GPIO.setmode(GPIO.BCM)
GPIO.setup(LED, GPIO.OUT)
try:
while True:
GPIO.output(LED, GPIO.HIGH)
print("ON")
sleep(1)
GPIO.output(LED, GPIO.LOW)
print("OFF")
sleep(1)
except KeyboardInterrupt:
pass
GPIO.cleanup()
こんな感じになりました。
GPIO4がLOWの時、右側(PNP)のLEDが点灯し、GPIO4がHIGHの時、左側(NPN)のLEDが点灯しています。
ちなみにLEDの電源をラズパイから取った場合、両方のLEDが常時点灯状態となりました。電源は別にする必要がありそうです。
トランジスタには電流を増幅させる効果もあるようです。
小さな電流を大きな電流に変えるという点は、リレー回路と一緒ですね。
まとめ
NPNは一般的なスイッチに使えそう。
PNPはブレーキランプに使えそう。
Discussion