車両またはモーターの速度/ rpmを測定することは、私たちが試みる魅力的なプロジェクトでした。したがって、このプロジェクトでは、産業用PICマイクロコントローラーを使用して1つを構築します。磁石とホールセンサーを使用して速度を測定します。速度を測定する方法/センサーは他にもありますが、ホールセンサーを使用すると安価であり、あらゆるタイプのモーター/車両で使用できます。このプロジェクトでは、割り込みとタイマーを使用するため、PIC16F877Aの学習スキルも向上します。このプロジェクトの最後に、回転するオブジェクトがカバーする速度と距離を計算し、16x2LCD画面に表示できるようになります。PICを備えたこのデジタル速度計と走行距離計回路から始めましょう。
必要な材料:
- PIC16F877A
- 7805電圧レギュレータ
- ホール効果センサー(US1881 / 04E)
- 16 * 2LCDディスプレイ
- 磁石の小片
- 接続線
- コンデンサ
- ブレッドボード。
- 電源
カバーされる速度と距離の計算:
実際に回路の構築を始める前に、ホールセンサーと磁石を使用してホイールの速度を計算する方法を理解しましょう。以前は、同じ手法を使用して、Androidスマートフォンで測定値を表示するArduinoスピードメーターを構築しました。
ホールセンサーは、磁石の極性に基づいて磁石の存在を検出できるデバイスです。ホイールに小さな磁石を貼り付け、ホイールが回転するたびにホールセンサーが検出するようにホールセンサーをその近くに配置します。次に、PICマイクロコントローラーのタイマーと割り込みを使用して、ホイールが完全に1回転するのにかかる時間を計算します。
所要時間がわかったら、次の式を使用してRPMを計算できます。1000/所要時間でRPSが得られ、さらに60を掛けるとRPMが得られます。
rpm =(1000 /所要時間)* 60;
ここで、(1000 / timetaken)はrps(1秒あたりの回転数)を示し、60を掛けてrpsをrpm(1分あたりの回転数)に変換します。
ここで、車両の速度を計算するには、ホイールの半径を知る必要があります。私たちのプロジェクトでは、半径がわずか3cmの小さなおもちゃの車輪を使用しました。ただし、読み取り値を視覚化できるように、ホイールの半径を30cm(0.3m)と想定しました。
Velocity =(RPM(diameter * Pi)/ 60)であることがわかっているため、この値にも0.37699が掛けられます。数式は次のように簡略化されます
v = radius_of_wheel * rpm * 0.37699;
速度を計算すると、同様の方法を使用して移動距離を計算することもできます。ホールと磁石の配置により、ホイールが何回回転したかがわかります。また、ホイールの半径を知ることができます。これを使用して、ホイールの半径を0.3m(R)とすると、円周率Pi * R * Rの値は0.2827になります。これは、ホールセンサーが磁石に接触するたびに、0.2827メートルの距離がホイールでカバーされることを意味します。
Distance_covered = distance_covered + circround_of_the_circle
これで、このプロジェクトがどのように機能するかがわかったので、回路図に進んで構築を開始しましょう。
回路図とハードウェアのセットアップ:
この速度計および走行距離計プロジェクトの回路図は非常に単純で、ブレッドボード上に作成できます。PICチュートリアルに従っている場合は、PICマイクロコントローラーの学習に使用したハードウェアを再利用することもできます。ここでは、以下に示すように、PICマイクロコントローラーでLEDを点滅させるために構築したものと同じパフォーマンスボードを使用しました。
PIC16F877AMCUのピン接続を次の表に示します。
S.No: |
ピン番号 |
ピン名 |
に接続されています |
1 |
21 |
RD2 |
LCDのRS |
2 |
22 |
RD3 |
LCDのE |
3 |
27 |
RD4 |
LCDのD4 |
4 |
28 |
RD5 |
LCDのD5 |
5 |
29 |
RD6 |
LCDのD6 |
6 |
30 |
RD7 |
LCDのD7 |
7 |
33 |
RB0 / INT |
ホールセンサーの3番目のピン |
プロジェクトをビルドすると、下の図のようになります。
ご覧のとおり、モーターとホールセンサーを近くの位置に配置するために2つのボックスを使用しました。磁石を回転する物体に固定し、磁石を検出できるように、近くのホールセンサーをそのままにしておくことができます。
注: ホールセンサーには極性があるため、検出している極を確認し、それに応じて配置します。
また、ホールセンサーの出力ピンには必ずプルアップ抵抗を使用してください。
シミュレーション:
このプロジェクトのシミュレーションは、Proteusを使用して行われます。プロジェクトには移動するオブジェクトが含まれるため、シミュレーションを使用してプロジェクト全体をデモンストレーションすることはできませんが、LCDの動作を確認できます。16進ファイルをシミュレーションにロードしてシミュレーションするだけです。以下に示すようにLCDが機能していることがわかります。
スピードメーターとオドメーターが機能していることを確認するために、ホールセンサーをロジック状態デバイスに交換しました。シミュレーション中に、ロジック状態ボタンをクリックして割り込みをトリガーし、上記のようにカバーされる速度と距離が更新されているかどうかを確認できます。
PIC16F877Aのプログラミング:
前に述べたように、PIC16F877Aマイクロコントローラーのタイマーと割り込みを使用して、ホイールが完全に1回転するのにかかる時間を計算します。前のチュートリアルでタイマーの使用方法をすでに学びました。この記事の最後に、プロジェクトの完全なコードを示しました。さらに、以下のいくつかの重要な行について説明しました。
以下のコード行は、ポートDをLCDインターフェースの出力ピンとして初期化し、RB0を外部ピンとして使用するための入力ピンとして初期化します。さらに、OPTION_REGを使用して内部プルアップ抵抗を有効にし、64をプレセールとして設定しました。次に、グローバル割り込みとペリフェラル割り込みを有効にして、タイマーと外部割り込みを有効にします。 RB0を外部割り込みビットとして定義するには、INTEをハイにする必要があります。オーバーフローの値は100に設定されているため、1ミリ秒ごとにタイマー割り込みフラグTMR0IFがトリガーされます。これは、ミリ秒タイマーを実行して、ミリ秒単位でかかる時間を決定するのに役立ちます。
TRISD = 0x00; // PORTDはLCDTRISB0 = 1とのインターフェース用の出力として宣言されています。 //割り込みピンとして使用する入力としてRB0ピンを定義しますOPTION_REG = 0b00000101; //プリスケーラとしてのTimer064 //プルアップも有効にしますTMR0 = 100; // 1msの時間値をロードします; delayValueは、TMR0IE = 1のみで0〜256の範囲にすることができます。 // PIE1レジスタのタイマー割り込みビットを有効にするGIE = 1; //グローバル割り込みを有効にするPEIE = 1; //ペリフェラル割り込みを有効にするINTE = 1; // RB0を外部割り込みピンとして有効にする
以下の関数は、割り込みが検出されるたびに実行されます。関数には希望どおりに名前を付けることができるので、 speed_isr() という名前を付けました 。 このプログラムは、2つの割り込みを処理します。1つはタイマー割り込みで、もう1つは外部割り込みです。タイマー割り込みが発生するたびに、フラグTMR0IFがハイになります。割り込みをクリアしてリセットするには、以下のコードに示すようにTMR0IF = 0を定義して割り込みをローにする必要があります。
void interrupt speed_isr(){if(TMR0IF == 1)//タイマーがオーバーフローしました{TMR0IF = 0; //タイマー割り込みフラグmilli_sec ++をクリアします; } if(INTF == 1){rpm =(1000 / milli_sec)* 60; 速度= 0.3 * rpm * 0.37699; //(ホイール半径を30cmと仮定)INTF = 0; //割り込みフラグをクリアしますmilli_sec = 0; 距離=距離+028.2; }}
同様に、外部割り込みが発生すると、フラグINTFがハイになります。これも、INTF = 0を定義することによってクリアする必要があります。かかった時間はタイマー割り込みによって追跡され、外部割り込みはホイールが1回転を完了したときを決定します。このデータを使用して、ホイールがカバーする速度と距離がすべての外部割り込み中に計算されます。
速度と距離が計算されると、LCD機能を使用してLCD画面に簡単に表示できます。LCDを初めて使用する場合は、LCDとPIC16F877AMCUのチュートリアルを参照してください。
作業説明:
ハードウェアとソフトウェアの準備ができたら、コードをPIC16F877Aにアップロードするだけです。PICを初めて使用する場合は、プログラムをPIC16F877Aマイクロコントローラーにアップロードする方法を知るためのチュートリアルをいくつか読む必要があります。
デモンストレーションの目的で、可変POTを使用してモーターの速度を調整しました。リアルタイムアプリケーションを見つけるのと同じことを使用することもできます。すべてが期待どおりに機能する場合は、下のビデオに示すように、速度(Km / Hr)と距離(メートル単位)を取得できるはずです。
あなたがプロジェクトを楽しんで、それが機能するようになったことを願っています。そうでない場合は、以下のコメントセクションまたはフォーラムを使用して疑問を投稿できます。