Arduinoで初めて回路を組み場合、LEDを使用して点灯・点滅させることが多いと思います。しかし、それだけでLEDの使い方を理解したと言えるでしょうか?この記事では、LEDの順方向電圧と整流特性に焦点を当てた回路を紹介します。
発光ダイオード
発光ダイオードは、何かの情報表示をするときに、点灯表示するための単純で効果的な方法です。直列抵抗を用いた通常の点灯については、ありふれた情報なので、ここではダイオードの挙動をより明確にするために、一風変わった例をご紹介しましょう。
この回路、一見すると違和感がします。4つのダイオードは直列で接続されているので、4つのダイオードすべてに直接電流が流れると勘違いするかもしれません。
しかし、直列接続により4つすべてのダイオード間で電圧が分割され、各ダイオードはその特性曲線により一定の順方向電圧を持っており、その電圧以下ではほとんど電流が流れないことを考慮しなければなりません。シリコンダイオードの場合、この電圧は約0.7 V(シリコンのバンドギャップに由来する)ですが、青色LEDの場合は約3 V(窒化ガリウムのバンドギャップに由来する)です。ダイオードを通過させて電流を発生させるためには、動作電圧が7Vを超えなければなりません。ここに5Vの電圧をかけた状態では、最初は何も起こりません。
Arduinoの出力がHIGHに設定されている場合、電流は出力端子から抵抗と下段の2つのダイオード(D2・LED2)を通って流れていきます。合計で約3.7ボルトの順方向電圧を持っているので、5Vの動作電圧で十分に電流を通過させられますが、電流の強さは抵抗の強さによって制限されます。電流が流れると、電流の強さに応じた明るさでLEDが点灯します。よって上段の2つのダイオード(D1・LED1)には電流が流れません。
出力がLOWに設定されている場合は、HIGHとは逆で、電圧源から上段の2つのダイオードと抵抗を経てArduinoの端子に電流が流れ、直接グランド(GND)に接続されます。これによって下段の2つのダイオードに電流が流れなくなります。
この機能をテストするには、パルス幅変調のデモを行ったプログラムを使用します。このプログラムにより、両方のLEDが交互かつ、緩やかかつ、上下にフェードできます。なぜ緩やかに変化するかというと、LEDの点灯・消灯は非常に速いので私たちの目はそれを知覚できないからです。その代わり、スムーズな移行が見られます。 実際には、0Vから5Vの間のフローティング電圧でLEDを薄暗くする方がわかりやすいでしょう。Arduinoの出力端子の代わりにポテンショメータ(可変抵抗器)を使ってみましょう。
図のようにポテンショメータがArduinoの出力と置き替えたとします。
しかしテスト中に、ポテンショメータを使用するとLEDは不具合を起こしてしまうことが判明します。ポテンショメータの片方に停止時(片方が0Ωの時)には、2つのLEDの1つが予想通り点灯しています。しかしさらに回すと、もう片方のLEDが点灯し始めるずっと前に消灯してしまいます。この現象は、すでに述べたダイオードの非線形(キンク)特性によるものです。LEDの明るさは、小さな電圧範囲内でしか調節できません。電圧がこの範囲を下まわると全く点灯せず、電圧が高すぎると破壊される場合があります。
このためパルス幅変調は、電圧調整よりもLEDの調光の方がはるかに有利な方法です。しかしこれは、私たちの目がちらつきを知覚できないように、PWM信号の周波数が十分に高い場合に限りです。調光可能なLED照明の中には、不愉快なフリッカー効果があることをご存知の方も多いでしょう。その原因は、最適でないPWM調光器である場合が非常に多いです。
また定電流源は、LEDを点灯するために代替的に使用できることにも付け加えておきます。照明技術でもよく使われています。このようなエネルギー源は、要求される電圧に依存しない(最大限度とは別に)一定の電流の流れを生成します。
LEDの明るさは流れる電流に依存するため、一定の明るさが保証されています。複数のLEDが直列に接続されている場合、定電流源は自動的に電圧を上昇させて設定したい電流の流れを維持します。
RGB LED
RGB LEDは単体LEDの代わりに、Arduinoの出力を追加接続でき、さまざまなバリエーションで点灯させられます。RGB LEDは1つの筐体に赤、緑、青のLEDが1つずつ組み込まれていて、どの色でも「混合」できます。多くの場合、各LEDのアノード(外部回路に電流が流入する端子)が個別に端子化されています。共通接点がカソード(外部回路に電流が流出する端子)となります。
パルス幅変調に対応した端子を出力端子として意図的に選択しています。次のプログラムは、デモンストレーションのためにRGB LEDを毎秒異なる(ランダムな)色で表示します。
void setup() { pinMode(3, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); } void loop() { analogWrite(3, random(256)); analogWrite(5, random(256)); analogWrite(6, random(256)); delay(1000); }
関数random()は、0から引数で指定された数までの範囲で乱数の1つを戻り値として返します。
Arduinoでは実数の乱数を生成できないので、厳密には擬似乱数です。電源投入後に最初のLEDの色を確認してください。その後ボードのリセットボタンを押してください。この動作をすると、また同じ色が出てきます。これは、電源投入後の乱数の順序が同一であることを反映しています。
シミュレーション
TINKERCADで回路を組みました。「シミュレーションを開始」のボタンを押してみてください。ポテンショメータは、マウスで操作できるので、動かしてみてください。
コメントを残す