加载中
加载中
表情图片
评为精选
鼓励
加载中...
分享
加载中...
文件下载
加载中...
修改排序
加载中...
大二时做的小机器人,和大家分享下(有视频,高手勿喷)
zuiyiyunyan2012/03/12机械与工具 IP:江苏
先上视频吧点击此处查看视频
全身黑色衣服那个是我![s:274]  
整个系统很简单,处理器是51系列的stc12c5a60s2,硬件2路pwm。8位红外对管的循迹板(也有16位的光敏的循迹板),L298驱动电机,机械臂部分不是我负责的,放球那位仁兄负责的。4个按键,2位数码管(595驱动的)等等,其他想到了再说,本人能力有限,发此贴就是为了转正啊!
好不容易找到了以前写的一些代码,贴一点核心的部分,整体的代码有1-2千行,编译成.hex有13k,还好这单片机能装。
循迹是采用PID算法的,只是数学没学好,只用了其中的P,I和D没有用,就是所谓简单的一次多项式模型:y = kx + A,我也怕cpu算不过来啊!代码如下:
8位传感器的:
void xunji()
{
     uchar sensorData,i,sum,temp;
     float bias=0;
     char zkb1,zkb2;
     int zkba,zkbb;
     static unsigned char flagSensor[8] = {0};      用一个数组来记录sensorData中的每一个位
     sensorData=P0;            读传感器                                              
     for(i=0; i<8; i++)
    {
        flagSensor = sensorData & 0x01;  
        sensorData >>= 1;
    }
    sum = 0;
    for(i=0; i<8; i++)
        if(flagSensor) sum ++;      计算线上的传感器个数(假设在黑线上传感器返回1)


    temp = 0;
    for(i=0; i<8; i++)
    {
        if(flagSensor)
            temp += (i+1);    计算在线上的传感器编号之和
    }
    if(temp != 0) bias = temp*1.0 / sum - REF_VALUE;    一次多项式模型:y = kx + A       REF_VALUE为4.5,具体自己算(1+8)/2                  


    zkba=(int)(90*bias)+120;     90和120 都是经验值
    zkbb=(int)(-90*bias)+120;


//     zkba=(int)(180*bias)+255;    90和120太慢了,这个参数跑的快,嘿嘿!
//    zkbb=(int)(-180*bias)+255;
    


    if(zkba>255)    zkb  占空比   代码写的不专业,乱起名字!
     zkba=255;
    if(zkba<-255)
      zkba=-255;
    zkb1=abs(zkba);
    CCAP0H = zkb1;          单片机的寄存器,具体看stc12c5a60s2芯片手册,中文的
    if(zkba>=0)
    {
     LIN1=1;     电机a的方向,这样是电机正转
     LIN2=0;
    }
    else
    {LIN1=0;LIN2=1;}


     if(zkbb>255)      这部分是电机b的,同上
     zkbb=255;
     if(zkbb<-255)
     zkbb=-255;
     zkb2=abs(zkbb);
     CCAP1H = zkb2;
     if(zkbb>=0)
      {RIN1=1;RIN2=0;}
      else
      {RIN1=0;RIN2=1;}
}

下面是16位的,只贴核心部分,都是些简单的代码。
uchar sum_get()
{
  char sensorData,i,sum;
   float bias=0;
   static unsigned char flagSensor[16] = {0};
   SWEN=0;      //读取低8位
   sensorData=P2;
   for(i=0; i<8; i++)
    {
        flagSensor = sensorData & 0x01;
        sensorData >>= 1;
    }
   SWEN=1;      //读取高8位
   sensorData=P2;
   for(i=8; i<16; i++)
    {
        flagSensor = sensorData & 0x01;
        sensorData >>= 1;
    }    
    sum = 0;
    for(i=0; i<16; i++)
        if(flagSensor) sum ++;
        temp = 0;
    for(i=0; i<16; i++)
    {
        if(flagSensor)
            temp += (i+1);
    }
    return sum;
}

就写这么多,时间太长记不得了,语文差,写的有点乱!
+50  科创币    jrcsh    2012/03/12 鼓励新人
+10  科创币    云烟    2012/03/13 欢迎。现在我还停在用软件编.RCU的时代。虽然可以编代码。但是图形化用的更多。呵呵,高二
+10  科创币    爬行动物    2012/03/13
+50  科创币    kknd    2012/03/16 感谢开源
来自:仪器与装备 / 机械与工具
4
新版本公告
~~空空如也
卡通童话008
13年6个月前 IP:未同步
380889
底盘哪里买的啊,求介绍··········
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
旺旺
13年5个月前 IP:未同步
389554
电路图。。。。和图片。。。?????[s:226]
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
血狼
13年5个月前 IP:未同步
392404
楼主高手~~~有空教教我哈~
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
所属分类
上级专业
同级专业
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的