关于十七届恩智浦杯安徽赛区基础组参赛分享

竞赛场地材料采用PVC耐磨塑胶地板材料制作(赛道宽35cm),具有黑色边界线和循迹电磁线。赛道中心铺设漆包线(电磁线),漆包线通有交变电流,车模通过电磁探测板检测实现自主循迹运动。黑色边界线由50mm宽黑色胶带粘贴而成

1.智能车从起跑线标识处出发沿着赛道运行一周,最后通过终点磁标处停车在赛道上。比赛成绩以任务完成得分排名,得分相同则以任务完成时间排名。

2.磁标和计时起跑线设置示意图如图2所示。

图2 

图2中蓝色色块为磁标标志,磁标纵向设置在赛道上(使用白色胶带粘贴在赛道上),且距离赛道中线距离相同,磁标间距自定。图2中黑色线条为距离磁标20cm的计时起跑线,可使用黑色胶带制作。如果计时起跑线按图2设置,磁标标志为磁标①(起点磁标),则表示智能车从左向右行驶。

3.障碍物和距离标识线设置示意图如图3所示。

图3 

图3中红色色块为障碍物标志,障碍物横向设置在赛道上,障碍物中线与赛道中线重合。图3中黑色线条为距离障碍物前后50cm的距离标识线,可使用黑色胶带制作,用于标识智能车完成任务的有效行驶范围。

车模套件

基础组车模套件包括主控板、转接板、配套功能模块、车模配件和连接线。其中主控板和转接板可使用基于兆易创新GD32E230主控板或基于南京沁恒CH32V103主控板。

传感器

  • 电磁循迹模块:实现电磁循迹功能
  • 双路电机驱动模块:驱动电机转动。
  • 干簧管板:实现磁标识别功能,完成智能车任务(如启动、停止和技术动作等)。
  • RGB模块:标识车辆行驶状态。
  • 超声波模块:探测障碍物。
  • 数码管模块:显示信息。

以下为本组参加比赛所用代码,欢迎提出相关意见,虚心请教。

#include "main.h"
#include "headfile.h"
#include "math.h"
#include "common.h"
#include "ZUOBIZHANG.h"
#include "YOUBIZHANG.h"
#include "renwu1.h"
#include "renwu2.h"
#include "renwu3.h"
#include  "xunji.h"
#include "motor.h"
/* 全局变量声明 */

/* 主函数 */
int main()
{
    /* 此处声明需要用到的局部变量 */
    unsigned int  distance_value;
    unsigned char distance_ascii[6];
    unsigned char i;
    int K=0,r=1;
int t;
    /* 智能车初始化 */
    car_init();

    /* 此处编写单次运行的代码(例如:初始化代码等) */


    while(1)
    {
        /* 此处编写循环运行的代码 */
        printf("LAD= %d \r\n", LAD);     //将数据通过串口发送至上位机
                 printf("MAD= %d \r\n", MAD);     //将数据通过串口发送至上位机
                      printf("RAD= %d \r\n", RAD);     //将数据通过串口发送至上位机
                       printf("diff= %d \r\n", diff);     //将数据通过串口发送至上位机
        unsigned char reed_flag = 0;

               reed_flag = reed_check();    //获取干簧管状态

               if(reed_flag == REED_SWITCH_ON)    //判断干簧管是否检测到磁铁
               {
                   chaoguan();
                   if(r==1)
                   {
                   reed1();
                   ws2812b_write(rgb_off);
                   ws2812b_write(rgb_off);
                   r++;
                   }
                   else if(r==2)
                   {
                       reed2();
                       r++;
                   }
                   else if(r==3)
                   {
                       reed3();
                       ws2812b_write(rgb_off);
                       ws2812b_write(rgb_off);
                       for (t = 0; t <8434; ++t)
                       {
                       xunji();motor();
                    }
                    ws2812b_write(rgb_red);
                    ws2812b_write(rgb_red);

                       YOUBIZHANG();
                       r++;
                       ws2812b_write(rgb_off);
                       ws2812b_write(rgb_off);

                   }
                   else if(r==4)
                                     {
                                         reed4();
                                         r++;
                                         ws2812b_write(rgb_off);
                                         ws2812b_write(rgb_off);
                                     }
                   else if(r==5)
                   {
                      reed5();
                   }
                       chaokai();
               }
               else {
                xunji();
                motor();
            }

           distance_value=ultra_get_distance();

Delay_Us(50);
printf("LAD= %d \r\n", LAD);     //将数据通过串口发送至上位机
         printf("MAD= %d \r\n", MAD);     //将数据通过串口发送至上位机
                printf("RAD= %d \r\n", RAD);     //将数据通过串口发送至上位机
                printf("diff= %d \r\n", diff);     //将数据通过串口发送至上位机

        if(distance_value<3900&&distance_value>1200)
              {
                  chaoguan();
                  car_stop();
                  Delay_Ms(300);
                   if(K<1)
                   {
                       YOUBIZHANG();
                       K++;
                       chaokai();
                   }
                   else {
                        ZUOBIZHANG();
                         }

              }
        else
        {
         xunji();
         motor();

        }
    }

}

void uart_send_distance_ascii(unsigned char *ascii_value)
{
    uart_send_char(UART_1, ascii_value[1]);
    uart_send_char(UART_1, ascii_value[2]);
    uart_send_char(UART_1, ascii_value[3]);
    uart_send_char(UART_1, '.');
    uart_send_char(UART_1, ascii_value[4]);
    uart_send_char(UART_1, 0x0D);
    uart_send_char(UART_1, 0x0A);                            //换行
}

以上为主体部分,renwu函数的内容可根据比赛要求的自行更改。

  • 1
    点赞
  • 2
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页
评论

打赏作者

Halloe

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值