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

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

3天内不再提示

【一等奖】RT-Thread创新应用设计大赛作品

电子发烧友论坛 2022-02-07 14:54 次阅读
作品名:基于RT-Thread摄像头车牌图像采集

作品地址:http://www.elecfans.com/project/33798

作者:Mak_z

项目简介:

使用基于RT-thread操作系统的AB32VG1开发板作为主控,对ov7670摄像头进行图像采集,并使用串口发送图片RGB565格式到PC供opencv进行图像识别。原项目设想在开发板上进行采集的同时并通过简单的二值算法和插值算法实现车牌号识别,但实践中发现开发板的ram并不够保存采集回来的图像信息,与数据手册中介绍的192k有一定差距,实现用户能使用的ram是70k;同时原设想是带lcd屏幕的,但最后发觉io口数量不够,只能通过串口调试显示,但lcd屏幕的 spi代码仍保留在原码中,可供参考。目前开发板通过摄像头采集完整数据部分已经完成,并且可以通过串口uart1发送到上位机进行图像显示。识别号牌上位机需要另外再做。

硬件说明:

1.摄像头ov7670带fifo:采用csi总线的普通30w摄像头。考虑到用模拟读取摄像头,io的反转速度可能不能满足高速采集的需要,因此保险起见,直接使用带fifo的摄像头。sccb总线采用全模拟的方式,跳过了所有中间层,直接操作寄存器,提高了总线的时钟

2f60475c-805e-11ec-9e9d-dac502259ad0.jpg

2.串口工具PL2302(ttl转RS232),一款与pc通讯的串口工具,免驱。

2f76cdce-805e-11ec-9e9d-dac502259ad0.jpg

3.总接线图

2f97d08c-805e-11ec-9e9d-dac502259ad0.jpg

软件说明:

1.软件流程图

2fabca56-805e-11ec-9e9d-dac502259ad0.jpg

2.关键代码

/* 摄像头IO口采用直接操作寄存器的方式实现,极大提升io速度 */#define BSP_FIFO_RCK_PIN      "PA.5"#define BSP_FIFO_RCK_SET_LOW     (GPIOA_BASE[GPIOx] &= ~(1ul << 5))#define BSP_FIFO_RCK_SET_HIGH     (GPIOA_BASE[GPIOx] |= (1ul << 5))
/* sccb总线的初始化并设置ov7670相应寄存器 */  sccb_init();
  if(sccb_write_reg(0x12, 0x80) == RT_FALSE){    return RT_FALSE;  }
  rt_thread_delay(50);
  id1 = sccb_read_reg(0x0b);  id2 = sccb_read_reg(0x0a);
rt_kprintf("id1 = 0x%02x, id2 = 0x%02x\n", id1, id2);
  for(rt_uint16_t i = 0;i < sizeof(ov7670_init_reg_tbl) / sizeof(ov7670_init_reg_tbl[0]);i++){    sccb_write_reg(ov7670_init_reg_tbl[0], ov7670_init_reg_tbl[1]);}
/* 开启摄像头vsync扫描线程(没有外部中断因此改用轮询的方式实现) */  rt_thread_t thread;  /* 查询VSYNC线程 */  thread = rt_thread_create("ov7670_vsync", ov7670_vsync_thread_entry, RT_NULL, 1024, 5, 100);
  if (thread == RT_NULL){    rt_kprintf("ov7670_vsync thread create fail!\n");    return RT_FALSE;  }  /* 启动线程 */rt_thread_startup(thread);
/* 提取hal库实现了uart的数据发送函数 */void uart1_send(rt_uint8_t *pbuf, rt_uint32_t len){  for(rt_uint32_t i = 0;i < len;i++){    hal_uart_clRFlag(UART1_BASE, UART_FLAG_TXPND);    hal_uart_write(UART1_BASE, pbuf);    while(hal_uart_getflag(UART1_BASE, UART_FLAG_TXPND) == 0);  }}

