基于stm32和ov7725的智能循迹车

基于stm32f103zet6的智能循迹车。
1.L298n
基于stm32和ov7725的智能循迹车_第1张图片
IN1IN2控制一个轮子,IN3IN4控制另外一个。这里使用的是直流电机,控制如下:
基于stm32和ov7725的智能循迹车_第2张图片
为了使用pwm进行调速,一定要记得用跳帽使调速度端为高电平。这样,输入不同占空比的pwm波就可以实现调速了。
2.连接方式
连接时一定要注意的一点就是一定要保证l298n与单片机共地,否则会出现控制端有输入但输出端无输出导致车不移动的现象。
3.ov7725
基于stm32和ov7725的智能循迹车_第3张图片
这里使用的摄像头是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设计
基于stm32和ov7725的智能循迹车_第4张图片
电机设计
基于stm32和ov7725的智能循迹车_第5张图片
主程序设计
基于stm32和ov7725的智能循迹车_第6张图片
(源程序为ov7725摄像头程序)

你可能感兴趣的:(基于stm32和ov7725的智能循迹车)