一、項目背景介紹
隨著社會的不斷發(fā)展,人們對于汽車的安全性要求越來越高,而倒車雷達系統(tǒng)就是為了增強汽車駕駛者的安全性而被廣泛使用。在這種情況下,我們開發(fā)了一個基于Linux設計的倒車雷達系統(tǒng),該系統(tǒng)可以采用迅為4412主控板,運行Linux3.5內核,使用USB攝像頭、TFT真彩顯示屏、超聲波測距模塊和蜂鳴器等硬件。

二、創(chuàng)新點
本項目的創(chuàng)新點包括:
- 采用開源Linux系統(tǒng):采用Linux系統(tǒng),具有很好的可擴展性和靈活性,可以實現更為豐富和復雜的功能。
 - 多個模塊的協(xié)同工作:本項目涉及到了攝像頭模塊、超聲波測距模塊、處理模塊、告警模塊和顯示模塊等多個模塊,這些模塊需要協(xié)同工作才能實現完整的功能。
 - 實現了告警功能:本項目采用了蜂鳴器來實現告警功能,根據距離調整PWM輸出給出不同級別的告警聲音,能夠提醒駕駛者注意障礙物。
 
三、使用技術介紹
- 迅為4412主控板:本項目采用了迅為4412主控板,該主控板具有較高的性能和穩(wěn)定性,能夠滿足系統(tǒng)的運行要求。
 - Linux操作系統(tǒng):本項目采用了開源的Linux操作系統(tǒng),具有很好的可擴展性和靈活性,適合進行自定義開發(fā)。
 - V4L2協(xié)議:V4L2協(xié)議是Linux下的一個視頻設備驅動程序接口,可以方便地實現USB攝像頭的圖像采集。
 - 超聲波測距模塊:通過GPIO口與主控板相連,使用定時器產生超聲波并計算與接收到回波之間的時間差,從而計算出與障礙物之間的距離。
 - PWM輸出控制:根據距離調整PWM輸出給出不同級別的告警聲音。
 - TFT真彩顯示屏:本項目采用了TFT真彩顯示屏,能夠實現高清晰度的圖像顯示。
 - 系統(tǒng)管理模塊:負責管理整個系統(tǒng)的啟動、配置和錯誤處理等操作。例如,可以將系統(tǒng)的啟動腳本寫在/etc/rc.local中,通過調用shell腳本來實現系統(tǒng)的初始化和啟動。
 
四、系統(tǒng)架構
整個系統(tǒng)由以下幾個模塊組成:
- 攝像頭模塊:負責采集車尾環(huán)境圖像,并傳輸給處理模塊。
 - 超聲波測距模塊:負責與障礙物之間的距離測量,并將結果傳輸給處理模塊。
 - 處理模塊:負責視頻顯示、距離信息的處理、告警功能的實現。
 - 告警模塊:負責根據距離調整PWM輸出給出不同級別的告警聲音,并使用蜂鳴器輸出告警信息。
 - 顯示模塊:負責將處理模塊生成的圖像顯示在TFT真彩顯示屏上。
 - 系統(tǒng)管理模塊:負責管理整個系統(tǒng)的啟動、配置和錯誤處理等操作。
 
五、功能設計
- 攝像頭模塊 由于Linux系統(tǒng)具有很好的驅動支持,因此可以直接使用V4L2協(xié)議來獲取USB攝像頭的圖像。獲取圖像后,需要通過DMA方式將數據傳輸給處理模塊進行處理。
 - 超聲波測距模塊 超聲波測距模塊可以通過GPIO口與主控板相連,使用定時器產生超聲波并計算與接收到回波之間的時間差,從而計算出與障礙物之間的距離。
 - 處理模塊 處理模塊負責將攝像頭采集到的圖像和超聲波測距模塊測得的距離信息整合處理,并根據距離信息來控制告警模塊。
 - 告警模塊 告警模塊根據處理模塊傳遞過來的距離信息來控制PWM輸出,并使用蜂鳴器輸出告警信息。
 - 顯示模塊 顯示模塊負責將處理模塊生成的圖像顯示在TFT真彩顯示屏上,并實現顯示屏的刷新和管理操作。
 - 系統(tǒng)管理模塊 系統(tǒng)管理模塊負責管理整個系統(tǒng)的啟動、配置和錯誤處理等操作。例如,可以將系統(tǒng)的啟動腳本寫在/etc/rc.local中,通過調用shell腳本來實現系統(tǒng)的初始化和啟動。
 
