• 方案介紹
    • 一、項(xiàng)目名稱(chēng):
    • 二、項(xiàng)目背景:
    • 三、功能簡(jiǎn)述:
    • 四、硬件介紹:
    • 五、方案設(shè)計(jì):
    • 六、程序部分代碼:
    • 七、成品照片:
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

汽車(chē)智能輔助數(shù)據(jù)采集探測(cè)系統(tǒng)

05/29 08:55
344
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

《2024 DigiKey 汽車(chē)應(yīng)用創(chuàng)意挑戰(zhàn)賽》汽車(chē)智能輔助數(shù)據(jù)采集探測(cè)系統(tǒng).zip.zip

共1個(gè)文件

一、項(xiàng)目名稱(chēng):

汽車(chē)智能輔助數(shù)據(jù)采集探測(cè)系統(tǒng)

二、項(xiàng)目背景:

現(xiàn)在人們對(duì)生活質(zhì)量的需求越來(lái)越高,尤其是在衣食住行方面,汽車(chē)屬于人們出行中必不可少的一種交通工具之一,隨著汽車(chē)工業(yè)的快速發(fā)展,智能化和網(wǎng)聯(lián)化成為主要趨勢(shì)。自動(dòng)駕駛、ADAS等技術(shù)的普及,使得車(chē)輛對(duì)環(huán)境和自身狀態(tài)的感知需求大幅增加。智能輔助數(shù)據(jù)采集探測(cè)系統(tǒng)通過(guò)傳感器和算法實(shí)時(shí)采集并處理數(shù)據(jù),為駕駛決策提供支持。

三、功能簡(jiǎn)述:

本次設(shè)計(jì)的基于單片機(jī)的汽車(chē)智能輔助數(shù)據(jù)采集探測(cè)系統(tǒng)采用單片機(jī)——傳感器——執(zhí)行器——通訊模組組合的硬件架構(gòu),后續(xù)單片機(jī)可以升級(jí)為單板機(jī)(如樹(shù)莓派5,或者其他高性能處理器)這樣可以支持更多的車(chē)機(jī)智能娛樂(lè)方面的需求。
在傳感器方面,采用常用且穩(wěn)定的傳感器模組,比如24G雷達(dá)模組實(shí)現(xiàn)前方障礙檢測(cè),六軸傳感器實(shí)現(xiàn)對(duì)車(chē)輛的穩(wěn)定性檢測(cè),使用環(huán)境傳感器針對(duì)車(chē)部的內(nèi)外環(huán)境進(jìn)行檢測(cè),保證用戶可以實(shí)時(shí)了解周?chē)沫h(huán)境情況。通過(guò)執(zhí)行器實(shí)現(xiàn)空氣氣囊/車(chē)內(nèi)外燈光的控制;利用cat1通訊模組實(shí)現(xiàn)對(duì)采集到的數(shù)據(jù)進(jìn)行云端通信,后續(xù)會(huì)擴(kuò)展成將車(chē)輛的狀態(tài),比如是否穩(wěn)定停車(chē),車(chē)門(mén)是否正常關(guān)閉,車(chē)輛最后停車(chē)的位置信息等進(jìn)行數(shù)據(jù)推送。

四、硬件介紹:

本次設(shè)計(jì)的主控器暫定采用為STM32F103,傳感器模組中,環(huán)境傳感器采用DS18B20溫度傳感器、MQ2煙霧傳感器、環(huán)境光傳感器;針對(duì)碰撞監(jiān)測(cè)傳感器采用24GHz毫米波雷達(dá)模塊CEM5826-M11(CEM5826-M11利用電磁波多普勒效應(yīng)對(duì)運(yùn)動(dòng)目標(biāo)進(jìn)行探測(cè)。通過(guò)發(fā)射天線發(fā)射出24GHz 電磁波信號(hào),該電磁波信號(hào)遇到運(yùn)動(dòng)物體時(shí)會(huì)反射回帶有頻偏的24GHz 電磁波信號(hào),此頻偏即為多普勒頻偏,反射回的信號(hào)被接收天線接收,通過(guò)對(duì)多普勒頻偏及中頻IQ 相位的采集計(jì)算分析可以較為靈敏地探測(cè)出附近的運(yùn)動(dòng)物體以及運(yùn)動(dòng)物體是靠近還是遠(yuǎn)離。當(dāng)探測(cè)到有運(yùn)動(dòng)物體靠近時(shí)VO 輸出高電平,無(wú)運(yùn)動(dòng)物體靠近時(shí)VO 輸出低電平。)在速度傳感器模組方面,采用BMI160六軸加速度+2合1陀螺儀功能,其陀螺儀可以支持實(shí)時(shí)監(jiān)測(cè)車(chē)輛速度與是否有側(cè)翻的危險(xiǎn)情況發(fā)生。在執(zhí)行器方面,采用繼電器來(lái)實(shí)現(xiàn)控制一些需要開(kāi)關(guān)量的設(shè)備,比如空氣氣囊,控制燈光等等。在與外界通訊方面,采用cat1方案,該方案可以很穩(wěn)定的運(yùn)行且成本可觀。并且該cat1模塊支持GNSS定位功能,保證可以獲取車(chē)輛的最后位置信息并回傳至后臺(tái)。

