光依存性抵抗
光依存抵抗器(LDR)、またはフォトレジスタは、光電子要素によって検出される光の量に基づいて抵抗値の変化を持つ可変抵抗器です。一般的に、フォトレジスタに輝く光が多いほど、フォトレジスタが持っている抵抗値は低くなります[1]。これは、この変化する抵抗値を存在する光の量を示すものとして読み取り、 マイクロコントローラー 対応するアクションを実行します。 LDRは、以下のように安価で基本的な要素としてしばしば見られますが、日光やUV光を検出するように特別に設計された光センサーを見つけることもできます。選択したセンサーに応じて、データシートを参照してマイクロコントローラーに接続する方法を確認する必要がある場合があります。

Photoresistorsは光学センサーですか?
短い答えは、はい、フォトレジスタは光学センサーです。しかし、すべての光学センサーがフォトレジスタのように機能するわけではありません。光学センサーは、さまざまな方法で光を利用するセンサーのファミリーです。一部の光学センサーは、オブジェクトの存在を検出するために光を使用したり、で使用されたりすることさえあります 線形アクチュエータのフィードバック、Photoresistorsは、どれだけの光が存在するかを示しています。光検出センサーを探しているときは、フォトレジスタと他の光学センサーの区別を知ることが重要です。
線形アクチュエーターを備えた潜在的なユースケース
LDRは、と組み合わせて使用できます 線形アクチュエーター 2つの基本的な目的。 1つ目は、光が多すぎるときにアクチュエーターを反応させることです。もう1つは、LDRが見た光の量を最大化するためにアクチュエーターに移動することです。最初のユースケースは、光に敏感な植物を保護したり、パティオやポーチのキャノピーを自動化するなど、光の量を最小限に抑えたいアプリケーションに役立ちます。 2番目のユースケースは、パネルで見られる光の量を最大化するためにそれらを配置しようとしているソーラーパネルなどのアプリケーションで役立ちます。

