课程结课总结报告课程名称:机器人的制作实验一基于arduino控制器的轮式机器人循迹避障功能设计实验二应变式传感器电子秤实验实验三基于C51单片机控制器的轮式机器人电机控制系统实验四基于ARM控制器的博创平台轮式机器人循迹避障功能实现实验五摄像头实现轮式机器人循迹功能的应用实验六应用卓越联盟实验室设备进行设计和实现作品说明指导教师许晓飞系别机电工程学院专业机械电子工程学生姓名邓银涛班级/学号机电1401/2014010339成绩实验一基于ardunio控制器的轮式机器人循迹避障功能设计实验目的1.了解ardunio平台,并熟练使用此软件完成小车的各种活动2.了解HC-SR04超声波测距模块的原理,并且熟练使用此模块作为小车的传感器进行工作3.了解并且熟悉红外线传感器循迹原理实验器材:Adrunio软件,超声波传感器,红外线传感器,导线,底板,电机,电池,单片机等实验内容:1.将硬件组装成小车,即轮式机器人2.利用ardunio使小车完成循迹功能步骤:(1)写好后缀为.txt的c语言循迹文件(2)将文件导入单片机中(3)根据具体路况,运行并且进行调试红外线传感器的灵敏程度3.利用ardunio使小车完成避障功能步骤:(1)写好后缀为.txt的c语言避障文件(2)将文件导入单片机中(3)运行并且进行调试小车躲避障碍物的距离实验程序1.循迹程序:小车循迹程序思路图#include <Servo.h>int Left_motor_back=8; //左电机后退(IN1)int Left_motor_go=9; //左电机前进(IN2)int Right_motor_go=10; // 右电机前进(IN3)int Right_motor_back=11; // 右电机后退(IN4)int key=7;//定义按键数字7 接口const int SensorRight = 3; //右循迹红外传感器(P3.2 OUT1)const int SensorLeft = 4; //左循迹红外传感器(P3.3 OUT2)int SL; //左循迹红外传感器状态int SR; //右循迹红外传感器状态void setup(){//初始化电机驱动IO为输出方式pinMode(Left_motor_go,OUTPUT); // PIN 8 (PWM)pinMode(Left_motor_back,OUTPUT); // PIN 9 (PWM)pinMode(Right_motor_go,OUTPUT);// PIN 10 (PWM)pinMode(Right_motor_back,OUTPUT);// PIN 11 (PWM)pinMode(key,INPUT);//定义按键接口为输入接口pinMode(SensorRight, INPUT); //定义右循迹红外传感器为输入pinMode(SensorLeft, INPUT); //定义左循迹红外传感器为输入}void run(int time) // 前进void run(){digitalWrite(Right_motor_go,HIGH); // 右电机前进digitalWrite(Right_motor_back,LOW);analogWrite(Right_motor_go,255);//PWM比例0~255调速analogWrite(Right_motor_back,0);digitalWrite(Left_motor_go,HIGH); // 左电机前进digitalWrite(Left_motor_back,LOW);analogWrite(Left_motor_go,255);//PWM比例0~255调速analogWrite(Left_motor_back,0);//delay(time * 50); //执行时间,可以调整} //void left(int time) //左转(左轮不动,右轮前进)void left(){digitalWrite(Right_motor_go,HIGH); // 右电机前进digitalWrite(Right_motor_back,LOW);analogWrite(Right_motor_go,200);analogWrite(Right_motor_back,0);//PWM比例0~255调速digitalWrite(Left_motor_go,LOW); //左轮后退digitalWrite(Left_motor_back,LOW);analogWrite(Left_motor_go,0);analogWrite(Left_motor_back,100);//PWM比例0~255调速//delay(time * 50); //执行时间,可以调整}void right(int time) //右转(右轮不动,左轮前进)void right(){digitalWrite(Right_motor_go,LOW); //右电机后退digitalWrite(Right_motor_back,LOW);analogWrite(Right_motor_go,0);analogWrite(Right_motor_back,100);//PWM比例0~255调速digitalWrite}2.避障程序:char L1 = 9 ; // zhengchar L2 = 8 ;char R1 = 10 ; // zhengchar R2 = 11 ;int echopin = 13 ;int trigpin = 12 ;void setup ( ) //初始化动作的区块,定义串行端口和脚位{ pinMode ( echopin , INPUT ) ; // pwmpinMode ( trigpin , OUTPUT ) ;}void loop ( )//版子重复执行动作的区块{ int currDist ;long randnumber ;currDist = MeasureDistance ( ) ; // 读取前端距离delay ( 5 ) ;if ( currDist > 10 ){ straight( );}if ( currDist <= 10 ){ randomSeed ( analogRead ( 0 ) ) ;randnumber = random ( 0 ,10 ) ;if ( randnumber > 5 ){ back ( );delay ( 1000 );turnright ( );delay ( 800 );}else{ back ( ) ;delay ( 1000 ) ;turnleft ( ) ;delay ( 800 ) ;}}}int MeasureDistance ( ){ digitalWrite ( trigpin , LOW ) ;delay ( 2 ) ;digitalWrite ( trigpin , HIGH ) ;delay ( 10 ) ;digitalWrite ( trigpin , LOW ) ;int distance = pulseIn ( echopin , HIGH ) ;distance = distance / 58.0 ; // 计算距离344 * 100 / 1000000 * pulseIn ( ) / 2 delay ( 60 ) ; // 循环间隔60uSreturn ( distance ) ;}void straight ( ){ analogWrite ( L1 ,100 ) ; // 255 0 zhengzhuananalogWrite ( L2 ,0 ) ;analogWrite ( R1 , 100 ) ; // 255 0 zhengzhuananalogWrite ( R2 , 0 ) ;}void turnright ( ){ analogWrite ( L1 ,100 ) ; // 255 0 zhengzhuananalogWrite ( L2 ,0 ) ;analogWrite ( R1 ,0 ) ; // 255 0 zhengzhuananalogWrite ( R2 ,0 ) ;}void turnleft ( ){ analogWrite ( L1 , 0 ) ; // 255 0 zhengzhuananalogWrite ( L2 , 0 ) ;analogWrite ( R1 , 100 ) ; // 255 0 zhengzhuananalogWrite ( R2 , 0 ) ;}void back(){ analogWrite ( L1 , 0 ) ; // 255 0 zhengzhuananalogWrite ( L2 , 100) ;analogWrite ( R1 , 0 ) ; // 255 0 zhengzhuananalogWrite ( R2 , 100 ) ;}实验过程中遇到的问题及解决办法循迹中:1.电机速度差异控制:发现左右轮写入同一数值时,小车行进方向偏离直线,——对左右两轮写入不同数值,多次测试,指导左右轮速度相等。
2.电机驱动器给arduino供电出现问题,改用充电宝给arduino供电,直接从gnd和5v输出脚给电机驱动器供电3.一个电机有两根信号输入线,一根控制正转,一根控制反转。
两个轮子一起测转地眼晕,容易出错。
避障中:1.超声装置避障距离的确定——将HC-SR04超声波避障程序中数值改短,提高避障灵敏性2.硬件的安装:超声装置无法固定——曾尝试过用胶带,废旧车轮等但不理想,并未得到很好的解决实验结果小车可以成功的进行循迹和避障实验二电子秤实验一单臂实验数据处理源码:axis([0 200 0 50])coords=[0 20 40 60 80 100 120 140 160 180 200;0 2.8 5.1 7.5 9.9 12.4 14.8 17.2 19.6 22.0 24.6]gridholdplot(coords(1,:),coords(2,:),'*')x=coords(1,:)y=coords(2,:)'b=size(coords)c=ones(1,b(2))MT=[c;x]M=MT'f=inv(MT*M)*MT*y['y=',num2str(f(2)),'x+',num2str(f(1))]x=-max(x):max(x)y=f(1)+f(2)*xmistake=max(x-y)/(max(y)-min(y));fprintf('电阻传感器的系数灵敏度S=%5.3f%%\n',abs(f(2)))fprintf('非线性误差f=%5.3f%%\n',mistake)plot(x,y,'--')xlabel('x/g')ylabel('V/mv')title('单臂实验')legend(['y=',num2str(f(2)),'x+',num2str(f(1))])Matlab处理结果电阻传感器的系数灵敏度S=0.122%非线性误差f=3.607%半桥实验源码:axis([0 200 0 50])coords=[0 20 40 60 80 100 120 140 160 180 200;0 4.0 8.8 13.7 18.6 23.5 18.4 33.2 38.2 43.1 47.9]holdplot(coords(1,:),coords(2,:),'*')x=coords(1,:)y=coords(2,:)'b=size(coords)c=ones(1,b(2))MT=[c;x]M=MT'f=inv(MT*M)*MT*y['y=',num2str(f(2)),'x+',num2str(f(1))]x=-max(x):max(x)y=f(1)+f(2)*xmistake=max(x-y)/(max(y)-min(y));fprintf('电阻传感器的系数灵敏度S=%5.3f%%\n',abs(f(2))) fprintf('非线性误差f=%5.3f%%\n',mistake)plot(x,y,'--')xlabel('x/g')ylabel('V/mv')title('半桥实验')legend(['y=',num2str(f(2)),'x+',num2str(f(1))]) Matlab处理结果电阻传感器的系数灵敏度S=0.238%非线性误差f=1.615%全桥实验axis([0 200 0 100])coords=[0 20 40 60 80 100 120 140 160 180 200; 0 7.4 15.3 23.1 30.9 38.8 46.7 54.6 62.6 70.5 78.4]gridholdplot(coords(1,:),coords(2,:),'*')x=coords(1,:)y=coords(2,:)'b=size(coords)c=ones(1,b(2))MT=[c;x]M=MT'f=inv(MT*M)*MT*y['y=',num2str(f(2)),'x+',num2str(f(1))]x=-max(x):max(x)y=f(1)+f(2)*xmistake=max(x-y)/(max(y)-min(y));fprintf('电阻传感器的系数灵敏度S=%5.3f%%\n',abs(f(2)))fprintf('非线性误差f=%5.3f%%\n',mistake)plot(x,y,'--')xlabel('x/g')ylabel('V/mv')title('全桥实验')legend(['y=',num2str(f(2)),'x+',num2str(f(1))])Matlab数据处理电阻传感器的系数灵敏度S=0.393%非线性误差f=0.774%实验三基于C51单片机控制器的轮式机器人电机控制系统实验目的了解PWM波控制电机的原理。