0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于Arduino的OV7670相机模块设计方案

西西 来源:一板网 作者:风筝 2020-10-30 15:47 次阅读

电子行业中,相机一直占据着主导地位,因为它用途广泛,如访客监控系统、救援系统、考勤系统等。现今,我们使用的相机非常智能,并具有早期相机中不存在的许多功能。现今的数码相机不仅捕捉图像,还能捕捉高清晰度画面并分析他们看到的内容。它广泛用于机器人人工智能机器学习等。捕获的帧使用人工智能和机器学习进行处理,然后用于许多应用,如车牌检测、物体检测、运动检测、面部识别等。

在本篇文章中,我们将使用最广泛使用的相机模块OV7670与Arduino UNO进行连接。相机模块OV7670也可以Arduino Mega开发板连接,具有相同的引脚配置、代码和步骤。相机模块很难连接,因为它需要大量的引脚和杂乱的布线。当使用相机模块时,走线变得非常重要,因为走线方式的选择和走线的长度会显着影响图像质量并且会带来噪声。

OV7670相机模块工作在3.3V,因此必须要注意,Arduino在其输出GPIO引脚上提供5V输出。 OV7670是一款FIFO相机。但在本文中,我们将在没有使用FIFO的情况下抓取图片。本问将提供简单的步骤和简化的编程,以便将OV7670与Arduino UNO进行连接。

需要的组件

● Arduino UNO开发

● OV7670相机模块

电阻(10k和4.7k)

● 跳线

有关相机模块OV7670的注意事项

OV7670相机模块是一种FIFO相机模块,可从不同制造商处获得,具有不同的引脚配置。 OV7670提供各种格式的全帧窗口8位图像。图像阵列能够在VGA中以高达每秒30帧(fps)的速度运行。 OV7670包括

图像传感器阵列(约656 x 488像素)

● 时序发生器

模拟信号处理器

● A / D转换器

● 测试模式生成器

