手绘轨迹(STM32触摸屏)控制小车运动

本文介绍了一款使用STM32和STC12C5A60S2控制的小车,通过触摸屏绘制轨迹并无线发送给小车。STM32处理触摸屏数据,STC12C5A60S2解析轨迹控制小车运动,两者通过NRF24L01通信。路径分析算法确保轨迹精确,硬件设计包括触摸屏和小车两部分,采用差速转向实现路径跟随。
摘要由CSDN通过智能技术生成

转载请注明出处:http://blog.csdn.net/lxk7280


简介:

利用STM32和STC12C5A60S2(增强型51)做的一款作品。其中STM32控制触摸屏、按键等模块,STC12C5160S2处理手绘的轨迹数据控制小车,两大部分通过NRF24L01通信。(由于时序原因,两者的通信部分程序一定要处理好,否则无法通信。)

用户在触摸屏(电阻屏)上绘画出自己指定的轨迹,如:圆形,S形等。绘画之后按下发送按键,STM32便会将各个点的坐标数据处理,然后无线发送给STC12C5160S2,继而控制小车进行与手绘的轨迹相同的运动。


软件设计:

分为两个部分,一部分在触摸屏上,如:路径分析,坐标取点等;另一部分在小车上。(后面我会把程序完全贴出来)

1. 路径分析算法

因为人在触摸屏手绘的路径是在一个固定的坐标系上的移动轨迹,为了尽可能的靠近轨迹,我们加大轨迹的取点数量,基本的思想是从现在的点走向下一点,一直走到最后一点。为了发送的数据简洁,我们设计了一些算法,下面取其中几个自己绘画的对坐标的分析图。分析图中为了方便查看和分析,取点数量减少。

 

 

黄色为手绘出的轨迹,红色为取的点和坐标原点形成的唯一矩形,分析可知:

Θ3 = Θ2 - Θ1,Θ5 = Θ4 - Θ3;

注:如果Θ<0,那么以四轴自身形成的坐标系而言,小车此时应该向左拐弯;如果Θ>0,那么以小车自身形成的坐标系而言,小车此时应该向右拐弯。所以这个的关键就是固定坐标系和相对坐标系之间的一些参数的转化。

例如:

Move_Step(Path_Set_x[x-2],Path_Set_y[x-2],Path_Set_x[x-1],Path_Set_y[x-1]);
Ang[x-2]=Time_Move_Buf*(180/pi);
b = (int)(Time_Move_Buf+0.5) + 32;   //解码时前进的时间要-32
if(x==2) a=Ang[0];
else 
a=(int)((Ang[x-2] - Ang[x-3])/Speed_Turn + 0.5) + 150;  //解码时 大于150的向右转,小于150的向左转
Time_Turn[x-2] = (unsigned char)a;
Time_Move[x-2] = (unsigned char)b;

例如:

void Move_Step(double Now_x,double Now_y,double Next_x,double Next_y)
{
Time_Turn_Buf = atan(Next_x - Now_x)/(Next_y - Now_y);
Time_Move_Buf = (sqrt((Next_x - Now_x)*(Next_x - Now_x)+(Next_y - Now_y)*(Next_y - Now_y)))/Speed_Move;
} 


2. 不同频率单片机之间的无线通信

由于不同频率单片机之间的无线通信需要解决不少的时序问题,因为以前研究过STM32单片机和51单片机之间由于频率不同造成的无法进行无线的通信的问题,所以在STM32的程序加上了一些必要的延时,以实现时序上的一致,从而使通信数据完善不会丢失或者造成通信失败。

例如:

delayms(250);


硬件设计:

同样分为两部分,一个是触摸屏的硬件设计,另外一个是小车的硬件设计。

触摸屏:

效果图:


触摸屏和STM32的连接图:


小车:

1.

2.

3.

4.

  • 9
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值