请选择 进入手机版 | 继续访问电脑版

作品展示

原创作品:ahut_time1_alic

系统分类: 机器人创想秀 - 技术流

作品版权:ahut_time1_alic 版权所有,禁止匿名转载;禁止个人使用。

ahut_time1_alic

2016-5-9 00:50:44

初赛得分

总分(58.95)点赞数(38)评委打分(56.35)

评委[创想秀_评委6]:需要更精准的定位,有改进空间和实用价值

作品亮点:

本作品设计轮盘,对家用纸杯进行移动,结构简单,能通过改变轮盘形状适应不同大小,形状,外观纸杯物,也可一次性移动不同纸杯。 本作品通过两后轮驱动,在轮盘中心安装一万向轮,体积小,结构灵活。 本作品驱动件总数少,能从整体上减少供电设备,降低功耗。本作品通过K60单片机设计算法,无需人工。

作品说明:

[align=left]

模型展示

模型展示

实体制作

实体制作
[/align][align=left][b]1.[/b][b]1[font=宋体]设计思路[/font][/b][/align][align=left]本作品为满足家用需求,基于轮盘式机构,设计一能自动识别不同颜色纸杯,一次性装载多个纸杯并一定程度上自动按颜色运送到指定地的机器人。[/align][align=left][b]1.2[font=宋体]模型设计[/font][/b][/align][align=left][b]1.2.1[font=宋体]车门[/font][/b][/align][align=left]

车门连杆机构

车门连杆机构
[/align][align=left]本作品车门采用曲柄滑块机构,滑块连接车门,曲柄以舵机作为驱动件控制车门升降。同时车门与轮盘入口间设计曲线方便货物装入[/align][align=left][b]1.2.2[font=宋体]装运轮盘[/font][/b][/align][align=left]

轮盘设计图

轮盘设计图
[/align][align=left]本作品运用轮盘与外框实现卸,在张开[font=宋体]形式中车门打开,轮盘开口与外框口重合使纸杯进入,在装载完成后转动为关闭[/font][font=宋体]形式运输货物。[media=x,500,375]http://www.tudou.com/programs/view/Rdq6cMV0AkY/[/media][media=x,500,375]http://www.tudou.com/programs/view/Rdq6cMV0AkY/[/media][/font][/align][align=left][b]1.2.3[font=宋体]驱动部分[/font][/b][/align][align=left][font=宋体][size=10.5pt]本作品用两减速电机带动后轮驱动在轮盘圆心安装一牛眼万向球平衡整体,用两后轮通过改变占空比差速进行转向。实现各个方向的灵活转动,且控制简单。如图所示。[/size][/font][/align][align=left][b]2.1纸杯[font=宋体]分类[/font][/b][/align][align=left]当机器人运动到纸杯前,通过控制系统控制曲柄滑块机构打开车门,电机驱动向前使纸杯进入轮盘中,通过安装的摄像头对纸杯进行识别,并利用轮盘的转动使不同货物处在轮盘的不同空间处,实现纸杯的分类。[/align][align=center]file:///C:\Users\何远洋\AppData\Local\Temp\ksohtml\wpsF419.tmp.jpg[/align][align=center][b]分类工作场地示意图[/b][/align][align=left]

桌面轨迹示意

桌面轨迹示意
[/align][align=left][b]2.2[/b][b]纸杯[/b][b][font=宋体]的载运[/font][/b][/align][align=left][font=宋体][size=10.5pt]当机器人运动到[/size][/font][font=宋体]纸杯[/font][font=宋体][size=10.5pt]前,通过控制系统控制曲柄滑块机构打开车门,电机驱动向前使[/size][/font][font=宋体]纸杯[/font][font=宋体][size=10.5pt]进入轮盘中,使所有[/size][/font][font=宋体]纸杯[/font][font=宋体][size=10.5pt]进入轮盘各个空间后,通过控制模块控制,利用灰度管传感器对特定环境[font=Calibri]([/font][font=宋体]贴有黑色线条)的黑色线条路径进行寻线,并利用俩电机的差速实现转向,从而达到载运[/font][/size][/font][font=宋体]纸杯[/font][font=宋体][size=10.5pt][font=宋体]的目的。[/font][/size][/font][/align][align=left]           控制系统[/align]
[align=left]   

