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

    文章

    16298

    浏览量

    177783
  • 数码相机
    +关注

    关注

    2

    文章

    441

    浏览量

    38377
  • OV7670
    +关注

    关注

    5

    文章

    59

    浏览量

    27428
收藏 人收藏

    评论

    相关推荐

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

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

    OV426相机桥接处理器规格书

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

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

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

    请问A7670E通信芯片是否支持VAD检测?

    A7670E 芯片可以实现物联网接打电话,类似ESP32-S3-A7670E-4G这个方案https://www.waveshare.net/wiki/ESP32-S3-A7670E-
    发表于 07-23 08:01

    SN65LVDS315相机并行RGB到MIPI CSI-1串行转换器数据表

    电子发烧友网站提供《SN65LVDS315相机并行RGB到MIPI CSI-1串行转换器数据表.pdf》资料免费下载
    发表于 07-08 14:31 2次下载
    SN65LVDS315<b class='flag-5'>相机</b>并行RGB到MIPI CSI-1串行转换器数据表

    如何将连接到FPGA的摄像头数据发送到主机PC?

    已阅读了 AN75779,并能够验证(工作): 摄像头 (OV7670) ---> FX3 ---> USB 主机 (PC) 对于上述应用,需要对固件和 GPIF 做哪些修改
    发表于 07-05 07:31

    UPS系统设计方案解读

    UPS的应用场景日趋多样化,每个场景都有其独特的需求,对应不同的方案。UPS系统方案指南继续上新,本文将聚焦UPS设计方案展开讲述。
    的头像 发表于 06-26 10:06 771次阅读
    UPS系统<b class='flag-5'>设计方案</b>解读

    STM32F407如何能直接出42MHz的方波?

    有一个OV7670不带fifo,所以需要输出一个差不多40MHz的方波信号作为时钟源: 1、本来想的是用STM32F407的MCO1输出,但是发现,MCO1能够输出的方波信号在较高频率时会变成正弦波
    发表于 05-30 07:31

    UVC相机识别不到的原因?

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

    摄像头配AL422B和直接DCMI连ARM的区别是什么?

    大家好,我是ARM的新手。我们计划用STM32做二维码的图像识别。 ​目前计划用OV7670摄像头 + STM32F2 + 8Mbit SRAM。 ​但看到很多开发板上配置的都是
    发表于 05-17 06:51

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

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

    低功耗、底噪度模拟相机方案和DATASHEET

    XS5018A 是一款针对CMOS 图像传感器的高性价比的图像信号处理芯片,为ISP+TX 单芯片解决方案产品,内部除集成 CPU 外,还包括 SPI,UART,I2C,GPIO 等丰富的外设;集成
    发表于 03-29 14:12

    尼康Z9相机与镜头至国际空间站,助宇航员捕捉高质影像

    自2017年起就在国际空间站上服役的尼康D5相机将由Z 9接任,这意味着自阿波罗15号任务以来,已有超过50年的时间里尼康相机和镜头一直为NASA的太空探索活动提供支持。
    的头像 发表于 03-01 14:24 811次阅读

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

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

    功率模块铜线键合工艺参数优化设计方案

    为了提高功率模块铜线键合性能,采用6因素5水平的正交试验方法,结合BP(Back Propaga‐tion)神经网络与遗传算法,提出了一种铜线键合工艺参数优化设计方案。首先,对选定样品进行正交试验
    的头像 发表于 01-03 09:41 734次阅读
    功率<b class='flag-5'>模块</b>铜线键合工艺参数优化<b class='flag-5'>设计方案</b>