五、方案設(shè)計(jì):

1、硬件框圖:
2、程序框圖:

六、程序部分代碼:

1、        關(guān)于BMI160傳感器程序部分代碼:
Bsp_Spi_Init();
        Bsp_Bmi160_Init();
        App_Bmi160_Init();
int8_t fifo_gyro_header_time_data(struct bmi160_dev *dev)
{
        int8_t rslt = 0;
        //uint16_t index = 0;

        struct bmi160_sensor_data accel_data[12]; // 300 bytes / ~7bytes per frame ~ 42 data frames        
        uint8_t accel_frames_req = 12; 
        uint8_t accel_index;
        
        /* Declare instances of the sensor data structure to store the parsed FIFO data */
        struct bmi160_sensor_data gyro_data[12]; // 300 bytes / ~7bytes per frame ~ 42 data frames        
        uint8_t gyro_frames_req = 12; 
        uint8_t gyro_index;
        
        /* Read data from the sensor's FIFO and store it the FIFO buffer,"fifo_buff" */
        printf("n USER REQUESTED FIFO LENGTH : %dn",dev->fifo->length);
        rslt = bmi160_get_fifo_data(dev);

        if (rslt == BMI160_OK) {
                printf("n AVAILABLE FIFO LENGTH : %dn",dev->fifo->length);
                /* Print the raw FIFO data */
                /*for (index = 0; index < dev->fifo->length; index++) {
                        printf("n FIFO DATA INDEX[%d] = 0x%02x", index,
                                dev->fifo->data[index]);
                }
                */
                
                /* ##################################GYRO DATA######################################### */                        
                /* Parse the FIFO data to extract gyro data from the FIFO buffer */
                printf("n REQUESTED GYRO DATA FRAMES : %dn ",gyro_frames_req);
                rslt = bmi160_extract_gyro(gyro_data, &gyro_frames_req, dev);

                if (rslt == BMI160_OK) {
                        printf("n AVAILABLE GYRO DATA FRAMES : %dn ",gyro_frames_req);
                        
                        /* Print the parsed gyro data from the FIFO buffer */
                        for (gyro_index = 0; gyro_index < gyro_frames_req; gyro_index++) {
                                printf("nFIFO GYRO FRAME[%d]",gyro_index);
                                printf("nGYRO X: %.2f°/st Y: %.2f°/st Z: %.2f°/s"
                                        ,GYRO_SWITCH_UNIT(gyro_data[gyro_index].x),GYRO_SWITCH_UNIT(gyro_data[gyro_index].y)
                                        ,GYRO_SWITCH_UNIT(gyro_data[gyro_index].z));
                        }
                } else {
                        printf("n Gyro data extraction failed");
                }


                /* ##################################ACCEL DATA######################################### */                        
                printf("n REQUESTED ACCEL DATA FRAMES : %dn ",accel_frames_req);
                rslt = bmi160_extract_accel(accel_data, &accel_frames_req, dev);        
                if (rslt == BMI160_OK) {
                        printf("n AVAILABLE ACCEL DATA FRAMES : %dn ",accel_frames_req);
                        
                        /* Print the parsed accel data from the FIFO buffer */
                        for (accel_index = 0; accel_index < accel_frames_req; accel_index++) {
                                printf("nFIFO ACCEL FRAME[%d]",accel_index);
                                printf("nACCEL X: %.2fg/s t Y: %.2fg/s t Z: %.2fg/s"
                                        ,ACCEL_SWITCH_UNIT(accel_data[accel_index].x), ACCEL_SWITCH_UNIT(accel_data[accel_index].y)
                                        ,ACCEL_SWITCH_UNIT(accel_data[accel_index].z));
                        }
                } else {
                        printf("n Accel data extraction failed");
                }
        } else {
                printf("n Reading FIFO data failed");
        }

        return rslt;
}