LDRを利用して線形アクチュエータを制御します
幸いなことに、LDRからのフィードバックはどちらのユースケースにも基づいて変更されないため、LDRからのフィードバックの接続と読み取りは同じように実装できます。 Photoresistorをセットアップするには、フォトレジスタの正の側面を適切な電源に接続し、ネガティブ側をマイクロコントローラーのアナログピンに接続するだけです。 Arduino、出力を読み取ります。また、マイクロコントローラーのアナログピンを保護するために、下に示すように、地面に接続された抵抗器を接続して、以下に示すように、フォトレジスタの出力側に接続する必要があります。
どちらかのペアを使用して、マイクロコントローラーを使用して線形アクチュエータを駆動できます リレー またはaを使用して モータードライバー。これを行う方法を確認するには、私たちのブログをチェックすることができます Arduinoで線形アクチュエータを制御する方法。 LDRセンサーの配置は、ユースケースに基づいて依存します。領域を光から保護しようとしている場合は、保護しようとしているものをすべて使用してLDRが必要ですが、光の露出を最大化する場合は、センサーを使用する必要があります。ライト。どちらの場合でもLDRからのフィードバックを読み取るには、センサーの出力側からのアナログ電圧を読み取るだけでも同じです。
// Connect Output of Photoresistor to A1 of Arduino | |
photoresistorValue = analogRead(A1); |
このフィードバックをどのように利用して線形アクチュエーターを制御するかは、アプリケーションとユースケースによって異なります。光曝露を最小限に抑える最初のユースケースでは、一定量の光が検出された場合、線形アクチュエータを既知の位置に駆動するか、フォトレジスタがより低い光を検出するまで線形アクチュエータを駆動できます。前者は、以下のコードサンプルに示されています。これは基本的な実装ですが、出発点としてこのソリューションを使用してはるかに創造的なソリューションを行うことができます。たとえば、日光のピーク時にのみ、晴れた場合にのみ、光に敏感な植物の上に日陰を配置できます。 Photoresistorを使用することにより、アクチュエータを動かしてシェードを配置する必要があるのに十分な晴れているかどうかを判断できます。
/* Firgelli Automations | |
* Limited or no support: we do not have the resources for Arduino code support | |
*/ | |
int photoresistorValue = 0; // Value of LDR | |
int lightLevel = 300; // Level of Light to require shade to be Position | |
bool runFlag = 0; // Flag used to indicate if the Actuator has moved | |
void setup() { | |
pinMode(A1, INPUT); // Configure pin A1 as an Input from the LDR | |
pinMode(10, OUTPUT); // Configure pin 10 as an Output | |
pinMode(11, OUTPUT); // Configure pin 11 as an Output | |
} | |
void loop() { | |
photoresistorValue = analogRead(A1); | |
if(photoresistorValue > lightLevel && runFlag == 0){ | |
//Extend Actuator to Position Shade | |
analogWrite(10, 255); | |
analogWrite(11, 0); | |
delay(5000); // Wait 5 seconds | |
// Stop Actuator | |
analogWrite(10, 0); | |
analogWrite(11, 0); | |
runFlag = 1; | |
} else { | |
// Stop Actuator | |
analogWrite(10, 0); | |
analogWrite(11, 0); | |
} | |
} |
光曝露を最大化する2番目のユースケースでは、LDRにさらされた光を最大化する位置を決定する必要があります。これを効果的に行うには、 フィードバック線形アクチュエータ アクチュエータの位置を追跡します。私たちの線形アクチュエーターにさまざまなフィードバックオプションを使用する方法に関するガイドを見つけることができます チュートリアルページ。以下のコードサンプルは、これを使用してこれを達成する方法を示しています ポテンショメータフィードバック線形アクチュエーター。 LDRから最低抵抗値を追跡するだけで、これは最高の電圧値であり、アクチュエーターの対応する位置です。最初にアクチュエーターを最大長に拡張し、次に格納して、アクチュエーターの全長にわたってLDR出力を測定する必要があります。アクチュエータが全範囲を移動すると、LDRから対応する出力が最も高い位置に移動するだけです。これを実際に実装するには、おそらくタイマーで以下のコードを実行して、1日を通して定期的に新しいポジションを見つけたいと思うでしょう。
/* Firgelli Automations | |
* Limited or no support: we do not have the resources for Arduino code support | |
*/ | |
int ldrValue = 0; // Value of LDR | |
int pos = 0; // Position of Actuator | |
int maxPos = 928; // Max Position | |
int minPos = 75; // min Position | |
int goalPos = 0; // Desired Position of Actuator | |
bool runFlag = 1; | |
int highestLightPos; // the Actautor Positin with Highest LDR value | |
int highestLDRValue = 0; // Highest LDR value | |
void setup() { | |
pinMode(A1, INPUT); // Configure pin A1 as an Input from the LDR | |
pinMode(A2, INPUT); // Configure pin A1 as an Input from the Linear Actuator | |
pinMode(10, OUTPUT); // Configure pin 10 as an Output | |
pinMode(11, OUTPUT); // Configure pin 11 as an Output | |
ldrValue = analogRead(A1); | |
pos = analogRead(A2); | |
} | |
void loop() { | |
if(runFlag == 1){ | |
findMaxLight(); | |
} | |
} | |
// Function to Find Max Value from LDR | |
void findMaxLight(void){ | |
static int task = 0; | |
switch(task){ | |
case 0: | |
goalPos = maxPos; | |
runActuator(goalPos); | |
if(pos == maxPos){task++; delay(100);} | |
break; | |
case 1: | |
goalPos = minPos; | |
runActuator(goalPos); | |
if(pos == minPos){task++; delay(100);} | |
break; | |
case 2: | |
goalPos = highestLightPos; | |
runActuator(goalPos); | |
if(pos == goalPos){ | |
task = 0; | |
runFlag = 0; | |
} | |
break; | |
} | |
ldrValue = analogRead(A1); | |
if(ldrValue > highestLDRValue){ | |
highestLDRValue = ldrValue; | |
highestLightPos = pos; | |
} | |
} | |
// Function to Run Linear Actuator to a Specific Position | |
void runActuator(int goal){ | |
if(goal > maxPos){goal = maxPos;} | |
if(goal < minPos){goal = minPos;} | |
if(abs(pos - goal) > 5){ | |
if(pos < goal){ | |
//Extend Actuator | |
analogWrite(10, 180); | |
analogWrite(11, 0); | |
pos = analogRead(A2); | |
} else if(pos > goal){ | |
//Extend Actuator | |
analogWrite(10, 0); | |
analogWrite(11, 180); | |
pos = analogRead(A2); | |
} | |
}else{ | |
pos = goal; | |
// Stop Actuator | |
analogWrite(10, 0); | |
analogWrite(11, 0); | |
} | |
} |
線形アクチュエーターを備えたフォトレジスタを使用できる創造的な方法がたくさんあります。私たちはあなたがしたことを見たいと思っています。と Firgelli 自動化 線形アクチュエーターとアクセサリーの幅広い選択では、次の光制御プロジェクトを簡単にすることができます。
参考文献:
- エレクトロニクスノート。 光依存性抵抗LDR:Photoresistor。 から取得: https://www.electronics-notes.com/articles/electronic_components/resistors/light-dependent-resistor-ldr.php