/* LCD底层驱动代码,因为引脚不够,所以无法演示,测试可用,另外程序里也配有寄存器版本的操作代码 */
static rt_uint32_t spi_bit_xfer(struct rt_spi_device *device, struct rt_spi_message *message){  struct rt_spi_bit_ops *ops = (struct rt_spi_bit_ops *)device->user_data;
  rt_uint8_t tmp_buf[1024];  rt_memset(tmp_buf, 0, sizeof(tmp_buf));
  if(message->send_buf == RT_NULL){    message->send_buf = tmp_buf;  }else if(message->recv_buf == RT_NULL){    message->recv_buf = tmp_buf;  }else{    return RT_FALSE;  }
  if (message->cs_take){    ops->set_cs(ops->data, PIN_LOW);  }#ifdef SPI_DC  message->length & SPI_DC ? ops->set_dc(ops->data, PIN_HIGH) : ops->set_dc(ops->data, PIN_LOW);  message->length &= ~SPI_DC;   /* 复原消息长度 *///  rt_kprintf("message->length = %d\n", message->length);#endif  spi_rw_bytes(device, (rt_uint8_t *)message->send_buf, (rt_uint8_t *)message->recv_buf, message->length);
  if (message->cs_release){    ops->set_cs(ops->data, PIN_HIGH);  }}
static const struct rt_spi_ops spi_bit_bus_ops ={  RT_NULL,  spi_bit_xfer
};

优化思路:


1. 由于ab32vg1没有外部中断可以使用,ov7670的帧同步信号vsync只有500us的高电平时间,因此为了捕捉到该信号,vsync线程一直占用很多的资源;


2. 串口与上位通讯的速度目前最快只有115200bps,上位机可以接受256000bps的速度,但将驱动改为256000bps后,接收会出现乱码,因此串口使用的图片数据非常缓慢。

项目演示

2fba60c0-805e-11ec-9e9d-dac502259ad0.jpg


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

    关注

    31

    文章

    1149

    浏览量

    38896
