记我的17电赛

 

把比赛收获的经验放在最前面:

技术上:

1.平时要多做做项目,c语言功底要打牢,不然临场写程序很容易error而且一下子找不出来原因。

2.各种常用模块比如摄像头、霍尔传感器、mpu6050之类的角度传感器、陀螺仪都要会用。

3.各种通讯协议要掌握,学会用上位机调试(比如匿名四轴地面站),要会自己拟定通讯协议,要会给个上位机的通讯协议能写出符合协议的通讯代码。

 

单纯比赛的准备上:

1.多买点模块玩玩吧。

2.提前打好板子,比如摄像头与单片机核心板的连接,再比如核心板和键盘、屏幕的连接。

3.少用杜邦线,至少用了得拿胶粘牢来。

4.提前准备各种电源,控制题比赛总不能抱个学生直流电源去吧。

5.核心板最好连个触摸屏,什么gui什么的提前写好。。。比赛的时候不能带电脑。low点也可以搞个矩阵键盘+oled调试。要是啥调试途径都没有那评测的时候就很难受了。

 

其他方面:

1.赛前好好睡觉。不然比赛的时候就会意识到睡眠的可贵了。。

2.和队员好好沟通,比赛过程中意外肯定是难免的,心态要放好。

3.还是心态,心态一定要好,别总想这拿大奖,比赛就一个劲做下去,不能想太多。目标太大,遇到困难很容易心灰意冷就放弃了。

有幸在大一这个暑假参加了电赛,由于电赛注册系统更新,比赛前一周突然可以报名了,就拉着留校做项目的俩大一室友开搞了。。。我们仨技能点都差不多51->stm32,我多一个arduino的经验,但32用的不熟。

 

这次电赛我们选择的b题--滚球控制系统。当时出来元器件清单,网上已经有很多预测是做这个东西的,但我们没怎么信,因为据说滚球控制系统已经是很成熟的方案了,很多高校都有样品。万万没想到,真理往往还是在大多数人手里,就是要做滚球控制系统。

 

按元器件清单买的直线丝杆电机恐怕没有用了,之前调了几天的mpu6050模块也没有用武之地,而继续的摄像头和推杆电机(舵机)都没有准备,一切从头开始。

 

第一天早上八点拿到题目,赶紧采购、搭建机械结构,经过简单的讨论,我们选择用180°X2的舵机(从实验室翻到一只机械臂然后上拆下来的)控制平板角度,考虑到arduino库比较方便,决定使用arduino作为主控、l298n驱动、由于没有使用摄像头的经验,所以决定先盲控试试能不能搞定。

 

很快我们就学会了使用舵机。中午12点,我调好了舵机并封装了一些控制函数,嘉宁提前学习摄像头的知识,鑫伟去列采购清单。

 

中午吃完饭,一行仨人前赴建材市场大肆采购。买来kt板、铝合金条、泡沫胶、皮筋、美工刀之类的。

 

下午开始搭建机械结构,我们用铝合金条搭架子铺kt板做板面,感觉挺稳的。舵机连着舵机,以一个类似机械臂的结构固定在板中央控制板面。。。半夜搭完。。。睡觉。。

 

早上起来调舵机,才发现我们这种结构松动有点严重,而且舵机每打一个角、板面倾斜角度过大。老师建议我们改万向节连接-边缘打角的机械结构,但买不到万向节了。。。。硬着头皮干吧。。。。。调了一下午,居然能盲控实现到第二个要求了,虽然成功率只有50%,但我们很兴奋。

 

调到第二天中午,发现盲控并没有什么提升空间,而且特别受外界因素干扰结果。觉得得找合适的传感器检测小球位置才能把这个控制做好。

 

于是我们打起了实验室的祖传线性ccd的主意,好像是智能车用剩的,于是planB诞生:ccd小球检测法。第二天傍晚调通线性ccd,这模块用起来是真简单,读个模拟值就行,但无奈视角太狭窄。于是planB流产。。。只能晚上和一起做控制题学长合资购买摄像头---ov7670,发顺丰到付。。。继续盲调。。。

 

第三天下午,摄像头到货。嘉宁很快就调通了摄像头demo,并且让实时画面显示在了一块lcd屏幕上。但我们发现f103驱动摄像头的例程帧率实在是太低了,大概只有2-3帧/s,显然这个帧率对控制的实时性是不能保障的。这时候嘉宁的技术很好的体现了。嘉宁对着demo一顿操作,在删删减减后,帧率达到了7-8帧/s。时间到了第三天晚上,现在问题就是如何定位小球的位置了。。。

 

很快我就通过软件实现了将摄像头图像二值化(其实就是设置一个阈值,大于这个值判定为白色,否则判定为黑色),但在如何从二值化的图像上提取小球的位置这一问题上,我和嘉宁出现了分歧:我认为将颜色跳变的像素点向后读三位,如果还为黑色则判定为有效像素点并记录下来,最后对有效像素点统计取个平均就行;嘉宁思路和我不大一样,所以我们各自写程序测试,这是个痛苦的过程,因为c语言不够熟练、加上对模块的不熟悉,夜里很深我和嘉宁才各自调通,实现对小球的定位。两个程序都有问题,就是健壮性很烂,很容易受到外界干扰影响。加上摄像头我们是杜邦线连的,干扰就更强了。因为各种玄学原因,我的程序面对干扰稍微靠谱些,就采用我的prj了。。。

 

