「カメラ」LED



この記事では、LEDアレイを非常に低い解像度(20ピクセル)の「カメラ」として使用する方法について説明します。 これには実用的な意味はほとんどありませんが、LEDを光センサーとして使用した経験は、誰かにとって役に立つかもしれません。 もともと照明効果を示すために設計されたArduino Blinkenlight Shieldボードを使用します。





すべてのLEDのカソードを+5ボルトバスに接続する可能性について言及しました。 次に、この機会が与えられた理由をお伝えします[おおよそ。 perev。:記事の著者は、記述されたシールドの開発者です] 。 この実験では、LEDを光センサーに変える方法を示します。 Blinkenlightシールドには20個のLEDが含まれているため、20ピクセルの「カメラ」として使用できます。



まず、LEDのカソードを+5 Vジャンパーで接続する必要がありますが、恐れないでください。 LEDが消灯している場合-優れている場合、消灯しているはずです。 実験の最後にジャンパーを元の位置に戻すことを忘れないでください。



これで、LEDはフォトダイオードとして機能します。 それらは光を発するように設計されているため、それらからの光検出器は重要ではなく、光電流は非常に小さくなります。 さらに、コントローラのアナログピンの数は通常制限されていますが、デジタルピンははるかに大きくなっています。 デジタルCMOS入力の抵抗が非常に高いという事実は、LEDから信号を除去する別の方法を提供します。 考え方は、ポートに論理「0」を出力することにより、LEDに逆バイアスをかけることです。 このモードでは、LEDは電流を流さず、コンデンサのように動作します。 充電されると、出力をZ状態に切り替え、何が起こるかを観察します。 ダイオードが点灯している場合、非常に小さな光電流が発生し、静電容量が放電されます。 照度が高いほど、電流強度が大きくなり、放電が速くなります。 ある時点で、入力は状態「0」から「1」への遷移をロックします。 この遷移までの経過時間を測定することにより、照明を決定することが可能になります。



記載されている現象をより詳細に理解したい場合は、この作品を読むことができます: www.merl.com/papers/docs/TR2003-35.pdf

完全なソースコードは、 ここまたはここに記載されてい ます



setup()関数はすべてのピンを実行し、それぞれを「0」状態に設定します。 この関数は、時間サンプルを格納するための配列も初期化します。 その後、出力は入力モードに切り替わります。 以前に「0」が表示されていたため、プルアップ抵抗は無効になります[約。 transl。:AVRでは、同じレジスタPORTnが出力モードでの出力値と、入力モードでのプルアップ抵抗の包含を担当します 。 現在、調査結果はZ状態になっています。 一部の連絡先は除外され、シリアルポートとLEDインジケータを接続するためにArduinoで使用されることに注意してください。 ボードの余分な負荷からこれらのピンを切断できる場合は、使用できます。 この場合、単にpin_is_ok()関数が常にtrueを返すようにします。 シリアルポートを無効にする前に、データをコンピューターに転送する方法を検討してください。



メインプログラムサイクルは以下を実行します。各LEDについて、低から高への移行が記録されます。 これが発生した場合、0 VがLEDに再び印加され、最後の遷移の瞬間からの時間が計算されます。 次に、出力は再びZ状態に転送されます。 ここでは、 pinMode()コマンドがかなりゆっくり実行されるという事実に明示的に依存しています。これは、LEDが静電容量を充電するためにいくつかのクロックサイクルを持つことを意味します。



すべてのLEDが処理された後、結果がシリアルポート経由で送信されます。 変換関数について疑問に思うかもしれません。 理論と実践では、省略できます。 結果をライトマップとして1行で表示しました。 したがって、シリアルポートモニターを使用して、このインストールの出力を視覚化できます。





このビデオは、動作中の「カメラ」を示しています。 ファームウェアの作成時に、Arduinoが上下逆さまに配置され、USBポートが左側にあることを考慮しなかったため、モニター上のデータは逆の順序で表示されます。 ただし、光センサーの動作ははっきりと見えます。



All Articles