## レッスン 2.1: LEDの明るさを調整する このレッスンに必要なハードウェア、Arduino IDEの設定、およびLEDモジュールと制御ボード間の配線は、**レッスン 1.1** と同様です。 **(1).説明:** 前回のレッスンでは、LEDの点灯・消灯を制御し、点滅させました。 このプロジェクトでは、PWMを使ってLEDの明るさを制御し、呼吸効果をシミュレートします。同様に、コード内のステップ長や遅延時間を変更することで、異なる呼吸効果を表現できます。 ![](../media/d1f48d97cbe0b6a29389c20533bfc00c.png)PWMは、デジタル手段でアナログ出力を制御する方法です。デジタル制御を用いて、異なるデューティサイクルの矩形波(高レベルと低レベルを絶えず切り替える信号)を生成し、アナログ出力を制御します。一般的に、ポートの入力電圧は0Vと5Vです。もし3Vが必要なら?または1V、3V、3.5Vの間を切り替えたい場合は?抵抗を常に変えることはできません。このような場合にPWM制御が必要です。 Arduinoのデジタルポートの電圧出力はLOWとHIGHの2つだけで、それぞれ0Vと5Vに対応します。LOWを0、HIGHを1と定義し、Arduinoが1秒間に500回の0または1の信号を出力するとします。 もし500回すべて1を出力すれば5V、すべて0なら0Vです。010101010101のように出力すると、出力ポートは2.5Vとなり、これは映画の表示に似ています。私たちが見る映画は完全に連続しているわけではなく、実際には1秒間に25枚の画像を出力しています。この場合、人間はそれを区別できませんし、PWMも同様です。異なる電圧を得たい場合は、0と1の比率を制御する必要があります。単位時間あたりに出力される0と1の信号が多いほど、より正確に制御できます。 ![](../media/9ce4c120ad6d763102eb2544777c8536.png) ![](../media/fa2a60fcb812e3bb3a4776ac96bef1cb.png) **(2).コードの説明:** 繰り返し処理が必要な場合、FOR文を使うことができます。 FOR文の形式は以下の通りです: ![](../media/f413519de8de75a850c98ac7695300fa.jpeg) FORの繰り返し順序: 1回目:1 → 2 → 3 → 4 2回目:2 → 3 → 4 … 2が成立しなくなるまで、「for」ループは終了します。 この順序を理解した上で、コードに戻ります: for (int value = 0; value < 255; value=value+1){ …} for (int value = 255; value >0; value=value-1){ …} この2つの“for”文は、valueを0から255まで増加させ、その後255から0まで減少させ、また255まで増加させる…という無限ループを作ります。 次に新しい関数が登場します —– analogWrite() デジタルポートは0と1の2状態しか持たないことは知っています。では、どうやってアナログ値をデジタル値として送るのでしょうか?ここでこの関数が必要になります。Arduinoボードを観察し、“\~”マークのある6つのピンを見つけてください。これらはPWM信号を出力できます。 関数の形式は以下の通りです: analogWrite(pin,value) analogWrite()はPWMポートに0〜255の範囲でアナログ値を書き込むための関数です。値は0〜255の範囲内で指定します。PWM機能を持つデジタルピン(例えばピン2、3、4、5、6、7、8、9、10、11、12、13、44、45、46)にのみ書き込み可能です。 PWMはデジタル方式でアナログ量を得る技術です。デジタル制御は矩形波を形成し、この矩形波信号はオンとオフ(高レベルまたは低レベル)の2状態のみを持ちます。オンとオフの時間比率を制御することで、0〜5Vの電圧をシミュレートできます。オンの時間(学術的には高レベルと呼ばれる)はパルス幅と呼ばれ、PWMはパルス幅変調とも呼ばれます。 以下の5つの矩形波を通じて、PWMについてさらに理解しましょう。 ![](../media/7c9452d3bb97cfee514ef146045866a8.png) 上図では、緑の線が1周期を表し、analogWrite()の値はデューティサイクル(Duty Cycle)と呼ばれる割合に対応します。デューティサイクルは1周期内の高レベル時間を低レベル時間で割ったものです。上から順に、最初の矩形波のデューティサイクルは0%で対応する値は0です。LEDの明るさは最も低く、つまり消灯状態です。高レベルの時間が長いほどLEDは明るくなります。したがって、最後のデューティサイクルは100%で255に対応し、LEDは最も明るくなります。25%は暗めを意味します。 PWMは主にLEDの明るさ調整やモーターの回転速度制御に使われます。 スマートロボットカーの制御において重要な役割を果たします。