このチュートリアルでは、距離を測定するための回路について説明し、設計します。この回路は、超音波センサー「HC-SR04」をAVRマイクロコントローラーとインターフェースすることによって開発されました。このセンサーは、表面に当たった後に音が反射して戻る「エコー」と呼ばれる技術を使用しています。
音の振動は固体を貫通できないことを私たちは知っています。つまり、音源が振動を発生させると、毎秒220メートルの速度で空気中を移動します。それらが私たちの耳に出会うときのこれらの振動は、私たちはそれらを音として説明します。先に述べたように、これらの振動は固体を通過できないため、壁のような表面に当たると、同じ速度で反射されて音源に戻ります。これはエコーと呼ばれます。
超音波センサー「HC-SR04」は、エコーに基づいて距離に比例した出力信号を提供します。ここでのセンサーは、トリガーを与えると超音波範囲で音の振動を発生させ、その後、音の振動が戻るのを待ちます。パラメータ、音速(220m / s)、エコーが音源に到達するまでの時間に基づいて、距離に比例した出力パルスを提供します。
図に示すように、最初に距離を測定するためのセンサーを開始する必要があります。これは、センサーのトリガーピンで10uSを超えるHIGHロジック信号です。その後、音の振動がセンサーによって送信され、エコーの後、センサーは幅がソースと障害物の間の距離に比例する出力ピンの信号。
この距離は、距離(cm)=パルス出力の幅(uS)/ 58として計算されます。
ここで、信号の幅はuSの倍数(マイクロ秒または10 ^ -6)で取得する必要があります。
必要なコンポーネント
ハードウェア: ATMEGA32、電源(5v)、AVR-ISPプログラマー、JHD_162ALCD(16x2LCD)、1000uFコンデンサー、10KΩ抵抗(2個)、HC-SR04センサー。
ソフトウェア: Atmel studio 6.1、progispまたはflashmagic。
回路図と動作説明
ここでは、PORTBを使用してLCDデータポート(D0〜D7)に接続しています。ATMEGA32AのFUSEBITSを使用したくない人は、PORTCを使用できません。PORTCには、FUSEBITSを変更することによってのみ無効にできる特殊なタイプの通信が含まれているためです。
回路では、私が2つの制御ピンしか取っていないことがわかります。これにより、理解を深める柔軟性が得られます。コントラストビットとREAD / WRITEはあまり使用されないため、グランドに短絡することができます。これにより、LCDが最高のコントラストと読み取りモードになります。ENABLEピンとRSピンを制御して、それに応じて文字とデータを送信する必要があります。
LCD用に行われる接続を以下に示します。
PIN1またはVSSをアースに接続
PIN2またはVDDまたはVCCから+ 5v電源
PIN3またはVEEを地面に接続(初心者に最適な最大のコントラストを提供)
PIN4またはRS(レジスタ選択)をuCのPD6に
PIN5またはRW(読み取り/書き込み)をグランドに接続(LCDを読み取りモードにすると、ユーザーの通信が容易になります)
PIN6またはE(有効)からuCのPD5
uCのPIN7またはD0からPB0
uCのPIN8またはD1からPB1
uCのPIN9またはD2からPB2
uCのPIN10またはD3からPB3
uCのPIN11またはD4からPB4
uCのPIN12またはD5からPB5
uCのPIN13またはD6からPB6
uCのPIN14またはD7からPB7
回路では8ビット通信(D0-D7)を使用していることがわかりますが、これは必須ではなく、4ビット通信(D4-D7)を使用できますが、4ビット通信プログラムでは少し複雑になります。したがって、上の表に示すように、LCDの10ピンをコントローラーに接続します。8ピンはデータピンで、2ピンは制御用です。
超音波センサーは、PIN1-VCCまたは+ 5Vの4ピンデバイスです。PIN2-トリガー; PIN3-エコー; PIN4-グラウンド。トリガーピンは、センサーに距離を測定するように指示するトリガーを与える場所です。エコーは、パルス幅の形で距離を取得する出力ピンです。ここでのエコーピンは、外部割り込みソースとしてコントローラに接続されています。したがって、信号出力の幅を取得するには、センサーのエコーピンをINT0(割り込み0)またはPD2に接続します。
1.トリガーピンを少なくとも12uS引き上げて、センサーをトリガーします。
2.エコーがハイになると、外部割り込みが発生し、割り込みがトリガーされた直後に実行されるISR(割り込みサービスルーチン)でカウンターを開始します(カウンターを有効にします)。
3.エコーが再びローになると、割り込みが生成されます。今度は、カウンターを停止します(カウンターを無効にします)。
4.したがって、エコーピンでのパルスのハイからローに対して、カウンターを開始して停止しました。エコーの幅がカウントになっているため、このカウントは距離を取得するためにメモリに更新されます。
5.距離をcm単位で取得するために、メモリ内でさらに計算を行います。
6.距離は16x2LCDディスプレイに表示されます。
上記の機能を設定するために、次のレジスタを設定します。
上記の3つのレジスタは、セットアップが機能するように適宜設定する必要があり、簡単に説明します。
青(INT0):外部割り込み0を有効にするには、このビットをハイに設定する必要があります。このピンが設定されると、PIND2ピンでの論理変化を検出できます。
ブラウン(ISC00、ISC01):これらの2ビットは、割り込みと見なされるPD2での適切なロジック変更に合わせて調整されます。
したがって、前述のように、カウントを開始して停止するには、割り込みが必要です。したがって、ISC00を1に設定すると、INT0で論理LOWからHIGHになると割り込みが発生します。HIGHからLOWへのロジックがある場合の別の割り込み。
RED(CS10):このビットは、単にカウンタを有効または無効にするためのものです。それは他のビットCS10、CS12と一緒に動作しますが。ここでは事前スケーリングを行っていないため、心配する必要はありません。
ここで覚えておくべきいくつかの重要なことは次のとおりです。
ATMEGA32Aの1MHzの内部クロックを使用しています。ここではプリスケーリングは行われず、比較一致割り込み生成ルーチンを実行していないため、複雑なレジスタ設定はありません。
カウント後のカウント値は16ビットTCNT1レジスタに格納されます。
arduinoでこのプロジェクトもチェックしてください:Arduinoを使用した距離測定
プログラミングの説明
距離測定センサーの動作は、以下のCプログラムで段階的に説明されています。
#include //ピンのデータフロー制御を有効にするヘッダー#defineF_CPU 1000000 //接続されているコントローラーの水晶周波数を通知する#include