f103采集图像定位,将小球位置发送给arduino。arduino的pid和舵机控制程序我在摄像头到货前的夜里已经写好了。现在问题是二者如何通讯。串口连线吧,又快又方便。我负责arduino通讯协议,嘉宁写f103的,然而我们一对接,发现数据根本就读不出来。。。。。。。。。。又忙活了几个小时,天都亮了,还是读不出来。(至今不知道那天夜里无法通讯的原因)。。。。还是技术不过关吧,心灰意冷,感觉非常丧气。。。。这时候瞟到桌上魏老师为电赛特地买的的串口wifi模块,我之前调试过,拿来一用,果然好用。。。就决定是他了。。。。哈哈。。柳暗花明。。

 

第四天,也就是最后一天。。调了一整天的PID,苦于调pid经验不足和摄像头时不时罢工和抽风,整个板球控制系统宛如一个智障。。。

 

后来综测就不说了,电源都没准备好,杜邦线+面包板连接的电路从封装箱子里拿出来都散架了,好容易把线整理好,用手机充电器驱动舵机,舵机直接选择罢工不干了。。。。。。。。。。。。

 

这次电赛没拿到成绩,不过也是不悔的,毕竟收获了很多经验,现在写出来和大家共勉:

 

技术上:

1.平时要多做做项目,c语言功底要打牢,不然临场写程序很容易error而且一下子找不出来原因。

2.各种常用模块比如摄像头、霍尔传感器、mpu6050之类的角度传感器、陀螺仪都要会用。

3.各种通讯协议要掌握,学会用上位机调试(比如匿名四轴地面站),要会自己拟定通讯协议,要会给个上位机的通讯协议能写出符合协议的通讯代码。

 

单纯比赛的准备上:

1.多买点模块玩玩吧。

2.提前打好板子,比如摄像头与单片机核心板的连接,再比如核心板和键盘、屏幕的连接。

3.少用杜邦线,至少用了得拿胶粘牢来。

4.提前准备各种电源,控制题比赛总不能抱个学生直流电源去吧。

5.核心板最好连个触摸屏,什么gui什么的提前写好。。。比赛的时候不能带电脑。low点也可以搞个矩阵键盘+oled调试。要是啥调试途径都没有那评测的时候就很难受了。

 

其他方面:

1.赛前好好睡觉。不然比赛的时候就会意识到睡眠的可贵了。。

2.和队员好好沟通,比赛过程中意外肯定是难免的,心态要放好。

3.还是心态,心态一定要好,别总想这拿大奖,比赛就一个劲做下去,不能想太多。目标太大,遇到困难很容易心灰意冷就放弃了。

子设计竞)综合测试是竞中的关键环节,通常在决阶段进行。综合测试内容涵盖硬件设计、软件编程、系统调试、文档撰写等多个方面,测试形式为限完成一个具体的设计任务。以下是关于综合测试内容和准备方法的总结: 综合测试内容主要包括以下几个方面: 1. **路设计与实现**:根据题目要求设计路,包括模拟路、数字路或嵌入式系统等部分,通常需要在短间内完成原理图设计、PCB布局或面包板搭建。 2. **嵌入式系统开发**:涉及单片机、FPGA或ARM等处理器的编程,完成特定功能如数据采集、信号处理、通信等。 3. **系统调试与优化**:对完成的硬件和软件进行整体调试,确保系统稳定运行,并根据要求优化性能,例如提高精度、降低功耗等。 4. **文档撰写**:在规定间内完成技术文档,包括设计说明、测试报告、系统框图等,文档质量也是评分的重要依据之一。 准备综合测试的方法: 1. **熟悉往年题目**:查阅历届综合测试题目,分析常见题型和技术要求,例如源类、信号源类、数据采集类、控制类题目等。 2. **掌握常用模块**:提前准备常用功能模块的硬件设计和代码,例如ADC/DAC模块、传感器接口、通信模块(如I2C、SPI、UART)、显示模块(LCD、OLED)等。 3. **模拟实战训练**:组织团队在限定间内完成模拟综合测试任务,锻炼间管理、分工协作和临场应变能力。 4. **加强文档能力**:练习撰写清晰、规范的技术文档,包括系统框图、路原理图、程序流程图及测试数据整理。 5. **优化调试技巧**:掌握快速定位问题的方法,例如使用示波器、逻辑分析仪等工具,提高调试效率。 以下是一个简单的嵌入式系统测试示例代码,用于实现基于STM32的数据采集与串口通信: ```c #include "stm32f10x.h" void USART_Config(void); void ADC_Config(void); uint16_t Read_ADC_Channel(uint8_t channel); int main(void) { USART_Config(); ADC_Config(); while (1) { uint16_t adc_value = Read_ADC_Channel(0); printf("ADC Value: %d\r\n", adc_value); } } void USART_Config(void) { // USART configuration code } void ADC_Config(void) { // ADC configuration code } uint16_t Read_ADC_Channel(uint8_t channel) { // Read ADC value from specified channel return 0; } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值