机器人课程结课总结报告.docx_第1页
机器人课程结课总结报告.docx_第2页
机器人课程结课总结报告.docx_第3页
机器人课程结课总结报告.docx_第4页
机器人课程结课总结报告.docx_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程结课总结报告课程名称: 机器人的制作 实验一 基于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 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比例0255调速 analogWrite(Right_motor_back,0); digitalWrite(Left_motor_go,HIGH); / 左电机前进 digitalWrite(Left_motor_back,LOW); analogWrite(Left_motor_go,255);/PWM比例0255调速 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比例0255调速 digitalWrite(Left_motor_go,LOW); /左轮后退 digitalWrite(Left_motor_back,LOW); analogWrite(Left_motor_go,0); analogWrite(Left_motor_back,100);/PWM比例0255调速 /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比例0255调速 digitalWrite2.避障程序:char L1 = 9 ; / zhengchar L2 = 8 ;char R1 = 10 ; / zhengchar R2 = 11 ;int echopin = 13 ; int trigpin = 12 ; void setup ( ) /初始化动作的区块,定义串行端口和脚位 pinMode ( echopin , INPUT ) ; / pwm pinMode ( trigpin , OUTPUT ) ; void loop ( )/版子重复执行动作的区块 int currDist ; long randnumber ; currDist = MeasureDistance ( ) ; / 读取前端距离 delay ( 5 ) ; if ( currDist 10 ) straight( ); if ( currDist 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 ) ; / 循环间隔60uS return ( distance ) ; void straight ( ) analogWrite ( L1 ,100 ) ; / 255 0 zhengzhuan analogWrite ( L2 ,0 ) ; analogWrite ( R1 , 100 ) ; / 255 0 zhengzhuan analogWrite ( R2 , 0 ) ;void turnright ( ) analogWrite ( L1 ,100 ) ; / 255 0 zhengzhuan analogWrite ( L2 ,0 ) ; analogWrite ( R1 ,0 ) ; / 255 0 zhengzhuan analogWrite ( R2 ,0 ) ; void turnleft ( ) analogWrite ( L1 , 0 ) ; / 255 0 zhengzhuan analogWrite ( L2 , 0 ) ; analogWrite ( R1 , 100 ) ; / 255 0 zhengzhuan analogWrite ( R2 , 0 ) ; void back() analogWrite ( L1 , 0 ) ; / 255 0 zhengzhuan analogWrite ( L2 , 100) ; analogWrite ( R1 , 0 ) ; / 255 0 zhengzhuan analogWrite ( 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)*x mistake=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 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)*x mistake=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)*x mistake=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波控制电机的原理。基于C51单片机利用PWM波控制电机。实验器材C51单片机、L298N驱动芯片、直流电机、杜邦线、普通导线、keil软件、STC下载器、示波器实验内容用keil新建一个“.c”文件,编写程序并对程序进行调试。将程序烧录进单片机内。进行硬件连接C51引脚如图所示:L298N引脚如图所示:用单片通过P1.0、P1.1和L298的第一对输入端IN1和IN2相连,然后又L298的第一对输出端OUT1和OUT2与直流电机相连;单片通过P1.5、P1.6和L298的第二对输入端IN3和IN4相连,然后又L298的第二对输出端OUT3和OUT4与直流电机相连。给单片机上电。用示波器观察波形。程序内容1、PWM波控制电机启动#include reg51.h#include intrins.h#define FOSC 11059200Ltypedef unsigned char BYTE;typedef unsigned int WORD;void delay_ms(int x);/*Declare SFR associated with the PCA */sfr CCON = 0xD8; /PCA control registersbit CCF0 = CCON0; /PCA module-0 interrupt flagsbit CCF1 = CCON1; /PCA module-1 interrupt flagsbit CR = CCON6; /PCA timer run control bitsbit CF = CCON7; /PCA timer overflow flagsfr CMOD = 0xD9; /PCA mode registersfr CL = 0xE9; /PCA base timer LOWsfr CH = 0xF9; /PCA base timer HIGHsfr CCAPM0 = 0xDA; /PCA module-0 mode registersfr CCAP0L = 0xEA; /PCA module-0 capture register LOWsfr CCAP0H = 0xFA; /PCA module-0 capture register HIGHsfr CCAPM1 = 0xDB; /PCA module-1 mode registersfr CCAP1L = 0xEB; /PCA module-1 capture register LOWsfr CCAP1H = 0xFB; /PCA module-1 capture register HIGHsfr PCAPWM0 = 0xf2;sfr PCAPWM1 = 0xf3;sbit IN1=P10; sbit IN2 = P11;sbit IN3=P15; sbit IN4 = P16;void main() CCON = 0; /Initial PCA control re CL = 0; /Reset PCA base timer CH = 0; CMOD = 0x02; /Set PCA timer clock source as Fosc/2CR = 1; /PCA timer start runwhile(1)int i;IN1=0; IN2=1; IN3=0; IN4=1;for(i=100;i=0;i-) CCAP0H = CCAP0L =i; /PWM0 port output 50% duty cycle square wave CCAPM0 = 0x42; /PCA module-0 work in 8-bit PWM mode and no PCA interruptCCAP1H = CCAP1L = i;CCAPM1 = 0x42; delay_ms(100);for(i=0;i=0;i-) CCAP0H = CCAP0L =i; /PWM0 port output 50% duty cycle square wave CCAPM0 = 0x42; /PCA module-0 work in 8-bit PWM mode and no PCA interruptCCAP1H = CCAP1L = i;CCAPM1 = 0x42; delay_ms(100);for(i=0;i0;x-) for(y=0;y1000;y+);控制方向#include reg51.h#include intrins.h#define FOSC 11059200Ltypedef unsigned char BYTE;typedef unsigned int WORD;sbit IN1 = P10;sbit IN2 = P11;void main() IN1=0;IN2=1;PWM波对电机调速#include reg51.h#include intrins.h#define FOSC 11059200Ltypedef unsigned char BYTE;typedef unsigned int WORD;/*Declare SFR associated with the PCA */sfr CCON = 0xD8; /PCA control registersbit CCF0 = CCON0; /PCA module-0 interrupt flagsbit CCF1 = CCON1; /PCA module-1 interrupt flagsbit CR = CCON6; /PCA timer run control bitsbit CF = CCON7; /PCA timer overflow flagsfr CMOD = 0xD9; /PCA mode registersfr CL = 0xE9; /PCA base timer LOWsfr CH = 0xF9; /PCA base timer HIGHsfr CCAPM0 = 0xDA; /PCA module-0 mode registersfr CCAP0L = 0xEA; /PCA module-0 capture register LOWsfr CCAP0H = 0xFA; /PCA module-0 capture register HIGHsfr CCAPM1 = 0xDB; /PCA module-1 mode registersfr CCAP1L = 0xEB; /PCA module-1 capture register LOWsfr CCAP1H = 0xFB; /PCA module-1 capture register HIGHsfr PCAPWM0 = 0xf2;sfr PCAPWM1 = 0xf3;void main() CCON = 0; /Initial PCA control register CL = 0; /Reset PCA base timer CH = 0; CMOD = 0x02; /Set PCA timer clock source as Fosc/2 CCAP0H = CCAP0L = 0x80; /PWM0 port output 50% duty cycle square wave CCAPM0 = 0x42; /PCA module-0 work in 8-bit PWM mode and no PCA interrupt CCAP1H = CCAP1L = 0xff; /PWM1 port output 0% duty cycle square wave PCAPWM1 = 0x03; CCAPM1 = 0x42; /PCA module-1 work in 8-bit PWM mode and no PCA interrupt CR = 1; /PCA timer start run while (1);五、实验心得本次实验中我学会用软件来延时实现PWM的输出,从而实现对电机的控制。实验四 基于ARM控制的博创平台轮式机器人循迹蔽障功能 实验目的了解NorthStar平台,并熟练使用此软件完成小车的各种活动了解RobotServoTerminal机器人舵机调试系统并掌握使用了解并且熟悉灰度传感器循迹原理实验材料ARM控制器 灰度传感器 红外探测器 舵机电机等实验内容小车硬件的组装 蔽障功能的实现循迹功能的实现循迹功能的实现NorthStar循迹程序#include Apps/SystemTask.huint8 SERVO_MAPPING4 = 1,2,3,4;int main() int lgray = 0; int rgray = 0; MFInit(); MFInitServoMapping(&SERVO_MAPPING0,4); MFSetPortDirect(0x00000FF8); MFSetServoMode(1,1); MFSetServoMode(2,1); MFSetServoMode(3,1); MFSetServoMode(4,1); while (1) lgray = MFGetAD(0); rgray = MFGetAD(1); /右偏 if (lgray=350) /左转 MFSetServoRotaSpd(1,-512); MFSetServoRotaSpd(2,-512); MFSetServoRotaSpd(3,-512); MFSetServoRotaSpd(4,-512); MFServoAction(); DelayMS(400); else /左偏 if (lgray=460)&(rgray=460)&(rgray=350) MFSetServoRotaSpd(1,-512); MFSetServoRotaSpd(2,512); MFSetServoRotaSpd(3,-512); MFSetServoRotaSpd(4,512); MFServoAction(); DelayMS(400); else MFSetServoRotaSpd(1,0); MFSetServoRotaSpd(2,0); MFSetServoRotaSpd(3,0); MFSetServoRotaSpd(4,0); MFServoAction(); DelayMS(100); 蔽障功能的实现程序 #include Apps/SystemTask.huint8 SERVO_MAPPING5 = 1,2,3,4,5;int main() int io0 = 0; int io1 = 0; MFInit(); MFInitServoMapping(&SERVO_MAPPING0,5); MFSetPortDirect(0x00000FFC); MFSetServoMode(1,1); MFSetServoMode(2,1); MFSetServoMode(3,1); MFSetServoMode(4,1); MFSetServoMode(5,0); while (1) io0 = MFGetDigiInput(0); io1 = MFGetDigiInput(1); if (io0=1)&(io1=1) MFSetServoRotaSpd(1,1023); MFSetServoRotaSpd(2,-1023); MFSetServoRotaSpd(3,1023); MFSetServoRotaSpd(4,-1023); MFSetServoPos(5,512,512); MFServoAction(); DelayMS(500); else if (io0=0) /后退 MFSetServoRotaSpd(1,-512); MFSetServoRotaSpd(2,512); MFSetServoRotaSpd(3,-512); MFSetServoRotaSpd(4,512); MFSetServoPos(5,512,512); MFServoAction(); DelayMS(1000); /右转 MFSetServoRotaSpd(1,512); MFSetServoRotaSpd(2,512); MFSetServoRotaSpd(3,512); MFSetServoRotaSpd(4,512); MFSetServoPos(5,512,512); MFServoAction(); DelayMS(2000); else /后退 MFSetServoRotaSpd(1,-512); MFSetServoRotaSpd(2,512); MFSetServoRotaSpd(3,-512); MFSetServoRotaSpd(4,512); MFSetServoPos(5,512,512); MFServoAction(); DelayMS(1000); /左转 MFSetServoRotaSpd(1,-512); MFSetServoRotaSpd(2,-512); MFSetServoRotaSpd(3,-512); MFSetServoRotaSpd(4,-512); MFSetServoPos(5,512,512); MFServoAction(); DelayMS(2000); 实验中遇到的问题以及解决方案1、NorthStar编程完成后下载时遇到的问题解决方案及拓展步骤(1)打开NorthStar软件点击帮助 (3)点击帮助主题 (4)点开附录以及里边的常见问题及解决将出现一些列常见问题 (5)点击遇到的问题,按照操作步骤即可解决环境对灰度传感器影响较大,赛道多次取点进行传感器灰度值测量,之后修改程序内AD值条件。 (1)用NorthStar打开循迹的程序 (2)打开工具菜单下的查询传感器出现传感器页面,调整好下载模式以及端口的设置,点击启动服务 (4)完成之后调整好查询数据模式电机查询AD,会在相应AD口内看到数据的变化。(5)测完后取黑线与地面值的中间值调整if条件。实验拓展将红外蔽障功能,以及灰度传感器巡线功能同时装在小车上,通过一个自制红外开关来控制小车的程序选择。程序#include Apps/SystemTask.huint8 SERVO_MAPPING

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论