衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于Linux設計的倒車雷達系統

DS小龍哥-嵌入式技術 ? 來源:DS小龍哥-嵌入式技術 ? 作者:DS小龍哥-嵌入式技 ? 2023-05-25 09:12 ? 次閱讀

一、項目背景介紹

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

image-20230524162414354

二、創新點

本項目的創新點包括:

  1. 采用開源Linux系統:采用Linux系統,具有很好的可擴展性和靈活性,可以實現更為豐富和復雜的功能。
  2. 多個模塊的協同工作:本項目涉及到了攝像頭模塊、超聲波測距模塊、處理模塊、告警模塊和顯示模塊等多個模塊,這些模塊需要協同工作才能實現完整的功能。
  3. 實現了告警功能:本項目采用了蜂鳴器來實現告警功能,根據距離調整PWM輸出給出不同級別的告警聲音,能夠提醒駕駛者注意障礙物。

三、使用技術介紹

  1. 迅為4412主控板:本項目采用了迅為4412主控板,該主控板具有較高的性能和穩定性,能夠滿足系統的運行要求。
  2. Linux操作系統:本項目采用了開源的Linux操作系統,具有很好的可擴展性和靈活性,適合進行自定義開發。
  3. V4L2協議:V4L2協議是Linux下的一個視頻設備驅動程序接口,可以方便地實現USB攝像頭的圖像采集。
  4. 超聲波測距模塊:通過GPIO口與主控板相連,使用定時器產生超聲波并計算與接收到回波之間的時間差,從而計算出與障礙物之間的距離。
  5. PWM輸出控制:根據距離調整PWM輸出給出不同級別的告警聲音。
  6. TFT真彩顯示屏:本項目采用了TFT真彩顯示屏,能夠實現高清晰度的圖像顯示。
  7. 系統管理模塊:負責管理整個系統的啟動、配置和錯誤處理等操作。例如,可以將系統的啟動腳本寫在/etc/rc.local中,通過調用shell腳本來實現系統的初始化和啟動。

四、系統架構

整個系統由以下幾個模塊組成:

  1. 攝像頭模塊:負責采集車尾環境圖像,并傳輸給處理模塊。
  2. 超聲波測距模塊:負責與障礙物之間的距離測量,并將結果傳輸給處理模塊。
  3. 處理模塊:負責視頻顯示、距離信息的處理、告警功能的實現。
  4. 告警模塊:負責根據距離調整PWM輸出給出不同級別的告警聲音,并使用蜂鳴器輸出告警信息。
  5. 顯示模塊:負責將處理模塊生成的圖像顯示在TFT真彩顯示屏上。
  6. 系統管理模塊:負責管理整個系統的啟動、配置和錯誤處理等操作。

五、功能設計

  1. 攝像頭模塊 由于Linux系統具有很好的驅動支持,因此可以直接使用V4L2協議來獲取USB攝像頭的圖像。獲取圖像后,需要通過DMA方式將數據傳輸給處理模塊進行處理。
  2. 超聲波測距模塊 超聲波測距模塊可以通過GPIO口與主控板相連,使用定時器產生超聲波并計算與接收到回波之間的時間差,從而計算出與障礙物之間的距離。
  3. 處理模塊 處理模塊負責將攝像頭采集到的圖像和超聲波測距模塊測得的距離信息整合處理,并根據距離信息來控制告警模塊。
  4. 告警模塊 告警模塊根據處理模塊傳遞過來的距離信息來控制PWM輸出,并使用蜂鳴器輸出告警信息。
  5. 顯示模塊 顯示模塊負責將處理模塊生成的圖像顯示在TFT真彩顯示屏上,并實現顯示屏的刷新和管理操作。
  6. 系統管理模塊 系統管理模塊負責管理整個系統的啟動、配置和錯誤處理等操作。例如,可以將系統的啟動腳本寫在/etc/rc.local中,通過調用shell腳本來實現系統的初始化和啟動。

六、攝像頭圖像顯示應用代碼

#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;  /* 一行數據有多少字節 */
     int iTotalBytes; /* 所有字節數 */ 
     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");      /*指定驅動許可證*/
 ?
 ?
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5093

    文章

    19178

    瀏覽量

    307708
  • 物聯網
    +關注

    關注

    2914

    文章

    44938

    瀏覽量

    377076
  • Linux
    +關注

    關注

    87

    文章

    11345

    瀏覽量

    210404
  • 倒車雷達
    +關注

    關注

    4

    文章

    76

    瀏覽量

    23926
  • 雷達系統
    +關注

    關注

    6

    文章

    247

    瀏覽量

    28769
