描述
<div>
<p style="line-height:1.8;">注:* 为必填项</p>
<p style="line-height:1.8;"><strong><span style="color:#0093e6;">请在报名阶段填写 ↓</span></strong></p>
<p style="line-height:1.8;"> </p>
<h3 style="line-height:1.8;">* 1、项目功能介绍</h3>
<hr>
<p>本项目构建了一个集成了视觉、语音控制和嵌入式技术的智能激光打靶云台系统。</p>
<p>其核心功能是让云台能够“看见”、“听懂”并“击中” 目标。具体实现的功能如下:</p>
<p>自动目标追踪:OpenMV摄像头作为“眼睛”,实时识别并追踪预设的特定目标,通过算法计算出目标在画面中的坐标。</p>
<p>实时云台控制:OpenMV将目标坐标通过串口发送给STM32主控制器。STM32作为“大脑”,根据这些坐标数据,通过PID等控制算法驱动两个舵机(俯仰和偏航)组成的云台,使激光点始终对准目标,实现平滑、准确的自动追踪。</p>
<p>精准激光打击:STM32控制一个继电器模块,作为激光器的“开关”。系统可以在自动模式下在锁定目标后自动发射激光,或在手动模式下通过指令控制激光的开启与关闭,模拟打靶效果。</p>
<p>多模态人机交互:</p>
<p>语音控制:集成ASRPRO语音识别模块,用户可以通过简单的语音命令(如“开始追踪”、“停止”、“发射激光”)来控制整个系统的运行状态,提升了操作的便捷性和科技感。</p>
<p>信息显示:OLED显示屏实时显示系统状态信息,如当前模式、目标坐标、舵机角度、激光状态等,方便用户监控。</p>
<p>声光指示:LED灯和蜂鸣器提供清晰的系统状态反馈。例如,灯亮表示系统上电,蜂鸣器鸣叫表示目标丢失或收到语音指令,增强了系统的交互性。</p>
<p>稳定电源管理:采用12V航模电池供电,通过两个高效的降压模块分别产生6.5V和5V电压,为舵机云台和核心控制电路提供独立、稳定、无干扰的电源,确保系统稳定运行。</p>
<p> </p>
<h3 style="line-height:1.8;">*2、项目属性</h3>
<hr>
<p><strong>首次公开状态</strong>:本项目为首次公开</p>
<p><strong>获奖情况</strong>:截至目前,项目尚未参与任何正式比赛或评奖活动</p>
<h3 style="line-height:1.8;">* 3、开源协议</h3>
<hr>
<p style="line-height:1.8;">Public Domain</p>
<p style="line-height:1.8;"> </p>
<p style="line-height:1.8;"><strong><span style="color:#0093e6;">请在竞赛阶段填写 ↓</span></strong></p>
<p style="line-height:1.8;"> </p>
<h3 style="line-height:1.8;">*4、硬件部分</h3>
<hr>
<p><strong>实现原理与机制:</strong><br>本系统的硬件核心是“感知-决策-执行” 闭环。</p>
<p>感知层:OpenMV摄像头持续捕获图像,运行视觉算法识别目标,并输出其中心点的(X, Y)坐标。</p>
<p>决策层:STM32F103等主控芯片接收坐标数据。它将屏幕坐标转换为舵机需要转动的角度,并运用控制算法(如PID)计算出精确的PWM信号以驱动舵机。同时,它解析来自ASRPRO的语音指令,管理OLED显示、LED和蜂鸣器。</p>
<p>执行层:</p>
<p>云台:两个舵机分别负责水平(偏航)和垂直(俯仰)方向的运动,带动激光头指向目标。</p>
<p>激光:STM32通过GPIO输出高低电平控制继电器闭合与断开,从而控制大功率激光模组的供电回路。</p>
<p>交互:OLED、LED、蜂鸣器执行主控的显示和提示命令。</p>
<p> </p>
<p style="line-height:1.8;"><strong>系统连接图:</strong><img src="//image.lceda.cn/pullimage/ZXuAoAMWxy7RJQhWJvidl3mk1g5WG4mm8iCO7v5n.png" width="705" height="498" alt="ZXuAoAMWxy7RJQhWJvidl3mk1g5WG4mm8iCO7v5n.png"></p>
<p style="line-height:1.8;"> </p>
<h4><strong>硬件清单与注意事项:</strong></h4>
<div>
<div>
<div> </div>
</div>
<table>
<tr>
<th>模块</th>
<th>关键参数/型号</th>
<th>备注与注意事项</th>
</tr>
<tr>
<td>主控制器</td>
<td>STM32F103C8T6 (核心板)</td>
<td>资源丰富,性价比高。注意IO口的分配,避免冲突。</td>
</tr>
<tr>
<td>视觉模块</td>
<td>OpenMV H7 Plus (或OpenMV4)</td>
<td>处理能力更强,帧率更高,识别更稳定。</td>
</tr>
<tr>
<td>语音模块</td>
<td>ASRPRO</td>
<td>需提前烧录指令词条,使用串口与STM32通信。</td>
</tr>
<tr>
<td>云台舵机</td>
<td>2x 舵机 (如MG996R)</td>
<td>注意:云台舵机供电电压为6.5V,需使用独立的降压模块,避免与逻辑电路(5V)共用,防止电机干扰导致单片机复位。</td>
</tr>
<tr>
<td>激光模块</td>
<td>带驱动板的大功率激光头</td>
<td>安全第一! 必须连接继电器控制,切勿直视激光,操作时需佩戴防护眼镜。</td>
</tr>
<tr>
<td>显示模块</td>
<td>0.96寸 I2C OLED</td>
<td>I2C地址通常为0x3C或0x3D,需在代码中确认。</td>
</tr>
<tr>
<td>电源输入</td>
<td>12V 航模电池</td>
<td>保证容量足够,带载能力满足所有模块需求。</td>
</tr>
<tr>
<td>降压模块1</td>
<td>降压模块 (12V to 6.5V)</td>
<td>仅用于云台舵机,输出电流需大于两个舵机堵转电流之和。</td>
</tr>
<tr>
<td>降压模块2</td>
<td>降压模块 (12V to 5V)</td>
<td>为STM32、OpenMV、OLED、ASRPRO等逻辑电路供电。</td>
</tr>
<tr>
<td>其他</td>
<td>继电器模块、LED、蜂鸣器、电阻、杜邦线、洞洞板/PCB</td>
<td>连接LED需串联限流电阻(220Ω-1kΩ)。</td>
</tr>
</table>
</div>
<p style="line-height:1.8;"> </p>
<p style="line-height:1.8;"><span style="color:#95a5a6;font-size:14px;"> 注:请前往<span style="text-decoration:underline;"><a href="https://lceda.cn/editor" target="_blank">嘉立创EDA</a> </span>生成/上传设计文件,文件完成后,相关文稿将自动生成至项目详情;这里可以详细说明您的项目实现原理和机制、注意事项、调试方法、测试方法等。推荐图文并茂的形式向别人介绍您的想法。 </span></p>
<p style="line-height:1.8;"> </p>
<h3 style="line-height:1.8;">*5、软件部分</h3>
<hr>
<p style="line-height:1.8;"><strong>系统流程图:</strong></p>
<p style="line-height:1.8;"><img src="//image.lceda.cn/pullimage/QNrouSc7BsNHmbA6NXfTf60p7Ezvvf4HeBzcT7hC.png" width="496" height="692" alt="QNrouSc7BsNHmbA6NXfTf60p7Ezvvf4HeBzcT7hC.png"></p>
<p><strong>功能模块框图:</strong><br>OpenMV端 (MicroPython)</p>
<p style="padding-left:40px;">main.py:主程序</p>
<p style="padding-left:40px;">sensor模块:图像采集与预处理(镜头畸变校正)</p>
<p style="padding-left:40px;">image.find_blobs():色块识别算法</p>
<p style="padding-left:40px;">find_max():寻找最大色块函数</p>
<p style="padding-left:40px;">UART通信:数据打包与发送</p>
<p>STM32端 (C语言)</p>
<p style="padding-left:40px;">应用层</p>
<p style="padding-left:40px;">main.c:系统初始化与OLED显示</p>
<p style="padding-left:40px;">驱动层</p>
<p style="padding-left:40px;">usart.c/h:串口通信驱动</p>
<p style="padding-left:40px;">USART2_IRQHandler():OpenMV数据接收中断</p>
<p style="padding-left:40px;">Data_test():数据包校验函数</p>
<p style="padding-left:40px;">Servo.c/h:舵机PWM驱动</p>
<p style="padding-left:40px;">PWM_SetCompare_x/y():设置舵机角度</p>
<p style="padding-left:40px;">timer.c/h:定时器中断配置</p>
<p style="padding-left:40px;">TIM2_IRQHandler():PID控制周期定时</p>
<p style="padding-left:40px;">oled.c/h:OLED显示驱动</p>
<p style="padding-left:40px;">算法层</p>
<p style="padding-left:40px;">pid.c/h:PID控制算法实现</p>
<p style="padding-left:40px;">apply_deadband():死区处理函数</p>
<p style="padding-left:40px;">PID_x(), PID_y():位置式PD控制器</p>
<p style="line-height:1.8;"> </p>
<p><strong>关键算法解释:</strong><br>1. 视觉识别算法 (OpenMV端)</p>
<p>基于颜色的目标识别:使用find_blobs()函数在RGB色彩空间中找到符合预设颜色阈值red_threshold_01的连通区域。</p>
<p>最大色块筛选:通过find_max()函数从所有识别到的色块中选择像素面积最大的一个,避免多个干扰点的影响。</p>
<p>镜头畸变校正:使用lens_corr(1.8)函数校正鱼眼镜头产生的图像变形,提高坐标测量的准确性。</p>
<p>2. 串口通信协议</p>
<p>自定义数据帧格式:[0xA3, 0xB3, X坐标, Y坐标, 0xC3]</p>
<p>三重校验机制:</p>
<p>帧头1校验 (0xA3)</p>
<p>帧头2校验 (0xB3)</p>
<p>帧尾校验 (0xC3)</p>
<p>数据合理性检查:在STM32端检查坐标值是否在有效范围内(X≤320, Y≤240)</p>
<p>3. 位置式PD控制算法</p>
<p>控制原理:输出 = Kp × 当前误差 + Kd × 误差变化率<br>死区处理:apply_deadband()函数在误差小于2.5像素时输出为0,避免舵机在目标点附近微小抖动,提高稳定性。</p>
<p>参数特点:</p>
<p>使用PD控制而非完整的PID,省略了积分项I,避免积分饱和和超调</p>
<p>X、Y轴使用不同的PD参数,适应两个舵机不同的机械特性和负载</p>
<p>Kd(微分)参数有效抑制了系统振荡,使云台运动更加平滑</p>
<p>4. 中断驱动的系统架构</p>
<p>串口接收中断:确保及时响应OpenMV发送的坐标数据,不阻塞主程序</p>
<p>定时器中断:以固定频率(如100Hz)执行PID计算和舵机控制,保证控制周期的稳定性</p>
<h3 style="line-height:1.8;"> </h3>
<p><strong>调试技巧与参数整定:</strong><br>PID参数调试步骤:</p>
<p>先调P参数:将Kd设为0,逐渐增大Kp直到云台开始快速响应但出现轻微振荡</p>
<p>再加入D参数:逐渐增大Kd直到振荡被有效抑制,运动变得平滑</p>
<p>微调死区:根据实际需求调整DEADZONE值,平衡精度和稳定性</p>
<p>常见问题排查:</p>
<p>目标丢失:检查OpenMV颜色阈值,优化光照条件</p>
<p>云台振荡:降低Kp或增大Kd参数,增加死区值</p>
<p>响应迟钝:增大Kp参数,减小死区值</p>
<p>通信异常:检查串口波特率设置和数据包校验逻辑</p>
<p style="line-height:1.8;"> </p>
<p style="line-height:1.8;"><span style="color:#95a5a6;font-size:14px;">注:若您的项目涉及软件开发,请在附件上传对应的工程源码。这里可以详细说明您的软件流程图、功能模块框图、相关算法的解释或科普、源码结构、编译环境的搭建和配置、源码编译方法、程序烧录方法等。推荐图文并茂的形式向别人介绍您的想法。</span></p>
<p style="line-height:1.8;"> </p>
<h3 style="line-height:1.8;">*6、BOM清单</h3>
<hr>
<p style="line-height:1.8;"><img src="//image.lceda.cn/pullimage/5xGFKdu79oaHbKrzRaRkpF9Z7P7mS1z2RHtYJNoO.png" alt="5xGFKdu79oaHbKrzRaRkpF9Z7P7mS1z2RHtYJNoO.png"></p>
<p style="line-height:1.8;"> </p>
<p style="line-height:1.8;"><span style="color:#95a5a6;font-size:14px;">注:项目涉及的BOM清单。在<span style="text-decoration:underline;"><a href="https://lceda.cn/editor" target="_blank">嘉立创EDA</a> </span>生成/上传设计文件后,BOM将自动生成至项目详情;建议包括型号、品牌、名称、封装、采购渠道、用途等内容。具体内容和形式应以表达清楚项目构成为准。 </span></p>
<p style="line-height:1.8;"> </p>
<h3 style="line-height:1.8;">*7、大赛LOGO验证</h3>
<hr>
<p style="line-height:1.8;">logo在右上角<img src="//image.lceda.cn/pullimage/MKvJ9drVpDLWZyp2Uw62r8YVvwM8i0VeFQ0gSYuE.jpeg" width="629" height="588" alt="MKvJ9drVpDLWZyp2Uw62r8YVvwM8i0VeFQ0gSYuE.jpeg"></p>
<p style="line-height:1.8;"><span style="color:#95a5a6;font-size:14px;">请上传包含大赛logo的项目图片,logo以丝印形式印刷在PCB上面。</span></p>
<p style="line-height:1.8;"><span style="color:#95a5a6;font-size:14px;">点击zip下载大赛logo标识! <span style="text-decoration:underline;"><a href="https://image.lceda.cn/easyedaResource/images/d1bbfd69f9404f56901a0e7b849b7245.rar" target="_blank">(大赛标识).zip</a></span></span></p>
<p style="line-height:1.8;"> </p>
<h3 style="line-height:1.8;">* 8、演示您的项目并录制成视频上传</h3>
<hr>
<p style="line-height:1.8;"> </p>
<p style="line-height:1.8;"><span style="color:#95a5a6;font-size:14px;">视频要求:请横屏拍摄,分辨率不低于1280×720,格式Mp4/Mov,单个视频大小限100M内;</span></p>
<p style="line-height:1.8;"><span style="color:#95a5a6;font-size:14px;">视频标题:立创电赛:{项目名称}-{视频模块名称};如立创电赛:《自动驾驶》-团队介绍。</span></p>
<p style="line-height:1.8;"> </p>
<p style="line-height:1.8;"><span style="font-size:14px;"><a href="/posts/42551e8f2f2548cabc1c36626a42da94" target="_blank">前往查看更多详情 ></a></span></p>
<p style="line-height:1.8;"> </p>
</div>
评论(1)