Toggle navigation
科创
{{ getSearchSuggestionLabel(suggestion) }}
{{ part.text }}
查看更多
登录
 
注册
电波
论坛
专栏
应用
登录
注册
{{ getSearchSuggestionLabel(suggestion) }}
{{ part.text }}
查看更多
论坛
>
机械与工具
>
机器人
文号
t41783
阅读
5606
回复
4
收藏
4
大二时做的小机器人,和大家分享下(有视频,高手勿喷)
zuiyiyunyan
2012/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
0
全部
只看作者
全部
只看作者
在列表中查看
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
编辑
删除
{{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
保存
取消
我也是有底线的
保存中...
保存