• 方案介绍
    • 一、项目名称:
    • 二、项目概述:
    • 三、作品实物图
    • 四、作品视频介绍
  • 推荐器件
  • 相关推荐
申请入驻 产业图谱

基于STM32U585-IOT的智能车汽车尾门控制系统

2024/05/22
2689
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

一、项目名称:

智能车汽车尾门控制系统

二、项目概述:

我们在开启汽车尾门时,有时经常因为双手手抱物品而不方便开启后门,那用脚扫一扫能开启车门,就给车主提供了极大的方便。

本系统采用STM32U585-IOT为主控芯片,其板载vl53l5cx时间飞行传感,实时的对运动物体的扫描,生成数据后,通过智能算法,实现对脚的动作进行识别,从而实现非接触方式来开启车门的综合控制系统。

本系统只能脚的运动进行识别,对较小的物体或者非指定动手不予响应,实现精准识别。

2.1系统框图

2.2 测试初始化部分代码

uint32_t R_total;  //用于合计右边的总运动强度
        uint32_t L_total;  //用于合计左边的总运动强度
        uint8_t check_sta;  //用于统计发生可以检测运动强度
        
        uint8_t dir_move_sta; //用于判断运动驱势
        uint8_t FWD;
        uint8_t                                 status, isReady, i;
        VL53L5CX_Motion_Configuration         motion_config;        /* 运动配置 */
        VL53L5CX_Object_t *pL5obj = CUSTOM_RANGING_CompObj[CUSTOM_VL53L5CX];
        VL53L5CX_ResultsData         Results;                /* 来自VL53L5CX的结果数据 */

        /*     编程运动指示器             */

        status = vl53l5cx_motion_indicator_init(&pL5obj->Dev, &motion_config, VL53L5CX_RESOLUTION_8X8);
        if(status)
        {

                return status;
        }
        status = vl53l5cx_motion_indicator_set_distance_motion(&pL5obj->Dev, &motion_config, 1000, 2000);
        if(status)
        {

                return status;
        }
        /* 测距频率 */
        status = vl53l5cx_set_ranging_frequency_hz(&pL5obj->Dev, 16);
        if(status)
        {
                return status;
        }

        /*          测距循环              */

        status = vl53l5cx_start_ranging(&pL5obj->Dev);

2.3 识别及控制部分代码:

  status = vl53l5cx_check_data_ready(&pL5obj->Dev, &isReady);                        
                //如果前面
                if(isReady)
                {
                        R_total =0;
                        L_total = 0;
                        /* 获取测距数据 */
                        vl53l5cx_get_ranging_data(&pL5obj->Dev, &Results);
                        for(i = 0; i < 16; i++)
                        {
                                if(Results.motion_indicator.motion[motion_config.map_id[i]] >= 110)
                                {
                                        check_sta ++;
                                        break;//测试超过强度就跳出来
                                }
                                
                        }
                        if(check_sta > 0)  //做累积
                        {
                                R_total = Results.motion_indicator.motion[motion_config.map_id[2]] +Results.motion_indicator.motion[motion_config.map_id[3]] + 
                                                                        Results.motion_indicator.motion[motion_config.map_id[6]] + Results.motion_indicator.motion[motion_config.map_id[7]] + 
                                                                        Results.motion_indicator.motion[motion_config.map_id[10]] + Results.motion_indicator.motion[motion_config.map_id[11]] +
                                                                        Results.motion_indicator.motion[motion_config.map_id[14]]  + Results.motion_indicator.motion[motion_config.map_id[15]];
                                L_total = Results.motion_indicator.motion[motion_config.map_id[0]] +Results.motion_indicator.motion[motion_config.map_id[1]] + 
                                                                        Results.motion_indicator.motion[motion_config.map_id[4]] + Results.motion_indicator.motion[motion_config.map_id[5]] + 
                                                                        Results.motion_indicator.motion[motion_config.map_id[11]] + Results.motion_indicator.motion[motion_config.map_id[12]] +
                                                                        Results.motion_indicator.motion[motion_config.map_id[12]]  + Results.motion_indicator.motion[motion_config.map_id[13]];
                                                //开始预测运动方向。
                                if(R_total>L_total && dir_move_sta == 0)
                                {
                                        dir_move_sta = 1;
                                }
                                else if (R_total>L_total && dir_move_sta > 0)
                                {
                                        dir_move_sta = 1;
                                }
                                else if(R_total < L_total && dir_move_sta > 0) 
                                {
                                        dir_move_sta = 2;
                                }
                                else
                                {
                                        dir_move_sta = 0;
                                }
                                check_sta = 0;
                        }        
                        else
                        {
                                //如果计算出符合预期,测做出运作
                                if(dir_move_sta == 2)
                                {
                                        EN_high;
                                        if(FWD == 0)
                                        {
                                                DIR_high;
                                                FWD = 1;
                                        }
                                        else
                                        {
                                                DIR_low;
                                                FWD = 0;
                                        }
                                        PwmNum = 500; //设定开门限度
                                        HAL_TIM_PWM_Start_IT(&htim4,TIM_CHANNEL_1); //开启尾门
                                        check_sta = 0;
                                        dir_move_sta = 0;
                                }
                                else
                                {
                                        dir_move_sta = 0;
                                }
                                
                        }
                }                
                check_sta = 0;
  }

