さくらのジャンク箱ロゴ

Sakura87がほぼ月刊でお届けするPCや電子工作と写真の備忘録てきなブログ @なんと20周年

Raspberry Pi 2 でPWM制御

この記事は9年ほど前に投稿されました。内容が古くなっている可能性がありますので更新日時にご注意ください。

IMG_4470_20150523

前回Raspberry PiのGPIO制御を行いましたが、今回はRaspberry Piに標準で用意されているPWM制御機能を使用してみたいと思います。

ご案内

この記事がよく「Raspberry Pi モーター制御」で検索されているようですが。この記事ではRaspberry Piでのモーター制御は扱っておりません。Raspberry Piでモーターを制御する方法を書いた記事は以下のものになります。

はじめに

PWMとはなんぞや?と言う人に簡単に説明すると「高速でオンオフを切り替えて擬似的に出力電圧をコントロールする」と言う変調方式です。日本語で言うと「パルス幅変調」になります。実際の所この制御にはなかなか複雑な回路が必要なようですが、最近ではマイコンに内蔵されたり、ソフトウェアで実現している場合もあります。

それで、標準のIOと比較して、このPWM制御をする利点としては。
1.モーターの速度やLEDの調光が出来る
2.消費電力が抵抗等を使用する場合に比べて低い
と言う二つが主ですね。

ただし、ラズパイのIOポートから得られる電力はそんなに大きくないので、モーター制御する場合はそれなりの回路を組む必要もあり、逆起電力も考慮する必要があります(と言ってもダイオード1つ噛ませるだけですが。)そんなわけで今回は部品点数が少なくて済むLED調光にチャレンジしてみたいと思います。

準備する物

1.Raspberry Pi 2
2.適当なLED
3.WiringPi

必要なソフトウェアのインストール

前回はOSの標準機能を使用してIO制御をしましたが、今回からWiringPiをつかいます。
このツールを利用すればコマンドラインでのGPIO制御も楽になりますし、C言語などのプログラミングでも必要になります。

まずは以下のコマンドで必要なソフトウェアをインストールしましょう。

git clone git://git.drogon.net/wiringPi
cd wiringPi
./build

これでWiringPiがインストールされます。(参考にしたサイト
※1番でエラーが出る場合は

apt-get install git-core

を行う。

PWM制御

いよいよ本題のPWM制御に入ります。

gpoio

2015年6月7日:GPIOポート表更新

前回もすこしふれたとおり、ラズパイ標準で用意されているPWM制御のポートは18番(GPIO.1)になります。このポートを使用してLEDの明るさを調整してみたいと思います。

初期設定

まず最初にGPIOポートを出力ポートに設定します。

gpio mode 1 out

そしてPWMポートに切り替えます。(うちの環境だとなぜかこうしないと制御できない)

gpio mode 1 pwm

(本来はこの後PWM制御する対象の仕様書とにらめっこしてもう少し詳細な設定をしなければなりませんが、とりあえずLEDの調光を行うのであればこれでOK)

制御

まず始めにラズパイ標準PWMは全部で1024段階(0-1023)なので、1023(最大)を指定してみる。

gpio pwm 1 1023

IMG_4470_20150523
するとこのように、前回のGPIOで実施したときと同じ明るさでLEDが発光する。
(今回はこの後の写真が撮りにくかったのでとりあえず今飲んでいるスコールのキャップをかぶせました。)

次に中央値である512を設定してみます。

gpio pwm 1 512

IMG_4471_20150523
さっきよりも暗くなりました。

次に最小値だとオフになってしまうので1…は暗すぎるのでとりあえず10あたりをしていしてみる。

gpio pwm 1 10

IMG_4473_20150523

キャップをかぶせた状態では光っていないようですが…。

IMG_4474_20150523

外してみるとうっすらと光っています。

最後に

IMG_4481_20150523 IMG_4482_20150523

右が明るさ最小(10)で左が最大(1023)カメラの露出設定は同一。
このように、PWM制御を使えばLEDの明るさが調節できることが分かった。

LEDの明るさが調節できると言うことは、フルカラーLEDを使えば様々な色の発光が可能になると言う事です。ただし、ラズパイのPWMは1ポートしか用意されていません。(本当は3ポート有るけど2ポートは映像出力に持って行かれてるらしい)

が、実は先ほどインストールしたWiringPiには「ソフトウェアPWM」機能が備わっているのでこの機能を使えばほぼ全てのGPIOポートで明るさ制御が可能となります。(先ほどの表のGPIO.xが割り振られているポートなら可能らしい。ただし制御幅が100段階と少ないですが。)

IMG_4487
ソフトウェアPWMで3ポート使用するとこのようにフルカラーLEDを使用して様々な色の発光が可能となります。

ここまではコマンドラインでIOポートを使用してきましたが、次回からはC言語によるプログラミングでもう少し複雑なこと(上のフルカラーLEDの制御)をやってみたいと思います。

総閲覧数:234 PV

“Raspberry Pi 2 でPWM制御” への1件のコメント

  1. […] 前回、Raspberry Pi 2のPWM出力にてLEDの明るさ制御をました。今回は、その時ちょっと話したフルカラーLEDを光らせてみようと思います。 […]

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください