フォトダイオード、フォトトランジスタ、IRセンサー Arduino付きフォトダイオード、フォトトランジスタ、Irセンサー Arduino付き

目次

説明:

Arduinoを使用したフォトダイオード、フォトトランジスタ、IRセンサー–フォトダイオードは、光によって励起されると、回路内に比例した電流が流れます(測定可 このようにして、光センサとして機能させることができるが、可視光に特に敏感なフォトダイオードがあることは事実であるが、大部分は特に赤外光

Ldrと同様の外観を持つにもかかわらず、これらとの非常に重要な違い(他の波長に対する感度に加えて)は、暗闇から照明への変化に対する応答時間であり、その逆であり、フォトダイオードでははるかに低いことを考慮する必要があります。

標準的なダイオードのように、フォトダイオードは陽極と陰極を持っていますが、私たちが望むように機能するためには、フォトダイオードは常に逆極性で回路に接続する必要があります。 もちろん、一般的なダイオードと同じように、通常、陽極は陰極よりも長い(それらが等しい長さであれば、陰極は何らかの方法でマークされるべきである)。

その内部動作は次のとおりです:フォトダイオードが直接偏光されている場合、それに当たる光はかなりの効果を持たないため、両方のデバイスは共通のダイオードのように動作します。 逆に偏光し、光放射がそれに到達しない場合、回路を流れる電子がそれを通過するのに十分なエネルギーを持たないので、回路は開いたままであるため、ダイオードの正常なように振る舞います。 しかし、フォトダイオードが波形の長さの範囲内で光放射を受信した瞬間に、電子は逆フォトダイオードバリアを”ジャンプ”して途中で続けることがで

例1:フォトダイオード

の動作を確認する方法その動作をテストするには、以下の回路を使用することができます。 この回路は、Ldrで見たものと同じで、これらをフォトダイオード(これは今まで見たことのない新しいシンボルで識別されます)に置き換えます。 あなたの分圧器の値は、環境中に存在する光(赤外線)の量に依存します:高い抵抗は、光源が一つだけであるときに感度を向上させ、低い抵抗は、多くの(太陽自 また、電源に接続するのはフォトダイオードのカソード(最短の端子、覚えておいてください)であることにも注意してください。

この回路の動作は以下の通りです: フォトダイオードが赤外光を検出しない限り、Arduinoボードのアナログ入力(この場合は0)を介して、回路が開かれた回路として機能するため、0Vの電圧が測定 フォトダイオードの光強度が増加するにつれて、それを通過する電子の数(すなわち、電流の強度)が増加する。 これは、”プルダウン”抵抗が固定されているので、オームの法則によって、アナログ入力ピンで測定された電圧も増加し、多くの光を受信するとフォトダイオードが電子の通過に対する抵抗をほとんど引き起こさず、したがってArduinoボードが最大電圧5Vを読み取る瞬間まで増加することを意味する。.

フォトダイオード、フォトトランジスタ、IRセンサー

Ldrがフォトダイオードの赤外光の入射を検出する可視方法(pun意図)を持っているのを見たときのように、PWM出力ピン#5に接続されたLEDを追加しました。 使用されたコード(以下に示す)で観察できるように、フォトダイオードによって検出された赤外光の量のLED輝度強度を作成しました。

プログラミング:

1
2
3
4
5
6
7
8
9
10
11
12

int photodiode_value;
int bright_led;
void setup(void){
シリアル。開始(9600);
}
void loop(void){
photodiode_value=analogRead(0);
連載。println(photodiode_value);
bright_led=map(photodiode_value);
bright_led=map(photodiode_value);, 0, 1023, 0, 255);
analogWrite(5,bright_led);
遅延(100);
}

プログラミング解説:

まずフォトダイオード値を受信するための整数型変数を定義する

1
intフォトダイオード_値;

次に、led値「LEDに送信された値」の整数型変数を定義します”

1
int bright_led;

voidループ関数では、最初にanalogRead関数を使用して値を受信し、これらの値をphotodiode_value変数に格納してからserialを使用します。シリアルモニタに値を印刷するprintln

1
2
3

フォトダイオード値=analogRead(0);
連載。println(フォトダイオード値);

LEDの明るさは、受信した赤外光の量に比例します

1
2
3

bright_led=map(photodiode_value, 0, 1023, 0, 255);
アナログライト(5、ブライトライト));

フォトトランジスタ:

