プログラミング素人のはてなブログ

プログラミングも電気回路も専門外の技術屋の末端が勉強したことや作品をアウトプットするブログ。コードに間違いなど見つけられたら、気軽にコメントください。 C#、Python3、ラズパイなど。

PWM制御

今日はPWM制御を試してみます。

PWMとは

PWMとはPulse Width Modulationといって、電圧のオンとオフをどれだけの割合で混ぜるかという方法によって、電圧の割合を制御するという方法です。
基準に対して~%の電圧が欲しいとき、電圧幅を小さくするのではなく、ON時間を全体の~%にすることで出力を制御するものです。

たとえば、通常5Vの電源(たとえばArduinoのDigital5 pin)からLEDの光量を調整するには可変抵抗を挟み、電流を調整することで実現しますが、PWMを用いるとソフト的に調整することができます。
(PWMの変更で実効電圧を変えることで光量を調整することが出来ますが、PWMはArduinoでは5Vと0Vの500Hzとか1kHzの高速の繰り返しなので、PWMを使えばLED駆動に抵抗が不要になるとは必ずしも言えません。また、専門的にはローパス回路をいれたりします。)


回路は以下です。



スイッチで制御する。

s51517765.hatenadiary.jp

 
の回路を改造しました。

図は、作り直しているため、若干異なりますがご承知ください。

ここで、PWM制御を使うため、LEDの電源はDigital 5pinを使います。
5V pinはArduinoの電源が入っているときは、常に5Vが一定に掛かっています。
一方、Digital pinのなかでも3, 5, 6, 9, 10, 11がPWM制御に使えます。
この辺は、Arduinoの資料を探せば出てきます。
http://arms22.blog91.fc2.com/blog-entry-501.html

図の作成も慣れてきたら、なるべく、配線の色を規則化したいと思います。
電源(+電圧)は赤、GNDは黒、制御線は黄というようにしていきたいと思います。




ここでは、スイッチを押したときに if elseで LEDに掛かる出力を変化するようにしました。
====================
else {
   analogWrite(led, 10); //PWM制御
   delay(300);
   analogWrite(led, 100);
   delay(300);
   analogWrite(led, 170);
   delay(300);
   analogWrite(led, 250);
   delay(300);
 }
====================

PWM制御を使うときはanalogWriteで記述します。
これまではdigital出力で HIGH or LOW で2値でしたが、Analog出力では0~255までが使えます。
256諧調でこれを8bitといいます。
100%が255となるように電圧が変わります。
Digital出力では抵抗を変化させることで電圧を変えますが、
PWM制御ではこのようにして、ソフト的に出力を変化させることができます。

さて、本格的に役立つものを作る計画として、給水ポンプを発注しました。↓↓