LED LYTメーター:LED、PICマイクロコントローラ、および移動平均コード:3ステップ

LED LYTメーター:LED、PICマイクロコントローラ、および移動平均コード:3ステップ

目次:

Anonim

皆さん、こんにちは。私の最初のInstructableをチェックしていただきありがとうございます。私は何年もの間あなたの作品を見て楽しんできました、そしてあなたたち全員が貢献しているものを愛しています。このプロジェクトは、私が最近ここで見たものから派生したもので、私はBot1398に叫ぶ必要があります。別のLEDをオンまたはオフにします。 LEDに少し電力を供給すればそれが発光することを私は知っていました。私はそれが逆に使われることができるとは思っていませんでした。私が彼のInstructable:Light Sensing LEDを見た後、それは理にかなっていました、しかし、私はこれが実際に私自身のために働くのを見たかったです。

私はこのInstructableを書いています。Bot1398はArduinoを使っていて、使ったことがないからです。しかし、3年ほど前にマイクロコントローラを使い始めたときは、特定のアプリケーションのスピードとパワーを求めていました。私はマイクロチップ社のPICマイクロコントローラシリーズに決着しました。それはあなたがマイクロコントローラで何ができるか、あなたがあなたの想像力を暴走させ、少し創造的なプログラミングでまさにあなたが望むものを達成することを可能にすることができることは素晴らしいです。他にもたくさんのプログラミング言語がありますが、私が始めたときはスピードと各ステップで何が起こっているのかを正確に知りたいので、アセンブリ言語を選択しました。私が成長していた1980年代のIBM PC Jr.。それは、このInstructableが必要とするものです:周囲の光量を検出し、LCDスクリーン上にバーグラフと共にこの光の数値を表示するためにLED(発光ダイオード)を使用するPICマイクロコントローラとアセンブリ言語。

私はうまくいったこのLEDベースのLight Sensingデバイスの最初のバージョンを製造しました、私が気づいた問題は値がかなり飛び跳ねたことでした。そのため、値の平均化について考えたこの問題の解決策を探しましたが、どうしたのでしょうか。二項演算はやや困難ですが、実行する方法は常にあります。私が解決策を探していたとき、8ビットマイクロコントローラでも簡単に処理できるように、移動平均とそれを最も効果的に行う方法についての素晴らしいページに出会いました。このページへのリンクはここにあります:計算上効率的な移動平均。これは非常にうまくいきます。この実装は、最後の256個の光の読みの移動平均を表示し、その値をLCD画面に棒グラフとともに表示します。移動平均コードは、LEDから読み取られた値が大きく飛び跳ねるのを防ぎ、より良い、はるかに正確な結果をもたらします。

なぜこれが機能するのか

私たちがマイクロコントローラにLEDをつけるとき、我々は通常それを照らすためにそれをしています。ただし、この場合は、実際には電極の負の端に正の電圧を印加しています。これは、寄生容量と呼ばれるものを利用できるようにするためです。この正の電圧を印加すると、私たちが使用しているLEDのこの寄生容量内に小さな電荷(インターネット上のリソースは約100〜200ナノ秒以内)を蓄積します。実際の静電容量はそれほど重要ではありませんが、オンラインリソースによると10〜15 pF程度です。次に、電極のマイナス端に接続されているマイクロコントローラのピンをOUTPUTからINPUTに切り替え、電荷が消えるのを待ちます。電荷が十分になくなると、ピンはロジックレベル0またはLowの状態を読み取り、タイマーをオフにしてこの値を使用して移動平均を計算し、結果を画面に表示します。その後、アセンブリコードに書かれている間隔で、さらに多くの測定値を取得して画面に表示します。完成したコードでは、約20マイクロ秒ごとに1回読み取るように設定しています。これは50回発生するため、更新された結果は約1秒ごとに画面に表示されます。測定値を取得するのにかかる時間は、暗い環境では電荷が消えるのに時間がかかり、明るい環境では速く発生するため、少し異なります。 LED容量の放電速度は、何らかの理由で、LEDの光発生素子に当たる光子の数または光量に直接関係する。きちんとしていません。:)

それがどのように機能するかがわかったので、ステップ#1に進みましょう。

用品:

ステップ1:部品を集めて回路を組み立てる

まず、LED LYT METERを組み立てるために必要な以下のアイテムを集めてください:

PICマイクロコントローラ(私は18F4550を使用しました)

液晶画面(2×20または2×16)

LED

ブレッドボード

ワイヤー

電源

これで回路図に従って回路をブレッドボード上に組み立てることができるようになるか、または回路をまとめるためのその他の方法で行うことができます。これはかなり簡単で、最小限の部分しかありません。 2つの異なる回路図を接続しました。1つは2つの異なるマイクロコントローラピンに接続された測光LEDを持ち、もう1つはマイクロコントローラピンに接続されたカソード(または負端)とアノード(または正端)を持つこのLEDを持ちますLEDがアースに接続されています。これは逆に思えますが、覚えておいてください、我々は光を作り出すためにLEDを使っているのではなく、代わりにそれを測定するために使っています。それがそれがこのように関係している理由です。私の写真では、LEDがマイクロコントローラの2つのピンに接続されているのがわかります。これは、プログラムの起動時にLEDが機能することを確認するために、LEDを使用して光を生成することもできるようにしたいからです。