三、作品实物图

全部的器件为:

3.1 主控制为得捷采购的B-U585I-IOT02A 探索套件,其STM32U585AI 微控制器提供了一个完整的演示和开发平台,其特点是 Arm Cortex‑M33 内核,带 Arm 信任区和 Armv8-M 主线安全扩展、2 MB 闪存和 786 KB SRAM 以及智能外围资源。

B-U585I-IOT02A 探索套件通过利用低功率通信、多路传感和与云服务器的直接连接,实现了广泛的应用多样性。它包括 Wi-Fi 和蓝牙模块,以及麦克风、温度和湿度、磁力计、加速度计陀螺仪、压力、飞行时间和手势检测传感器

此次采用vl53l5cx飞行时间和手势检测传感器作为数据采集

3.2 步时电机驱动器

3.3 步进电机及模拟汽车尾门,步进电机通过精准运动来实现尾门的开启与关闭。

四、作品视频介绍

B站链接:https://www.bilibili.com/video/BV11c411s7rR/?pop_share=1&vd_source=e1bd226340c8b87027d5dcfc6b0c3344

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
MAX31865AAP+T 1 Maxim Integrated Products Analog Circuit, 1 Func, PDSO20, ROHS COMPLIANT, SSOP-20
$26.83 查看
ADUM1201ARZ 1 Rochester Electronics LLC SPECIALTY ANALOG CIRCUIT, PDSO8, ROHS COMPLIANT, MS-012AA, SOIC-8
$4.63 查看
LSM6DS3TR 1 STMicroelectronics iNEMO 6DoF inertial measurement unit (IMU), for consumer electronics

ECAD模型

下载ECAD模型
$2.83 查看
意法半导体

意法半导体

意法半导体(ST)集团于1987年6月成立,是由意大利的SGS微电子公司和法国Thomson半导体公司合并而成。1998年5月,SGS-THOMSON Microelectronics将公司名称改为意法半导体有限公司。意法半导体是世界最大的半导体公司之一,公司销售收入在半导体工业五大高速增长市场之间分布均衡(五大市场占2007年销售收入的百分比):通信(35%),消费(17%),计算机(16%),汽车(16%),工业(16%)。 据最新的工业统计数据,意法半导体是全球第五大半导体厂商,在很多市场居世界领先水平。例如,意法半导体是世界第一大专用模拟芯片和电源转换芯片制造商,世界第一大工业半导体和机顶盒芯片供应商,而且在分立器件、手机相机模块和车用集成电路领域居世界前列.

意法半导体(ST)集团于1987年6月成立,是由意大利的SGS微电子公司和法国Thomson半导体公司合并而成。1998年5月,SGS-THOMSON Microelectronics将公司名称改为意法半导体有限公司。意法半导体是世界最大的半导体公司之一,公司销售收入在半导体工业五大高速增长市场之间分布均衡(五大市场占2007年销售收入的百分比):通信(35%),消费(17%),计算机(16%),汽车(16%),工业(16%)。 据最新的工业统计数据,意法半导体是全球第五大半导体厂商,在很多市场居世界领先水平。例如,意法半导体是世界第一大专用模拟芯片和电源转换芯片制造商,世界第一大工业半导体和机顶盒芯片供应商,而且在分立器件、手机相机模块和车用集成电路领域居世界前列.收起

查看更多

相关推荐