使用OpenMV与STM32通讯实现舵机跟随颜色块转动【HAL库】- 二维自由度舵机控制【2】
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新
如果你需要这些资料,可以戳这里获取
所需要的元器件

整体思路
- 先编写openmv的代码,实现特定颜色识别,并把坐标值通过串口发送出去;
- 之后在cube上配置相关stm32的初始化设置,并生成代码;
- 在keil里编写串口中断接收函数,将串口1用于接收openmv发送来的数据,并编写舵机控制程序;
- 烧录程序实现效果,并改进出现的问题。
接线方式
完成效果
openmv识别特定颜色的物体,并把其坐标发送给stm32,单片机读取后控制舵机转动,实现定向跟随效果。
Cube配置
- 串口
2. 定时器
代码解析
import sensor, image, time
from pyb import UART
import json
threshold = [(6, 16, 19, 63, 4, 25)]
sensor.reset()
sensor.set\_pixformat(sensor.RGB565)
sensor.set\_framesize(sensor.QVGA)
sensor.skip\_frames(time = 2000 )
sensor.set\_auto\_whitebal(False)
clock = time.clock()
uart = UART(3, 115200)
uart.init(115200, bits=8, parity=None, stop=1) #8位数据位,无校验位,1位停止位、
while(True):
clock.tick()
img = sensor.snapshot()
blob = img.find\_blobs(threshold, area_threshold=300)
if blob: #如果找到了目标颜色
FH = bytearray([0xb3,0xb4])
uart.write(FH)
for b in blob:
#迭代找到的目标颜色区域
img.draw\_cross(b[5], b[6]) # cx, cy
img.draw\_edges(b.min\_corners(), color=(0,255,0))
x = b.cx()
y = b.cy()
data = bytearray([x,y])
uart.write(data)
end = bytearray([0x01,0x01,0xb5,0xb6])
uart.write(end)
void HAL\_UART\_RxCpltCallback(UART_HandleTypeDef \*huart) //opmv-receive
{
if(huart==&huart1)
{
HAL\_UART\_Receive\_IT(&huart1,&my_re_buf1[++pt_w1],1);
trans(my_re_buf1[pt_w1]);
}
}
void measure(void)
{
if(m>6){
if(x<130&&x>10){
if(servo_angle<90){
servo_angle+=5;
MG996R\_Set\_Angle(servo_angle); //SERVO
}
}else if(x>170&&x<300){
if(servo_angle>-90){
servo_angle-=5;
MG996R\_Set\_Angle(servo_angle); //SERVO
}
}
m=0;


**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618679757)**
程,涵盖了95%以上物联网嵌入式知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618679757)**
作者:普通网友