工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Arduino UNOとモーターシールドで作る人追従ロボット

部品と材料

部品数量
Arduino UNO1
Adafruit モーターシールド1
SG90 マイクロサーボ1
IRセンサー(赤外線透過型)2
超音波センサー HC-SR041
DCギアードモーター + ホイール4
ジャンパーワイヤー1式
9V電池1
ロッカースイッチ (SPST)1

使用ソフトウェア

プロジェクト概要

パンデミック中の自宅学習プロジェクトとして、「人を追従するロボット(Human Following Bot)」を製作しました。2つのIRセンサーで左右の障害物を検知して方向制御し、超音波センサーで前方距離を測って前進/後退/停止を判断します。サーボモーターに超音波センサーを搭載し、首を振って広範囲をスキャンします。段ボールシャーシで手軽に組める入門向けロボットです。

製作手順

  1. 段ボールに4輪モーターを取り付けてシャーシを作る
  2. 前面左右にIRセンサーを配置(左右検知用)
  3. サーボを車体中央に固定、超音波センサーをサーボホーンに取り付け
  4. Arduinoとモーターシールドを搭載
  5. 回路図に従って配線
  6. スケッチを書き込み、IRセンサーの感度を調整
  7. 9V電池とスイッチを接続して完成

動作ロジック

サーボは起動時に0°→180°→0°のスイープ動作で初期化し、その後は中央(90°)固定で前方を監視します。

ソースコード

// www.YouTube.com/Electronics is Fun
#include <Servo.h>
#include <AFMotor.h>

#define LEFT A0
#define ECHOPIN A1
#define TRIGPIN A2
#define RIGHT A3

AF_DCMotor Motor1(1, MOTOR12_1KHZ);
AF_DCMotor Motor2(2, MOTOR12_1KHZ);
AF_DCMotor Motor3(3, MOTOR34_1KHZ);
AF_DCMotor Motor4(4, MOTOR34_1KHZ);

Servo myservo;
int pos = 0;
long time;

void setup() {
  Serial.begin(9600);
  myservo.attach(10);
  // サーボ初期化スイープ
  for (pos = 90; pos <= 180; pos += 1) { myservo.write(pos); delay(15); }
  for (pos = 180; pos >= 0; pos -= 1) { myservo.write(pos); delay(15); }
  for (pos = 0; pos <= 90; pos += 1) { myservo.write(pos); delay(15); }

  pinMode(RIGHT, INPUT);
  pinMode(LEFT, INPUT);
  pinMode(TRIGPIN, OUTPUT);
  pinMode(ECHOPIN, INPUT);
}

void loop() {
  unsigned int distance = read_cm();
  int Right_Value = digitalRead(RIGHT);
  int Left_Value = digitalRead(LEFT);

  Serial.print("R= "); Serial.print(Right_Value);
  Serial.print(" L= "); Serial.print(Left_Value);
  Serial.print(" D= "); Serial.println(distance);

  if ((Right_Value == 1) && (distance >= 10 && distance <= 30) && (Left_Value == 1)) {
    forward();
  } else if ((Right_Value == 0) && (Left_Value == 1)) {
    turnRight();
  } else if ((Right_Value == 1) && (Left_Value == 0)) {
    turnLeft();
  } else if ((Right_Value == 1) && (Left_Value == 1)) {
    stop();
  } else if (distance > 5 && distance < 10) {
    stop();
  } else if (distance < 5) {
    backward();
  }
  delay(50);
}

long read_cm() {
  digitalWrite(TRIGPIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIGPIN, HIGH);
  delayMicroseconds(10);
  time = pulseIn(ECHOPIN, HIGH);
  return time / 29 / 2;
}

void forward() {
  Motor1.setSpeed(120); Motor1.run(FORWARD);
  Motor2.setSpeed(120); Motor2.run(FORWARD);
  Motor3.setSpeed(120); Motor3.run(FORWARD);
  Motor4.setSpeed(120); Motor4.run(FORWARD);
}

void backward() {
  Motor1.setSpeed(120); Motor1.run(BACKWARD);
  Motor2.setSpeed(120); Motor2.run(BACKWARD);
  Motor3.setSpeed(120); Motor3.run(BACKWARD);
  Motor4.setSpeed(120); Motor4.run(BACKWARD);
}

void turnRight() {
  Motor1.setSpeed(200); Motor1.run(FORWARD);
  Motor2.setSpeed(200); Motor2.run(FORWARD);
  Motor3.setSpeed(100); Motor3.run(BACKWARD);
  Motor4.setSpeed(100); Motor4.run(BACKWARD);
}

void turnLeft() {
  Motor1.setSpeed(100); Motor1.run(BACKWARD);
  Motor2.setSpeed(100); Motor2.run(BACKWARD);
  Motor3.setSpeed(200); Motor3.run(FORWARD);
  Motor4.setSpeed(200); Motor4.run(FORWARD);
}

void stop() {
  Motor1.setSpeed(0); Motor1.run(RELEASE);
  Motor2.setSpeed(0); Motor2.run(RELEASE);
  Motor3.setSpeed(0); Motor3.run(RELEASE);
  Motor4.setSpeed(0); Motor4.run(RELEASE);
}

回路図

Arduino UNOとモーターシールドで作る人追従ロボット

改良のヒント

製造プロセス

  1. Raspoulette:太陽光発電自律コープドアシステムのプロトタイプ
  2. シンプルPiロボット - Raspberry Piで2WD自律ローバーを構築
  3. Arduino UNOとMAX7219で作るUFOアタックゲーム – レトロなドットマトリクスシューティング
  4. Arduino Unoベースの人間検知レスキューロボット:センサー統合ステップバイステップ
  5. 3D RGB アルドゥクロック:Bluetooth対応LED時計(RTC内蔵)
  6. Arduino用バイポーラステッピングモーターライブラリ – 産業グレードの制御機能
  7. 川の健康を見守る:Arduinoベース水質監視システム「MyRiver」
  8. DIYギター高速ピック&ストンプペダル - 3Dプリントモーター駆動ピックの自作
  9. リニアモーター理解:電気エネルギーから精密直線運動へ
  10. サーボモーターの仕組みと重要性
  11. 可変リラクタンスモーター:種類、動作原理、応用