超音波センサ"HC-SR04"の使い方
.
概要
今回は mbed LPC1768 と 超音波センサ"HC-SR04" を用いて距離測定を行う。また、測定距離はシリアル通信でPCへ転送し、画面へ出力する。
※筆者浅学なため、文中に誤字や説明が不十分な点があるかと思いますが、その際はご指摘していただければ幸いです。
センサ仕様
HC-SR04 のデータシート:http://www.micropik.com/PDF/HCSR04.pdf
入出力電圧 | 5V |
---|---|
測定可能距離 | 2cm~3m |
測定可能角度 | 15度 |
トリガー入力信号 | TTL信号 10μs |
エコー出力信号 | TTL信号 測定距離に応じた長さ |
回路
センサへの電源はmbedのVU(USB電源 5V)ピンから
トリガーピンはp11、エコーピンはp12から(任意で変更可能)
センサのエコーからは5V出力されるが、mbedのI/Oピンは5Vトレラント入力が可能なのでそのままでも大丈夫
気になる場合は2.2kΩと3.3kΩ用いて分圧する(抵抗値は別の組み合わせでも可)
※Vin = ( 5V * 3.3k) / (2.2k + 3.3k) = 3[V]
レベルコンバータがない場合のみこの方法を用いること
mbed LPC1768 HC-SR04
――――――― ―――――
VU l―――――――l Vcc
p11` l―――――――l Triger
p12` l-―[2.2kΩ]-――l Echo
l | l
l [3.3kΩ]‘l
l | l
GND` l――――――-―l GND
――――――― ―――――
※携帯・スマートフォンから閲覧した場合文字ずれが発生するためPCから閲覧してください。
プログラム
今回画面出力時に使用したソフトウェアは”Tera Term”で、キーボード入力があった場合にのみ画面へ出力するプログラムとした。
include the mbed library with this snippet
/* ヘッダーファイル読み込み */ #include "mbed.h" /* ピンの機能設定 */ Serial PC (USBTX,USBRX); //USB :シリアル通信 DigitalOut USSTriger (p11); //P11 :超音波センサ トリガ出力 Timer ActiveTime; /* 割り込み処理宣言 */ Ticker TrigerTiming; //Trigerピン :インターバルタイマ InterruptIn USSEcho (p12); //p12 :超音波センサ エコー入力 /* 関数宣言 */ void init(void); void Output_Monitor(unsigned short Value); /* グローバル変数宣言*/ unsigned short USSDistance; //USSDistance:超音波センサ測定距離 /* main関数開始*/ int main() { char val; //val:PC.readable初期化用変数 init(); while(1) { if( PC.readable() ){ Output_Monitor( USSDistance ); val = PC.getc(); } } } /*************************************************** * @brief 60ms毎の割り込みでUSSTrigerに10usのON出力 * @param なし * @return なし * @date 2014/12/16 新規作成 **************************************************/ void Triger (){ USSTriger = 1; wait_us(10); USSTriger = 0; } /*************************************************** * @brief USSEcho立ち上がりでの割り込み * @brief Hiの場合ActiveTimeタイマスタート * @param なし * @return なし * @date 2014/12/16 新規作成 **************************************************/ void RiseEcho(){ ActiveTime.start(); } /*************************************************** * @brief USSEcho立ち下がりでの割り込み * @brief Lowの場合ActiveTimeタイマ停止+値読み取り * @param なし * @return なし * @date 2014/12/16 新規作成 **************************************************/ void FallEcho(){ unsigned long ActiveWidth; ActiveTime.stop(); ActiveWidth = ActiveTime.read_us(); USSDistance = ActiveWidth * 0.0170; ActiveTime.reset(); } /*************************************************** * @brief 各種機能のプロパティ設定 * @param なし * @return なし * @date 2014/12/13 新規作成 **************************************************/ void init(void){ TrigerTiming.attach( Triger , 0.060 ); //USSTriger周期 60ms USSEcho.rise( RiseEcho ); //USSEcho立ち上がり時割り込み USSEcho.fall( FallEcho ); //USSEcho立ち下がり時割り込み } /*************************************************** * @brief Parameterの値をPC画面に出力 * @param Value : 画面に出力する値 * @return なし * @date 2014/12/14 新規作成 **************************************************/ void Output_Monitor(unsigned short Value){ PC.printf("%d[cm]\r\n",Value); }
Please log in to post comments.