前言 目前,“机器人"已经成为生活中频繁出现的词汇。本课设所做的智能跟随机器人,属于反馈型移动机器人。 反馈型移动机器人:
- 可以简单定义为一种对外界信号进行处理反馈最终实现的方式将感知和动作连接在一起的可自移动设备。
- 它必须具有在一个位置的环物独立完成某些工作的能力。这里的智能更多的是指通过传感器感受外界的变化,通过通过传感器感受外界的变化,最终通过执行器做出反应。
如今中国具有跟随性的产品.主要是有轨机械跟随,用于工厂的各类生产机车的一部分,或是比赛场的有轨跟随拍摄车,并没有实际针对超市、旅馆、飞机场等大众场合,或家庭个人的产品。基于超声波定位及单片机各模块的综合运用,设计了一款能够对特定移动目标进行实时跟踪的智能小车。利用超声波定位技术和跟随性技术可以根据不同场合的跟踪要求设置小车的跟踪距离和跟踪速度等参数,可以实现对移动目标的准确跟踪,帮助携带物品,解放人们双手。
图中充电宝为电源
在智能小车项目中,我们通过控制直流电机的正反转、刹车和转速来控制小车的行动。
在这台小车中,对直流电机发出的控制指令来自于Arduino主控板,而Arduino主控板的外部输入则来自于超声波传感器、遥控器。本文的自动跟随小车的Arduino主控板外部输入来自于超声波传感器。
超声波传感器
?超声波传感器是利用超声波的特性的传感器。超声波接收到触发信号后,模块自动发出8个40KHZ的方波,同时开始计时并自动监测是否有信号返回,通过记录超声波从开始发送到接收回波间隔,来判断前方障碍物的距离。
注:感应角度范围:15° 超声波测距
const int TrigPin = 9;
const int EchoPin = 2;
const int leftPin1=8;
const int leftPin2=7;
const int rightPin3=4;
const int rightPin4=3;
const int leftSpeed=6;
const int rightSpeed=5;
const int intSpeedPWM=120;
int dist;
int followDist = 30;
int followBalance = 10;
void setup() {
pinMode(TrigPin,OUTPUT);
pinMode(EchoPin,INPUT);
pinMode(leftPin1,OUTPUT);
pinMode(leftPin2,OUTPUT);
pinMode(rightPin3,OUTPUT);
pinMode(rightPin4,OUTPUT);
}
void loop() {
followDrive();
}
void followDrive() {
getDistance();
if ((dist >= followDist - followBalance) && (dist <= followDist + followBalance)) {
analogWrite(leftSpeed, intSpeedPWM);
analogWrite(rightSpeed, intSpeedPWM);
if (dist > followDist) {
forward();
}
else if (dist < followDist) {
backward();
}
else {
pause();
}
}
else {
pause();
}
}
void getDistance() {
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
dist = pulseIn(EchoPin, HIGH) / 58.0;
}
void forward(){
digitalWrite(leftPin1,1);
digitalWrite(leftPin2,0);
digitalWrite(rightPin3,1);
digitalWrite(rightPin4,0);
}
void backward(){
digitalWrite(leftPin1,0);
digitalWrite(leftPin2,1);
digitalWrite(rightPin3,0);
digitalWrite(rightPin4,1);
}
void turnLeft(){
digitalWrite(leftPin1,0);
digitalWrite(leftPin2,0);
digitalWrite(rightPin3,1);
digitalWrite(rightPin4,0);
}
void turnRight(){
digitalWrite(leftPin1,1);
digitalWrite(leftPin2,0);
digitalWrite(rightPin3,0);
digitalWrite(rightPin4,0);
}
void rotateLeft(){
digitalWrite(leftPin1,0);
digitalWrite(leftPin2,1);
digitalWrite(rightPin3,1);
digitalWrite(rightPin4,0);
}
void rotateRight(){
digitalWrite(leftPin1,1);
digitalWrite(leftPin2,0);
digitalWrite(rightPin3,0);
digitalWrite(rightPin4,1);
}
void pause(){
digitalWrite(leftPin1,0);
digitalWrite(leftPin2,0);
digitalWrite(rightPin3,0);
digitalWrite(rightPin4,0);
}
系统测试 以手与小车的距离为标准 通过手的移动,来测试小车。 测试超声波模块时,可通过编译器的串口检测器测试。
|