見出し画像

Raspberry Piでやってみた1(電子工作):Lチカ(LED点灯)


1.概要

 Raspberry Piをさわってみる時、一番初めにしてみる代表格がLED点灯になります。これができても何にもなりませんがとりあえず光らせてみました。

2.購入品一覧

 前提としてラズパイ本体はすでに購入・環境構築済みとします。購入品一覧は下記の通りです。

【LED点灯用購入品一覧】
●ブレッドボード:電気配線を簡単につなぐことが出来るボード
●LEDダイオード:発光する本体
●ジャンピングワイヤー(オス・メス):ブレッドボード上で電気回路を作るための配線
●抵抗:LEDに大きな電流が流れないようにするための抵抗体
※リンクではLEDやジャンピングワイヤーは重複しているため適宜選択

※下記LEDはアノード/カソードの向きが逆の可能性があるため注意

3.部材の理解

 Lチカをする前に部材の理解を深めたいと思います。

3-1.ラズパイのGPIO

 ラズパイにはGPIO(General Purpose Input Output)と呼ばれるピンがあります(出典:Raspberry Pi 2 & 3 ピン マッピング)。

 このピンにジャンピングワイヤーを使用して電源供給や部品との接続が簡単にできます。例として3.3Vの電源を供給する場合は「3.3V PWR」と「GND(基準電位0V)」に接続します。

3-2.ブレッドボードの構造

 ブレッドボードの構造として赤線と黒線に囲まれた2列は縦方向に回路がつながっており、記号と数値が割り振られているエリアはa-fとg-lが1つのラインとして接続されています。

3-3.LED(発光ダイオード)

 3-3-1.LEDの設置方向

 発行体であるLEDでは+(アノード)、-(カソード)の向きがあります。ブレッドボードでの差し込み位置は間違えないようにしましょう。

 3-3-2.LEDの詳細仕様

 LEDで確認が必要な仕様は「電圧」と「電流」です。DiCUNOのLEDはA=20mA、V=3.0~3.4Vです。LEDに内部抵抗はありますが、追加で抵抗を設置しないと過剰な電流が流れる恐れがあります。
※電流は記載がないですがおそらく最大定格だと思います。

 Raspberry PiのGPIOからの電圧は3.3V、USBは5Vのため、仕様に合わせて抵抗を選定する必要があります。LEDの順電圧が分からないため、とりあえず0Vとして計算してみました。

$$
\begin{aligned}
抵抗R&=\frac{電圧電圧-LEDにかかる電圧(順電圧)}{電流A}
\\&\fallingdotseq\frac{電圧V}{電流A}
\\&=\frac{3.3}{0.02}
\\&=165 \Omega
\end{aligned}
$$

4.LEDを光らせてみた1:シンプル

 まず初めに電源を制御せずにLEDを光らせたいと思います。常時電源が供給されているラズパイGPIOの電源とGNDを利用します。
 うまくいけば6のGNDに接続したタイミングでLEDが光ります。

【接続手順】
1.ジャンピングワイヤーを用いて、ラズパイの3.3V PWRのGPIO※->ブレッドボードの+(赤線)を接続
※3.3V PWRのGPIO番号は1または17
2.ブレッドボードの+(赤線)とボードの適当な場所をジャンピングワイヤでつなぐ
3.2と同じ列(図では25列g-l)に抵抗の片方を差し、もう片方は適当な場所に設置する
4.3と同じ列(図では14列g-l)にLEDのアノード(+)を差しカソード(-)は隣の列に差す。※アノード・カソードは逆にしないこと
5.LEDのカソード(-)と同じ列(図では13列g-l)をブレッドボードの−(黒線)に接続
6.ジャンピングワイヤーを用いて、ブレッドボードの−(黒線)->ラズパイのGND※に接続
※GNDのGPIO番号は6, 9, 14, 20, 25, 30, 34, 39

 ポイントとしては3章に説明したブレッドボードの仕組みを理解して同じ電気流れになるようにすれば2~5はどこに差しても問題ないです。

5.LEDを光らせてみた2:Lチカ

 前章では電源のGPIOを使用したため常に電気が流れている状態でした。次は電源を制御できるGPIOを使用して電源ON/OFFを繰り返すことでLEDを点灯させます。

5-1.配線(GPIO)の変更

 その他の状態はすべて前章と同じで、ラズパイの3.3V PWRを"GPIO xx"と記載があるGPIOに変更します。
 本記事では40番ピン(GPIO21)を使用しました。

5-2.プログラムの作成

 プログラムはラズパイの「Thonny Python IDE」を使用します。

 コードは下記の通りです。

[IN]
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM) # GPIO番号(ピン番号)をGPIO.BCM(GPIOの番号)に設定
GPIO.setup(21, GPIO.OUT) # GPIO21を出力に設定

#Lチカ関数
def led_blink(blinktime):
    try:
        while True:
            GPIO.output(21, GPIO.HIGH)  # GPIO21をHIGHに設定
            time.sleep(blinktime) #指定時間点灯
            GPIO.output(21, GPIO.LOW)  # GPIO21をLOWに設定
            time.sleep(blinktime) #指定時間消灯
    except KeyboardInterrupt:
        pass

    GPIO.cleanup() # GPIOを解放

led_blink(blinktime=0.5) #Lチカ関数を実行

5-3.動作確認

 コードをSave後に”RUN”を押すと動作が実行されます。指定したGPIO21がON/OFFを繰り返すことでLEDが点灯します。なお止める場合はIDE上で「Ctrl+C」を押します(KeyboardInterrupt)。

6.LEDを光らせてみた3:WebIOPIで遠隔操作

 5章で作成したLチカをRasberry Pi側ではなく別PCから遠隔操作してON/OFFを実施します。ツールとしてはWebIOPIを使用しており環境構築は別記事に記載しました。

 環境構築済みであれば下記コマンドでWebIOPIを起動できると思います。

[IN]
sudo systemctl start webiopi
sudo systemctl enable webiopi

 操作としては電源供給用のGPIO21の横ボックスをクリックすると「IN」=電源停止、「OUT」=電源供給となります。

7.LEDを増やしてみた(遊び用)

 本章は学習用ではなく遊び用(ただLEDの数量と配置を変更しただけ)のため、Rasberry Pi学習用としては不要です。

7-1.LEDを直列接続

 直列でLED設置数を増やしてみました。LED内にも抵抗があるため、LED数量を増やすとオームの法則で(電圧は3.3V固定のため)電流が小さくなりLEDの光が小さくなっております。

$$
電流I=\frac{電圧V}{抵抗R}
$$

7-2.LEDを並列接続

 今度はLEDを並列で接続してみました。並列回路の場合は各LEDにかかる電圧が一定になるためそれぞれのLEDに流れる電流は同じになります。
 並列回路の場合、電流は各LEDに分散されるので明るさが落ちる気がしたんだけど、合成抵抗が下がるため各明るさは数量によらず同じくらいになっているということなのかな????


参考資料

あとがき

 Linuxのセットアップ部分で結構忘れているところがあったため環境構築も含めてもう一度勉強しなおしかな・・・・・
 それにしても電機は苦手意識なるな・・・・

この記事が気に入ったらサポートをしてみませんか?