在讲解如何自制OpenMV之前,我们先了解下OpenMV是什么?
OpenMV是国外的开源项目,是一款专为嵌入式机器视觉应用设计的小型开发板。它的核心优势在于集成了强大的图像处理能力、可编程性和易用性,尤其适合用于计算机视觉、图像处理、人工智能、机器学习等领域。OpenMV开发板支持使用Python进行编程,结合简单易用的IDE和丰富的库支持,能够实现从基础的图像识别到复杂的机器视觉任务。
简单来说,OpenMV是一个可编程的摄像头,通过MicroPython语言(即Python),可以实现你的想要让该摄像头运行的逻辑。摄像头本身内置了一些图像处理算法,很容易使用。外观可以参考以下图片:

图源网络
OpenMV能做什么?
1、嵌入式机器视觉:通过OpenMV,可以做出一些创新的项目,学习计算机视觉的兴趣,了解傅立叶变换、小波变换、滤波之类的算法该如何应用于实际生活。
2、对成本要求很高的嵌入式工业方案,比如流水线物品的分拣等等。
学习OpenMV需要具备什么能力?
1、有过python编程语言的学习经验,了解if else等逻辑语句,知道变量赋值等概念。
2、有面向对象的概念,了解类、对象、方法等概念。
3、有单片机的基本概念,了解IO口、电压、串口等概念。
为什么要DIY一款OpenMV而不直接上官网购买?
1、自己动手制作OpenMV。缺点:需要购买或者设计相应的硬件组件,如摄像头模组、主控板(通常是基于STM32等芯片的微控制器)、存储模块等。需要自己进行焊接、布线和组装,这对于初学者来说可能会有一定的难度,并且需要有一定的硬件知识。自制的OpenMV可能不如官方产品稳定性好。优点:可能需要根据自己的需求定制某些硬件特性(如额外的传感器接口、特定的处理能力等)。性价比高,成本低,能够提升自己的焊机技术、PCB布局布线能力、Python的编程能力。而且OpenMV的烧录程序完全开源免费,只需要去外网的OpenMV官网下载即可,也可以上github上搜索OpenMV关键字,会有很多开源项目可供选择和下载,烧录教程也十分详细。
2、购买OpenMV。优点:OpenMV板卡是已经完成设计和组装的,用户直接购买并使用。这种方式更加简单,节省时间,无需担心硬件问题。官方OpenMV摄像头板通常会经过严格的质量控制,确保硬件稳定性和兼容性。购买的OpenMV板已经集成了相关的摄像头模块、接口、处理器等,基本满足大多数图像处理应用需求。缺点:购买成本非常高,举例:购买一个OpenMV4 H7 R2 Cam摄像头需要四百多,但自己DIY只需要1百多即可。购买的OpenMV板通常有固定的硬件配置,用户无法轻易修改或定制硬件。
如何DIY一款OpenMV?
1、首先:绘制原理图。
以下为开源的OpenMV硬件原理图参考。

图源网络
2、其次,根据原理图准备硬件物料。
• STM32H7微控制器:STM32H743IIK6。
• 摄像头模块:OV5640或类似的CMOS摄像头传感器。
• 存储和内存:SD卡,用于存储图像数据和代码。
• 电源模块:芯片需要5V或3.3V的电源输入。
你需要自己准备一个DC-DC转换器或LDO稳压器来为STM32H7和其他外围设备提供稳定的电压。
• JTAG/SWD编程器:用于调试和烧录STM32H7微控制器的固件。
• 传感器和其他外部模块(可选):超声波传感器:用于距离测量。加速度计:用于运动检测。陀螺仪:用于姿态监测。红外传感器:用于简单的物体探测。
• 其他附加物料:按钮:用来重启或复位开发板。LED指示灯:用于电源指示或状态显示。跳线和接插件:用于连接外部传感器和电源。外壳和散热:外壳(可选):为自制OpenMV提供保护,可以设计一个3D打印的外壳,或者购买现成的外壳进行保护。散热片(可选):如果系统工作负载较高,可能需要加装散热片来降低处理器的温度。
3、最后是PCB设计和制作。
要制作自定义的PCB,需要使用PCB设计工具(如KiCad、嘉立创、AD)设计电路板。你可以根据OpenMV开源项目的原理图进行二次设计。使用嘉立创,每月有两次免费打板机会,PCB板成本直接降低为0。PCB板收货后,只需要使用烧录器烧录开源项目中的固件即可。完成PCB焊接和固件烧录后,只需使用官方的OpenMV IDE就可以开始编写、调试和运行Python代码了。
物料参考图:

成本计算:
STM32H743IIK6:某宝40元一个;OV5640 摄像头:35元一个;SD 卡:20元一个;电源模块:20元以内;各种电阻电容:10元以内。PCB:使用嘉立创免费。总共成本控制在150元以内。
开发环境和工具链:
OpenMV IDE:官方的OpenMV IDE可用于编写、调试和运行Python代码。如果自制系统时不使用官方OpenMV IDE,你可以使用其他Python编辑器(如Thonny)配合STM32开发环境(如STM32CubeIDE)进行调试。