# Cricket system
**Repository Path**: likeworld/Cricket-system
## Basic Information
- **Project Name**: Cricket system
- **Description**: 板球控制系统(2017年电子设计大赛控制类题目)
简述:使用摄像头获取黑色小球的位置,利用舵机控制平板的升起和降落,通过算法控制平板的升起和降落让小球可以在平板上实现停在固定的点,以及按照规定的曲线做曲线运动。
- **Primary Language**: C
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 4
- **Forks**: 1
- **Created**: 2018-07-18
- **Last Updated**: 2022-04-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Cricket system
#### Description
*板球控制系统(2017年电子设计大赛控制类题目)
*简述:使用摄像头获取黑色小球的位置,利用舵机控制平板的升起和降落,通过算法控制平板的升起和降落让小球可以在平板上实现停在固定的点,以及按照规定的曲线做曲线运动。
#### Software Architecture
*软件代码IDE:IAR
*主控单片机:MK60DN512
*IAR基础配置可参考:https://wenku.baidu.com/view/ecec3b04caaedd3383c4d3d4.html
*硬件制作sofeware:Altium designer
#### program Instructions
*软件代码分为三个部分:摄像头采集代码、小球定位算法、舵机控制算法
*摄像头采集代码:本次设计采用的是山外鹰眼OV7725硬件二值化摄像头,需要采集图像时,开场中断;场中断来了,开行中断和初始化 DMA 传输;行中断来了就设置 DMA 地址,启动 DMA 传输。如果先过滤部分行不采集,则设置一个静态变量,每次行中断来了都自加 1,根据值来选择采集或不采集某些行;每个 PCLK(时钟信号)上升沿来了都触发 DMA 传输,把摄像头输出的值读取到内存数组里;当触发 n 次(n=图像列数目)后就停止 DMA 传输。行中断次数等于一幅图像的行数,或者等待下一个场中断来临 就结束图像采集,关闭行中断和场中断。摄像头采集数据时序图如下图。

*小球定位算法:我们将摄像头固定在平板的上方,整个摄像头的视野部分全部是白色,我们将黑色小球放在平板上,然后我们从第一行开始从中间开始向两边搜索,要是搜索到黑色部分就将那个位置记录到小球位置数组并且break搜索循环,搜索函数放在while循环里面,每次循环更新小球位置数据。
*舵机控制算法:舵机控制是采用的PID控制,根据小球的位置与需要定位到的位置在XY方向计算出两个error,将error积分、微分,分别乘上P、I、D常数,这样就是PID控制算法,PID控制主要是为了提高控制效果,只用误差控制会有很明显的延时以及不能处理突然的变动(比如突然用手按一下平板)。
#### program Instructions
*硬件制作主要分为:MK60最小系统接口,OV7725摄像头接口,3.3v稳压电路
*3.3v稳压电路图如下图:

#### Contribution
*1、实现了摄像头图像的采集,并将摄像头采集图像通过蓝牙串口发送到上位机界面上方便调试。
*2、实现了PID控制算法在舵机上的使用,PID控制算法可以有效提高控制系统的灵敏度和抗干扰性。
*3、编写了小球定位算法,实时监测小球位置。