DIY 人体跟踪机器人 - Arduino UNO 与电机扩展板实现
组件与物料清单
| 组件 | 数量 |
|---|---|
| Arduino UNO | 1 |
| Adafruit 电机扩展板 | 1 |
| SG90 微型舵机 | 1 |
| 红外收发模块 | 2 |
| HC-SR04 超声波测距模块 | 1 |
| 跳线 | 若干 |
| 12V 直流减速电机 | 4 |
| 微型电机与轮子套装 | 4 |
| 9V 电池 | 1 |
| 船型开关 SPST | 1 |
软件工具
- Arduino IDE
项目简介
疫情期间居家制作的跟随机器人项目。使用 2 个红外传感器跟随人体/物体,超声波传感器控制后退避障。
制作步骤
- 准备组件:Arduino、直流减速电机+轮子、2个红外传感器、超声波传感器、舵机、纸板底盘、L293D 电机驱动扩展板、9V电池、开关、跳线等
- 纸板底盘安装 4 个电机轮组成小车底盘
- 小车前端安装红外传感器
- 小车顶部固定舵机
- 超声波传感器安装在盒子上并加装连杆,再固定在舵机上
- 安装 Arduino 与电机扩展板
- 按电路图接线
- 上传代码,连接电池与开关至电机驱动板
- 调节红外传感器灵敏度
项目完成!欢迎访问我的 YouTube 频道查看更多有趣项目:"Electronics is Fun"
核心代码
// 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)) {
forword();
} 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) {
backword();
}
delay(50);
}
long read_cm() {
digitalWrite(trigpin, LOW);
delayMicroseconds(2);
digitalWrite(trigpin, HIGH);
delayMicroseconds(10);
time = pulseIn(echopin, HIGH);
return time / 29 / 2;
}
void forword() {
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 backword() {
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);
}
原理图
电路连接图请参考项目附件。
制造工艺
- Raspoulette:太阳能自主鸡舍门控制系统原型
- Simple Pi Robot:用树莓派打造 2WD 自主巡航车
- Arduino UNO + MAX7219 自制《UFO攻击》复古射击游戏机
- 基于 Arduino Uno 的人体检测救援机器人:传感器集成分步指南
- 3D RGB Arduclock — 蓝牙控制全彩LED时钟带RTC与闹钟
- Arduino 通用双极性步进电机控制库——精准控制转速、角度、圈数与方向
- MyRiver:基于 Arduino MKR FOX 1200 的河流水质远程监测系统
- DIY 钢铁侠人偶:Arduino 控制超声波触发音效与灯光
- DIY 吉他高速拨片与踏板 - 3D 打印电机驱动拨片制作指南
- 线性电机原理与演进:从电能到精密直线运动的技术演变
- 伺服电机深度解析:工作原理、分类与核心价值
- 磁阻电机:类型、运行原理与应用