あなたがマイクロコントローラの2つのピンにLEDを接続することを選択するならば、あなたはそれが機能するためにこれを覚えておく必要があるでしょう。私はこれがどこにも文書化されていなかったので、それを機能させるのに少し実験を要しました。 LEDを点灯させるには、両方のマイクロコントローラピンをOUTPUTSに設定する必要があります。次に、LEDを光らせるために、LEDのアノード(またはプラス端)を高く設定して、電流がLEDを通って光を出すようにします。最初はLEDのカソード(またはネガティブエンド)をINPUTに設定する必要があると思いましたが、これはうまくいきませんでした。

コンポーネントが完成したので、フォローしたい回路図に従ってコンポーネントをブレッドボードにまとめます。組み立てたとき、それは下の写真にいくらか似ているはずです。私は回路に電力を供給するために5ボルトを供給するために5ボルトのレギュレータを使用しています。私はレギュレータに約9ボルトを供給する「ウォールイボ」を使用しています。

私が使用しているLCDスクリーンは、NewhavenディスプレイNHD ‐ C0220AZ ‐ FSW ‐ FTW COG(チップオングラス)液晶ディスプレイモジュールです。私は他の多くの人が使っているHD44780 LCDディスプレイを使っていました。あなたは何の問題もなくHD44780ディスプレイを確実に使用することができます、そしてそれらを実行させるためにそこにもっとたくさんのソースコードがあります。 Newhavenのディスプレイにはソースコードがありませんでしたが、データシートとHD44780のソースコードを使用して、完全に機能するようにコードを作成しました。私はいくつかの理由でディスプレイが好きです。コントラストは非常に簡単に設定でき、今までのところ異なる季節の間はまったく変更する必要はありませんでしたが、常に明瞭で読みやすくなっています。また、設置面積も小さく、利用可能なスペースが貴重な場所で作業している巨大プロジェクトに必要なものでした。これは、HD 44780よりも小さく、2行に20文字ずつ表示されます。最後に、それは同様にHD44780ディスプレイよりも安価です。私はDigikeyからこれらのうちのいくつかをそれぞれ10.25ドルの価格で手に入れた。こちらをチェックしてください:DigikeyのNewhaven LCDディスプレイ。このディスプレイは3.3から5.5ボルトを必要とすることに注意してくださいあなたの電源を選ぶときそれを覚えておいてください。提供されているソースコードも問題なくHD44780ディスプレイを実行する必要があります。

これは私がそれを設定しているのと同じ方法です。あなたはあなたのマイクロコントローラの異なるピンに部品を配置することができます。マイクロコントローラのどのピンを光検出LEDのプラス側とマイナス側に接続するかを覚えておいてください。図のように、LCD画面を8ビットモードではなく4ビットモードで動作するように接続することもできます。それは回路内で4つ少ない接続を必要とするでしょうがあなたのプログラミングをほんの少しより複雑にします。

次のステップへ…プログラムの書き方

ステップ2:プログラミング - 本当に大変な作業がすべて行われる場所

さて、私はこの作業をするために完全に動作するバージョンのソースコードをあなたに供給していますが、それはPIC 18F4550のために書かれています。別の18F Microchip Microcontrollerをお持ちの場合、それを機能させるのは難しくありません。インクルードファイル(18F4550.inc)を変更し、必要に応じてチップの設定を変更するだけです。

私はPIC 16F917マイクロコントローラも利用できるので、私は同様に利用可能な16Fシリーズのチップのためにコードを修正しようとします。 (進行中)

コードは8 MHzのクロック速度用にも書かれています。他のクロック速度(20 MHzなど)を使用する場合は、正しい遅延時間を取得するようにコードを修正する必要があります。私はまた、マイクロコントローラの内部発振器をクロックソースとして使用することを利用しました。回路図は、外部クロックソースを使用する方のための外部発振器または水晶振動子を示しています。遅延サブルーチンを変更する必要がある場合は、必要なコードを作成するための非常に便利なWebページを見つけることができます。 Microchip PIC、ASM Delay Code Generator。

私がやることは、LEDが測定値を取得するようにするものであるコードの主要なセクションのいくつかを表示することなどです。私が提供したソースコードは非常にコメントされているので、PICマイクロコントローラの経験があれば、コードを書くときに行ったことに従うことができるはずです。コードをダウンロードしてフォローしてください。ここには2つのバージョンがあります。最初のバージョンは20 x 2文字のLCDディスプレイを使用するようにプログラムされ、2番目のバージョンは代わりに16 x 2文字のディスプレイを使用します。

それはほとんどそれです。次に、入札をするようにマイクロコントローラをプログラムしましょう。

ステップ3:マイクロコントローラをプログラムする

ここでマイクロコントローラをプログラムする必要があります。私はPICCircuit.comから購入したUSBプログラマーを使用し、過去3年間使用しました。素晴らしいプログラマーで、とても使いやすいです。 PICマイクロコントローラをZIFソケットに、プログラマをあなたのUSBポートに接続し、HEXファイルをロードして、プログラマに付属のプログラミングソフトウェアのWriteボタンをクリックするだけで完了です。

それはほとんどそれです。 LED LYT METERと、アセンブリ言語プログラミングと移動平均コードを使用してLCDディスプレイに表示値を表示するPICマイクロコントローラを使用した光検出機能を楽しんでいただけることを願っています。自分のプロジェクトでこのコードを自由に使用して、メモがあれば削除してもかまいません。暗さや明るさに応じてLEDのアクセントライトをオフにしたり、24時間かけて光をモニタしたり、日々、月ごとにグラフ化したり、その他想像できるものは何でも使用できます。それを楽しんで、PIC 16Fマイクロコントローラも含めるように、私は今後数日にわたってさらにいくつかのコードを含めるつもりです。

このページに添付されているプログラムコードもあります。いろいろなLEDを試して楽しんでください。これは楽しい趣味です。