控制电子设计

控制电子设计
[/align][align=left][b]3.1[font=宋体]硬件部分[/font][/b][/align][align=left]  ([font=Calibri]1[/font][font=宋体]) 红外对管( 对黑线标志进行识别)[/font][/align][align=left]file:///C:\Users\何远洋\AppData\Local\Temp\ksohtml\wpsEA15.tmp.jpg [/align][align=left]每1路的传感器的红外发射管不断发射红外线,当发射出的红外线没有被反射回来或被反射回来但强度不够大时,红外接收管一直处于关断状态,此时模块的TTL输出端为高电平;当被检测物体出现在检测范围内时,红外线被反射回来且强度足够大,红外接收管导通,此时模块的TTL输出端为低电平。[/align][align=left]file:///C:\Users\何远洋\AppData\Local\Temp\ksohtml\wpsEA16.tmp.png[/align]
[align=left](2)陀螺仪 ( 对车身旋转角度测量)[/align][align=left]file:///C:\Users\何远洋\AppData\Local\Temp\ksohtml\wpsEA27.tmp.jpg [/align][align=left]MPU6050[font=宋体]是一款[/font][font=Arial]9[/font][font=宋体]轴运动处理传感器。它集成了[/font][font=Arial]3[/font][font=宋体]轴[/font][font=Arial]MEMS[/font][font=宋体]陀螺仪,[/font][font=Arial]3[/font][font=宋体]轴[/font][font=Arial]MEMS[/font][font=宋体]加速度计,以及一个可扩展的数字运动处理器[/font][font=Arial]DMP[/font][font=宋体]([/font][font=Arial]Digital Motion Processor[/font][font=宋体])[/font][font=Arial],[/font][font=宋体]可用[/font][font=Arial]I2C[/font][font=宋体]接口连接一个第三方的数字传感器,比如磁力计。扩展之后就可以通过其[/font][font=Arial]I2C[/font][font=宋体]或[/font][font=Arial]SPI[/font][font=宋体]接口输出一个[/font][font=Arial]9[/font][font=宋体]轴的信号([/font][font=Arial]SPI[/font][font=宋体]接口仅在[/font][font=Arial]MPU-6000[/font][font=宋体]可用)。[/font][font=Arial]MPU-6050[/font][font=宋体]也可以通过其[/font][font=Arial]I2C[/font][font=宋体]接口连接非惯性的数字传感器,比如压力传感器。[/font][/align]

