赞
踩
随着2024年全国大学生电子设计大赛落下帷幕,博主也是和队友仪器取得了省二的成绩,在第三天下午m0板子烧了,不然的话其实省一是稳的hhh,不过问题不大,也算是没有辜负博主和队友一年以来的努力。
一句话,这篇文章再加上博主的1对1辅导教不会,你直接喷我
一、思路确定
言归正传,我们首先来分析一下题目:
可以看出,此次考察的是m0循迹小车,并且小车需要能够在空白区域,按照固定角度巡线 ,这就需要角度传感器返回 航向角。下面有几种合适的模块,相关的代码博主也会进行开源:①jy61p,也就是博主最后使用的,但是有风险,因为jy61p其实是带mcu的,他自己进行了滤波,本质就是mpu6050
②mpu6050,最经典的角度传感器,但是有可能会出现零点漂移,尤其是当你的小车没做pid的情况下,他巡线的时候是“一冲一冲,一抽一抽”的情况,瞬时加速度大,会严重影响他的零点漂移,如果用mpu6050,一定要做pid,其实是因为mpu6050的角度是通过加速度,自己换算出来的,你加速度短时间内变化太大,他的误差肯定就会很大,而且很随机
③磁力计,也是博主最先使用的硬件,很稳定,检测地磁,但是害怕有人带含有磁性的东西进去,会严重影响偏航角,所以被舍弃了,但是磁力计的.c .h 博主也是会放出来的,希望对大家有用
二、硬件搭建
1.选用电机
选用MG513X的大扭矩电机,这样可以确保无论在什么赛道都可以正常巡线,还能保证爬坡能力
2.板子推荐
有的板子使用keil5环境,一次烧录需要五分钟,不好评价;官方板最好提前买,很好用,也不容易烧;国内很多自己研发的板子真的很容易烧,3.3v供电都能跑着跑着烧了的那种,我记得甚至有一款黑色的板子,最大电压不能超过3.3v,很离谱
3.灰度传感器推荐
很遗憾,感为的八路灰度被ban了,但是他真的很好用,灰度每个传感器之间的间距尽量小一点
3.一个小窍门
大家可以在后面看到,我的代码里只有两个pwm,可是我用的是四驱小车,其实这是因为我把pwm信号线,AIN1.........DIN2使能端都先接到面包板上,然后再在联通的那一路引两根线出来,毕竟左边两个电机的信号都是一样的,右边两个也是一样的,这样可以极大程度上简化gpio口的配置
三、相关代码分析
在本篇文章中,博主只进行代码中所有疑难问题的讲解,后续应该还会出视频讲解,需要各位加博主的微信,微信我会留在文章末端,博主是个高频率网上冲浪的人,半天之内我肯定能回你信息,不必担心博主人间蒸发
1.main.c代码
followline_normal是正常的小车巡线代码,可以在此基础上调换if和else if各个语句的顺序,对左右半圈不同的巡线会有不小的区别
题目中,每次黑白交界处就是一个需要识别的特征点,通过last_flag检测flag变化,可以实现计数
这是对于车子当前究竟是处于黑线,还是白线上的实时检测代码,需要注意,博主采用了八路灰度,为的就是减小灰度传感器之间的距离,防止比如你在寻黑线的时候,突然间,黑线跑到了两个灰度的缝隙之间,正好识别不到,哇,识别到了全白,那就全都乱套了,还是那句话,软件问题硬件解决最方便,换更好的硬件能解决很多问题
这是模式三代码,一和二比较简单,就不做讲解了,四就是三的升级版,只需要在num==16的时候停下来就好了
小车在全白区域的时候,big_turncomplete标志位就会置0,代表下一次识别到黑线了,就不能用普通巡线了,第一次需要是大转弯,如果是进右边的圈,第一次大转弯是左转,如果是进左边的圈,第一次大转弯是右转,这个大家把小车摆一下就能看出来是这样啦
对了,还有一个很重要的小技巧,在绕八字,在白色区域调整角度的时候,最好设置一个轮子反转一个正转,因为这样子车就不会往前跑产生误差,不会走曲线过去,你要是设置了一个反转,他就是在原地调整完角度然后走直线,对应的也就是我的mode3中写的Set_speed(-10,10)
主函数里面,可以自己添加按键,反正每个模式都是一个自己的函数,分别跑都能跑,先用一个while循环不断检测按键,检测到了再跑就行了。 然后if判断是哪个按键,然后跑哪个模式
下面的oled显示是为了实时监测偏航角,记录的特征点有无问题
JY61P在博主的车子上接的是串口,刚刚也说了,他有mcu,可以通过串口发信息,具体的对JY61P初始化的软件,可以去问维特的客服要,江苏省今年看的比较松,所以这个能让用了,但是有的部分省份是不给用的,但是对于各位来讲,这个也是一次宝贵的训练题,也不必太苛刻啦
2.motor.c代码
为了方便控制小车的启动和停止,最好要给小车的使能端连gpio口控制,最好不要直接连3.3v,当然了,连3.3不会有什么大问题
通过这样的函数,就可以实时调整电机的占空比,很方便,AIN1,AIN2..........DIN1,DIN2都是连的gpio口
3.JY61P.c代码
主函数中,只需要调用Serial_JY61P_Zero_Yaw函数就好了,Pitch,Roll,Yaw都是全局变量,直接就可以用了
四、一些杂谈
1.大家最关心的开源
博主的qq 1062325236@qq.com,博主的微信号Vencnt_fangao,高频率冲浪,经常在线,一看到就回,最好在好友申请加上“csdn”
博主的qq 1062325236@qq.com,博主的微信号Vencnt_fangao,高频率冲浪,经常在线,一看到就回,最好在好友申请加上“csdn”
博主的qq 1062325236@qq.com,博主的微信号Vencnt_fangao,高频率冲浪,经常在线,一看到就回,最好在好友申请加上“csdn”
重要的事情说三遍
这些代码当中,有msp430,msp432,m0g3507的很多基础性文件,大家都可以基于这个做二次开发,msp430,432的代码是双车跟随那年的,100%能用,并且博主和队友们对这些代码进行了优化升级,所有初始化全都打通了,m0g3507是今年刚用的,比赛代码没改,肯定能跑,这些文件夹都是我们整个实验室一整个暑假的结晶,找起来真的很不容易,也希望大家理解
同时,很多openmv可以使用的代码,也会一同以.txt文件的形式送给大家
上述所说的所有的开源加在一起,20RMB,实在是有点不好意思,但是毕竟都是大学生,项目组里经费也经常需要我垫着然后等报销,但是20RMB可以买到我们两支省赛年省一队伍的实时答疑解惑,其中有一支队伍也是被保送进邀请赛了,后续可能做成教程,得看这次的反响,也许会在b站开设教程,做成长期
2.对于大家的一些寄语
全国大学生电子设计大赛确实是在自动化领域内认可度较高的比赛,但是这也从侧面说明了它的难度,他对参赛选手对于控制类项目的熟练度,以及处理应急故障事件的能力,有着极高,可以说是非常高的要求(除非你运气好,哈哈哈哈哈),但是打电赛的四天三夜,绝对是一次终身难忘的回忆,如果你真的热爱控制类,并且想要证明自己,把自己放在全国的领域和其他学校的学生比拼,电赛就是你最好的选择,加油!
五、一些CCS最新版和老版移植工程的介绍
1.红色CCS的使用教程
直接把GO.zip解压之后拖到ccs工作空间也就是worspace当中,就可以直接在软件中打开并且使用
2.蓝色ccs的使用
蓝色ccs的路径配置较为繁琐,有可能会因为.launch文件的不同,会报无法编译的错误,解决方法就是,你把我的工程里所有要用的.c .h文件复制粘贴到你的工程里,就可以正常使用了
蓝色CCS的工作空间在C盘,和红色CCS不一样,大家需要注意哦
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。