基於stm32和ov7725的智慧循跡車
基於stm32f103zet6的智慧循跡車。
1.L298n
IN1IN2控制一個輪子,IN3IN4控制另外一個。這裡使用的是直流電機,控制如下:
為了使用pwm進行調速,一定要記得用跳帽使調速度端為高電平。這樣,輸入不同佔空比的pwm波就可以實現調速了。
2.連線方式
連線時一定要注意的一點就是一定要保證l298n與微控制器共地,否則會出現控制端有輸入但輸出端無輸出導致車不移動的現象。
3.ov7725
這裡使用的攝像頭是ov7725。ov7670也可以使用,但由於其幀率過低,在車速很快時將無法實時反映道路情況。當然,如果車速很慢ov7670也可以使用。
攝像頭模組儲存影象資料的過程為:等待 OV7725 幀同步訊號——FIFO 寫指標復位
——FIFO 寫使能——等待第二個 OV7725 幀同步訊號——FIFO 寫禁止。通過以上 5 個步驟,我們就可以完成 1 幀影象資料在 AL422B 的儲存。注意:FIFO 寫禁止操作不是必須的,只有當你想將一幀圖片資料儲存在 FIFO,並在外部 MCU 讀取完這幀圖片資料之前,不再採集新的圖片資料的時候,才需要進行 FIFO 寫禁止。
接下來,我們來看看如何讀取影象資料。
在儲存完一幀影象以後,我們就可以開始讀取影象資料了。讀取過程為:FIFO 讀指標
復位——給 FIFO 讀時鐘(FIFO_RCLK)——讀取第一個畫素高位元組——給 FIFO 讀時鐘——讀取第一個畫素低位元組——給 FIFO 讀時鐘——讀取第二個畫素高位元組_迴圈讀取剩餘畫素——結束。
可以看出,攝像頭模組資料的讀取也是十分簡單,比如 QVGA 模式,RGB565 格式,我們總共迴圈讀取 320*240*2 次,就可以讀取 1 幀影象資料,把這些資料寫入 LCD 模組,我們就可以看到攝像頭捕捉到的畫面了。
4.程式思路
首先,利用ov7725將“路況”反映到lcd屏上,為了辨別黑白兩色,將RGB565格式轉換為RBG888格式,再利用灰度化公式,計算灰度值。與閾值比較,將影象二值化,這樣就可以辨別黑白了。
根據攝像頭安裝的位置,將所需要觀察的“路況”分成左中右三段,計算三段的二值化之後的總值進行比較,就可以判斷出車到底是應該左轉還是右轉還是直行了。
其次是pwm輸出問題。選擇四路pwm輸出,設定好不同的佔空比輸出,在判斷出左右轉之後根據不同的佔空比輸出,控制電機,就可以讓車按照黑線行走啦!
5.部分程式
pwm設計
電機設計
主程式設計
(源程式為ov7725攝像頭程式)