ラズパイとMOSFETとPWM制御

この記事では、Raspberry Pi(ラズパイ)とMOSFETを使ったPWM制御で、100均のLEDライトを調光するやり方を解説していく。

100均LEDライトを分解すると、下の写真のように高輝度白色チップLEDが10個入っている。ラズパイのGPIO出力電流だけでは、10個のLEDライトの点灯は不可能である。

そこで、この記事ではMOSFETを使ってLEDをドライブする方法を紹介する。さらに、PWM制御によるLEDの明るさを調光する方法も解説する。

100均LEDを分解
100均LEDを分解

環境

項目バージョン
ラズパイRaspberry Pi zero WH
OSRaspbian 9.13
Python2.7.13/3.7.0
MOSFETIRF520
LEDUSB電源LEDライト(100均)

USB電源LEDライトの仕様

100均LEDライトの配線を調べると、次の回路になっていた。

100均LEDライトの回路図
100均LEDライトの回路図

10個のLEDは並列に接続されており、さらに4.7Ωのチップ抵抗が並列に入っている。抵抗をわざわざ並列にしているのは、抵抗の定格電力を超えないように、ワット数を増やすためだと思われる。

LEDライトを点灯させ消費電流を計測してみたところ、全体で640mAの電流が流れた。つまり、1つのあたりのLEDで64mAの電流となる。また、LEDのVF(順方向電圧)は3.4V程度である。

消費電流を測定
消費電流を測定

チップ抵抗の読み方

表記読み方
47347kΩ47 x 10^3
4724.7kΩ47 x 10^2
4R74.7ΩRを小数点に置き換える

MOSFET(IRF520)の使い方

今回使用したIRF520は、左からゲート(G)、ドレイン(D)、ソース(S)が割り当てられている。

MOSFET(IRF520)の端子割り当て
MOSFET(IRF520)の端子割り当て

MOSFETの使い方はいたって簡単。

  • ドレインソース間を導通させない場合は、ゲートの電位を2V以下の電圧にする。
  • ドレインソース間を導通させたければ3V程度以上の電圧をかける。

MOSFETの動作図
MOSFETの動作図

ゲートのコントーロールにより、MOSFETは電子スイッチの動作をするのだ。

LEDの明るさを変えるには?

LEDの明るさを変えるには、PWM制御で行っていく。

PWMとは、Pulse Width Modulationの略で「パルス幅変調」と呼ばれる。点灯と消灯を高速で繰り返すのだが、その比率を変えると見た目上の明るさが変わるのだ。またこの比率を、デューティ比デューティサイクルと呼ぶ。

PWMデューティ比の説明図
PWMデューティ比の説明図

Raspberry Pi・MOSFET・LEDライトを配線する

実際にRaspberry Pi・MOSFET・LEDライトを配線していこう。回路図と配線図を次に示す。

MOSFETとLEDライトの回路図
MOSFETとLEDライトの回路図

fritzingで書いたRaspberry Pi・MOSFET・LEDライトの配線図
fritzingで書いたRaspberry Pi・MOSFET・LEDライトの配線図

fritzingで100均LEDライトを表現できなかったので、普通のLEDで表記している。

LEDに供給する5V電源は、Raspberry Piとは別の電源から供給したほうが良い。GPIO14ピンを1kΩの抵抗を通してMOSFETのゲートに繋いが、この抵抗は保護用に入れてみただけなので、別になくても構わないと思う。

LEDを調光するPythonプログラム

配線ができたところで、Pythonプログラムを書いてLEDを調光してみよう。プログラムは次の通り。一定の周期でなめらかな点滅を繰り返す。

# -*- coding: utf-8 -*-
from gpiozero import PWMLED
from time import sleep
import numpy as np

LED = PWMLED(14)
LED.value = 0
frequcency = 0.5
phase = 3.0 / 4.0 * 2.0 * np.pi # スタート時のvalueを0にするため位相をズラしている
sample_rate = 100.0
duration = 1.0 / sample_rate
d_phase = frequcency * 2.0 * np.pi / sample_rate

while True:
    value = (np.sin(phase) + 1) / 2.0
    LED.value = value
    phase = phase + d_phase
    if phase > 2.0 * np.pi:
        phase = phase % (2.0 * np.pi)    
    sleep(duration)

gpiozeronumpy を使ったので、事前にインストールしておこう。gpiozeroライブラリの PWMLED 関数を使うと、簡単にPWMのデューティ比を変えることができる。frequcency の値を変えることで、点滅スピードを変化させることができるので色々試してみよう。

PWM信号でLEDライトを点滅
PWM信号でLEDライトを点滅

以上で説明を終わるが、PWM制御の応用編として、DCモーターの回転速度を制御した記事も書いたのでよかったら参考に。

PWM信号はラズパイなどのコンピュータを使わずとも、オペアンプなどで実現できてしまう。アナログ回路になるが、用途によってはこれで十分だったりするのでこちらの記事も参考に。

この記事で使用した関連製品はこちら

Akozon 5個 0-24V IRF520 MOSFETドライバモジュールボタンドライブ、Arduino用(3.5V / 5V)
Akozon 5個 0-24V IRF520 MOSFETドライバモジュールボタンドライブ、Arduino用(3.5V / 5V)

【5A出力電流】最大出力電流は5Aで、1Aを超える負荷を駆動する場合はヒートシンクを設置する必要があります。 【多用途】ポート:デジタル数量レベル。あなたが多くのプロジェクトに使用することができる1セットに合計5枚のドライバボードがあります。

Amazon
Raspberry Pi Zero W - ヘッダー ハンダ付け済み - ラズベリー・パイ ゼロ W ワイヤレス
Raspberry Pi Zero W - ヘッダー ハンダ付け済み - ラズベリー・パイ ゼロ W ワイヤレス

Amazon

Raspberry Piの参考書

Raspberry Pi クックブック 第2版 (Make:PROJECTS)
Raspberry Pi クックブック 第2版 (Make:PROJECTS)

本書は、全世界で多くのユーザーの支持を集めているマイコンボード「Raspberry Pi」を使いこなすためのレシピ集です。ハードウェアの基本、オペレーティングシステムの使い方、ネットワーク接続、Pythonプログラミングの基本を紹介した上デ、実際の作品製作に必要になる、高度なPythonプログラミング、GPIO(汎用入出力)、モーター、センサー、ディスプレイなどの使い方へと解説を進めていきます。

Amazon
写真や図解でよくわかる ラズパイZeroを使い倒す本 Raspberry Pi Zero/Zero W対応
写真や図解でよくわかる ラズパイZeroを使い倒す本 Raspberry Pi Zero/Zero W対応

本書ではRaspberry Pi Zero / Zero Wの概要から必要な周辺機器の説明、OSの導入やセットアップなどといった準備、そしてLinuxに初めて触れる人に向けてLinuxの基礎やシェルの操作などを解説しています。また、準備が整ったら実際に電子部品をRaspberry Pi Zero / Zero Wで制御する方法も解説しました。

KindleAmazon

Amazonでお得に購入するなら、Amazonギフト券がオススメ!

コンビニ・ATM・ネットバンキングで¥5,000以上チャージすると、プライム会員は最大2.5%ポイント、通常会員は最大2%ポイントがもらえます!
Amazonギフト券

あなたにおすすめ