收藏 人收藏

    評論

    相關推薦

    倒車雷達電路

    倒車雷達電路PCB打樣找華強 http://www.hqpcb.com 樣板2天出貨
    發表于 11-30 20:58

    倒車雷達

    倒車雷達PCB打樣找華強 http://www.hqpcb.com 樣板2天出貨
    發表于 12-01 09:00

    倒車雷達語音IC分享

    由深圳語音芯片廠家-深圳典科電子有限公司向大家推薦的一款會說話的“倒車雷達語音芯片”-DKB035-8S系列語音芯片。當我們倒車的時候倒車雷達
    發表于 03-25 21:51

    倒車雷達設計

    如題倒車雷達設計,用單片機c51控制,有仿真圖
    發表于 05-08 21:29

    使用倒車雷達設計

    使用倒車雷達設計[audio][/audio]
    發表于 12-05 15:43

    倒車雷達應用

    勇敢的芯伴你玩轉Altera FPGA連載94:倒車雷達實例特權同學,版權所有配套例程和更多資料下載鏈接:http://pan.baidu.com/s/1i5LMUUDfile:///C
    發表于 04-26 05:45

    怎么實現基于PSoC芯片的倒車雷達控制系統的設計?

    怎么實現基于PSoC芯片的倒車雷達控制系統的設計?
    發表于 05-17 06:59

    請問怎樣去設計一種倒車雷達系統

    倒車雷達系統的硬件該怎樣去設計?倒車雷達系統的軟件該怎樣去設計?
    發表于 05-17 07:01

    實現汽車倒車雷達系統的設計方法

    @[汽車倒車雷達系統的設計與實現(初稿)]畢業設計(論文)題目:汽車倒車雷達系統的設計與實現電氣
    發表于 11-12 06:38

    何為倒車雷達

    為了便于開發,我做了一塊擴展板子:擴展板有一些常用器件,這樣開發MSP430 F5529程序的時候,就不用杜邦線連接了。當然也可以選擇杜邦線連接器件,效果都一樣。超聲波模塊的讀取:何為倒車雷達?車輛倒車時候的一個警報
    發表于 11-23 09:19

    四探頭倒車雷達

    是探頭倒車雷達
    發表于 04-05 21:11

    倒車雷達

    倒車雷達              倒車雷達是汽車泊車或者
    發表于 01-04 14:07 ?1544次閱讀

    汽車倒車雷達系統的設計

    以STC12C5A60S2單片機和倒車主控芯片GM3101為核心部件,輔以溫度傳感器、液晶顯示器、語音芯片等外圍器件組成倒車雷達系統,實現對有效測量范圍內障礙物的精密距離測量、危險等級
    發表于 09-23 15:19 ?554次下載
    汽車<b class='flag-5'>倒車</b><b class='flag-5'>雷達</b><b class='flag-5'>系統</b>的設計

    基于Ameba的倒車雷達系統

    倒車雷達已經非常普遍,這個專案做一個倒車雷達系統。將這個倒車
    的頭像 發表于 02-02 17:09 ?3625次閱讀

    汽車倒車雷達系統的設計與實現(一)

    @[汽車倒車雷達系統的設計與實現(初稿)]畢業設計(論文)題 目: 汽車倒車雷達系統的設計與實現
    發表于 11-07 09:21 ?12次下載
    汽車<b class='flag-5'>倒車</b><b class='flag-5'>雷達</b><b class='flag-5'>系統</b>的設計與實現(一)
    百家乐论坛bocaila| 百家乐官网下注技巧| 大发888娱乐场c17| 百家乐官网网络游戏信誉怎么样| 娱乐城开户送38体验金| 百家乐现金网开户平台| 在线百家乐合作| 大家赢百家乐官网投注| 百家乐猪仔路| 澳门百家乐官网小| 无为县| 百家乐那里信誉好| 做生意招财小窍门| 百家乐官网龙虎斗扎金花| 大发888娱乐登陆| 永利百家乐游戏| 真人百家乐官网是骗局| 水果机器| 澳门百家乐搏牌规则| 澳门百家乐官网群策略| 德州扑克官网| 百家乐园鼎丰娱乐城| 百家乐官网代理打| 兴山县| 金域百家乐娱乐城| 玩百家乐官网犯法| 博彩赌场| 太阳百家乐路单生| 百家乐看不到视频| 盛京棋牌网| 利都百家乐国际娱乐场开户注册| 喜达百家乐官网的玩法技巧和规则 | 大发888打不开| 百家乐扎金花斗地主| 如何赢百家乐官网的玩法技巧和规则| 正镶白旗| 德州扑克| 百家乐程序开户发| 百家乐网址多少| 圆梦城百家乐官网娱乐城| 百家乐官网3宜3忌|