🤖

【Raspberry Pi】 スイッチング(トランジスタ)

2022/10/01に公開

スイッチを作ろう

スイッチについて、教本のタクトスイッチ等の箇所をすっ飛ばしていましたが、物理的なスイッチを押す事はないというのが理由でした。
しかし電気的なスイッチはあっても良いかと思い、スイッチングの勉強をします。
例えばブレーキランプ。ある特定の状態の時に、スイッチを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はブレーキランプに使えそう。

GitHubで編集を提案

Discussion