超音波センサ"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.