フォトダイオードに加えて、光センサの別のタイプは、フォトトランジスタ、すなわち感光性トランジスタ(通常は赤外線)と呼ばれています。 その動作は次のとおりです:光がそのベースに落ちると、トランジスタを導通状態にする電流を発生させます。 したがって、フォトトランジスタは共通のトランジスタに等しく、ベース電流Ibが受信光に依存する唯一の違いがあります。 実際には、フォトトランジスタとして、または特定のベース電流Ibを持つ一般的なトランジスタとして、両方の方法で動作することができるフォトト

フォトダイオードで得られる電流は本当に限られているため、フォトダイオードよりもはるかに敏感です(トランジスタ自体のゲインの影響のため)。 実際には、フォトダイオードとアンプの組み合わせとしてフォトトランジスタを理解することができますので、実際には自家製のフォトトランジスタを構築したい場合は、フォトダイオードのカソードをトランジスタのコレクタに、アノードをベースに接続して、フォトダイオードを共通のトランジスタに追加するだけで十分です。 この構成では、フォトダイオード(トランジスタの基部に向かって循環する)によって供給される電流はβ倍に増幅される。

多くの回路では、互換性のある波長の赤外線発光LEDから短い距離のフォトトランジスタを見つけることができます。 コンポーネントのこのカップルは、(光ビームの中断に起因する)それらの間の障害物の介在を検出するために有用であり、したがって、眼鏡のスイッチとし それらはクレジットカードの渡ることの探知器のような多数の適用で、(自動支払機で)またはペーパーの導入(プリンターで)または多くの他の中の回転速度計 タコメーターは、(通常はモータの動作による)回転する車輪またはブレードの対象となる障害物によって作られた毎分のターンをカウントする装置であり、それ

フォトトランジスタは、LEDのアノードとカソードに対応する二つの端子と、NPNフォトトランジスタのコレクタとエミッタに対応する二つの端子で構成されています。 一般的には、LEDの端子を連続的に給電される閉回路(陽極からソース、陰極からグランド)に接続し、フォトスイッチのコレクタ端子を電源に、フォトスイッチのエミッタ端子をArduinoボードのデジタル入力に接続して、照明を受信したときの電流の外観を検出できるようにします。 一方、エミッタとしてのこのArduinoボード入力は、より安定した測定値を得るために、同じプルダウン抵抗を介して接地する必要があります(10K Ωの標準値が動作する場合がありますが、回路によってはより高い値が必要になる場合があります)。

赤外線LEDとフォトトランジスタのペアは、”フォトカプラ”または”オプトイソレータ”と呼ばれるいくつかのコンポーネントでも見つけることができます。 回路図は通常次のようになります:

フォトダイオード、フォトトランジスタ、IRセンサー

