5.超音波センサの使い方
超音波センサの基本的な仕組みは、送信管から超音波を出して(トリガ)、その反射を受信管で受ける(エコー)までの時間から、距離を検出します。
JAMCARでは、HC-SR04という部品を使っています。
HC-SR04の仕様
測距範囲 | 2~400cm(15度の範囲、分解能:0.3cm) |
電源電圧 | DC 5.0V |
動作電流 | 15mA |
動作周波数 | 40kHz |
トリガ信号 | 10μS |
エコー出力信号 | 反射時間 |
サイズ | 45×20×15mm |
HS-SR04の使用では、10μsのトリガを出すことになっていますが、IchgoJam BASICではそのような命令がありません。
そこで、正確ではありませんが、OUT命令を続けて実行してトリガの代わりにして、エコーをカウントします。
使用ポート | 用途 | 備考 |
IN1 | 超音波センサEcho | 変数U:IN(1)が真だった回数 |
OUT6 | 超音波センサTriger | OUT6,1:OUT6.0を実行でトリガ生成 |
10 U=0:WAIT10:OUT6,1:OUT6,0
20 U=U+1:IF IN(1) && U<5000 CONT
エラー処理を行う場合は次のようにするとよい。
10 U=0:WAIT10:OUT6,1:OUT6,0
20 @ECHO:U=U+1:IF U>5000 GOTO@ERR
30 IF IN(1) GOTO@ECHO
変数Uに、IN(1)が真だった回数が入ります。
これだけでも、およその距離はわかるのですが、結構距離の判定に困ります。そこで、マシン語を使ってもう少し正確に距離を求めます。
たとえば、次のプログラムは、約10cm以内に障害物がある(U<100)のとき、BEEPを鳴らします。
マシン語の中でEcho信号が真だった回数(超音波が返ってきた時間の回数)を数えており、変数Uに代入しています。
10
POKE#700,114,182,0,32,3,73,10,104,64,28,0,42,251,209,64,9,98,182,112,71,0,16,0,80
20 WAIT10:OUT6,1:OUT6,0:U=ABS(USR(#700,0))
30 IF U<100 BEEP
40 GOTO 20
測定した距離が小さければ、Uの値は小さく、距離が大きければ、大きな値になります。