机器人创新实验报告.docx
《机器人创新实验报告.docx》由会员分享,可在线阅读,更多相关《机器人创新实验报告.docx(19页珍藏版)》请在冰点文库上搜索。
机器人创新实验报告
实验报告
(理工类)
课程名称:
机器人创新实验
课程代码:
6003199
学院(直属系):
机械工程学院
年级/专业/班:
学生姓名:
学号:
实验总成绩:
任课教师:
开课学院:
机械工程学院
实验中心名称:
机械工程基础实验中心
一、设计题目:
基于Arduino的手机遥控蓝牙小车
二、成员分工:
(5分)
三、设计方案:
(整个系统工作原理和设计)(20分)
蓝牙小车的工作原理;
蓝牙小车分为4个模块:
电源模块,电机驱动模块,控制模块,超声避障模块,蓝牙模块。
其中超声避障模块在小车遇到障碍时,把信号传给控制模块,控制模块对信号进行分析,作出响应,并发送给电机模块。
电机模块控制电机转速及转向。
蓝牙模块接受手机发送的信号,再把信号传送至控制模块,控制模块对信号分析计算,作出响应,并发送给电机模块。
电机模块控制电机转速及转向。
电源模块为其他模块供电。
蓝牙小车的工作方案如下:
四、实验步骤:
(图文说明设计过程中关键步骤)(30分)
1.设计制作小车底板
2.搭建小车
3.接入超声模块并测试避障
4.接入蓝牙模块并与手机连接进行测试
5.加入LED灯并编写程序,调试小车
五、最终作品展示:
(图片及性能描述)(20分)
通过手机发出信号,小车能准确完成动作,在遇障时能停下并作出回避。
美中不足的是没有加入调速程序,小车不能在行驶时加速减速,而且蓝牙控制的距离有限。
六、设计心得:
(10分)
通过这门课,了解了Arduino是什么,能做什么。
对于没有编程基础的我来说,利用Arduino能很容易的实现自己的想法和设计。
而且Arduino可以连接不同的模块来实现不同的功能。
将蓝牙和超声模块换为巡线模块后,修改程序,就能把蓝牙小车变为巡线小车了。
很方便快捷。
通过这门课,也了解了很多关于编程的知识。
能过利用Arduino来实现自己的一些简单设计。
----------
通过这次机器人的课程,培养了我们实际动手能力和思考能力,作为女生之前没有特别的关注过类似的这个方面,但这次因为课程的原因接触了以后,发现并没有想象中的那么枯燥,并且学会了很多新的知识,同时和同组的同学互相合作,增进了同学之间的感情和协作能力。
我还是希望学校能多开一些这样的课程,让我们自己动手,在动手中收获知识培养实践能力培养兴趣。
而且在低年级的时候我觉得开这个课会效果更好。
---------
本学期开设了机器人创新实验课程,旨在增加学生对微电子领域的认识,增加同学们对微电子的兴趣。
通过最近几周的学习与调试小车,我的心得体会如下:
由于团队分工我的任务是小车的支撑板设计,其中我知道了小车的支撑板要考虑集成板的大小,并且要控制小车的重量。
通过与同学一起调试小车,我知道了Arduino的一部分功能,我对程序与实际的联系的认识有了增加,这让对电子程序没有兴趣的我来说无疑是最大的提升与学习过程。
七、对本课程建议或意见:
(选作题)
1.课程时间太短了,如果时间长一点,学到的东西会更多。
2.建议把这门课开在大一。
附录:
(设计文件、工程图、代码等)(15分)
超声测试代码:
#include
intinputPin=A1;//定义超声波Trig
intoutputPin=A2;//定义超声波Echo
AF_DCMotormotor1(1,MOTOR12_64KHZ);//创建电机#1号,速度是64KHzpwm
AF_DCMotormotor2(2,MOTOR12_64KHZ);//创建电机#2号,速度是64KHzpwm
voidsetup()
{
Serial.begin(9600);
pinMode(inputPin,INPUT);
pinMode(outputPin,OUTPUT);
motor1.setSpeed(100);//设置电机速度,从200/255之间任意(我这俩电机速度不一样,所以我就这样设置)
motor2.setSpeed(100);//设置电机速度,从200/255之间任意(大家可以按照自己的电机转速来调节一样的速度就可以了)
Serial.println("Motortest!
");
}
voidloop()
{
digitalWrite(outputPin,LOW);//使发出发出超声波信号接口低电平2μs
delayMicroseconds
(2);
digitalWrite(outputPin,HIGH);//使发出发出超声波信号接口高电平10μs,这里是至少10μs
delayMicroseconds(10);
digitalWrite(outputPin,LOW);//保持发出超声波信号接口低电平
intdistance=pulseIn(inputPin,HIGH);//读出脉冲时间
distance=distance/58;//将脉冲时间转化为距离(单位:
厘米)
Serial.println(distance);//输出距离值
delay(50);
if(distance<6)
{
motor1.run(FORWARD);//电机前进
motor2.run(FORWARD);//电机前进
}
if(distance>20)
{
motor1.run(BACKWARD);//电机后退
motor2.run(BACKWARD);//电机后退
delay(500);
}
}
蓝牙测试代码:
#include
AF_DCMotormotor1(1,MOTOR12_64KHZ);//创建电机#1号,速度是64KHzpwm
AF_DCMotormotor2(2,MOTOR12_64KHZ);//创建电机#2号,速度是64KHzpwm
voidsetup()
{
Serial.begin(9600);
motor1.setSpeed(200);//设置电机速度,从200/255之间任意(我这俩电机速度不一样,所以我就这样设置)
motor2.setSpeed(200);//设置电机速度,从200/255之间任意(大家可以按照自己的电机转速来调节一样的速度就可以了)
}
voidloop()
{
while(Serial.available())
{
charc=Serial.read();
if(c=='g')
{
Serial.println("goforward!
");
motor1.run(FORWARD);
motor2.run(FORWARD);
}
if(c=='s')
{
motor1.run(RELEASE);
motor2.run(RELEASE);
}
if(c=='b')
{
motor1.run(BACKWARD);
motor2.run(BACKWARD);
}
}
}
最终代码:
#include
intled1=A4;
intled2=A5;
AF_DCMotormotor1(1,MOTOR12_64KHZ);//创建电机#1号,速度是64KHzpwm
AF_DCMotormotor2(2,MOTOR12_64KHZ);//创建电机#2号,速度是64KHzpwm
constintTrigPin=A1;
constintEchoPin=A2;
floatdistance;
voidsetup()
{
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
Serial.begin(9600);
pinMode(TrigPin,OUTPUT);
//要检测引脚上输入的脉冲宽度,需要先设置为输入状态
pinMode(EchoPin,INPUT);
motor1.setSpeed(200);//设置电机速度,从200/255之间任意(我这俩电机速度不一样,所以我就这样设置)
motor2.setSpeed(200);//设置电机速度,从200/255之间任意(大家可以按照自己的电机转速来调节一样的速度就可以了)
}
voidloop()
{
digitalWrite(TrigPin,LOW);
delayMicroseconds
(2);
digitalWrite(TrigPin,HIGH);
delayMicroseconds(100);
digitalWrite(TrigPin,LOW);
//检测脉冲宽度,并计算出距离
distance=pulseIn(EchoPin,HIGH,3000)/58.00;
Serial.print(distance);
Serial.print("cm");
Serial.println();
delay(100);
if(distance<30&&distance>1)
{
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
motor1.run(BACKWARD);//电机后退
motor2.run(BACKWARD);//电机后退
delay(1000);
motor1.run(RELEASE);//电机停止
motor2.run(RELEASE);//电机停止
}
if(distance<20)
{
digitalWrite(led1,HIGH);
digitalWrite(led2,LOW);
motor1.run(BACKWARD);
motor2.run(BACKWARD);
delay(500);
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
motor1.run(RELEASE);//电机停止
motor2.run(RELEASE);//电机停止
}
else
{
while(Serial.available())
{
charc=Serial.read();
if(c=='g')
{
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
Serial.println("goforward!
");
motor1.run(FORWARD);
motor2.run(FORWARD);
motor1.setSpeed(200);
motor2.setSpeed(220);
}
if(c=='s')
{
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
motor1.run(RELEASE);
motor2.run(RELEASE);
}
if(c=='b')
{
digitalWrite(led1,HIGH);
digitalWrite(led2,LOW);
motor1.run(BACKWARD);
motor2.run(BACKWARD);
}
if(c=='t')
{
digitalWrite(led1,HIGH);
digitalWrite(led2,LOW);
delay(100);
digitalWrite(led1,LOW);
digitalWrite(led2,HIGH);
delay(900);
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
motor1.run(FORWARD);
motor2.run(FORWARD);
motor1.setSpeed(50);
motor2.setSpeed(200);
delay(1000);
motor1.run(FORWARD);
motor2.run(FORWARD);
motor1.setSpeed(200);
motor2.setSpeed(200);
}
if(c=='q')
{
digitalWrite(led1,HIGH);
digitalWrite(led2,LOW);
delay(50);
digitalWrite(led1,LOW);
digitalWrite(led2,HIGH);
delay(100);
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
motor1.run(RELEASE);
motor2.run(FORWARD);
motor2.setSpeed(200);
delay(150);
motor1.run(FORWARD);
motor2.run(FORWARD);
motor1.setSpeed(200);
motor2.setSpeed(200);
}
if(c=='p')
{
digitalWrite(led1,HIGH);
digitalWrite(led2,LOW);
delay(100);
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
delay(100);
digitalWrite(led1,LOW);
digitalWrite(led2,HIGH);
motor1.run(FORWARD);
motor2.run(FORWARD);
motor1.setSpeed(200);
motor2.setSpeed(50);
delay(200);
motor1.setSpeed(200);
motor2.setSpeed(200);
}
if(c=='r')
{
digitalWrite(led1,HIGH);
digitalWrite(led2,LOW);
delay(50);
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
delay(100);
digitalWrite(led1,HIGH);
digitalWrite(led2,LOW);
motor1.run(FORWARD);
motor2.run(FORWARD);
motor1.setSpeed(150);
motor2.setSpeed(50);
delay(750);
motor1.setSpeed(200);
motor2.setSpeed(200);
}
if(c=='l')
{
digitalWrite(led1,HIGH);
digitalWrite(led2,LOW);
delay(100);
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
delay(100);
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
motor1.run(FORWARD);
motor2.run(FORWARD);
motor1.setSpeed(50);
motor2.setSpeed(150);
delay(700);
motor1.run(FORWARD);
motor2.run(FORWARD);
motor1.setSpeed(200);
motor2.setSpeed(200);
}
}
}
}