ラズベリーパイは基板上に「GPIO」と呼ばれる、ラズベリーパイ上で作成したプログラムから信号の入力・信号の出力といった制御をすることができるピンが存在します。
信号の入力とは「スイッチのON/OFF」「温度計で室温の計測」といった、ラズベリーパイの外の情報を入力(インプット)してプログラム上で使用することです。
対して、信号の出力とは「LEDを点灯させる」「モータを回す」といった、ラズベリーパイで制御した結果を外に出力(アウトプット)することです。
LEDはPWMサイクルのデューティ比を変えることで明るさを制御することができますが、「キャンドルIC」と呼ばれる簡単にLEDをロウソクの炎のように点灯させる部品が存在します。
この記事では、キャンドルICを用いてラズベリーパイのプログラム(Python)からLEDをロウソクのように点灯させる方法を解説します。
PWMを用いてLEDの明るさを制御する方法については以下で解説しておりますので、宜しければご覧ください。
【ラズパイ電子工作】LEDの明るさを制御する方法目次
1. 完成イメージ(LEDをロウソクのように点灯させる)
この記事で完成するものは以下のようになります。
なんということでしょう、見事にLEDがロウソクの炎ように点灯しています。(うーん…しているように見えますよね…)
今回はLEDをロウソクの炎のように5秒間点灯させます。
2. 使用する部品
今回使用する部品は以下の通りです。
『Raspberry Pi 3 Model B+』を使用します。※2020年5月時点で最新はRaspberry Pi 4になります。
LEDや抵抗といった各種部品や(後述する)ジャンパ線などを穴に差し込み、部品間を電気的に接続する板(ボード)です。
電子工作をする上で必須の部品です。
ブレッドボートに差し込み、電子部品の間を電気的に接続します。
↑の写真では両側が「ピン」になっており、ブレッドボートの穴に差し込んで使用します。
日常生活でも馴染みがある方も多いLEDは「Light emitting diode」の略で、発光ダイオードと呼ばれています。
電子工作で頻繁に使用するLEDは極性があり、プラスとマイナスを逆に接続しても光りません。プラス側をアノード(Anode)、マイナス側をカソード(Cathode)とも呼びます。
今回は赤色を使用します。(特殊なLEDは使いません。)
今回は「キャンドルIC」であるCDT3460-02を使用します。このICをラズパイのGPIOとLEDの中間に割り込ませることにより、LEDをロウソクの炎のように点灯させることができます。
今回は↓図の左側の回路で作成します。
CDT3460-02の基本仕様は以下の通りです。
動作電圧 | :DC3V標準(DC2~5V) |
動作電流 | :100μA |
出力電流 | :35mA |
消費電力 | :最大1.5W |
動作温度 | :0℃~70℃ |
LEDなど電子部品は適した電圧と電流が決められており、それ以上の電流を流してしまうと壊れてしまう場合があります。
抵抗は電流の流れを抑えることで、部品に流れる電流を抑える役割を担います。
今回は220Ω(オーム)の抵抗器を使用します。
電子工作をするため、これまで解説した部品の他にもスイッチやセンサなど、色々な部品が必要になってきます。個々で購入するには手間がかかるため、最初はセット品を購入することをおススメします。
私は以下のセット品を購入しました!
また、これからラズベリーパイを購入する場合、ラズベリーパイ本体を含めたセット品を購入することをおススメします。
ラズベリーパイ本体を収めるケースや、OSをインストールするためmicroSDカードなど必要なものを個々に購入する手間を省くことができます。
3. 回路図・配線の様子
キャンドルICを用いてラズベリーパイのプログラム(Python)からLEDをロウソクのように点灯させる回路を解説します。
回路図は以下のようになります。
キャンドルICのVDDピンにラズベリーパイのGPIO 18番ポートに接続します。(オレンジ色のジャンパ線)
キャンドルICのLEDピンとLEDのプラス側(アノード)に接続します。(白色のジャンパ線)
LEDのマイナス側(カソード)と抵抗器(220Ω)を接続します。
キャンドルICのVSSピンと抵抗器の片側をGNDに接続します。(黒色のジャンパ線)
配線の様子です。こんな感じになりました。
↑では、フラットケーブルでGPIOの全ピンをブレッドボードに接続しています。回路図と実際の配線は異なる部分がありますがご了承ください。
※電気的には「回路図」と同じ意味です。
4. プログラム(Python)
キャンドルICを用いてLEDをロウソクのように点灯させるプログラム(Python)は以下のようになります。
#必要なモジュールをインポート
import RPi.GPIO as GPIO #GPIO用のモジュールをインポート
import time #時間制御用のモジュールをインポート
#ポート番号の定義
Led_pin = 18 #変数"Led_pin"に18を格納
#GPIOの設定
GPIO.setmode(GPIO.BCM) #GPIOのモードを"GPIO.BCM"に設定
GPIO.setup(Led_pin, GPIO.OUT) #GPIO18を出力モードに設定
#GPIOの電圧を制御
GPIO.output(Led_pin, GPIO.HIGH) #GPIO18の出力をHigh(3.3V)にする
time.sleep(5) #5秒間待つ
GPIO.output(Led_pin, GPIO.LOW) #GPIO18の出力をLow(0V)にする
#GPIOをクリーンアップ
GPIO.cleanup()
プログラム上からはGPIO 18番ポートを5秒間High(3.3V)に出力しているだけです。(キャンドルICが勝手にロウソクの炎のようにLEDを点灯してくれます🔥)
#必要なモジュールをインポート
import RPi.GPIO as GPIO #GPIO用のモジュールをインポート
import time #時間制御用のモジュールをインポート
2,3行目で今回必要な「モジュール」を宣言します。
#ポート番号の定義
Led_pin = 18 #変数"Led_pin"に18を格納
使用するGPIOのポート番号を宣言します。この数値はGPIOのポート番号として扱い、後からポート番号を変更する場合はこの数値を変更します。
Led_pin | :GPIO 18 | :LED(赤) |
今回使用するGPIOはLED(赤)のみです。
#GPIOの設定
GPIO.setmode(GPIO.BCM) #GPIOのモードを"GPIO.BCM"に設定
GPIO.setup(Led_pin, GPIO.OUT) #GPIO18を出力モードに設定
GPIOの設定を行います。
GPIO.setmode(GPIO.BCM)
は、GPIOをポート番号で扱う方法に設定します。
GPIO.setup(Led_pin, GPIO.OUT)
は、GPIO 18番ポートを出力モードに設定します。
#GPIOの電圧を制御
GPIO.output(Led_pin, GPIO.HIGH) #GPIO18の出力をHigh(3.3V)にする
time.sleep(5) #5秒間待つ
GPIO.output(Led_pin, GPIO.LOW) #GPIO18の出力をLow(0V)にする
GPIO.output(Led_pin, GPIO.HIGH)
はGPIO 18番ポートの出力をHigh(3.3V)にします。ここでLEDは点灯します。
time.sleep(5)は何もせずに5秒間待ちます。この処理を行うために3行目でtimeモジュールをインポートしています。
GPIO.output(Led_pin, GPIO.LOW)
はGPIO 18番ポートの出力をLow(0V)にします。ここでLEDは消灯します。
繰り返しになりますが、プログラム上からはGPIOをHigh(3.3V)に出力するだけでOKです。キャンドルICが勝手にロウソクの炎のようにLEDを点灯してくれます。
#GPIOをクリーンアップ
GPIO.cleanup()
忘れがちですが、プログラムの最後にはGPIOをクリーンアップします。これが無い場合、GPIOの出力がLOWのままプログラムを終了したとしても、再度プログラムを実行した際に以下のような警告が発生します。
(訳)警告:このチャンネルはすでに使用されていますが、とにかく継続します。
この警告は無視してもプログラムは実行されますが、警告はなるべく無くした方が良いためプログラムの最後にGPIOをクリーンアップすることをおススメします。
5. おわりに
ラズベリーパイのプログラム(Python)からキャンドルICを用いてLEDをロウソクのように点灯させる方法について解説しました。
「面白い部品があるんだなぁ」と感心してしまいました。回路もプログラムの簡単に作成できるので気軽に試せるかと思います。
まだまだラズベリーパイ初心者の私ですが、以下の参考書が大変参考にさせて頂いております。
2冊とも初学者にも易しい内容になっており、ゼロからラズベリーパイを始める方にもオススメできる参考書です。