2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ApplibotAdvent Calendar 2023

Day 5

ArduinoでLEDの輝度をPWM制御する方法

Posted at

はじめに

この記事は「Applibot Advent Calendar 2023」の5日目の記事になります。

概要

ArduinoでLEDの輝度をPWM制御する方法と,その動作原理を簡単に解説します.

目次

  1. 動作環境
  2. 輝度を調節するコード
  3. PWM制御とは
  4. ArduinoにおけるPWM制御とLEDの輝度調節
  5. まとめ

動作環境

  • ELEGOO UNO R3 (Arduino UNO R3互換)

輝度を調節するコード

出力50%で9番ピンを光らせるコードです.
dutyRatioの値を0〜100の間で変化させることで,LEDの輝度を調節できます.

pwm.ino
const int pinNum = 9;
const int analogWriteStep = 255;
int dutyRatio = 50; //duty比[%]

void setup() {
    pinMode( pinNum, OUTPUT );
}

void loop() {
    int ledBrightness = analogWriteStep * dutyRatio / 100.0f;
    analogWrite( pinNum, ledBrightness );
}

PWM制御とは

PWMはPulse Width Modulationの略で,日本語ではパルス幅変調と言います.
その名の通り,パルスの幅を調節する制御方法です.

Arduinoに搭載されているような,ONとOFFでしか出力を制御できないデジタル出力ポートであっても,ON時間とOFF時間の幅を変更することによって制御対象の出力を滑らかに制御することができます.従って,LEDの輝度調節以外ではモーターの出力制御などに使われたりします.
↓イメージ
qiita_PWM概念図.png
全体のうちON時間が占める割合をDuty比といいます.上記コードはこのDutyを指定できるように書いています.

ArduinoにおけるPWM制御とLEDの輝度調節

上記コードでLEDの輝度調節をした際,人間の目には一定の明るさに見えますが,実際にはLEDは点滅しています.9番ピンから出力される電圧はON→OFF→ON...と高速で切り替わっていて,ArduinoではデフォルトでONとONの間が1ms(周波数が1kHz)に決められています.人間の目では1kHzの点滅を知覚することができないため一定の明るさで点灯しているように見えます.

まとめ

PWM制御を使うことで,ONとOFFのデジタル出力だけで任意の出力を得られる理由と,Arduinoでのプログラムの解説をしました.Duty比を自由に変更して,滑らかにLEDの明るさを変更できます.

「以上、Applibot Advent Calendar 2023 5日目の記事でした。」

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?