2、雷達(dá)部分的程序代碼:
        if(Radar_Flag)
        {
            Radar_Flag = 0;
            memcpy(Radar_buf, USART2_RX_BUF, 50);
            memset(USART2_RX_BUF, 0, 50);

            for(i = 0; i < 50; i++)
            {
                if(memcmp(Radar_Distance, &Radar_buf[i], 4) == 0)
                {                
                                                                                for(j = 0; j < 5; j ++)
                                                                                {
                                                                                        if(0x0d == Radar_buf[i + 4 + j])
                                                                                        {
                                                                                                switch(j)
                                                                                                {
                                                                                                        case 1:
                                                                                                                Radar = (Radar_buf[i + 4] - 0x30);
                                                                                                                break;
                                                                                                        case 2:
                                                                                                                Radar = (Radar_buf[i + 4] - 0x30) * 10 + (Radar_buf[i + 5] - 0x30);
                                                                                                                break;                                                                                                        
                                                                                                        case 3:
                                                                                                                Radar = (Radar_buf[i + 4] - 0x30) * 100 + (Radar_buf[i + 5] - 0x30) * 10 + (Radar_buf[i + 6] - 0x30);
                                                                                                                break;
                                                                                                        case 4:
                                                                                                                Radar = (Radar_buf[i + 4] - 0x30) * 1000 + (Radar_buf[i + 5] - 0x30) * 100 + (Radar_buf[i + 6] - 0x30) * 10 + (Radar_buf[i + 7] - 0x30);
                                                                                                                break;
                                                                                                        case 5:
                                                                                                                Radar = (Radar_buf[i + 4] - 0x30) * 10000 + (Radar_buf[i + 5] - 0x30) * 1000 + (Radar_buf[i + 6] - 0x30) * 100 + (Radar_buf[i + 8] - 0x30) * 10 + (Radar_buf[i + 9] - 0x30);
                                                                                                                break;                                                                                                        
                                                                                                }                                                                                        
                                                                                        }
                                                                                }
                    

                    if (Radar > 1000)                //有人
                    {
                    }
                    else        
                    {
                    }
                }
            }
        }

七、成品照片:

分別為整體運(yùn)行狀態(tài),上位機(jī)接收數(shù)據(jù)效果與手動(dòng)控制模式(手動(dòng)控制繼電器的功能)
系統(tǒng)整體結(jié)構(gòu)
傳給上位機(jī)的數(shù)據(jù)
手動(dòng)控制模式(按鍵控制繼電器)
手動(dòng)模式下關(guān)閉繼電器
參考附件
  • 《2024 DigiKey 汽車(chē)應(yīng)用創(chuàng)意挑戰(zhàn)賽》汽車(chē)智能輔助數(shù)據(jù)采集探測(cè)系統(tǒng).zip.zip
    下載
DigiKey得捷

DigiKey得捷

DigiKey 總部位于美國(guó)明尼蘇達(dá)州錫夫里弗福爾斯市,是一家獲得原廠授權(quán)的全球性、全類(lèi)目電子元器件和自動(dòng)化產(chǎn)品分銷(xiāo)商。我們通過(guò)分銷(xiāo)來(lái)自 2,300 多家優(yōu)質(zhì)品牌制造商的 1,020 多萬(wàn)種元器件獲得了強(qiáng)大的技術(shù)優(yōu)勢(shì)。DigiKey 還為工程師、設(shè)計(jì)師、開(kāi)發(fā)者和采購(gòu)專(zhuān)業(yè)人員提供豐富的數(shù)字解決方案、無(wú)障礙互動(dòng)和工具支持,以幫助他們提升工作效率。在中國(guó),客戶可以通過(guò)電子郵件、電話和客服獲得全方位技術(shù)支持。如需了解更多信息和獲取 DigiKey 廣泛的產(chǎn)品,請(qǐng)?jiān)L問(wèn) www.digikey.cn 并關(guān)注我們的微信、微博、騰訊視頻和 BiliBili 賬號(hào)。

DigiKey 總部位于美國(guó)明尼蘇達(dá)州錫夫里弗福爾斯市,是一家獲得原廠授權(quán)的全球性、全類(lèi)目電子元器件和自動(dòng)化產(chǎn)品分銷(xiāo)商。我們通過(guò)分銷(xiāo)來(lái)自 2,300 多家優(yōu)質(zhì)品牌制造商的 1,020 多萬(wàn)種元器件獲得了強(qiáng)大的技術(shù)優(yōu)勢(shì)。DigiKey 還為工程師、設(shè)計(jì)師、開(kāi)發(fā)者和采購(gòu)專(zhuān)業(yè)人員提供豐富的數(shù)字解決方案、無(wú)障礙互動(dòng)和工具支持,以幫助他們提升工作效率。在中國(guó),客戶可以通過(guò)電子郵件、電話和客服獲得全方位技術(shù)支持。如需了解更多信息和獲取 DigiKey 廣泛的產(chǎn)品,請(qǐng)?jiān)L問(wèn) www.digikey.cn 并關(guān)注我們的微信、微博、騰訊視頻和 BiliBili 賬號(hào)。收起

查看更多

相關(guān)推薦