Raspberry PiでLチカ:LED・配線・抵抗の選び方・プログラム
Lチカとは
Lチカは、Raspberry Piを使った電子工作の最初のステップとしてよく紹介されるチュートリアルです。
Lチカとは「LEDを点滅(チカチカ)させること」です。
Raspberry Piに電子部品を接続し、プログラムでLEDの点灯や消灯を制御することで、電子工作とプログラミングの基本を学ぶことができます。そのため、多くの初心者にとって電子工作の第一歩として親しまれています。
必要な部品
Lチカに必要な部品は以下の通りです。
- Raspberry Pi本体(今回は5を使用)
- LED
- 抵抗
- ブレッドボード
- ジャンパーワイヤ(オス-メス)
- Python(Raspberry Po OSはデフォルトでインストール済)
電子部品については以下のキットを購入しました。Lチカを含む電子工作に必要な部品が一挙にそろいます。
LEDに大電流が流れると破損する可能性があるため、抵抗で電流を調整します。選択する抵抗はLEDの動作電圧・動作電流によりますが、概ね500Ω~1kΩ(1000Ω)の大きめを選んでおくと安全です。
LEDには+極(アノード)と-極(カソード)があります(極性)。足の長い方アノードが、足の短い方がカソードです。プラス・マイナスを間違えて接続すると点灯しないため注意しましょう。
配線
Lチカでは電源・LED・抵抗を直列で接続します。今回はLEDのカソードを抵抗を介してラズパイの11番ピン(GPIO17)に、アノードを6番ピン(GND,グラウンド)に接続します。
LEDをラズパイのGPIOピン(GPIO17)とグラウンドに接続し、GPIOピンから出力されるデジタル信号(3.3Vまたは0V)を用いて点滅を制御します。なお、適切な抵抗を挟んで電流を制限しています。
なお、Raspberry Pi 5のGPIOのピンアウト図(Raspberry Piの各ピンの役割や配置を示した図)は以下の通りです。
なお、今回使用するGPIOピン(Genera-Purpose Input/Output Pin)は汎用的な入出力ピンのことです。プログラムによって入力・出力として自由に使用できます。
- 入力
- 出力
外部デバイス(例:スイッチ、センサーなど)から信号を受け取る。デジタル信号(HIGH=3.3VまたはLOW=0V)を読み取る。
外部デバイス(例:LED、モーターなど)に信号を送り、動作を制御する。デジタル信号を出力し、HIGH=3.3VまたはLOW=0Vを外部回路に供給する。
今回は11番ピンのGPIO17を使用し、LEDを制御します。GPIO17ピンから出力されるデジタル信号(HIGH: 3.3V)でLEDを点灯させます。
抵抗の選び方
使用するLEDに適した抵抗値は
- GPIOの出力電圧:Vsupply
- LEDの動作電圧:VF
- LEDの動作電流:IF
を用いて求めることができます。
例えば、Vsupply=3.3V、VF=2.0V、IF=0.02Aとすると
この例では抵抗が65Ω以上であれば安全サイドの電圧・電流値になることが分かります。
以下の計算ツールで必要な抵抗を算出可能です。
GPIOの出力電圧:Vsupply [V]
LEDの動作電圧:VF [V]
LEDの動作電流:IF [A]
必要な抵抗値 [Ω]
0
なお、LEDの動作電圧が分からない場合は500~1kΩ(1000Ω)の大きめの抵抗を用いると安全です。一般にLEDの動作電流は10mA~20mA、動作電圧は色によって異なり
- 赤色:1.8-2.2V
- 緑色:2.0-3.0V
- 青色・白色:3.0-3.6V
程度です。計算より500Ω以上であれば間違いなく安全と言えるでしょう。なお、抵抗値が高いほどLEDは暗くなりますが、安全性が高まります。
プログラムとLチカの実行
Raspberry Piには、Python専用の軽量IDE「Thonny」が標準でインストールされています(※IDE:プログラミングに必要なツールがシンプルに1つにまとまったもの)。今回は、このThonnyを使用します。
「デスクトップ左上のラズベリーパイマーク→プログラミング→Thonny」を選択します。
Thonnyが起動したら下記のコードをコピー&ペーストします。
from gpiozero import LED
from time import sleep
led = LED(17)
while True:
led.on()
sleep(1)
led.off()
sleep(1)
Thonnyにコードを入力したら「Run(実行)」をクリックします。
LEDが点滅しました!
プログラムを停止するにはThonnyで「Stop(停止)」をクリックします。
これでLチカは完了です!
プログラムの解説
from gpiozero import LED
from time import sleep
led = LED(17)
while True:
led.on()
sleep(1)
led.off()
sleep(1)
Lチカのプログラムを細かく見ていきましょう。
from gpiozero import LED
from time import sleep
1行目、2行目では、Pythonのgpiozeroライブラリとtimeモジュールをインポートしています。
gpiozeroは、Raspberry PiのGPIOピンを簡単に制御するためのライブラリです。このライブラリを使うと、LEDを点灯させたり、モーターを動かしたりといったハードウェア制御が簡単にできます。例えば、LEDというクラスを使うことで、指定したGPIOピンに接続されたLEDを簡単に制御できます。
timeモジュールは、プログラムの実行を一時停止させるための便利な関数を提供するモジュールです。例えば、sleep関数を使うことで「指定した秒数だけ処理を停止」させることができます。これにより、例えばLEDを1秒間点灯させ、その後1秒間消灯させるといった動作を実現することができます。
Pythonではこのようなライブラリをうまく活用することで、複雑なハードウェア制御をシンプルに記述できるメリットがあり、多用されています。
led = LED(17)
led=LED(17)は「Raspberry PiのGPIOピン17に接続されたLEDを制御するためのコード」です。このコードは、Raspberry Piのピン17に接続したLEDを操作するために使います。LED(17)という部分で、GPIOピン17に接続されたLEDを使う準備をし、ledという名前でそのLEDを制御できるようにしています。
while True:
led.on()
sleep(1)
led.off()
sleep(1)
は無限ループを作るためのコードです。while Trueは常に「真(正しい)」という意味を持ちます。この場合while Trueという条件は、常に「真」になるので、while trueの中のコードは永遠に繰り返し実行されます。
led.on()は、LEDを点灯させる命令です。4行目で指定した通り、ledはGPIOピン17に接続されたLEDを指しており、この命令でそのLEDを点灯させます。sleep(1) は、プログラムを1秒間停止させる命令です。これにより、LEDは1秒間点灯し続けます。例えば、sleep(3)にすると3秒間点灯します。
led.off() は、LEDを消灯させる命令です。これでLEDが消えます。もう一度 sleep(1) を使って、LEDが消灯した状態で1秒間待機します。この点灯→待機→消灯→待機が無限に繰り返されることでLEDが点滅します。