作成日時:2015年05月23日 20時48分19秒
更新日時:2020年05月19日 08時48分47秒
この記事は9年ほど前に投稿されました。内容が古くなっている可能性がありますので更新日時にご注意ください。
前回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制御に入ります。
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
するとこのように、前回のGPIOで実施したときと同じ明るさでLEDが発光する。
(今回はこの後の写真が撮りにくかったのでとりあえず今飲んでいるスコールのキャップをかぶせました。)
次に中央値である512を設定してみます。
gpio pwm 1 512
次に最小値だとオフになってしまうので1…は暗すぎるのでとりあえず10あたりをしていしてみる。
gpio pwm 1 10
キャップをかぶせた状態では光っていないようですが…。
外してみるとうっすらと光っています。
最後に
右が明るさ最小(10)で左が最大(1023)カメラの露出設定は同一。
このように、PWM制御を使えばLEDの明るさが調節できることが分かった。
LEDの明るさが調節できると言うことは、フルカラーLEDを使えば様々な色の発光が可能になると言う事です。ただし、ラズパイのPWMは1ポートしか用意されていません。(本当は3ポート有るけど2ポートは映像出力に持って行かれてるらしい)
が、実は先ほどインストールしたWiringPiには「ソフトウェアPWM」機能が備わっているのでこの機能を使えばほぼ全てのGPIOポートで明るさ制御が可能となります。(先ほどの表のGPIO.xが割り振られているポートなら可能らしい。ただし制御幅が100段階と少ないですが。)
ソフトウェアPWMで3ポート使用するとこのようにフルカラーLEDを使用して様々な色の発光が可能となります。
ここまではコマンドラインでIOポートを使用してきましたが、次回からはC言語によるプログラミングでもう少し複雑なこと(上のフルカラーLEDの制御)をやってみたいと思います。
[…] 前回、Raspberry Pi 2のPWM出力にてLEDの明るさ制御をました。今回は、その時ちょっと話したフルカラーLEDを光らせてみようと思います。 […]