六、攝像頭圖像顯示應用代碼
#include 
 #include           /* See NOTES */
 #include 
 #include 
 #include 
 #include 
 #include 
 #include 
 #include 
 #include 
 #include 
 #include 
 #include 
 #include 
 #include 
 #include 
 #include 
 #include 
 #include 
 #include 
 #include 
 #include 
 #include 
 #include 
 #include 
 #include  
 #include 
 ?
 /* 圖片的象素數據 */
 typedef struct PixelDatas {
     int iWidth;      /* 寬度: 一行有多少個象素 */
     int iHeight;     /* 高度: 一列有多少個象素 */
     int iBpp;        /* 一個象素用多少位來表示 */
     int iLineBytes;  /* 一行數據有多少字節(jié) */
     int iTotalBytes; /* 所有字節(jié)數 */ 
     unsigned char *VideoBuf; //存放一幀攝像頭的數據
     //指向了存放攝像頭數據的空間地址
 }T_PixelDatas;
 ?
 T_PixelDatas Pixedata; //存放實際的圖像數據
 ?
 /*
         USB攝像頭相關參數定義
 */
 struct v4l2_buffer tV4l2Buf;
 int iFd;
 int ListNum;
 unsigned char* pucVideBuf[4];  // 視頻BUFF空間地址
 void camera_pthread(void);
 ?
 //LCD屏相關的參數
 unsigned char *lcd_mem=NULL; /*LCD的內存地址*/
 struct fb_fix_screeninfo finfo; /*固定形參*/
 struct fb_var_screeninfo vinfo; /*可變形參*/
 void LCD_Init(void);
 void show_pixel(int x,int y,int color);
 ?
 ?
 int main(int argc ,char *argv[])
 {
     if(argc!=2)
     {
         printf("./app /dev/videoX
");
         return -1;
     }
     
     LCD_Init(); //LCD屏初始化
     
     camera_init(argv[1]);  //攝像頭設備初始化
     
     //開始采集攝像頭數據,并實時顯示在LCD屏幕上
     camera_pthread();
     return 0;
 }
 ?
 ?
 ?
 //LCD屏初始化
 void LCD_Init(void)
 {
     /*1.打開設備文件*/
     int fd=open("/dev/fb0",O_RDWR);
     if(fd<0)
     {
         printf("/dev/fb0設備文件打開失敗!
");
         return;
     }
     
     /*2. 讀取LCD屏的參數*/
     ioctl(fd,FBIOGET_FSCREENINFO,&finfo);//固定參數
     printf("映射的長度:%d
",finfo.smem_len);
     
     ioctl(fd,FBIOGET_VSCREENINFO,&vinfo);//可變參數,32位
     printf("分辨率:%d*%d,%d
",vinfo.xres,vinfo.yres,vinfo.bits_per_pixel);
 ?
     /*3. 映射LCD的地址到進程空間*/
     lcd_mem=mmap(NULL,finfo.smem_len,PROT_WRITE|PROT_READ,MAP_SHARED,fd,0);
     if(lcd_mem==NULL)
     {
         printf("lcd_mem映射失敗!
");
         return;
     }
     memset(lcd_mem,0xFFFFFFFF,finfo.smem_len);
 }
 ?
 /*畫點*/
 void show_pixel(int x,int y,int color)
 {
     unsigned long *show32 = NULL;
     /* 定位到 LCD 屏上的位置*/
     show32 =(unsigned long *)(lcd_mem + y*vinfo.xres*vinfo.bits_per_pixel/8 + x*vinfo.bits_per_pixel/8);
     *show32 =color; /*向指向的 LCD 地址賦數據*/
 }
 ?
 ?
 //顯示攝像頭的數據
 void Show_VideoData(int w,int h,unsigned char *rgb)
 {
     int i,j;
     int x0,x=0,y=0;
     int color; //顏色 值
     unsigned char r,g,b;
     x0=x;
     for(i=0;i
七、超聲波測距驅動代碼
#include 
 #include 
 #include 
 #include 
 #include 
 #include 
 #include 
 #include 
 #include 
 #include 
 ?
 #include 
 #include 
 #include 
 ?
 #include 
 ?
 static int chaoshengbo_irq=0;
 ?
 #define GPB_CON  0x11400040
 #define GPB_DAT  0x11400044
 ?
 static u32 *gpb_con=NULL;
 static u32 *gpb_dat=NULL;
 ?
 /*
 硬件連接:
 輸出腳: GPX1_0 ---ECHO
 輸入腳: GPB_7 
 */
 static void tiny4412_work_func(struct work_struct *work)
 {   
     printk("GPB=%d
",*gpb_dat&1<<7);
 ?
     ktime_t my_time1,my_time2;
     unsigned int i,j;
     unsigned int time_cnt=0;
 ?
     my_time1=ktime_get();  //獲取當前時間
     i=ktime_to_us(my_time1); //轉 us
 ?
     while(gpio_get_value(EXYNOS4_GPX1(0))){} //高電平卡住
 ?
     
     my_time2=ktime_get(); //獲取當前時間
     j=ktime_to_us(my_time2); //轉 us
 ?
     printk("us:%d
",j-i);
 }
 ?
 static DECLARE_WORK(caoshengbotiny4412_work,tiny4412_work_func);
 ?
 /*
 中斷處理函數
 */
 irqreturn_t irq_handler_chaoshengbo(int irq, void *dev)
 {
     schedule_work(&caoshengbotiny4412_work); /*正常情況下:  是在中斷服務函數里面*/
     return IRQ_HANDLED; /*表示中斷已經處理過了*/
 }
 ?
 static void timer_function(unsigned long data);
 static DEFINE_TIMER(timer_caoshengbo, timer_function,0,0);
 ?
 static void timer_function(unsigned long data)
 {
     static u8 state;
     state=!state;
     
     if(state)*gpb_dat|=1<<7;
     else *gpb_dat&=~(1<<7);
     
 ?
     mod_timer(&timer_caoshengbo,jiffies+msecs_to_jiffies(500)); 
 }
 ?
 static int __init tiny4412_chaoshengbo_init(void)
 {
     int i,err;
     /*獲取中斷號*/
     chaoshengbo_irq=gpio_to_irq(EXYNOS4_GPX1(0));
     printk("中斷號:%d
",chaoshengbo_irq);
     
     /*外部中斷注冊*/
     err=request_irq(chaoshengbo_irq,irq_handler_chaoshengbo,IRQ_TYPE_EDGE_RISING,"tiny4412_chaoshengbo",NULL);
     if(err!=0)printk("中斷注冊失敗!
");
 ?
     /*映射內存*/
     gpb_con=ioremap(GPB_CON,4);
     gpb_dat=ioremap(GPB_DAT,4);
 ?
     /*配置模式*/
     *gpb_con&=~(0xF<<4*7); //輸出模式   
     *gpb_con|=0x1<<4*7;
     
     mod_timer(&timer_caoshengbo,jiffies+msecs_to_jiffies(100));         
     return 0;
 }
 ?
 static void __exit tiny4412_chaoshengbo_exit(void)
 {
     free_irq(chaoshengbo_irq,NULL);
     iounmap(gpb_con);
     iounmap(gpb_dat);
     del_timer(&timer_caoshengbo);
 }
 ?
 module_init(tiny4412_chaoshengbo_init);  /*指定驅動的入口函數*/
 module_exit(tiny4412_chaoshengbo_exit);  /*指定驅動的出口函數*/
 MODULE_LICENSE("GPL");      /*指定驅動許可證*/
 ?
 ?
                        聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。
                        舉報投訴
                    
                    - 
                                嵌入式
                                +關注
關注
5178文章
20040瀏覽量
326399 - 
                                物聯網
                                +關注
關注
2938文章
47083瀏覽量
404767 - 
                                Linux
                                +關注
關注
88文章
11585瀏覽量
217346 - 
                                倒車雷達
                                +關注
關注
4文章
77瀏覽量
24420 - 
                                雷達系統(tǒng)
                                +關注
關注
7文章
258瀏覽量
29412 
發(fā)布評論請先 登錄
相關推薦
                    熱點推薦
                  倒車雷達語音IC分享
由深圳語音芯片廠家-深圳典科電子有限公司向大家推薦的一款會說話的“倒車雷達語音芯片”-DKB035-8S系列語音芯片。當我們倒車的時候倒車雷達
    
                發(fā)表于 03-25 21:51        
                    
    
倒車雷達應用
勇敢的芯伴你玩轉Altera FPGA連載94:倒車雷達實例特權同學,版權所有配套例程和更多資料下載鏈接:http://pan.baidu.com/s/1i5LMUUDfile:///C
    
                發(fā)表于 04-26 05:45        
                    
    
實現汽車倒車雷達系統(tǒng)的設計方法
@[汽車倒車雷達系統(tǒng)的設計與實現(初稿)]畢業(yè)設計(論文)題目:汽車倒車雷達系統(tǒng)的設計與實現電氣
    
                發(fā)表于 11-12 06:38        
                    
    
何為倒車雷達
為了便于開發(fā),我做了一塊擴展板子:擴展板有一些常用器件,這樣開發(fā)MSP430 F5529程序的時候,就不用杜邦線連接了。當然也可以選擇杜邦線連接器件,效果都一樣。超聲波模塊的讀?。汉螢?b class='flag-5'>倒車雷達?車輛倒車時候的一個警報
    
                發(fā)表于 11-23 09:19        
                    
    
汽車倒車雷達系統(tǒng)的設計
以STC12C5A60S2單片機和倒車主控芯片GM3101為核心部件,輔以溫度傳感器、液晶顯示器、語音芯片等外圍器件組成倒車雷達系統(tǒng),實現對有效測量范圍內障礙物的精密距離測量、危險等級
    
                發(fā)表于 09-23 15:19        
                ?554次下載    
    
                    
    
汽車倒車雷達系統(tǒng)的設計與實現(一)
@[汽車倒車雷達系統(tǒng)的設計與實現(初稿)]畢業(yè)設計(論文)題	目:	汽車倒車雷達系統(tǒng)的設計與實現
    
                發(fā)表于 11-07 09:21        
                ?12次下載    
    
                    
    
          
        
        
基于Linux設計的倒車雷達系統(tǒng)
                
 
           
            
            
                
            
評論