数字信号处理器(DSP

● 图像缩放器

● 数字视频端口

LED和频闪闪光控制输出

OV7670图像传感器使用串行摄像机控制总线协议(SCCB)进行控制,SCCB是I2C协议的一种(SIOC、SIOD),最大时钟频率为400KHz。

相机协议带有握手信号,例如:

● VSYNC:垂直同步输出 - 帧期间低电平

● HREF:水平参考 - 行的有效像素期间为高电平

● PCLK:像素时钟输出 - 自由运行时钟。数据在上升沿有效

除此之外,它还有几个信号,如

● D0-D7:8位YUV / RGB视频分量数字输出

● PWDN:掉电模式选择 - 正常模式和掉电模式

● XCLK:系统时钟输入

● Reset:复位信号

OV7670采用24MHz振荡器提供时钟。这使得像素时钟(PCLK)输出为24MHz。 FIFO提供3Mbps的视频帧缓冲存储器。测试图案生成器具有8条彩条图案、淡灰色条纹图案。现在让我们开始编程Arduino UNO以测试相机模块OV7670,并使用串行端口读取器抓取帧。

电路原理

编程Arduino UNO开发板

首先包含OV7670所需的库。由于OV7670使用的是I2C接口,因此需要包含《util / twi.h》库。该项目中使用的库是ArduinoIDE的内置库。我们只需要包含库来完成工作。

在此之后,需要针对OV7670修改寄存器。该程序分成几个部分进行讲解,以便能够更好地理解。

Setup()包括图像捕获所需的所有初始设置。第一个函数是arduinoUnoInut(),它用于初始化Arduino Uno。首先它会禁用所有全局中断并进行设置通信接口配置,例如PWM时钟、中断引脚选择、预分频器选择添加奇偶校验和停止位。

​arduinoUnoInut();

配置Arduino后,必须配置相机。要初始化相机,我们只能选择更改寄存器值。寄存器值需要从默认值更改为自定义。还要根据我们使用的微控制器频率添加所需的延迟时间。因为,低速微控制器具有较少的处理时间,以及捕获帧之间更多的延迟。

void camInit(void){

writeReg(0x12, 0x80);

_delay_ms(100);

wrSensorRegs8_8(ov7670_default_regs);

writeReg(REG_COM10, 32);//PCLK does not toggle on HBLANK.

}

相机设置为拍摄QVGA图像,因此需要选择分辨率。以下函数用于配置寄存器以获取QVGA图像。

setResolution();

在本文中,图像以单色拍摄,因此寄存器值设置为输出单色图像。该函数设置寄存器列表中的寄存器值,该寄存器列表在程序中预定义。

setColor();

以下函数用于写入寄存器,将十六进制值写入寄存器。如果你得到了扰乱的图像,那么试着改变第二个参数,即10到9/11/12。但大多数时候这个值工作正常,所以不需要改变它。

writeReg(0x11, 10);

以下函数用于设置图像分辨率大小。在这个项目中,我们拍摄的照片尺寸为320 x 240像素。

captureImg(320, 240);

除此之外,代码还将I2C配置分为几个部分。只是为了从摄像机获取数据,I2C配置有启动、读取、写入、设置地址等函数,这些函数在使用I2C协议时非常重要。

如何使用串行端口读取器读取图像

串行端口读取器是一个简单的GUI。该工具将捕获base64编码并对其进行解码以形成图像。只需按照以下简单步骤即可使用串行端口读取器

第1步:将Arduino开发板连接到PC的任何USB端口

第2步:单击“Check”,找到您的Arduino COM端口

第3步:最后点击“Start”按钮开始连续读取图像。

第4步:只需点击“Save Picture”即可保存这些图片。

以下是从OV7670拍摄的图像示例

使用OV7670时的注意事项

● 尽量确保使用的导线或跳线越短越好

● 避免与Arduino或OV7670上的任何引脚接触不良

● 连接时要小心,因为大量的布线会导致短路

● 如果UNO向GPIO提供5V输出,请使用电平转换器。

● 使用3.3V作为OV7670的输入,超过此电压可能会损坏OV7670模块。

本文主要是为了简单介绍如何基于Arduino使用相机模块。由于Arduino的内存较小,因此处理可能不如预期。您可以使用具有更多内存的不同控制器进行处理。
编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    15223

    浏览量

    171156
  • 数码相机
    +关注

    关注

    2

    文章

    434

    浏览量

    38002
  • OV7670
    +关注

    关注

    5

    文章

    59

    浏览量

    27245
收藏 人收藏

    评论

    相关推荐

    为什么Stm32F103驱动ov7670有严重的分屏现象?

    为什么Stm32F103驱动ov7670有严重的分屏现象。
    发表于 04-07 07:40

    【开源项目】自制一个创客专属的无反相机

    OV2640/OV3660/OV5640相机(最好是稍微长一点的FPC) M12变焦镜头 四个12毫米M2平头螺丝 小型相机三脚架 什么是
    发表于 02-29 15:50

    esp8266驱动ov7670摄像头可以做图传吗?有没有例程?

    esp8266 驱动 ov7670摄像头可以做图传吗?有没有例程?
    发表于 11-09 06:05

    mm32f103能做视频处理吗?

    采用OV7670带缓存摄像头模块,用MM32F103能做简单的视频处理吗,比如判断颜色和形状,可以使用外部sdram
    发表于 11-08 06:27

    是德科技N6785A源表模块上报OV维修

    近日某院校送修一台是德科技源表N6785A,客户反馈源表模块上报OV,对仪器进行初步检测,确定与客户描述故障一致。本期将为大家分享本维修案例。
    的头像 发表于 11-07 16:45 265次阅读
    是德科技N6785A源表<b class='flag-5'>模块</b>上报<b class='flag-5'>OV</b>维修

    ov7670的相关资料

    应用独有的传感器技术,通过减少或消除光学或电子缺陷如固定图案噪声、托尾、浮散等,提高图像质量,得到清晰的稳定的彩色图像。经过几天的努力,终于实现了驱动ov7670模块。但是还是不是很完美有些卡顿,后期
    发表于 10-10 08:22

    STM32F103C8T6移植OV7670带FIFO摄像头的教程

    STM32F103C8T6移植OV7670带FIFO摄像头,按照说明接好线,运行工程即可,100%成功,使用非常方便
    发表于 10-09 07:19

    ov系列的摄像头模块接口都是通用的吗?

    请问一下像 ov2640,0v7670ov5640这种摄像头模块硬件接口都一样吗,24pin的那种模组
    发表于 09-27 08:17

    stm32f429zgt6可以使用内部ram解码二维码吗?

    ov7670拍照然后f429识别二维码,内部ram够用吗
    发表于 09-21 06:43

    OV7670/OV7171图像传感器英文手册

    电子发烧友网站提供《OV7670/OV7171图像传感器英文手册.pdf》资料免费下载
    发表于 09-15 17:07 7次下载

    基于FPGA开发板的OV7670 驱动设计

    在一些摄像头中,pwdn管脚和rst管脚有时会直接省略掉。pwdn管脚为电源掉电模式管脚,低电平表示为正常模式,高电平表示掉电模式。使用时,将pwdn管脚置为低电平即可。
    发表于 08-08 09:35 566次阅读
    基于FPGA开发板的<b class='flag-5'>OV7670</b> 驱动设计

    将LCD模块Arduino连接

    电子发烧友网站提供《将LCD模块Arduino连接.zip》资料免费下载
    发表于 07-12 09:28 0次下载
    将LCD<b class='flag-5'>模块</b>与<b class='flag-5'>Arduino</b>连接

    Arduino电动相机滑块

    电子发烧友网站提供《Arduino电动相机滑块.zip》资料免费下载
    发表于 07-10 14:55 0次下载
    <b class='flag-5'>Arduino</b>电动<b class='flag-5'>相机</b>滑块

    如何从OV7670中获取一些静止图像?

    大家好, 我已经在这个项目上工作了几个星期,并决定发布我的进展,因为显然这是一个热门话题。 让我首先警告您以下几点: - 似乎没有办法从 OV7670 中获取真实视频,因为 ESP8266 无法处理
    发表于 05-22 09:50

    如何使ov5640相机在imx8MP板上工作?

    我可以使用的 ov5640 相机的驱动程序和相应的 dts 详细信息,哪些是针对基于 imx8mp 的主板进行测试的? 内核版本:- origin/lf-5.15.y
    发表于 05-06 06:16