机电一体化综合训练实习总结一、舵机车总结1、实习任务与要求舵机车的实习任务主要是通过理解舵机运行的原理,提高自我的动手能力,编写程序使舵机车实现用传感器以探测周边环境、基于传感器信息作出决策、操作带动轮子旋转的电机控制宝贝车运动、与用户交换信息,从而更好的掌握89C52单片机。
2、总结实习内容2.1巡航控制编程使宝贝车做一些基本的动作:向前、向后、左转、右转和原地旋转。
宝贝车向前走:P1_1=1;delay_nus(1300); P1_1=1;P1_0=0;delay_nus(1700); P1_0=0;delay_nms(20);宝贝车向后走:P1_1=1;delay_nus(1300);P1_1=1;P1_0=0;delay_nus(1700); P1_0=0;delay_nms(20);宝贝车原地左转:P1_1=1;delay_nus(1300); P1_1=0;P1_0=1;delay_nus(1300); P1_0=0;delay_nms(20);宝贝车原地右转:P1_1=1;delay_nus(1700); P1_1=0;P1_0=1;delay_nus(1700); P1_0=0;delay_nms(20);2.2机器人触觉导航2.2.1胡须电路原理下图所示为胡须电路原理图,当胡须没有被触动,连接胡须的I/O管脚的电压是5V;当胡须被触动时,I/O短接到地,所以I/O管脚的电压是0V。
微控制器启动或复位时,所有的I/O插脚缺省为输入。
也就是说,连接到胡须的I/O管脚会自动作为输入。
作为输入,如果I/O脚上的电压为5V(胡须没有被触动),则其相应的寄存器中的相应位存储1;如果电压为0V(胡须被触动),则存储0。
、2.2.2胡须检测到障碍物时编程:if((P1_5state()==0)&&(P2_3state()==0))//两个胡须同时检测到障碍物时,后退,再向左转180度{Back_Up();Turn_Left();Turn_Left();}else if(P1_5state()==0){Back_Up();Turn_Right();}else if(P2_3state()==0) //右边胡须检测到障碍物时,后退,再向左转 90度{Back_Up();Turn_Left();}else //没有胡须检测到障碍物时,向前走Forward();2.2.3对LED胡须测试电路编程:#include<uart.h>int P1.5state(void)//获取 P1.5 的状态{return (P1&0x20);}int P2.3state(void)//获取 P2.3 的状态{return (P2&0x08);}int main(void){while(1){if(P1.5state()==0)P1.0=0;P1.0=1; ;if(P2.3state()==0)P1.1=0;elseP1.1=1;delay_nms(50);}}2.2.4通过胡须导航让宝贝车行走,当在其路线上遇到障碍物时,它将后退、旋转并向另一个方向行走。
编程如下:#include<BoeBot.h>#include<uart.h>int P1_5state(void) {return (P1&0x20)?1:0; }int P2_2state(void) {return (P2&0x08)?1:0; }void Forward(void) {P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);}void Left_Turn(void) {int i;for(i=1;i<=26;i++) {P1_1=1;delay_nus(1300);P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);}}void Right_Turn(void) {int i;for(i=1;i<=26;i++) {P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(1700);P1_0=0;delay_nms(20);}}void Backward(void){int i;for(i=1;i<=65;i++){P1_1=1;delay_nus(1300);P1_1=0;P1_0=1;delay_nus(1700);P1_0=0;delay_nms(20);}}int main(void){uart_Init();printf("Program Running!\n");int counter;for(counter=1;counter<=1000;counter++)//开始/复位信号{P1_4=1;delay_nus(1000);P1_4=0;delay_nus(1000);}while(1){if((P1_5state()==0)&&(P2_3state()==0)){Backward(); //向后Left_Turn(); //向左Left_Turn(); //向左}else if(P1_5state()==0){Backward(); //向后Right_Turn(); //向右}else if(P2_3state()==0){Backward(); //向后Left_Turn(); //向左}elseForward(); //向前}}程序中,前行走中的每两个脉冲之间检查胡须的状态。
意味着,宝贝车在向前行走的过程中,每秒检查障碍物大概43次。
因为每个全速前进的脉冲都使得宝贝车旋转大约半厘米。
只发送一个脉冲,然后回去检查胡须的状态是一个好主意。
每次程序从Forward()返回后,程序再次从while循环的开始处执行,此时if…else 语句会再次检查胡须的状态。
2.3用光敏电阻进行导航2.3.1光探测线路工作原理如下图所示,为光敏电阻的光探测线路。
设定为输入的I/O口实际上并不需要5V来使其输入寄存器的值为1,任何大于1.5V的电压都会使其寄存器的值为1。
同样的,I/O口也不是需要0V来使其输入寄存器的值为0,任何小于1.5V的电压都会使其寄存器的值为0。
由于光敏电阻的阻值随着光照的强弱而改变,Vo点的输出电压也随之改变:当R增大时,Vo会减小;当R减小时,Vo会增大。
Vo正是当微控制器的I/O口作为输入口时检测到的电压。
如果电路连接到P1_5,当Vo的值大于1.5 V时,P1寄存器的第6位为1,当Vo的值小于1.5V时,P1寄存器的第6位为0。
2.3.2试验无阴影编程如下:#include<BoeBot.h>#include<uart.h>int P1_5state(void) {return (P1&0x20)?1:0; }int P2_3state(void) {return (P2&0x08)?1:0; }void Forward(void) {P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);}void Left_Turn(void) {for(i=1;i<=26;i++) {P1_1=1;delay_nus(1300);P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);}}void Right_Turn(void) {for(i=1;i<=26;i++) {P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(1700);P1_0=0;delay_nms(20);}}void Backward(void){for(i=1;i<=65;i++){P1_1=1;delay_nus(1300);P1_1=0;P1_0=1;delay_nus(1700);P1_0=0;delay_nms(20);}}int main(void){uart_Init();printf("Program Running!");for(counter=1;counter<=1000;counter++)//开始/复位信号{P1_4=1;delay_nus(1000);P1_4=0delay_nus(1000);}while(1){if((P1_5state()==0)&&(P2_3state()==0)){Backward();//向后Left_Turn();//向左Left_Turn();//向左}else if(P1_5state()==0){Backward();//向后Right_Turn();//向右}else if(P2_3state()==0){Backward();//向后Left_Turn();//向左}elseForward();//向前}}2.3.3手电筒光束引导宝贝车测试和校正宝贝车机器人的光传感器,使它能够识别环境光和手电筒光束。
编程使机器人跟随指向它前方表面的手电筒光束行走。
编程如下:#include<BoeBot.h>#include<uart.h>int main(void){unsigned int count;Unsigned int timeLeft,timeRight;uart_Init();while(1){TH0=TL0=0;TMOD=TMOD|0x01;P1_5=0;delay_nms(300);P1_5=1;TR0=1;while((P1&0x20)==0); count=TH0;count=count<<8;count=count+TL0;timeLeft=count;TH0=TL0=0;TMOD=TMOD|0x01;P2_3=0;delay_nms(300);P2_3=1;TR0=1;while((P2&0x08)==0); count=TH0;count=count<<8;count=count+TL0;timeRight=count;printf("L %d us\n",timeLeft);printf("R %d us\n",timeRight);delay_nms(50);}}2.4红外线导航红外探测工作原理:宝贝车机器人上建立的红外物体探测系统在许多方面就像汽车的前灯。