GPIOポートを活用したプログラミング2
~スイッチ入力・def関数・PWM制御~
6-1 スイッチ入力
1 タクトスイッチとプルアップ・プルダウン
2 プルアップVSプルダウン どっちを使う?
3 スイッチ入力
4 Buttonクラスのまとめ
6-2 def関数
1 関数ってなに?
2 実際にdef関数を使ってLEDを点滅させてみよう
3 関数の引数の書き方のルール・return文
4 Buttonクラスとdef関数の応用
6-3 PWM制御
1 PWM制御とは
2 RGBLED
3 光の三原色を体感

ロボット講座の6回目です。ロボットカーの製作に向けて、RaspberryPiのGPIOポートとその利用方法を学んでいます。前回はGPIOポートにLEDを接続して点灯制御しました。今回は、スイッチのON/OFFを入力し、状態に応じてLEDを点灯制御しました。前回は出力だけでしたが、今回は入力が加わります。ロボットカーの制御に必要な学習を増やしていきます。今回はdef関数やPMW制御についても学びました。
6-1 スイッチ入力
スイッチのON/OFFを入力としてGPIOポートを介してRaspberryPiに取り込みます。拡張ボードのGPIO4とGPIO12にタクトスイッチを接続します。
スイッチのプルアップとプルダウンについて学びました。スイッチONでGPIOへの入力をHightまたはLowにして1,0を入力しますが、スイッチをOFFの状態だと不定の状態になってしまい、誤動作の原因となります。このため、スイッチに抵抗を接続してVccまたはGNDに接続しておき、スイッチがOFFの時も不定にならないように、プルアップまたはプルダウンすることを学びました。今回はプルアップを使っていきます。

前回学んだ、LEDが点滅させるプログラムにスイッチ入力を処理するプログラムを追加し、スイッチを押すとLEDが点滅するプログラムをつくりました。さらに工夫してスイッチを押している間だけLEDが点滅するプログラムにも挑戦!!
6-2 defで関数を定義
ブレッドボード上に、赤・黄・緑のLEDを配置し、それぞれ点灯時間をsleep関数を使ってコントロールして、早くつけたりゆっくりにしたり、いくつかのパターンを実行しましたが、点灯するLEDごとに関数を実行するのでプログラムは何行にもなってしまいます。
そこでdefというpythonのキーワードについて学びました。defキーワードを使って関数を定義します。いくつもの関数をひとまとめにして名前をつけ、一つの関数として実行できるので、とても便利ですね。試しに、赤色のLEDを0.5秒間隔に点滅させる関数をつくりました。defで定義した関数の引数のルールについても学習しました。returnというキーワードを使って関数の結果をを関数終了後も引き継ぐことができます。


6-3 PWM制御
PWMとは「Pulse Width Modulation」の略でパルス(Pulse)の幅(Width)を変調(Modulation)して制御する方法です。一定の周期で信号をONとOFFに切り替える、つまり、1と0の信号の割合(デューティ比)を変えることによって平均の電力を変化させる方法のことです。これにより、モーターの回転速度を調整したり、LEDの明るさを変えたりすることができ、1か0のデジタルの回路をあたかもアナログ的に制御させることができるようになります。
gpiozeroライブラリーにはPWMLEDというクラスが用意されています。このPWMLEDというクラスを使うと、PWM制御によってLEDを明るくしたり暗くしたりできます。LEDはONかOFFしかありませんが、PWMによってONとOFFの割合を変えると人間の眼は暗くなったり明るくなったように錯覚します。人間の眼の残像効果ですが、アナログ的にLEDの明暗を変えられます。

RGBLEDを使って、赤・緑・青の3色をそれぞれPWM制御で明るさを制御して中間色を作り出してみました。光の三原色、赤・緑・青(Red・Green・Blue)で様々な色の光を作り出すことができます。RGBLEDは赤・緑・青の3色のLEDが一つの素子に組み込まれています。これと一見似ていますが、色の三原色というものもあります。光は加法混色と言って重ねると明るくなり、3色が同じ割合で混ざると白になります。色の場合は減法混色で混ぜると暗くなり、3色(マゼンタ・イエロー・シアン)が同じ割合で混ざると黒になります。

なかなか難解な部分でしたが、みんな理解できたようです。PWMを使うとモーターのコントロールができます。ロボットカーのコントロールには必須です。
次回は、いよいよロボットカーの製作に取り組みます。