大まかに言えば、フォトカプラは、LEDからトランジスタのベースに光が来ると閉回路として機能し、LEDがオフ その主な機能は、通常は異なる電圧で動作する回路の2つの部分を制御し、同時に分離することです(一般的なトランジスタと同じように、やや安全 物理的にそれらは通常少なくとも4つのピンとして提供する破片です(写真スイッチと同じように): LEDの端子に対応する二つとフォトトランジスタのコレクタとエミッタに対応する二つ(許可されている場合、彼らはベースに対応するもう一つのピン フォトカプラの例としては、様々な企業が製造した4N35またはCNY75があります。

LED-フォトトランジスタのペアは、そこから小さな距離にある物体を検出するのにも役立ちます。 これについては、距離センサーに対応するセクションで検討します。

IRセンサーを使用してリモートコントロールを行う方法:

一定の距離にある赤外線エミッタ-レシーバペア(LEDやフォトダイオード/フォトトランジスタなど)の実用的な実用性は、それらの間に”メッセージ”を送信することである。 すなわち、赤外光は可視ではない(したがって、それは”迷惑”しない)ので、一定の持続時間のパルスを放出することができ、および/または数メートル離れた”それらを受信するデバイスは、読み取りパルスの種類に応じて異なるアクションを実行するようにプログラムする必要があります。

実際には、”リモコン”で動作する任意のデバイスは、その前部に私はセンサーを持っている必要があるため、同様の方法で動作します赤外線センサー(また、”IR” そして、これの中にあるものは、基本的には、デバイスに実行される順序を信号特定のパターンに従って赤外光のパルスを放出するLEDです: テレビをオンにするための点滅コード、チャンネルを変更するための別のコードなどがあります。

上記では、フォトダイオード/フォトトランジスタではなく、”IRセンサー”について話しました。 具体的には、赤外線センサーは赤外光を検出しませんが、(内部バンドパスフィルタと復調器の組み込みのおかげで)38KHz+3KHzの周波数の搬送波で変調され これは基本的に、38KHzの波形によって情報が伝達される信号のみが読み取られることを意味します。 これは、彼らがすべての側面(太陽、電灯…このように、彼らはすでに標準化された非常に具体的に応答する)から来て存在する赤外光を受信したときにIRセ

フォトダイオード/フォトトランジスタとの別の違いは、IRセンサーがバイナリ応答を提供することです:38KHzのIR信号を検出すると、ほとんどの場合、それらから読み取ることができる値は低い(0V)であり、何も検出しないと、読み取り値は高い値(5V)になります。 この動作は、通常、”アクティブ-ロー”または”ロー-アクティブ”と呼ばれるものです。

IRセンサーの例としては、TSOP32838またはGP1UX311QSがあります。 特徴として最も顕著な物は感受性の範囲が800nmに940nmで最高の応答および5Vおよび3mAのまわりで作動することを必要とする1100nmの波長の間に

TSOP32838チップは三つのピンを提供しています:背面半球に面し、左端のピンはセンサーによって提供されるデジタル出力であり、中央のピンは接地され、右端のピンは接地されている必要があります。 電源に接続します(2.5V5.5Vの間)。

例2:

Arduinoを使ってリモコンでledをオンにする方法と、TSOP32838IRセンサー:

その動作をテストするために、次のような回路を設計することができました。 LEDの分圧器は、200~1000オームの間にすることができます。

フォトダイオード、フォトトランジスタ、IRセンサー

irセンサーが赤外線信号を検出したときにledを簡単にオンにすることが考えられます。 しかし、注意してください、だけでなく、任意の赤外線信号が有効であるが、唯一の38KHzで変調されていること。 したがって、この回路をテストするために、赤外線LEDを使用することはできませんか: 私達は私達が手で持っている制御ノブのリモートを使用しなければならない(テレビ、DVDプレーヤー、コンピュータ、等から。). Arduinoボードにスケッチをロードすると、IRセンサーでそのリモコンを指し、そのボタンのいくつかを押すと、LEDが点灯します。 このようにして、IRセンサーをスイッチのように使用し、その信号を検出しながらLEDを点灯させ、検出されなくなったときに消灯します。

センサー出力はArduinoボードのデジタル入力ピン2に接続され、LEDはそのデジタル出力ピン12に接続されています):

プログラミング:

1
2
3
4
5
6
7
8
9
10
11
12
13
14

int irPin=2;
int ledPin=12;
void setup(){
pinMode(irPin,INPUT);
pinMode(ledPin,OUTPUT);
}
void loop(){
if(pulseIn(irPin,LOW)){
if(pulseIn(irPin,LOW) > 0) {
ディレイ(100);
digitalWrite(ledPin,HIGH);
delay(200);
digitalWrite(ledPin、低い);
}
}

プログラミングの説明:

最初に私はIRセンサーおよびledのための整数のタイプ変数を定義します

1
2
3

int irPin=2;
int ledPin=12;

セットアップ機能では、IRセンサーを入力に、ledを出力に設定しました

1
2
3

pinMode(irPin,INPUT);
pinMode(ledPin,OUTPUT);

センサーから放出される信号は通常ハイであるため、リモコンのボタンを押すとローに変わります。 PulseIn()関数は、信号が低く検出されるまでスケッチを一時停止することですが、その持続時間は実際には興味がありませんが、論理的には常にゼロよりも大き したがって、ifの条件がリモコンのボタンが押されたことを意味する場合

1
if(pulseIn(irPin,LOW) > 0) {

ボタンを押すたびに高値と安値の間に複数の振動が発生するため、最初の低信号の検出後に一定時間(特定のリモコンモデルに依存します)を待つ必 物理的に彼は見ることは何もありませんが、それは”バウンス”(我々はプッシュボタンを扱うときに研究現象)を回避する方法であるかのように、我々はこれ この待機時間が経過すると、センサからの信号は休止状態(高い値)に戻っているはずです。

1
遅延(100);

私達は少数のミリ秒のためのLEDを保ちます。 この間、スケッチはリモコンからの他のキーストロークを検出することはできません。 また、脈動を通知する”シリアルモニター”にメッセージを送信することもできました。

1
2
3
4
5
6
7
8
9

digitalWrite(ledPin,HIGH);
ディレイ(200);
digitalWrite(ledPin、低い);
}
}

例3:

ARDUINOでTSOP32838IRセンサーを使用してシリアルモニターでリモートコントロールコマンドを受信する方法:

まず、IRセンサーに必要なライブラリをダウンロード

Arduino IRremoteライ:

フォトダイオード、フォトトランジスタ、IRセンサ

プログラミング:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

#include <IRremote.h>
int receiverPin = 11;
IRrecv irrecv(receiverPin);
decode_results results;
void setup(){
シリアル。開始(9600);
irrecv。イネーブルリン();
}
void loop(){
if(irrecv.(&の検索結果)=0) {
if(結果。
プリント(”NEC: “);
} それ以外の場合(結果。
プリント(”ソニー: “);
} それ以外の場合(結果。decode_type==RC5){
シリアル。印刷(“RC5: “);
} それ以外の場合(結果。decode_type==RC6){
シリアル。印刷(“RC6: “);
} それ以外の場合(結果。
印刷(“不明: “);
}
連載。println(結果.値、16進数);
irrecv。履歴書();
}
}

プログラミングの説明:

まず、必要なライブラリをインポートします

1
#<を含むお絵かき掲示板はまだありません。h>

それから私は受信機のためのデジタル入力ピンを定義します

1
イントレチャートピンイントレチャート= 11;

次に、IRrecv型の”irrecv”というオブジェクトを作成します

1
IRrecv irrecv(レシーバ);

次に、特別な型の変数”decode_results”を宣言します。

1
decode_resultsの結果;

次に、voidステップ関数で受信機を起動します

1
irrecv。を有効にする();

次に、voidループで、変調されたIRパターンが検出されたかどうかを確認します。 もしそうなら、私はそれを読んで、私はそれを16進数形式の特別な変数”results”に完全に保持します

1
(irrecv.(&の検索結果)=0) {

それから私はそれがライブラリによって認識されたものからのものであれば、それがどのような取引パターンであるかを見ます

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

if(結果。
印刷(“NEC:”);
}else if(results.
プリント(”ソニー: “);
} それ以外の場合(結果。decode_type==RC5){
シリアル。印刷(“RC5: “);
} それ以外の場合(結果。decode_type==RC6){
シリアル。印刷(“RC6: “);
} それ以外の場合(結果。
print(“Unknown:”);
}

そして、シリアルチャネルに受信したパターンを(16進形式で)表示します

1
連載。println(結果.値、16進数);

パターンがデコードされたら、リッスンを再アクティブ化して、次の可能なパターンを検出します

1
2
3

irrecv。履歴書();
}

例4:

ARDUINOでTSOP32838IRセンサーを使ってリモコンを作る方法:

まず、IRセンサーに必要なライブラリをダウンロード

Arduino IRremoteライブラリ

前のプロジェクトで使用したのと同じ回路を使用

回路図:

フォトダイオード、フォトトランジスタ、IRセンサ

プログラミング:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

#<を含むお絵かき掲示板はまだありません。h>
int receiverPin=11;
IRrecv irrecv(receiverPin);
decode_results results;
void setup(){
シリアル。開始(9600);
irrecv。イネーブルリン();
}
void loop(){
int i;
if(irrecv.(&の検索結果)=0) {
アクション();
for(i=0;i<2;i++){
irrecv.履歴書();
}
}
}
void action(){
switch(results.value) {
case 0x37EE: Serial.println(“Favorites”); break;
case 0xA90: Serial.println(“On/off”); break;
case 0x290: Serial.println(“Mute”); break;
case 0x10: Serial.println(“1”); break;
case 0x810: Serial.println(“2”); break;
case 0x410: Serial.println(“3”); break;
case 0xC10: Serial.println(“4”); break;
case 0x210: Serial.println(“5”); break;
case 0xA10: Serial.println(“6”); break;
case 0x610: Serial.println(“7”); break;
case 0xE10: Serial.println(“8”); break;
case 0x110: Serial.println(“9”); break;
case 0x910: Serial.println(“0”); break;
case 0x490: Serial.println(“Increase volume”); break;
case 0xC90: Serial.println(“Decrease volume”); break;
case 0x90: Serial.println(“Increase channel”); break;
case 0x890: Serial.println(“Decrease channel”); break;
default: Serial.println(“Other button”);
}
delay(500);
}

Leave a Reply