プロジェクトを実現するには、センサーを使用する必要があります。センサーは、すべての組み込みアプリケーションの目と耳として機能し、デジタルマイクロコントローラーがこの実際のアナログ世界で実際に何が起こっているかを理解するのに役立ちます。このチュートリアルでは、超音波センサーHC-SR04をPICマイクロコントローラーとインターフェースする方法を学習します。
HC-SR04は、超音波センサである450センチメートル(理論上)に2センチメートル間の距離どこを測定するために使用することができます。このセンサーは、障害物の検出、距離測定、環境マッピングなどを含む多くのプロジェクトに適合することで価値があることが証明されています。この記事の最後では、このセンサーがどのように機能し、PIC16F877Aマイクロコンピューターとインターフェースして距離と表示を測定する方法を学びます。 LCD画面に表示されます。面白そうですね!それでは始めましょう…
必要な材料:
- プログラミング設定のPIC16F877AMCU
- LCD 16 * 2ディスプレイ
- 超音波センサー(HC-SR04)
- 接続線
超音波センサーはどのように機能しますか?
先に進む前に、このチュートリアルをよりよく理解できるように、超音波センサーがどのように機能するかを知っておく必要があります。このプロジェクトで使用した超音波センサーを以下に示します。
ご覧のとおり、突起のような2つの円形の目と、そこから出ている4つのピンがあります。2つの目のような投影は、超音波(以下、US波と呼びます)送信機と受信機です。送信機は40Hzの周波数で米国の波を放出します。この波は空中を伝わり、物体を感知すると反射して戻ります。戻り波は受信機によって観測されます。これで、この波が反射して戻ってくるまでにかかる時間がわかり、米国の波の速度も普遍的です(3400cm / s)。この情報と以下の高校の公式を使用して、カバーされた距離を計算できます。
距離=速度×時間
USセンサーがどのように機能するかがわかったので、4つのピンを使用してMCU / CPUとインターフェースする方法を見てみましょう。これらの4つのピンは、それぞれVcc、Trigger、Echo、Groundです。モジュールは+ 5Vで動作するため、Vccとグランドピンを使用してモジュールに電力を供給します。他の2つのピンは、MCUとの通信に使用するI / Oピンです。トリガーピンを出力ピンとして宣言されなければならないと10US高を作り、これは8サイクル音波バーストとして空気中にUS波を送信します。波が観測されると、エコーピンはUS波がセンサーモジュールに戻るのにかかった正確な時間間隔でハイになります。したがって、このエコーピンは入力として宣言されますピンの高さを測定するためにタイマーが使用されます。これは、以下のタイミング図によってさらに理解できます。
このセンサーをPICとインターフェースする暫定的な方法に到達したことを願っています。このチュートリアルではタイマーモジュールとLCDモジュールを使用します。両方に精通していることを前提としています。そうでない場合は、関連する情報のほとんどをスキップするため、以下のそれぞれのチュートリアルに戻ってください。
- PICマイクロコントローラーとのLCDインターフェース
- PICマイクロコントローラーのタイマーを理解する
回路図:
超音波センサーをPIC16F877Aとインターフェースするための完全な回路図を以下に示します。
示されているように、回路にはLCDディスプレイと超音波センサー自体しか含まれていません。USセンサーは+ 5Vで電力を供給できるため、7805電圧レギュレーターから直接電力を供給されます。センサーには、ピン34(RB1)に接続された1つの出力ピン(トリガーピン)とピン35(RB2)に接続された入力ピン(エコーピン)があります。完全なピン接続を次の表に示します。
S.No: |
PICピン番号 |
ピン名 |
に接続されています |
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 |
34 |
RB1 |
米国のトリガー |
8 |
35 |
RB2 |
米国のエコー |
PICマイクロコントローラーのプログラミング:
このチュートリアルの完全なプログラムは、このページの最後にあります。以下では、理解できるように、コードを小さな意味の完全なチャンクに説明しました。前に述べたように、プログラムにはLCDインターフェースとタイマーの概念が含まれていますが、前のチュートリアルですでに説明しているため、このチュートリアルでは詳しく説明しません。
内部では、主な機能は通常どおりIOピンと他のレジスタを初期化することから始まります。LCDおよびUSセンサーのIOピンを定義し、1:4プリスカラーで動作するように設定してタイマー1レジスタを開始し、内部クロック(Fosc / 4)を使用します。
TRISD = 0x00; // PORTDはLCDTRISB0 = 1とのインターフェース用の出力として宣言されています。// RB0ピンを入力として定義して割り込みピンとして使用TRISB1 = 0; // USセンサーのトリガーピンは出力ピンTRISB2 = 1として送信されます。// USセンサーのエコーピンは入力ピンとして設定されますTRISB3 = 0; // RB3はLEDの出力ピンですT1CON = 0x20; // 4プレススカラーと内部時計
タイマー1はPIC16F877Aで使用される16ビットタイマーです。T1CONレジスタはタイマーモジュールのパラメータを制御し、結果は16ビットの結果であるためTMR1HとTMR1Lに格納されます。最初の8つはTMR1Hに格納され、 TMR1Lの次の8。このタイマーは、TMR1ON = 0およびTMR1ON = 1をそれぞれ使用してオンまたはオフにできます。
これでタイマーを使用する準備が整いましたが、センサーからUS波を送信する必要があります。これを行うには、トリガーピンを10uSの間ハイに保つ必要があります。これは、次のコードで実行されます。
トリガー= 1; __delay_us(10); トリガー= 0;
上のタイミング図に示されているように、エコーピンは波が戻るまでローのままで、その後ハイになり、波が戻るのにかかる正確な時間だけハイのままになります。この時間は、タイマー1モジュールで測定する必要があります。これは、次の行で実行できます。
while(Echo == 0); TMR1ON = 1; while(Echo == 1); TMR1ON = 0;
時間が測定されると、結果の値はレジスタTMR1HおよびTMR1Lに保存されます。これらのレジスタは、16ビット値を取得するために収集するためにクラブする必要があります。これは、以下の行を使用して行われます
time_taken =(TMR1L-(TMR1H << 8));
この time_taken はバイト形式になります。実際の時間値を取得するには、次の式を使用する必要があります。
時間=(16ビットレジスタ値)*(1 /内部クロック)*(プリスケール) 内部クロック= Fosc / 4ここで、この場合、Fosc = 20000000Mhzおよびプリスケール= 4したがって、内部クロックの値は次のようになります。 5000000Mhzで、時間の値はTime =(16ビットレジスタ値)*(1/5000000)*(4)=(16ビットレジスタ値)*(4/5000000)=(16ビットレジスタ値)*になります。 0.0000008秒(OR)時間=(16ビットレジスタ値)* 0.8マイクロ秒
私たちのプログラムでは、16ビットレジスタの値が変数 time_takenに 格納されているため、次の行を使用して time_taken をマイクロ秒単位で計算し ます。
time_taken = time_taken * 0.8;
次に、距離を計算する方法を見つける必要があります。私たちが知っているように、距離=速度*時間。しかし、ここでは、波が送信距離と受信距離の両方をカバーしているため、結果を2で割る必要があります。私たちの波(音)の速度は34000cm / sです。
距離=(速度*時間)/ 2 =(34000 *(16ビットレジスタ値)* 0.0000008)/ 2距離=(0.0272 * 16ビットレジスタ値)/ 2
したがって、距離は次のようにセンチメートルで計算できます。
距離=(0.0272 * time_taken)/ 2;
距離と所要時間の値を計算した後、LCD画面に表示するだけです。
PICと超音波センサーを使用した距離の測定:
接続を確立してコードをアップロードすると、実験のセットアップは次の図のようになります。
この写真に示されているPICPerfボードは、PICマイクロコントローラーの使用方法を学習したPICチュートリアルシリーズ用に作成されました。Pickit 3を使用してプログラムを作成する方法がわからない場合は、MPLABXとXC8を使用したPICマイクロコントローラーのチュートリアルに戻ることをお勧めします。これらの基本情報はすべてスキップします。
次に、センサーの前にオブジェクトを配置すると、オブジェクトがセンサーからどれだけ離れているかが表示されます。また、波が送信されて戻ってくるまでにかかる時間がマイクロ秒単位で表示されていることもわかります。
オブジェクトをお好みの距離に移動して、LCDに表示される値を確認できます。2cmから350cmまでの距離を0.5cmの精度で測定することができました。これは非常に満足のいく結果です!チュートリアルを楽しんで、自分で何かを作る方法を学んだことを願っています。疑問がある場合は、下のコメントセクションにドロップするか、フォーラムを使用してください。
超音波センサーと他のマイクロコントローラーとのインターフェースも確認してください。
- Arduino&超音波センサーベースの距離測定
- RaspberryPiとHCSR04超音波センサーを使用して距離を測定する
- HC-SR04とAVRマイクロコントローラーを使用した距離測定