Arduinoと可変抵抗でLEDの明るさ制御
こんなこと、やります。
- Arduinoと可変抵抗でアナログ電圧値を読み取る
- 電圧値に応じてLEDの明るさをPWM制御でコントロールする
つかうもの
この記事でつかう主なものは、Arduinoと可変抵抗、LEDです。
Arduino
Arduino Uno Rev3を使用しました。
ほかのArduinoでも構いませんが、PWMに対応しているデジタルピンの番号が異なると思うのでご注意ください。
Arduinoをお持ちでないようでしたら おすすめArduinoどれを選べばいい?Arduinoで電子工作をはじめる方へ をご覧ください。
可変抵抗
可変抵抗はBカーブを使用したが、LEDの明るさのコントロールにはAカーブの方が向いているかもしれない。とはいえ、Bカーブでもプログラム次第ではAカーブのような特性を持たせることも可能だ。10kΩ〜100kΩ程度の範囲で選びましょう。
LED
LEDは色の種類によって順方向電圧(VF)が異なります。一般的に、赤、橙、黄、緑では1.8~2.2V程度、白、青のLEDは3.2V前後になります。動作テストのときは、定番の赤色ダイオードが使いやすいです。
その他の電子部品
LEDには220Ω〜1kΩ程度の抵抗をつなぎますので、あわせてご用意ください。
ブレッドボードやジャンプワイヤをお持ちでない方は揃えてください。
開発環境
項目 | バージョン |
---|---|
統合開発環境 | VS Code x Platform IO |
パソコン | macOS Big Sur 11.0.1 |
Macを使用しましたが、WindowsやLinuxでも構いません。また統合開発環境も、Arduino IDEで大丈夫です。
準備
Arduino、可変抵抗、LEDの配線
図のようにArduino、可変抵抗、LEDを配線してください。
LEDはPWMに対応しているピンのどれかへつなぎましょう。Arduino Unoの場合は、基板に「〜」のマークが付いてます。3番・5番・6番・9番・10番・11番がPWM信号に対応してます。 また、LEDは1kΩ程度の抵抗を直列にはさんで過電流を防止します。
可変抵抗の端子番号
可変抵抗の端子番号は図のようになってます。
可変抵抗の1番をGNDへ、2番をArduinoのAnalogピンの0番へ、3番を5Vへつなぎます。
LEDの極性 アノードとカソードの見分け方
LEDには極性があり、アノードをプラス極、カソードをマイナス極にしてつなぎます。通常、LED端子の長いほうがアノードになってます。もしも、端子の長さが同じで区別のつかない場合は、LEDの内部を覗いてみて、受光素子のついている大きい台座がカソードになります。
ArduinoでLEDの明るさを制御
こちらの映像のように、可変抵抗の回転によってLEDの明るさが変化するArduinoプログラムをつくっていきます。
ソースコード
こちらが全体のソースコードになります。
#include <Arduino.h>
int POT = 0;
int LED = 3;
void setup() {
pinMode(POT, INPUT);
pinMode(LED, OUTPUT);
Serial.begin(9600);
}
void loop() {
float v = analogRead(POT);
analogWrite(LED, v / 1023.0 * 255.0);
}
プログラムの解説
可変抵抗の分圧されたアナログ電圧値を、analogRead関数で読み取ります。
analogWriteを使って、引数に渡された値を元に、PWM信号をデジタルピンから出力します。ただし、PWMに対応しているデジタルピンを使ってください。 引数に渡すことのできる値は、0〜255までの範囲です。出力されるPWM信号は、デューティ比が0〜100%まで変化します。 こちらの写真は、Arduinoのデジタルピンから出力されたPWM信号を、オシロスコープで観察したものです。デューティ比が50%の時の波形になります。発展
PWM制御ができるようになると、さまざまなデバイスを制御できるようになって、やりたいことの幅が広がります。
MOSFETへの発展
さらに大きな負荷のもの、たとえばモータや複数のLEDがついた電球などを制御したい場合は、MOSFETのようなドライバが必要になります。
▼ Raspberry Piを使った記事になりますが、MOSFETの使い方の参考になります。
また、Raspberry PiやArduinoを使わなくてもPWMコントローラを作ることができます。詳しくはこちらの記事をご覧ください。
シリアルLEDの世界
通常のLEDの他に、シリアルLEDという素子があります。シリアルLEDを使うと、LEDの明るさや色を簡単に制御できます。
シリアルLEDとは
シリアルLEDとは、ひとつひとつのLEDはRGBフルカラーに対応しており、シリアルLEDを数珠つなぎにして増やすことができる素子です。たったの1本のデータ線で、いくつものLEDを制御できます。ネオピクセルと呼ばれるWS2812BのシリアルLEDが有名です。
▼ 詳しくはこちら。
サーボモータの制御
実は、サーボモータの角度制御もPWM制御で行なってます。
ArduinoのServoライブラリを使えば簡単にサーボモータを使うことができます。詳しくはこちらの記事をご覧ください。