基于嵌入式Linux操作系統(tǒng)的可視化安全倒車系統(tǒng)
本設(shè)計是通過MiniGui加載jpeg來實現(xiàn)LCD實時顯示USB攝像頭采集到圖像的。在編譯程序時,加上了jpeg庫的支持。編程的思路就是不斷地從攝像頭采集圖像并存儲在/tmp/l.jpg中。在Linux圖形用戶界面支持系統(tǒng)MiniGUI中,通過loadbitmap函數(shù)來加載圖像,而圖像加載后不會自動更新,不能根據(jù)1.jpg的改變自動變化。因此,在程序中要設(shè)定一個定時器,每隔100 ms刷新屏幕,基本上實現(xiàn)了實時更新。
3.2 超聲波測距驅(qū)動程序的設(shè)計
超聲波發(fā)生程序的作用是由PWM定時計數(shù)器產(chǎn)生一個超聲波信號頻率約40 kHz的方波。采用Timer0,同時把Timerl打開進行計時。超聲波測距器主程序利用外部中斷檢測返回的超聲波信號,一旦發(fā)現(xiàn)立即進入中斷程序。進入該中斷后立即關(guān)閉Timerl停止計時,并將測距成功標志字賦值1。各程序流程如圖6~圖8所示。
當主程序檢測到接收成功的標志位后,按下式計算即可得到車尾與障礙物之間的距離(設(shè)計時取20℃時的聲速C為344 m/s):
S=(C·T1)/2
其中,T1為計數(shù)器Timerl的計數(shù)值。
該部分程序可設(shè)計為Linux下字符設(shè)備驅(qū)動程序。要使用Linux系統(tǒng)提供一個設(shè)備驅(qū)動接口函數(shù)struct file_operations的數(shù)據(jù)結(jié)構(gòu),來實現(xiàn)超聲波傳感器設(shè)備的打開、讀寫、釋放和控制。定時器和外部中斷相關(guān)寄存器的初始化和參數(shù)的設(shè)定都是在open()接口函數(shù)中完成的。在此設(shè)備驅(qū)動程序中定義的。file_operations的數(shù)據(jù)結(jié)構(gòu)為:
S3C2440_sonar_open()函數(shù)用于打開的設(shè)備。S3C2440_sonar_rcad()和S3C2440_sonar_write()函數(shù)用于讀寫設(shè)備。S3C2440_sonar_re-lease()函數(shù)完成中斷的釋放。S3C2440_sonar_ioctl()函數(shù)用于控制設(shè)備中定時中斷和測距值,由copy_to_user()函數(shù)和put_user()函數(shù)來實現(xiàn)數(shù)據(jù)傳遞,在應(yīng)用程序下打開設(shè)備,實現(xiàn)內(nèi)核態(tài)與用戶態(tài)之間的數(shù)據(jù)傳遞。模塊初始化函數(shù)S3C2440_sonar_init()實現(xiàn)設(shè)備的初始化、中斷初始化及處理、設(shè)備注冊等。static void S3C2440_sonar_exit()用于模塊卸載時中斷停止、資源的釋放等。
3.3 語音報警程序設(shè)計
當所測距離值小于閾值時,由S3C2440發(fā)控制命令給XF-S3011,啟動語音模塊。組成一個語音合成命令幀的部分代碼如下:
命令合成完畢后,就可以發(fā)送給XF-S3011模塊了。在嵌入式Linux系統(tǒng)中先打開XF-S3011設(shè)備文件,然后將此命令幀寫入該文件,最后關(guān)閉設(shè)備文件。
結(jié)語
本文采用嵌入式Linux操作系統(tǒng)和三星公司S3C2440微處理器設(shè)計的可視與語音報警為一體的安全倒車系統(tǒng),具有較高的實用價值。在顯示視頻圖像處理的過程中,能夠通過超聲波對車尾與障礙物之間進行測距,當測距值小于預(yù)設(shè)定的距離時會有語音對駕駛員進行報警提示。經(jīng)實驗驗證,該系統(tǒng)運行穩(wěn)定,能讓駕駛員準確地把握車后路況,提高了倒車安全性。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論