
超音波センサを使って衝突検知をしてみたい。
サーボモータと組み合わせて測定物までの距離を測りたい
原理はわかるけどプログラムがわからない
こんな疑問にArduinoと超音波センサ、サーボモータを使った衝突検知回路を必要なものから、実際のつくり方を紹介いたします。

必要なもの
基本的には、下記が必要になります。わたしは初めに、スターターキットを買いましたので、これらすべてが入っており、おすすめになります。
Arduino Uno
超音波センサ
サーボモータ
アクティブブザー
ブレッドボード(小)
ブレッドボードはサーボモータに取り付けるため、小型のものがおすすめです。これがあれば、次回製作するラジコンにも取り付けることができます。
基本上記のものは、下記のスタータキットに入っていますので、これをはじめに買うことをおすすめします。
アルミ板+ねじなど(サーボモータに固定するために必要)
アルミ板とねじがあると、サーボモータの固定などに使えて便利ですので、準備しましょう。カインズなどのホームセンターで売っています。
回路のつくり方
では電子回路を作ってみましょう。まず、サーボモータのホーンとブレッドボードをアルミ板を挟んで固定します。


M2のボルト・ナットで固定します。ナットを使うため、アルミ板を2枚に折りたたみ、両面テープでブレッドボードと固定しました。ホーンの穴サイズが小さいため、一度ドリルで穴径を大きくすることをお勧めします。

次に、ブレッドボードに超音波センサを取り付け、5VとGNDにジャンパ線をつなぎます。
次にサーボモータを接続します。

サーボモータには、信号線(オレンジ)と電源の供給線(赤)、GND(茶)がありますので、これらを接続します。信号線はNo10ピンに接続します。
アクティブブザーをブレッドボードに取り付けます。ブザーには+極と-極がありますので、接続に注意しましょう。


アクティブブザーが終わりましたら、超音波センサを接続します。


超音波センサの5VとGNDを接続します。
接続したら、No11をECHOに、No12をTRIGに接続してください。
以上で回路は完了です。サーボのホーンをブレッドボードに固定されていますので、サーボ本体に固定して終了です。
超音波センサプログラム作成
超音波センサのプログラムは過去にやっていますので、こちらを参考にしてください。
プログラムではサーボが30°から150°まで稼働し、超音波センサによる測定距離が10cm以下になると、ブザーが鳴り・サーボが止まる仕組みとなっております。
#include <Servo.h>
Servo myservo;
#define PIN 8
#define TRG 12
#define ECH 11
int distance;
int newdistance;
float measure() {
int diff;
float dis;
digitalWrite(TRG, HIGH);
delayMicroseconds(20);
digitalWrite(TRG, LOW);
diff = pulseIn(ECH, HIGH);//ECHがHIGHに変わると測定開始し、LOWになるまでの時間を返す
dis = (float)diff * 0.01715;
return dis;
}
void setup() {
myservo.attach(10);
myservo.write(30);
pinMode(TRG, OUTPUT);
pinMode(ECH, INPUT);
Serial.begin(9600);
}
void loop() {
myservo.write(30);
for (int i = 30; i <= 150; i++) {
Serial.println(distance);
myservo.write(i);
delay(10);
distance = measure();
if (distance < 10) {
while(true){
tone(PIN, 10,100);
newdistance = measure();
if(newdistance > 10){
break;
}
}
}
}
for (int i = 150; i >= 30; i--) {
myservo.write(i);
delay(10);
distance = measure();
if (distance < 10) {
while(true){
tone(PIN, 10,100);
newdistance = measure();
if(newdistance > 10){
break;
}
}
}
}
}
完成したものがこちらになります。
次回はこちらの衝突センサをラジコンにのせ、衝突検知すると自動で方向を修正し、衝突回避するラジコンを作りたいと思います。