入力デバイスは、あらゆるエレクトロニクスプロジェクトで重要な役割を果たします。これらの入力デバイスは、ユーザーがデジタル世界と対話するのに役立ちます。入力デバイスは、プッシュボタンのように単純な場合もあれば、タッチスクリーンのように複雑な場合もあります。プロジェクトの要件によって異なります。このチュートリアルでは、ジョイスティックをPICマイクロコントローラーと接続する方法を学習します。ジョイスティックはデジタル世界と対話するためのクールな方法であり、ほとんどの人が思春期にビデオゲームをプレイするために使用していました。
ジョイスティックは洗練されたデバイスのように見えるかもしれませんが、実際には2つのポテンショメータとプッシュボタンの組み合わせにすぎません。したがって、MCUのADC機能の使用方法を知っていれば、MCUとのインターフェースも非常に簡単です。ADCをPICで使用する方法はすでに学習しているため、ジョイスティックとのインターフェースをとるのは単なる回避策になります。pickitを初めて使用する場合は、プロジェクトを理解しやすくするために、上記のADCプロジェクトとLED点滅シーケンスプロジェクトを学習することをお勧めします。
必要な材料
- プログラミング用のPicKit3
- ジョイスティックモジュール
- PIC16F877A IC
- 40ピンICホルダー
- パフォーマンスボード
- 20MHzクリスタルOSC
- Bergstikピン
- 220オームの抵抗器
- 5-任意の色のLED
- 1はんだ付けキット
- IC 7805
- 12Vアダプター
- 接続線
- ブレッドボード
ジョイスティックモジュールを理解する:
ジョイスティックにはさまざまな形状とサイズがあります。典型的な ジョイスティックモジュール を次の図に示します。ジョイスティックは、スマートな機械的配置の上に取り付けられた2つのポテンショメータとプッシュボタンにすぎません。ポテンショメータはジョイスティックのXとYの動きを追跡するために使用され、ボタンはジョイスティックが押されたかどうかを感知するために使用されます。両方のポテンショメータは、ジョイスティックの位置に応じてアナログ電圧を出力します。そして、いくつかのマイクロコントローラーを使用してこれらの電圧変化を解釈することにより、移動の方向を取得できます。以前は、ジョイスティックをAVRに、ジョイスティックをArduinoおよびRaspberryPiに接続していました。
センサーまたはモジュールをマイクロコントローラーに接続する前に、それがどのように機能するかを知ることが重要です。ここでは、ジョイスティックに5つの出力ピンがあり、そのうち2つは電源用、3つはデータ用です。モジュールは+ 5Vで給電する必要があります。データピンの名前はVRX、VRY、SWです。
「VRX」という用語はX軸の可変電圧を表し、「VRY」という用語はY軸の可変電圧を表し、「SW」はスイッチを表します。
したがって、ジョイスティックを左または右に動かすとVRXの電圧値が変化し、上下に動かすとVRYが変化します。同様に、斜めに動かすと、VRXとVRYの両方が変化します。スイッチを押すと、SWピンがアースに接続されます。次の図は、出力値をよりよく理解するのに役立ちます
回路図:
ジョイスティックがどのように機能するかがわかったので、ジョイスティックモジュールの3つのデータピンすべてを読み取るには、2つのADCピンと1つのデジタル入力ピンが必要であるという結論に達することができます。完全な回路図を下の図に示します
回路図でわかるように、ジョイスティックの代わりに、2つのポテンショメータRV1とRV3をアナログ電圧入力とスイッチのロジック入力として使用しました。紫色で書かれたラベルに従ってピン名と一致させ、それに応じて接続することができます。
アナログピンはチャネルA0とA1に接続され、デジタルスイッチはRB0に接続されていることに注意してください。また、出力として5つのLEDライトを接続し、ジョイスティックの移動方向に応じて1つを点灯できるようにします。したがって、これらの出力ピンはRC0からRC4までポートCに接続されます。回路図をパンしたら、プログラミングを続行し、この回路でプログラムをシミュレートし、ブレッドボードで回路を構築して、プログラムをハードウェアにアップロードします。上記の接続を行った後の私のハードウェアのアイデアを以下に示します
ジョイスティックとのインターフェースのためのプログラミング:
PICでジョイスティックをインタフェースするプログラムは、シンプルでまっすぐ進むです。ジョイスティックが接続されているピンとその機能はすでにわかっているので、ピンからアナログ電圧を読み取り、それに応じて出力LEDを制御するだけです。
これを行うための完全なプログラムは、このドキュメントの最後に記載されていますが、説明のために、以下の小さな意味のあるスニペットにコードを分割しています。
プログラムは常に構成ビットを設定することで開始されるため、構成ビットの設定については、LED点滅プロジェクトですでに学習しており、このプロジェクトでも同じであるため、あまり説明しません。構成ビットを設定したら、PICでADCモジュールを使用するためのADC機能を定義する必要があります。これらの機能は、PICチュートリアルでADCを使用する方法でも学習しました。その後、どのピンが入力で、どのピンが出力ピンであるかを宣言する必要があります。ここでは、LEDがPORTCに接続されているため、これらは出力ピンであり、ジョイスティックのスイッチピンはデジタル入力ピンです。したがって、次の行を使用して同じことを宣言します。
// ***** I / O構成**** // TRISC = 0X00; // PORTC は出力ポートとして使用されますPORTC = 0X00; //すべてのピンをローにしますTRISB0 = 1; // RB0が入力として使用されます // *** I / O構成の終了** ///
ADCピンは入力として定義する必要はないADC機能を使用する場合、彼らはそれが入力端子として割り当てられることになるので、ピン。ピンが定義されたら、前に定義した ADC_initialize 関数を呼び出すことができます。この関数は、必要なADCレジスタを設定し、ADCモジュールを準備します。
ADC_Initialize(); // ADCモジュールを構成します
ここで、無限の while ループに足を踏み入れます。このループ内では、VRX、VRY、およびSWの値を監視し、その値に基づいてLEDの出力を制御する必要があります。以下の行を使用してVRXとVRYのアナログ電圧を読み取ることにより、監視プロセスを開始できます。
int joy_X =(ADC_Read(0)); //ジョイスティックのX軸を読み取りますintjoy_Y =(ADC_Read(1)); //ジョイスティックのY軸を読み取る
この行は、VRXとVRYの値をそれぞれ変数 joy_X と joy_Yに保存し ます。関数 ADC_Read(0) は、ピンA0であるチャネル0からADC値を読み取っていることを意味します。VRXとVRYをピンA0とA1に接続したので、0と1から読み取ります。
ADCチュートリアルから思い出すことができれば、デジタルデバイスであるPICが0から1023までアナログ電圧を読み取ることがわかります。この値は、ジョイスティックモジュールの位置によって異なります。上のラベル図を使用して、ジョイスティックのすべての位置に期待できる値を知ることができます。
ここでは、下限として200の制限値を使用し、上限として800の値を使用しました。何でも使えます。それでは、これらの値を使用して、それに応じてLEDを点灯させ始めましょう。これを行うには、以下に示すように、IFループを使用して joy_X の値を事前定義された値と比較し、LEDピンをハイまたはローにする必要があります。コメント行は、理解を深めるのに役立ちます
if(joy_X <200)//ジョイが上に移動 {RC0 = 0; RC1 = 1;} //上部LEDを点灯 elseif(joy_X> 800)//ジョイが下に移動 {RC0 = 1; RC1 = 0;} //下部LEDを点灯 else //移動しない場合 {RC0 = 0; RC1 = 0;} //両方のLEDをオフにします
Y軸の値についても同様に行うことができます。以下に示すように、変数 joy_X を joy_Y に置き換え、次の2つのLEDピンを制御する 必要が あります。ジョイスティックを動かさないときは、両方のLEDライトをオフにすることに注意してください。
if(joy_Y <200)//ジョイが左に移動 {RC2 = 0; RC3 = 1;} //左LEDを点灯 elseif(joy_Y> 800)//ジョイが右に移動 {RC2 = 1; RC3 = 0;} //右に光るLEDelse //移動しない場合 {RC2 = 0; RC3 = 0;} //両方のLEDをオフにします
最後にもう1つやるべきことがあります。が押されているかどうか、スイッチを確認する必要があります。スイッチピンはRB0に接続されているため、ifループを再度使用して、オンになっているかどうかを確認できます。それが押された場合、スイッチが押されたことを示すためにLEDをオフにします。
if(RB0 == 1)// Joyが押された場合RC4 = 1; //中央のLEDを点灯elseRC4 = 0; //真ん中のLEDをオフ
シミュレーションビュー:
プロジェクト全体は、Proteusソフトウェアを使用してシミュレートできます。プログラムを作成したら、コードをコンパイルし、シミュレーションの16進コードを回路にリンクします。次に、ポテンショメータの位置に応じてLEDライトが点灯していることに気付くはずです。シミュレーションを以下に示します。
ハードウェアと動作:
シミュレーションを使用してコードを検証した後、ブレッドボード上に回路を構築できます。 PICチュートリアルに従っている場合は、PICと7805回路がはんだ付けされた同じパフォーマンスボードを使用していることに気付くでしょう。すべてのPICプロジェクトで使用できるように作成することにも関心がある場合は、回路をパフォーマンスボードにはんだ付けします。または、ブレッドボード上に完全な回路を構築することもできます。ハードウェアが完成すると、次のようになります。
次に、PICkit3を使用してコードをPICマイクロコントローラーにアップロードします。ガイダンスについては、LED点滅プロジェクトを参照できます。プログラムがアップロードされるとすぐに黄色のライトが高くなることに気付くはずです。次に、ジョイスティックを使用してノブを変更します。ジョイスティックの方向ごとに、それぞれのLEDが高くなっていることがわかります。真ん中のスイッチを押すと、真ん中のLEDが消灯します。
この作業はほんの一例であり、その上に多くの興味深いプロジェクトを構築できます。プロジェクトの完全な作業は、このページの最後にあるビデオでも見ることができます。
プロジェクトを理解し、構築を楽しんでいただければ幸いです。問題が発生した場合は、下のコメントセクションに投稿するか、フォーラムに書き込んでサポートを受けてください。