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

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

    关注

    114

    文章

    17278

    浏览量

    185591
  • 数码相机
    +关注

    关注

    2

    文章

    445

    浏览量

    39233
  • OV7670
    +关注

    关注

    5

    文章

    59

    浏览量

    27918
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    摄像头模组开发,感光芯片硬触发拍照方案问题 OV系列 和 IMX系列

    想使用Image Sensor芯片 OV 或者 IMX系列(MIPI CSI 协议输出数据流)开发一款相机模组,能够支持外部硬件触发拍照,求一个大概的思路方案(XVS XHS) (VSYNAC)。
    发表于 08-07 11:49

    步进电机驱动电路的设计

    介绍了BYG通用系列二步进电机最常采用的的单极性和双极性2种驱动电路的设计方案,从原理上体现了一步进电机的控制方法,增加了步进电机驱动电路设计的灵活性。二步进电机的单极性和双极性
    发表于 05-28 15:38

    UVC相机识别不到是什么原因导致的?

    我做了两版硬件,一版可以识别到fx3相机,另一版找不到。 但是两版都能测试USBBulkSourceSink.img,并且速率都在4Gbps以上。 有区别的是不能识别fx3相机的版本用的是52m的参考时钟, 请问下可能的原因在哪里?
    发表于 05-22 06:53

    索尼ILX-LR1相机远程遥控SDK V1.13.00下载教程

    轩展科技作为SONY(中国)官方授权代理商, SONY ILX-LR1相机的最新版本SDK及其他资料都是由SONY(中国)授权发布,不仅权威,而且安全。为方便用户更便捷地找到SDK,将官方SDK V1.13.00集合到了SONY ILX-LR1的产品页面。
    的头像 发表于 05-15 09:52 ?289次阅读
    索尼ILX-LR1<b class='flag-5'>相机</b>远程遥控SDK V1.13.00下载教程

    游戏与数码相机的理想选择:HT4088高性能充电芯片

    讨论HT4088在高性能便携式设备中的应用,如游戏和数码相机,提供快速充电解决方案
    的头像 发表于 03-13 17:24 ?717次阅读
    游戏<b class='flag-5'>机</b>与数码<b class='flag-5'>相机</b>的理想选择:HT4088高性能充电芯片

    如何可以找到型号OPT8241相机的触发接口?

    想把OPT8241相机与DLP LightCrafter 4500 Module DMD进行内同步与外同步触发,如何可以找到型号OPT8241相机的触发接口??? 型号OPT8241相机的内外触发口,在什么位置?
    发表于 02-26 08:24

    索尼ILX-LR1相机:植保无人机的理想搭档,引领农业监测新篇章

    在农业现代化的浪潮中,无人机技术以其独特的优势,正逐步改变着传统的植保作业模式。而作为影像捕捉的核心设备,相机的选择显得尤为重要。在众多高端相机中,索尼ILX-LR1相机凭借其卓越的性能,成为了植保
    的头像 发表于 02-25 15:42 ?479次阅读

    索尼ILX-LR1相机在无人机航测有哪些优秀的表现?

    索尼ILX-LR1相机在无人机航测中展现出了卓越的性能,其优秀表现主要体现在以下几个方面: 一、精准性 高分辨率成像:凯茉锐电子ILX-LR1相机拥有约6100万有效像素的全画幅背照式Exmor R
    的头像 发表于 12-18 16:46 ?603次阅读

    Arduino采集雷达模块数据与串口绘图

    Arduino采集雷达模块数据与串口绘图
    的头像 发表于 12-14 11:44 ?907次阅读
    <b class='flag-5'>Arduino</b>采集雷达<b class='flag-5'>模块</b>数据与串口绘图

    如何使用Arduino实现CAN总线通信

    开源硬件平台,通过添加CAN总线模块,也可以实现CAN通信。 硬件准备 Arduino开发板 :可以选择Arduino Uno、Mega等型号。 CAN总线模块 :如MCP2515或M
    的头像 发表于 11-12 10:09 ?2952次阅读

    OV426相机桥接处理器规格书

    最新OV426汉译版本,供大家参考。OV426 是 OV426 医疗应用的单芯片解决方案。当 OV426 与
    发表于 10-09 14:08 ?11次下载

    基于 DSP5509 进行数字图像处理中 Sobel 算子边缘检测的硬件连接电路图

    边缘检测后的图像。 电源模块:为整个系统提供稳定的电源供应。 二、图像采集模块设计 图像传感器选择:根据应用需求选择合适的图像传感器,考虑分辨率、帧率、色彩深度等因素。例如,可以选择 OV7670
    发表于 09-25 15:25

    OV7670摄像头使用串口发送数据到另一个板子上的lcd,出现花屏

    测试色带是正常的平整的,如图所示 摄像头端 void ov7670()//单片读取OV7670的图片像素并发送到TFT屏幕上 { uint8_t sendData[5]; // 假设数组长度为5
    发表于 09-12 23:32

    石英晶振在智能相机中的应用

    智能相机(Smart Camera),是一种高度集成化的微小型机器视觉系统。它将图像的采集、处理与通信功能集成于单一相机内,从而提供了具有多功能、模块化、高可靠性、易于实现的机器视觉解决方案
    的头像 发表于 09-06 11:21 ?724次阅读
    石英晶振在智能<b class='flag-5'>相机</b>中的应用

    VGA接口的工业相机方案5MP/1080P VGA工业相机方案

    VGA接口的工业相机方案 芯视音科技提供工业相机方案中后端图像处理主IC-CV2880,此IC直接接收前端Sensor IC传过来的如YUV/601/656/RAW DATA等数字信号
    的头像 发表于 08-23 16:02 ?871次阅读