Openmv识别红绿灯并与STM32通信
Openmv识别红绿灯并与STM32通信(多色识别)
- 前言
- 工作原理
- 引脚连接(这里我用的是openmv的串口三和STM32的串口一)
- Openmv代码部分
- STM32代码部分
-
- 串口初始化配置函数
- 主函数
-
- 编写接收函数
- 主函数内容
前言
我们在自己动手做项目或者参加比赛时摄像头与STM32的搭配使用时非常常见的,但是因为刚开始用或者没有用习惯的原因而导致我们在使用的过程中经常受到受阻,这期我就来一篇两者搭配使用的过程。
工作原理
1、工作原理
Openmv识别红绿灯并与STM32通信的工作原理是通过串口通信来实现的。首先,在Openmv端,它需要通过内置的视觉算法来识别红绿灯。一旦识别到红绿灯,Openmv会根据预设的模式来执行相应的操作,并将数据打包发送给STM32。
在STM32端,它会根据接收到的数据包来解析Openmv所识别的红绿灯信息,并根据这些信息来执行相应的控制操作,比如说控制机械臂去抓取物体,控制小车进行前进后退等。
2、注意事项
在使用Openmv进行视觉识别时,需要注意光源的影响。因为Openmv的相机是定焦相机,如果在较暗的环境下拍摄,可能会导致拍摄不清楚。因此,需要保证光源充足或者使用补光灯等设备来提高拍摄亮度或者是改变颜色阈值进行调节。
在进行STM32与Openmv的串口通信时,需要注意数据的传输速率和数据包的格式。如果传输速率过慢或者数据包格式不正确,可能会导致通信失败或者数据丢失等问题。
在使用STM32控制机械臂等设备时,需要注意安全问题。因为机械臂等设备具有一定的危险性,如果不慎操作不当,可能会导致设备损坏或者人员受伤等问题。因此,需要对设备进行安全保护或者使用相应的安全措施。
引脚连接(这里我用的是openmv的串口三和STM32的串口一)
Openmv的P4,VCC,GND分别与STM32的PA10,VCC,GND连接,两者的P5和PA9,可接可不接。
Openmv代码部分
这打印出呗检测到的颜色的中心坐标和颜色标志数字,这需要注意的就是串口发送数据的格式与STM32串口接收端的数据格式要相互对应
from machine import Pin import sensor, image, time,math,pyb from pyb import UART,LED import json import ustruct # 初始化摄像头 sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.skip_frames(time = 20) sensor.set_auto_gain(False) # 颜色跟踪必须关闭自动增益 sensor.set_auto_whitebal(False) # 颜色跟踪必须关闭白平衡 sensor.set_brightness(5000) #sensor.skip_frames(time = 20) # 跳过帧,不屏蔽的话有些时候会报错 #程序开始 uart = UART(3,9600) #定义串口3变量 uart.init(115200, bits=8, parity=None, stop=1) # init with given parameters #红绿蓝颜色集合 thresholds = [(33, 77, 51, 127, 127, -121),#(0, 53, 127, 39, -128, 127), # generic_red_thresholds (60, 38, -50, -7, 127, -92),#(30, 7, 127, -32, 127, 14),#(30, 100, -64, -8, -32, 32), # generic_green_thresholds# (100, 72, -128