[align=left](3)颜色传感器 (对物品颜色进行识别)[/align][align=left]file:///C:\Users\何远洋\AppData\Local\Temp\ksohtml\wpsEA28.tmp.png [/align][align=left]TCS230采用8引脚的SOIC表面贴装式封装,在单一芯片上集成有64个光电二极管。这些二极管共分为四种类型。其中16个光电二极管带有红色滤波器;16个光电二极管带有绿色滤波器;16个光电二极管带有蓝色滤波器;其余16个不带有任何滤波器,可以透过全部的光信息。这些光电二极管在芯片内是交叉排列的,能够最大限度地减少入射光辐射的不均匀性,从而增加颜色识别的精确度;另一方面,相同颜色的16个光电二极管是并联连接的,均匀分布在二极管阵列中,可以消除颜色的位置误差。工作时,通过两个可编程的引脚来动态选择所需要的滤波器。该传感器的典型输出频率范围从2 Hz~500 kHz,用户还可以通过两个可编程引脚来选择100%、20%或2%的输出比例因子,或电源关断模式。输出比例因子使传感器的输出能够适应不同的测量范围,提高了它的适应能力。[/align][align=left] 程序例程:[/align][align=left]if(sign_se==1)[/align][align=left]  {[/align][align=left]   if(flag_sf==1)[/align][align=left]   {                  //[font=宋体]选择滤波器为绿色 [/font][/align][align=left]     count=lptmr_pulse_get();                  //[font=宋体]保存脉冲计数器计算值[/font][/align][align=left]     green=count;     [/align][align=left]      s2=0;s3=1; [/align][align=left]   }[/align][align=left]   if(flag_sf==2)[/align][align=left]   {               //[font=宋体]选择滤波器为蓝色[/font][/align][align=left]     count=lptmr_pulse_get();                  //[font=宋体]保存脉冲计数器计算值[/font][/align][align=left]     blue=count;[/align][align=left]     s2=0;s3=0;[/align][align=left]   }[/align][align=left]    if(flag_sf==3)[/align][align=left]   {                 //[font=宋体]选择滤波器为红色[/font][/align][align=left]     count=lptmr_pulse_get();                  //[font=宋体]保存脉冲计数器计算值[/font][/align][align=left]     red=count;[/align][align=left]     flag_sf=0;[/align][align=left]      s2=1;s3=1;     [/align][align=left]   }[/align][align=left]   lptmr_pulse_clean(); [/align][align=left]   flag_sf++;[/align][align=left]    yansechuli();[/align][align=left]  }[/align]
[align=left]来获取三基色的值,对颜色进行判断。[/align]
[align=left](4)霍尔传感器 (对转盘旋转角度进行控制)[/align][align=left]file:///C:\Users\何远洋\AppData\Local\Temp\ksohtml\wpsEA29.tmp.jpg有磁场切割就有信号输出。[/align]

[align=left][b]  3.2[font=宋体]软件部分[/font][/b][/align]
[align=left][b]/*********************************PIT服务函数*********************************/[/b][/align][align=left][b]int flag=0,p_flag=0;[/b][/align][align=left][b]uint32 flag00=0,flag10=0,flag20=0,flag30=0,sign_t=0;[/b][/align][align=left][b]//PIT1 中断服务函数[/b][/align]
[align=left][b]void PIT1_IRQHandler(void)                                //10ms中断处理函数[/b][/align][align=left][b]{[/b][/align]
[align=left][b]  flag10++;[/b][/align][align=left][b]if(fenbu==0) //到中心点[/b][/align][align=left][b]{[/b][/align][align=left][b]  xunxian();[/b][/align][align=left][b]  zhongjianpan();[/b][/align][align=left][b]  if(centre_f==1)[/b][/align][align=left][b]  {[/b][/align][align=left][b]     stop();[/b][/align][align=left][b]     back();[/b][/align][align=left][b]     DELAY_MS(600);[/b][/align][align=left][b]     stop();[/b][/align][align=left][b]    fenbu=1;[/b][/align]
[align=left][b]  }[/b][/align][align=left][b]}[/b][/align][align=left][b]if(fenbu==1)   //在中心点转向[/b][/align][align=left][b]{[/b][/align][align=left][b]     angle_LR=1;[/b][/align]
[align=left][b]    turn_angle(35);[/b][/align]
[align=left][b]    fenbu=101;[/b][/align][align=left][b]}[/b][/align]