收藏 人收藏

    评论

    相关推荐

    美的美颐享AI语音呼救/一键呼救热水器荣获智能家电创新作品一等奖

    语音呼救&一键呼救”这一技术创新点夺得“智能家电创新作品一等奖”。日常生活中,老年人跌倒是一种常见的事故,特别是在浴室这种私密场所,更加需要注意安全问题。据统计,
    的头像 发表于 03-05 08:18 271次阅读
    美的美颐享AI语音呼救/一键呼救热水器荣获智能家电<b class='flag-5'>创新作品</b><b class='flag-5'>一等奖</b>

    2023 CCF BDCI大赛圆满落幕,算能赛道WELL团队荣获一等奖

    提交作品约2万次。在激烈的终极角逐中,算能赛道的WELL团队脱颖而出,荣获大赛一等奖!自从StableDiffusion开源以来,优化技术和下游应用迅速涌现,然而直接生
    的头像 发表于 12-30 08:33 399次阅读
    2023 CCF BDCI<b class='flag-5'>大赛</b>圆满落幕,算能赛道WELL团队荣获<b class='flag-5'>一等奖</b>!

    经纬恒润参建龙拱港项目荣获5G“绽放杯”全国赛一等奖

    案例中脱颖而出,荣获全国赛区一等奖!此项目也是本届绽放杯全国赛港口行业唯一获得一等奖的项目。本届大赛由工业和信息化部主办,中国信息通信研究院、5G应用产业方阵、IMT-2
    的头像 发表于 12-22 08:00 215次阅读
    经纬恒润参建龙拱港项目荣获5G“绽放杯”全国赛<b class='flag-5'>一等奖</b>

    见合八方SOA半导体光放大器斩获CCF科技创业大赛一等奖

    我们荣幸地宣布,天津见合八方公司于2023年12月17日在CCF科技创业大赛中荣获一等奖! CCF科技创业大赛是为实现国家人才战略而设立的高层次人才创新创业平台,涵盖了集成电路、智能装
    的头像 发表于 12-20 14:43 219次阅读
    见合八方SOA半导体光放大器斩获CCF科技创业<b class='flag-5'>大赛</b><b class='flag-5'>一等奖</b>

    【直播预告】基于RT-Thread &amp; LVGL RA6M3 HMI-Board儿童益智学习机

    五晚,我们有幸邀请到了本次大赛的二等奖得主,他将与我们分享他的作品——基于RT-Thread LVGL RA6M3 HMI-Board儿童益智学习机。 直播信息 直播主题 基于HMI-
    的头像 发表于 11-30 19:05 230次阅读
    【直播预告】基于<b class='flag-5'>RT-Thread</b> &amp; LVGL  RA6M3 HMI-Board儿童益智学习机

    浪潮云洲斩获全球数字贸易创新大赛区块链Web3.0赛道一等奖

    ·链网'的澳优码服务平台"参赛,经过初赛、半决赛、决赛激烈角逐,从近200支参赛队伍中脱颖而出,荣获区块链Web3.0赛道一等奖
    的头像 发表于 11-28 09:12 791次阅读

    【直播预告】HMI-Board Windows32

    RT-Thread 社区联合 LVGL 社区,及合作伙伴瑞萨电子开启的2023嵌入式GUI挑战赛,经过3个月的激烈角逐,参赛者们提交了许多令人惊喜的作品。我们将启动大赛获奖作品DIY直
    的头像 发表于 11-14 18:20 235次阅读
    【直播预告】HMI-Board Windows32

    创新引领!广和通荣获“科技进步奖一等奖

    “2023年度深圳市科技进步奖一等奖”! 深圳市科学技术奖作为深圳市科技创新领域的最高荣誉,旨在对完成重大科技创新和科技成果转化、反映深圳科技创新的成色、创造显著经济效益的项目进行褒奖
    的头像 发表于 11-09 18:05 261次阅读
    <b class='flag-5'>创新</b>引领!广和通荣获“科技进步奖<b class='flag-5'>一等奖</b>”

    基于rt-thread的socket通信设计

    最近再研究 rt-thread 的通信 ,想设计出 eps8266(多个) rt-thread(作为中控) 服务器的通信框架,使用的开发板是 潘多拉
    的头像 发表于 10-13 15:02 696次阅读
    基于<b class='flag-5'>rt-thread</b>的socket通信设计

    试用RT-Thread Studio(VSCode)

    想尝试RT-Thread studio (VSCode),先下载安装VSCode,再搜索RT-Thread
    的头像 发表于 10-12 10:58 572次阅读
    试用<b class='flag-5'>RT-Thread</b> Studio(VSCode)

    RT-Thread v5.0.2 发布

    RT-Thread 代码仓库地址: ●  https://github.com/RT-Thread/rt-thread RT-Thread 5.0.2 版本发布日志详情: ●  htt
    的头像 发表于 10-10 18:45 780次阅读
    <b class='flag-5'>RT-Thread</b> v5.0.2 发布

    嵌赛归来 | 基于STM32的一等奖嵌赛作品集锦(2)

    【导语】 本期是第二期文章,向大家介绍全国大学生嵌入式芯片与系统设计竞赛全国总决赛中,基于STM32产品系列的一等奖作品。 本期文章的一等奖作品,是 嵌入式人工智能与数字电源赛题方向
    的头像 发表于 09-20 17:05 2009次阅读

    有奖活动 | 以代码之名,写出对Ta的爱

    %、创新性占比30%、视觉UI占比10%。 3. 角逐所有奖项的前提是:代码必须运行成功。一等奖需要综合得分≥80分,二等奖需要综合得分≥70分,参与需要综合得分≥60分。例:
    发表于 08-22 17:18

    本周六,上海站!RISC-V应用创新大赛开发者训练营一起上手RT-Thread Smart!

    近日,玄铁杯全球RISC-V应用创新大赛正式启动报名。 RT-Thread首次深度参与大赛,开发者可在嘉楠勘智K230开发板上运行RT-Th
    的头像 发表于 08-10 20:25 457次阅读
    本周六,上海站!RISC-V应用<b class='flag-5'>创新</b><b class='flag-5'>大赛</b>开发者训练营一起上手<b class='flag-5'>RT-Thread</b> Smart!

    基于RT-Thread Studio学习

    前期准备:从官网下载 RT-Thread Studio,弄个账号登陆,开启rt-thread学习之旅。
    的头像 发表于 05-15 11:00 2593次阅读
    基于<b class='flag-5'>RT-Thread</b> Studio学习