2021年电赛结束了,这里分享一下F小车题代码和方案。
多少个通宵不眠夜,只能说已经全力以赴,结束了现在已经问心无愧了。
@山东赛区 组内成员:大三*3
目录
*
– 部分
– 开始前的碎碎念
– 方案设计
–
+ 硬件连线表:(没更新,可能啊可能有点点问题)
+
* 蓝牙:
* openMV:
* 灰度 循迹:
* OLED : 3.3or5V
* L298N-stm32(motor.h)
* L298N-电机
* 电机编码器-stm32
* 红外(药品放置、到达检测)-stm32
– stm32 代码,逻辑
–
+ 1车
+ 2车
+ openMV识别
+ 总结
部分
- 方案设计
- 硬件连接
- stm32巡线、控制(我实现部分 有源代码、工程文件)
- openMV识别数字、识别终点停止
- 总结反思
开始前的碎碎念
出来题目的时候觉得还行,没什么特别奇怪不会的部分。之前因为赛题准备器材里面有很奇怪的角度测量、透明空心球,一直以为会是控制器用,搞得我们准备控制题的很紧张……当时各种预测都有,结果今年出了小车题
在暑假准备的时候准备了stm32和430控制的小车(需要代码可以留言,有几次还是跑的很稳的。当然当时学430上手的时候还是挺难搞的,以后有空再写一个文档。)
暑假准备的……只准备了相关模块,但是小车供电啊之类的 硬件连接设计没有自己想好(12V转5V等,我们天真的以为随便用一个12-5的模块就行,结果没有稳压没有保护,模块电流限制等等问题都没有考虑……竞赛的时候用了坏的再换就很痛苦……)
暑假准备的时候问了一个已经毕业的大佬学长,大佬:学会Verilog、FPGA……我:??? 数电模电可再见吧,我不行。
我:啊这,然后我们准备的时候就定了选控制题……(忘了这个大佬打的是什么题了,应该可能不是控制题)
; 方案设计
emm发题前我们还在忙一些课业之类的事情,属实是忙的没空在11月怎么准备。11.3我们还在期待明天延期吧……😂
11.4早上有点睡过了,发题了我还在睡觉😂
来了实验室就开始讨论方案: 主要实现以下方面:
- 循迹 (红外不行👉灰度传感器)
- 识别数字(openMV) 我们有一块3 一块4 4的处理速度更快
stm32部分是我实现
openMV部分我一点不会(暑假懒了),由队友实现
硬件弄车另一个队友 (暑假弄了个半成品车模,不太行 准备的还是不太够)
当时想着之前轮速有问题显示以下用PID控制,但是嘛,时间不太够,最后没用PID…… PWM单控制速度慢点也非常稳
晚上九点多老师回去了我们还在吵是3个红外还是2个红外
然后给老师发消息问,然后开了个腾讯会议问(为什么当时不直接通话……)
硬件连线表:(没更新,可能啊可能有点点问题)
3个灰度(老师建议保证抓住线,我们临时就买了6个)
2个附加的红外 防止撞到墙
1个红外识别药品
蓝牙:
(PA2 3)
PB10 TX
PB11 RX
openMV:
PA9 RXD
PA10 TXD
灰度 循迹:
灰度(PA3) 左PA4 中PA5 右stm32PA5PA6PA7
白色)的时候输出低电平
OLED : 3.3or5V
OLEDSCLSDAstm32PB0PB1
RES 接 PB11 如果是用4针iic接口这个脚可以不接
L298N-stm32(motor.h)
L298NPWA(左)IN1IN2PWMB(右)IN3IN4stm32PA8PB14PB15PA11PB13PB12
PA8驱动力弱?
L298N-电机
L298NM1(左)M2M1(右)M2电机OUT1OUT2OUT1OUT2
电机编码器-stm32
电机编码器C1(左)C2C1(右)C2stm32PB7PB6PA0PA1
电机 :【 M1 GND C1 C2 3.3V M2 】
红外(药品放置、到达检测)-stm32
printf("%d,%d,drug%d\r\n",xunji_1,xunji_2,drug);
白色是0 (接受0)
黑色(未接收1)
红外传感器药品检测是否到达检测1是否到达检测2stm32PC8PC6PC7
LED (调试方便、显示)
LEDLED_leftLED_straightLED_rightstm32PA0PA1PA2
stm32 代码,逻辑
1车
-
读openMV数据:
-
0:直走
- 1:左转
- 2:右转
-
3:停止
-
循迹 (一定要走的稳不然晃动太大会对openMV读数造成很大影响)
- 控制电机(跑、掉头、转弯)
- 放药去,取药返回
main里面代码不多,都在引用
int main(void)
{
u8 i;
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
TIM5_PWM_Init(1000,9);
MY_NVIC_PriorityGroupConfig(2);
delay_init();
LED_Init();
usart3_init(9600);
uart_init(115200);
Motor_Init();
Xj_Init();
infrared_INIT();
LED_straight = 0;
LED_right = 0;
LED_left = 0;
while(1)
{
read_openMV();
if(start_flag==1)
{
if(!drug&&(go_des==0)) {go_des=1;delay_ms(5);}
if(go_des ==1)
{
if(!i) {i=1;CarForward();delay_ms(100);}
Xj_read();
hongwai_avoid();
if(state_arrive==1){hongwai_avoid();}
}
while(state_arrive==2){LED_left=1;
delay_ms(400);CarStop();}
}
}
}
openMV控制部分和下面的循迹是我写的自己满意的地方
void read_openMV()
{
u8 back;
if(USART_RX_STA&0x8000)
{
recived =1;
LED_g=0;
if(!start_flag)
{
start_flag=1;
}
len=USART_RX_STA&0x3fff;
for(t=0;t<len;t++)
{
if(USART_RX_BUF[t]==0xb3)
if(USART_RX_BUF[t+1]==0xb3)
n=t+2;
}
for(t=0;n<len;t++,n++)
UsartDisPlay[t] = USART_RX_BUF[n];
USART_RX_STA=0;
if(go_des)
{
if(UsartDisPlay[0]=='0')
{
CarForward();
switch(turn_car2)
{
case(1):printf("1/r/n");break;
case(2):printf("2/r/n");break;
default:break;
}
}
else if(UsartDisPlay[0]=='1')
{
turn_car2=2;
if(!state_arrive){delay_ms(300+100+100+200);}
if(state_arrive){delay_ms(50);}
CarBigLeft();
}
else if(UsartDisPlay[0]=='2')
{
turn_car2=1;
if(!state_arrive){delay_ms(300+100+100+200);}
if(state_arrive){delay_ms(50);}
CarBigRight();
}
else if(UsartDisPlay[0]=='3')
{
state_arrive+=1;
if(drug==0)
{
CarForward();
delay_ms(400+200+200);
LED_right = 1;
while(!drug){
switch(turn_car2)
{
case(1):printf("1/r/n");break;
case(2):printf("2/r/n");break;
default:break;
}
CarStop();
}
LED_right = 0;
CarFaceBack();
delay_ms(50);
}
}
}
}
}
循迹,速度慢的时候很稳~
void Xj_read()
{
u16 i;
if(XJ_MEDIUM)
{
CarForward();
}
if(XJ_LEFT==1)
{
if(!XJ_MEDIUM)
{
LED_left=1;
LED_right = 0;
LED_straight = 0;
Set_Pwm(0,leftspeedinit+100);i = 1;}
if(XJ_MEDIUM)
{i = 0;Set_Pwm(leftspeedinit-50+30,rightspeedinit-50-50); }
}
else if(XJ_RIGHT==1)
{
if(!XJ_MEDIUM)
{
LED_left=0;
LED_right = 1;
LED_straight = 0;
Set_Pwm(leftspeedinit+100,0);
i = 1;
}
if(XJ_MEDIUM)
{
i=0;Set_Pwm(leftspeedinit-50-50,rightspeedinit-50+30); }
}
}
只放关键代码,工程文件晚点再发吧……
2车
2车实际没太多时间测 可能代码不好
int main(void)
{
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
TIM5_PWM_Init(1000,9);
MY_NVIC_PriorityGroupConfig(2);
delay_init();
LED_Init();
usart3_init(9600);
uart_init(115200);
Motor_Init();
Xj_Init();
infrared_INIT();
while(1)
{
u16 i,t;
u8 flag;
if(USART3_RX_STA&0X8000)
{
flag =1;
LED_g=0;
if(USART3_RX_BUF[0]=='1'){turn_car2 = 1;}
if(USART3_RX_BUF[0]=='2'){turn_car2 = 2;}
USART3_RX_STA=0;
}
while(flag)
{
read_openMV();
if(start_flag==1)
{
if(!drug) {go_des=1;delay_ms(5);}
if(go_des ==1)
{
if(!i) {i=1;CarForward();delay_ms(100);}
Xj_read();
hongwai_avoid();
}
}
}
}
}
openMV
void read_openMV()
{
u8 back;
if(USART_RX_STA&0x8000)
{
recived =1;
LED_g=0;
if(!start_flag)
{
start_flag=1;
}
len=USART_RX_STA&0x3fff;
for(t=0;t<len;t++)
{
if(USART_RX_BUF[t]==0xb3)
if(USART_RX_BUF[t+1]==0xb3)
n=t+2;
}
for(t=0;n<len;t++,n++)
UsartDisPlay[t] = USART_RX_BUF[n];
USART_RX_STA=0;
if(go_des)
{
if(UsartDisPlay[0]=='0')
{
LED_left=0;
LED_right = 0;
LED_straight = 1;
CarForward();
}
else if(UsartDisPlay[0]=='1')
{
switch(turn_car2)
{
case(1):{
LED_right = 0;
LED_straight = 0;
LED_left = 1;CarBigLeft();}break;
case(2):{
LED_straight = 0;
LED_left = 0;
LED_right = 1;
CarBigRight();
}break;
default:break;
}
CarBigLeft();
}
else if(UsartDisPlay[0]=='3')
{
while(1)
{
CarStop();
LED_right = 1;
LED_straight = 1;
LED_left = 1;
}
}
}
}
}
openMV识别
这部分不是我做的hhh,一直在看队友录模板、调整精度
总结
- 和老师交流不够(比完赛微信和老师总结了下,比赛前都不太认识这个老师,😂 )
- 进度太慢,开始我折腾什么oled显示,简单点不好吗
- 方案讨论的不充分,讨论的自以为差不多就开始莽( 经验积累不够,过程把握不充分)
- 什么都想要最后就会什么都得不到( 过于理想化)
-
调试花了挺多时间的,控制嘛……
-
硬件太不稳了,花了我们很多时间( 前期准备不足)
- 杜邦线、端子连接、和电池连接
- 电池,我买的航模电池80多一个,后来我们整了5大块航模电池。电池电压一遍,之前测的参数就gg
- ……很多很多问题
- 持续更新
老师:很多经验教训需要总结,先休息好,进入学习状态,以后机会很多。
代码:
蓝牙1车:链接:https://pan.baidu.com/s/1gIsHPX7HccK6Uns2c_B_qg
提取码:ji9d
蓝牙2车:链接:https://pan.baidu.com/s/18MaYlvZyOE6h7lEjkp6DNQ
提取码:fzwf
吃饭的时候在操场摸到了学校的猫猫(好像他叫桶桶来着)
Original: https://blog.csdn.net/sherryaxx/article/details/121322605
Author: sherryaxx
Title: 2021电赛国赛F小车题总结——附源码,源工程文件
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/701921/
转载文章受原作者版权保护。转载请注明原作者出处!