電子工作

Arduino で超音波センサを使って衝突検知をする1

超音波センサを使って衝突検知をしてみたい。

サーボモータと組み合わせて測定物までの距離を測りたい

原理はわかるけどプログラムがわからない

こんな疑問にArduinoと超音波センサ、サーボモータを使った衝突検知回路を必要なものから、実際のつくり方を紹介いたします。

🚀 0円で現役エンジニアから学べる【Techスクールオンライン】のお申込みをお勧めします。 このオンラインスクールでは、現役のエンジニアから直接学ぶことができ、プログラミングの基礎から高度なスキルまでを習得できます。しかも、今なら 0円 で受講できるチャンスです。 エンジニア転職を考えている方やプログラミングに興味がある方、新しいスキルを習得したい方に特におすすめです。

必要なもの

基本的には、下記が必要になります。わたしは初めに、スターターキットを買いましたので、これらすべてが入っており、おすすめになります。

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;
      }
      }
    }
  }
}

完成したものがこちらになります。

次回はこちらの衝突センサをラジコンにのせ、衝突検知すると自動で方向を修正し、衝突回避するラジコンを作りたいと思います。

🚀 0円で現役エンジニアから学べる【Techスクールオンライン】のお申込みをお勧めします。 このオンラインスクールでは、現役のエンジニアから直接学ぶことができ、プログラミングの基礎から高度なスキルまでを習得できます。しかも、今なら 0円 で受講できるチャンス。
私がツナグバに登録してから、求人情報が豊富に届き、自分に合った仕事を見つけることができました。特に、第二新卒向けの求人情報が多いので、自分のスキルや経験を活かしながら新たなキャリアに挑戦することができました。転職活動は不安も多いですが、ツナグバのサポートがあれば、成功への道が明るく感じました。