Arduinoと超音波センサを使ってお掃除ロボットを作る

タイトルにもある通り、Arduinoと超音波センサを使ってお掃除ロボットを作ってみました。
といっても、ルンバのような物ではなく、雑巾がけをするようなロボットです。

主要部品はこんな感じです。

  • Arduino Micro
  • 超音波センサ HC-SR04
  • モータドライバ TA7291P
  • 工作キット タミヤ 楽しい工作シリーズ No.162 リモコンロボット製作セット
  • 電池ボックス
  • ブレッドボード

接続はこうです。この図を作ってから繋いだ訳ではないので、間違ってる可能性有り。 f:id:oki-lab:20190304204518p:plain

プログラムは下記の通りです。
超音波センサの部分は下記サイトのプログラムを参考にしています。

Arduinoでパーツやセンサを使ってみよう~超音波モジュール編 | Device Plus - デバプラ

#define echoPin 2 // Echo Pin
#define trigPin 3 // Trigger Pin

#define m1Pin1  4 // Motor1
#define m1Pin2  5
#define m1Pin3  6 //PWM

#define m2Pin1  7 // Motor2
#define m2Pin2  8
#define m2Pin3 9 //PWM


double Duration = 0;
double Distance = 0;

void setup() {
  Serial.begin( 9600 );
  pinMode(echoPin,INPUT);
  pinMode(trigPin,OUTPUT);

  pinMode(m1Pin1,OUTPUT); 
  pinMode(m1Pin2,OUTPUT); 
  pinMode(m2Pin1,OUTPUT); 
  pinMode(m2Pin2,OUTPUT);

  analogWrite(m1Pin3,255); 
  analogWrite(m2Pin3,255);
}

void forward(){
  digitalWrite(m1Pin1,HIGH);
  digitalWrite(m1Pin2,LOW);

  digitalWrite(m2Pin1,HIGH);
  digitalWrite(m2Pin2,LOW);
}

void back(){
  digitalWrite(m1Pin1,LOW);
  digitalWrite(m1Pin2,HIGH);

  digitalWrite(m2Pin1,LOW);
  digitalWrite(m2Pin2,HIGH);    
}

void turn(){
  digitalWrite(m1Pin1,LOW);
  digitalWrite(m1Pin2,HIGH);

  digitalWrite(m2Pin1,HIGH);
  digitalWrite(m2Pin2,LOW);  
}

double get_distance(){
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2); 
  digitalWrite( trigPin, HIGH );
  delayMicroseconds( 10 ); //
  digitalWrite( trigPin, LOW );
  Duration = pulseIn( echoPin, HIGH );
  if (Duration > 0) {
    Duration = Duration/2;
    Distance = Duration*340*100/1000000;
    Serial.print("Distance:");
    Serial.print(Distance);
    Serial.println(" cm");
    return Distance;
  }

  return 100;
}

void loop() {
  forward();
  
  if (get_distance()<5){
    back();
    delay(1000);
    turn();
    delay(500);
  }

  delay(100);
}

全部組み立てるとこんな感じになります。
後ろの方にウェットティッシュを巻いたブレッドボードを付けています。
これで床を拭いていきます。
なお、Arduinoは単3乾電池2本で5Vを作れるバッテリボックスで動いています。秋葉原で買いました。
f:id:oki-lab:20190304210017j:plain:w500