文書の表示以前のリビジョンバックリンクPDF の出力全て展開する/折り畳むODT 出力文書の先頭へ この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。 ====== 受光&発光(1個のLED) ====== ===== 概要 ===== 発光ダイオード(LED:Light Emitting Diode)は、順方向に電圧を加えた際に発光する半導体素子です。 その逆に、このLEDに光を当てると電圧が発生するという現象があるようです。 この現象を利用して、1本のLEDのみで、 - 明るさを検出し、 - 周りが暗くなると点灯、 - 明るくなると消灯する。 ユニットを作成してみました。 先ずは、この現象を確認してみました。(回路図A) オペアンプは単純に高インピーダンスのバッファーとして動作するだけです。(ボルテージフォロア)LEDによって出力電圧に若干のばらつきがありますが、無負荷状態ではそこそこの電圧が出ています。 これなら利用できそうです。 <一般的なLED> {{:imgpaste:202004:htmikan-20200428-172037.png}}{{:imgpaste:202004:htmikan-20200428-172045.png}} <大き目のLED> {{:imgpaste:202004:htmikan-20200428-172106.png}}{{:imgpaste:202004:htmikan-20200428-172110.png}} <一般的な赤色LED> {{:imgpaste:202004:htmikan-20200428-172129.png}}{{:imgpaste:202004:htmikan-20200428-172133.png}} <赤外線発光LED> {{:imgpaste:202004:htmikan-20200428-172154.png}}{{:imgpaste:202004:htmikan-20200428-172159.png}} ===== 動作原理 ===== ■LEDの出力電圧を取り込む方法 * LEDが接続されているPICのポートを入力モードに設定する。 * LEDの出力電圧を高インピーダンスのオペアンプでインピーダンス変換する。 * 電圧が安定するまで、少しスリープ(約50msec)する。 * A/D変換を1msec間隔で50回取り込み、その平均電圧を求める。 ■LEDの点灯/消灯方法 * LEDが接続されているPICのポートを出力モードに設定する。 * 点灯(ポートを“1”にする)、消灯(ポートを“0”にする) ■処理の流れ - スイッチが押されると、明るさを判断するための基準電圧(LEDの出力電圧)V1を取り込む。 - 現時点の明るさの電圧(LEDの出力電圧)V2を取り込む。 - V1とV2を比較し、V2が小さければLEDを点灯させる。 - 1.に戻る。 ===== 回路図 ===== {{:imgpaste:202004:htmikan-20200428-172541.png}} ===== ソースコード ===== <code c ledEx.c> //********************************************************************** void main() { unsigned int ad, threshold; unsigned char cnt; OSCCON = 0b01110000; // クロックは8Mhz CMCON0 = 0b00000111; // コンパレータは使用しない。 ANSEL = 0b00000010; // AN1を使用する。 TRISIO = 0b00000011; GPIO = 0b00000000; // OPTION_REG = 0b10000000; // WPU.F1 = 1; // while (1) { if (GPIO.F0 == 0) { TRISIO.F2 = 1; Delay_ms(50); threshold = 0; for (cnt = 0; cnt < 50; cnt++) { Delay_ms(1); threshold += Adc_Read(1); } threshold = threshold / 50; TRISIO.F2 = 0; continue; } // TRISIO.F2 = 1; Delay_ms(50); ad = 0; for (cnt = 0; cnt < 50; cnt++) { Delay_ms(1); ad += Adc_Read(1); } ad = ad / 50; TRISIO.F2 = 0; // if (ad <= threshold) { GPIO.F2 = 1; } else { GPIO.F2 = 0; } Delay_ms(1000); } } //********************************************************************** </code> ===== 動作確認 ===== 周りが明るくなると、LEDは消灯状態になります。 左の黄色いスイッチが、基準電圧の取り込みスイッチです。 中央のICがPIC、その右横のICがオペアンプです。 右の透明なLEDが受光&発光を行わせるLEDです。 {{:imgpaste:202004:htmikan-20200428-172746.png?500}} その時の、LEDの電圧の波形です。 消灯状態なので、通常は0Vです。 LEDの電圧を取り込む瞬間(約100msec)だけ、ポートを入力モードにするので、LEDが発電した電圧を A/D変換で読み込むことが出来ます。 {{:imgpaste:202004:htmikan-20200428-175117.png?500}} 周りが暗くなると、LEDは点灯状態になります。 {{:imgpaste:202004:htmikan-20200428-175137.png?500}} その時の、LEDの電圧の波形です。 点灯状態なので、通常は約2Vです。 LEDの電圧を取り込む瞬間(約100msec)だけ、ポートを入力モードにするので、LEDが発電した電圧を A/D変換で読み込むことが出来ます。 {{:imgpaste:202004:htmikan-20200428-175222.png?500}} 如何ですか? 1本のLEDだけで、受光と発光が出来るので部品点数が少なくて済みますね。^_^ <callout type="warning" title="著作権表示 copyright notice"> このページは稲崎様の閉鎖したHPのコピーで、著作権は稲崎様にあります。[[elechobby:picdic:picdic|詳細]] This page is a copy of Mr. Inasaki's closed website, and the copyright is held by him.[[elechobby:picdic:picdic|Details]] </callout> elechobby/picdic/pic12f683/13.txt 最終更新: 2025/10/17 14:29by 127.0.0.1