7月の講座のプレ勉強会が今月末に開催
今回は超音波測距を行うのだが、
Tiny:bitの場合は「距離(cm)」ブロックを入れるだけで勝手に計測してくれるという状況
講師としてはその背景を知っておかないと情けないので、真面目にお勉強してみた。
Tiny:bitに搭載されている超音波センサーは有名な「HC-SR04」
ググったところ、
①向かって左の「T」がトリガーを発射する
10μ秒のHighをかけると発射
②向かって左の「R」が反射を受信する
距離に応じた長さのパルスが入ってくるので
パルス長を計測する「pulseIn(echoPin, HIGH);」関数で長さを取得する。
ーーーー Arduinoプログラム例 ーーーー
double 音速 = 331.5 + 0.6 * 25;
void loop() {
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite( TRIG, HIGH );
delayMicroseconds( 10 );
digitalWrite( TRIG, LOW );
往復時間 = pulseIn( ECHO, HIGH );
if ( 往復時間 > 0) {
往復時間 = 往復時間 / 2;
距離 = 往復時間 * 音速 * 100 / 1000000;
Serial.print("距離:");
Serial.print(距離);
Serial.println(" cm");
}
delay(200);
}
みたいな感じだった。
void loop() {
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite( TRIG, HIGH );
delayMicroseconds( 10 );
digitalWrite( TRIG, LOW );
往復時間 = pulseIn( ECHO, HIGH );
if ( 往復時間 > 0) {
往復時間 = 往復時間 / 2;
距離 = 往復時間 * 音速 * 100 / 1000000;
Serial.print("距離:");
Serial.print(距離);
Serial.println(" cm");
}
delay(200);
}
みたいな感じだった。
40KHzパルスの発射と受信までの時間計測の作業はすべて基盤上のプログラムがやってるんでしょう。
パルス発生から受信までをこなす大昔のPic上の超音波測距のプログラムは結構面倒だった。