[align=left][b]if(fenbu==101)[/b][/align][align=left][b]{[/b][/align]
[align=left][b]    DELAY_MS(2000);//转向误检测[/b][/align][align=left][b]  fenbu=2;[/b][/align][align=left][b]}[/b][/align]


[align=left][b]if(fenbu==2) //在目标点叉物块[/b][/align][align=left][b]{[/b][/align][align=left][b]   center_z=35;[/b][/align][align=left][b]   xunxian();[/b][/align][align=left][b]  destination ();[/b][/align][align=left][b]  if(destination_f==1)[/b][/align][align=left][b]  { [/b][/align][align=left][b]    stop();[/b][/align][align=left][b]    DELAY_MS(800);[/b][/align][align=left][b]    shengjiang (1);[/b][/align][align=left][b]   DELAY_MS(800);[/b][/align][align=left][b]    fenbu=3;[/b][/align][align=left][b]  }[/b][/align]
[align=left][b]}[/b][/align][align=left][b]if(fenbu==3)  //叉了物块从目标点返回中心点[/b][/align][align=left][b]{[/b][/align]
[align=left][b]  back();[/b][/align][align=left][b]  zhongjianpan();[/b][/align][align=left][b]  if(centre_f==1)[/b][/align][align=left][b]  {[/b][/align][align=left][b]    stop();[/b][/align][align=left][b]     xunxian();[/b][/align][align=left][b]    DELAY_MS(500);[/b][/align][align=left][b]    stop();[/b][/align]
[align=left][b]    shengjiang (0);[/b][/align][align=left][b]    DELAY_MS(800);[/b][/align][align=left][b]    fenbu=4;[/b][/align][align=left][b]  }[/b][/align][align=left][b]}[/b][/align][align=left][b]if(fenbu==4) //从中心点到目标点[/b][/align][align=left][b]{[/b][/align]
[align=left][b]  xunxian();[/b][/align][align=left][b]  destination ();[/b][/align][align=left][b]  sign_se=1;//为下一步颜色判断[/b][/align][align=left][b]  if(destination_f==1)[/b][/align][align=left][b]  { [/b][/align][align=left][b]    stop();[/b][/align][align=left][b]    DELAY_MS(1800);[/b][/align][align=left][b]    fenbu=5;[/b][/align][align=left][b]  }[/b][/align][align=left][b] }[/b][/align]
[align=left][b]if(fenbu==5)  //在目标点读取颜色,转动转盘[/b][/align][align=left][b]{[/b][/align][align=left][b]  remember[0]=flag_se;[/b][/align][align=left][b]  sign_se=0;[/b][/align][align=left][b]  falg_zhuan=1;[/b][/align][align=left][b]  zhuanpan ();[/b][/align][align=left][b]  DELAY_MS(800);[/b][/align][align=left][b]  fenbu=6;[/b][/align][align=left][b]  }[/b][/align]



[align=left][b]if(fenbu==6) //在目标点叉物块[/b][/align][align=left][b]{[/b][/align]
[align=left][b]    shengjiang (1);[/b][/align][align=left][b]   DELAY_MS(800);[/b][/align][align=left][b]    fenbu=7;[/b][/align]
[align=left][b]}[/b][/align]

[align=left][b]if(fenbu==7)  //叉了物块从目标点返回中心点[/b][/align][align=left][b]{[/b][/align]
[align=left][b]  back();[/b][/align][align=left][b]  zhongjianpan();[/b][/align][align=left][b]  if(centre_f==1)[/b][/align][align=left][b]  {[/b][/align][align=left][b]    stop();[/b][/align]
[align=left][b]     xunxian(); //去误差[/b][/align][align=left][b]    DELAY_MS(500);[/b][/align][align=left][b]    stop();[/b][/align]
[align=left][b]    shengjiang (0);[/b][/align][align=left][b]    DELAY_MS(800);[/b][/align][align=left][b]    fenbu=8;[/b][/align][align=left][b]  }[/b][/align][align=left][b]}[/b][/align]
[align=left][b]if(fenbu==8) //从中心点到目标点[/b][/align][align=left][b]{[/b][/align]
[align=left][b]  xunxian();[/b][/align][align=left][b]  destination ();[/b][/align][align=left][b]  sign_se=1;//为下一步颜色判断[/b][/align][align=left][b]  if(destination_f==1)[/b][/align][align=left][b]  { [/b][/align][align=left][b]    stop();[/b][/align][align=left][b]    DELAY_MS(1800);[/b][/align][align=left][b]    fenbu=9;[/b][/align][align=left][b]  }[/b][/align][align=left][b] }[/b][/align]
[align=left][b]if(fenbu==9)  //在目标点读取颜色,转动转盘[/b][/align][align=left][b]{[/b][/align][align=left][b]  remember[0]=flag_se;[/b][/align][align=left][b]  sign_se=0;[/b][/align][align=left][b]  falg_zhuan=1;[/b][/align][align=left][b]  zhuanpan ();[/b][/align][align=left][b]  DELAY_MS(800);[/b][/align][align=left][b]  fenbu=10;[/b][/align][align=left][b]  }[/b][/align]

[align=left][b]if(fenbu==10) //从目标点返回中心点[/b][/align][align=left][b]{[/b][/align][align=left][b]  back();[/b][/align][align=left][b]  zhongjianpan();[/b][/align][align=left][b]  if(centre_f==1)[/b][/align][align=left][b]  {[/b][/align][align=left][b]    stop();[/b][/align]
[align=left][b]    xunxian(); //去误差[/b][/align][align=left][b]    DELAY_MS(500);[/b][/align][align=left][b]    stop();[/b][/align]
[align=left][b]    DELAY_MS(1800);[/b][/align][align=left][b]    fenbu=11;[/b][/align][align=left][b]  }[/b][/align][align=left][b] }[/b][/align]

[align=left][b]if(fenbu==11)  //在中心点转向,[/b][/align][align=left][b]{[/b][/align][align=left][b]// remember[0] [/b][/align][align=left][b]   angle_LR=1;[/b][/align][align=left][b]   turn_angle(35);[/b][/align][align=left][b]   DELAY_MS(1800);[/b][/align][align=left][b]   fenbu=12;[/b][/align]
[align=left][b]}[/b][/align]
[align=left][b]if(fenbu==12) //前往目标点2[/b][/align][align=left][b]{[/b][/align][align=left][b]   center_z=70;[/b][/align][align=left][b]    xunxian();[/b][/align]
[align=left][b]   destination ();[/b][/align][align=left][b]   if(destination_f==1)[/b][/align][align=left][b]  { [/b][/align][align=left][b]    stop();[/b][/align][align=left][b]    DELAY_MS(1800);[/b][/align][align=left][b]    fenbu=13;[/b][/align][align=left][b]  }[/b][/align][align=left][b]}[/b][/align]
[align=left][b]if(fenbu==13)  //在目标点2转动转盘[/b][/align][align=left][b]{[/b][/align][align=left][b]  remember[0]=flag_se;[/b][/align][align=left][b]  sign_se=0;[/b][/align][align=left][b]  falg_zhuan=1;[/b][/align][align=left][b]  zhuanpan ();[/b][/align][align=left][b]  DELAY_MS(800);[/b][/align][align=left][b]  fenbu=14;[/b][/align]
[align=left][b]}[/b][/align]
[align=left][b]if(fenbu==14)  //从目标点2返回中心点[/b][/align][align=left][b]{[/b][/align][align=left][b]   back();[/b][/align][align=left][b]  zhongjianpan();[/b][/align][align=left][b]  if(centre_f==1)[/b][/align][align=left][b]  {[/b][/align][align=left][b]    stop();[/b][/align]
[align=left][b]    xunxian(); //去误差[/b][/align][align=left][b]    DELAY_MS(500);[/b][/align][align=left][b]    stop();[/b][/align]
[align=left][b]    DELAY_MS(1800);[/b][/align][align=left][b]    fenbu=15;[/b][/align][align=left][b]  }[/b][/align][align=left][b]}[/b][/align][align=left][b]if(fenbu==15)[/b][/align][align=left][b]{[/b][/align][align=left][b]}[/b][/align]
[align=left][b]  //disable_irq(PIT0_IRQn);[/b][/align]
[align=left][b]  p_flag=1;[/b][/align][align=left][b] //enable_irq (PIT0_IRQn);[/b][/align][align=left][b]PIT_Flag_Clear(PIT1);                                      //清中断标志位[/b][/align][align=left][b]}[/b][/align]
[align=left][b]/*********************************主函数*********************************/[/b][/align]
[align=left][b]void main(void)[/b][/align][align=left][b]{[/b][/align][align=left][b]  siip=1;[/b][/align][align=left][b] DisableInterrupts;[/b][/align][align=left][b] All_init();[/b][/align][align=left][b] lptmr_pulse_init(LPT0_ALT1, INT_COUNT, LPT_Rising);         //初始化脉冲计数器,用LPT0_ALT1,即PTA19输入,每隔INT_COUNT产生中断(需要开中断才能产生中断),上升沿触发[/b][/align]
[align=left][b] uart_init(UART2, 115200);                                 //6050[/b][/align][align=left][b] set_vector_handler(UART2_RX_TX_VECTORn,uart2_handler);    // 设置中断服务函数到中断向量表里[/b][/align]
[align=left][b] pit_init_ms(PIT0,14 );[/b][/align][align=left][b] set_vector_handler(PIT0_VECTORn , PIT0_IRQHandler);      //定时中断处理函数[/b][/align][align=left][b]  pit_init_ms(PIT1,5 );[/b][/align][align=left][b] set_vector_handler(PIT1_VECTORn , PIT1_IRQHandler);      //定时中断处理函数[/b][/align]
[align=left][b] EnableInterrupts;[/b][/align]
[align=left][b] NVIC_SetPriorityGrouping(2);[/b][/align][align=left][b] NVIC_SetPriority(UART2_RX_TX_IRQn,0);                    //配置优先级[/b][/align]
[align=left][b] NVIC_SetPriority(PIT0_IRQn,1);                           //配置优先级[/b][/align][align=left][b] NVIC_SetPriority(PIT1_IRQn,1);                            //配置优先级[/b][/align]
[align=left][b] uart_rx_irq_en (UART2);[/b][/align]
[align=left][b] enable_irq (PIT0_IRQn);[/b][/align][align=left][b] enable_irq (PIT1_IRQn);[/b][/align]
[align=left][b] speed_l=300;[/b][/align][align=left][b] speed_r=300;[/b][/align]
[align=left][b]   ftm_pwm_duty(FTM0, FTM_CH1,speed_l);     //450[/b][/align][align=left][b]   ftm_pwm_duty(FTM0, FTM_CH2,0);[/b][/align][align=left][b]   ftm_pwm_duty(FTM0, FTM_CH3,speed_r);[/b][/align][align=left][b]   ftm_pwm_duty(FTM0, FTM_CH4,0);[/b][/align]

[align=left][b]while(1)[/b][/align][align=left][b]{[/b][/align][align=left][b] ;[/b][/align][align=left][b]}[/b][/align][align=left][b]}[/b][/align]
[align=left][font=宋体][b]本作品中内容未经作者同意,禁止转发及用于商业用途,否则后果自行承担。[/b][/font][/align][align=left][font=宋体][b]本作品知识产权归安徽工业大学项目负责团队所有。[/b][/font][/align]
其他作品
69888发表于 2016-5-23 12:47:21 | 显示全部楼层
点赞,加油。支持
顺丰哇哇发表于 2016-5-15 00:18:06 | 显示全部楼层

支持一下
78563发表于 2016-5-15 00:16:22 | 显示全部楼层
支持一下
HERR发表于 2016-5-15 00:14:17 | 显示全部楼层
支持一下
78674发表于 2016-5-15 00:08:40 | 显示全部楼层
赞一个,好棒
78787发表于 2016-5-15 00:04:37 | 显示全部楼层
支持,很厉害
文文wen发表于 2016-5-14 23:30:27 | 显示全部楼层
赞一个,好棒
小根根哇发表于 2016-5-14 23:28:43 | 显示全部楼层
赞一个,好棒
秋秋哇哇发表于 2016-5-14 23:26:33 | 显示全部楼层
赞一个,好棒
12下一页
返回列表