毕设分享 stm32与openmv的目标跟踪系统

这篇具有很好参考价值的文章主要介绍了毕设分享 stm32与openmv的目标跟踪系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文章目录

  • 0 前言
  • 课题简介
  • 设计框架
  • 3 硬件设计
  • 4 软件设计
  • * 对被测物体的识别
    
    • 判断被测物体所在区域
  • 5 最后

0 前言

🔥
这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

🚩 基于stm32与openmv的目标跟踪系统

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:5分

openmv识别小球,课程设计,目标跟踪,单片机

🧿 项目分享:

https://gitee.com/sinonfin/sharing文章来源地址https://www.toymoban.com/news/detail-650151.html

课题简介

随着智能化技术的迅猛发展,网络智能视频监控系统也得到了广泛的应用。视频监控系统经历了从模拟化向数字化、网络化、智能化的发展过程,目标检测和跟踪技术是计算机视觉的重要组成部分,也是实现监控系统智能化的基础,因其广泛的应用前景而成为近年来的研究热点。本文通过OpenMV作为是识别模块去识别被测物体(以红色小球为例),当其识别到红色小球后,判断小球中心点所在的区域信息,并将其区域标志位通过串口发送给STM32,当STM32接收到位置信息后对x轴、y轴的两个舵机参数进行操作,最后通过定时器输出合适的PWM波,控制舵机旋转相应的角度,使OpenMV摄像头对准被测物体,以实现物体追踪功能。

设计框架

主要分为两个方面:一个是OpenMV识别部分,另一个是STM32控制部分。通过OpenMV对被测物体进行捕捉,所用的被测物体为红色小球,OpenMV编程时,先对红色的色域进行调整,在识别到红色后,对红色进行判断,判断出识别区域中红色区域最大的部分,此举在过滤掉背景中存在小部分红色区域,造成对识别的干扰,识别到红色小球后,用矩形框将其框住,并显示矩形框的中心位置,判断中心位置所在区域,并将区域的标志信息会通过串口传递给STM32,STM32接收到数据后进行相应动作,使定时器输出PWM波,控制舵机旋转相应的角度,使OpenMV摄像头对准被测物体,以实现物体追踪功能。主要研究内容如下:

  • 1.通过OpenMV识别出被测物体(以红色小球为例)。
  • 2.在OpenMV识别出目标物体后,判断物体所在区域,将区域信息通过串口传输给STM32。
  • 3.利用STM32的串口部分的应用及原理知识,对接收到的数据进行处理。
  • 4.利用STM32的应用及原理知识,对处理好的数据进行判断后,对舵机进行控制。
  • 5.利用STM32的定时器部分和PWM控制的应用及原理知识,控制舵机,使其转动适当角度,使OpenMV对准目标物体。主控制图如图所示。

openmv识别小球,课程设计,目标跟踪,单片机
舵机控制逻辑

openmv识别小球,课程设计,目标跟踪,单片机

3 硬件设计

硬件连接部分使用杜邦线连接,连接如下:3S锂电池接稳压板输入端以及直接给LED补光板供电,稳压板输出端接OpenMV的VIN和GND引脚、STM32的5V和GND引脚以及两个舵机的正(红色)负(棕色)极。OpenMV的P4引脚(串口3的TX)接STM32的PA10引脚(串口1的RX),OpenMV的P5引脚(串口3的RX)接STM32的PA9引脚(串口1的TX),STM32的PC7引脚(定时器3通道2)接x轴的舵机的信号线(橙黄色),STM32的PC7引脚(定时器3通道1)接y轴的舵机的信号线(橙黄色)。

openmv识别小球,课程设计,目标跟踪,单片机
openmv识别小球,课程设计,目标跟踪,单片机

4 软件设计

软件部分的功能主要分为两部分,一个是OpenMV部分,另一是STM32部分,OpenMV主要实现功能:完成被测物体的识别、寻找最大色块区域、判断被测物体所在区域、通过串口发送被测物体的位置信息。STM32部分主要实现功能:使用串口接收OpenMV发来的数据、通过定时器输出PWM波、以及实现控制舵机旋转追踪的目的。

整体逻辑

openmv识别小球,课程设计,目标跟踪,单片机

对被测物体的识别

本设计中被测物体为一个红色小球,因此对于物体的识别主要为颜色识别,在编程中首先需要对OpenMV的红色的阈值进行调整,意在告诉OpenMV“什么是红色”,打开阈值编辑器,对LAB的阈值进行调整,使二进制图像中只有红色区域的映像
openmv识别小球,课程设计,目标跟踪,单片机

import sensor, image, time, pyb
ensor.reset() # 初始化摄像头传感器.
sensor.set_pixformat(sensor.RGB565) # 使用RGB565.
sensor.set_framesize(sensor.QVGA) # 分辨率:320*240
sensor.skip_frames(10) # 让新设置生效.
sensor.set_auto_whitebal(False) # 关闭自动白平衡.
clock = time.clock() # Tracks FPS.
red_threshold = (14, 68, 11, 70, 9, 56)  #红色阈值设定
while(True):
img = sensor.snapshot()  # 拍照并返回图像.
blobs = img.find_blobs([red_threshold])
img.draw_rectangle(blobs)
img.draw_cross(blobs.cx(), blobs.cy())

判断被测物体所在区域

openmv识别小球,课程设计,目标跟踪,单片机
openmv识别小球,课程设计,目标跟踪,单片机

import sensor, image, time, pyb
from pyb import UART

red_threshold = (14, 68, 11, 70, 9, 56) #红色阈值设定

sensor.reset() # 初始化摄像头传感器.
sensor.set_pixformat(sensor.RGB565) # 使用RGB565.
sensor.set_framesize(sensor.QVGA) # 使用QVGA.
sensor.skip_frames(10) # 让新设置生效.
sensor.set_auto_whitebal(False) # 关闭自动白平衡.
clock = time.clock() # Tracks FPS.

uart = UART(3, 115200)
def find_max(blobs):
    max_size=0
    for blob in blobs:
        if blob.pixels() > max_size:
            max_blob=blob
            max_size = blob.pixels()
    return max_blob

led = pyb.LED(1)
while(True):
    img = sensor.snapshot() # 拍照并返回图像.
    blobs = img.find_blobs([red_threshold])
    x_max = 320
    x_min = 0
    x_1 = 115
    x_2 = 185

    y_max = 240
    y_min = 0
    y_1 = 95
    y_2 = 145

    if blobs:
        max_blob=find_max(blobs)
        print('sum :', len(blobs))
        img.draw_rectangle(max_blob.rect())
        img.draw_cross(max_blob.cx(), max_blob.cy())
        if max_blob.cx()>= x_min  and max_blob.cx() <= x_1 and\
max_blob.cy() >= y_2 and max_blob.cy() <= y_max :
            flag = 1
        if max_blob.cx()>= x_2 and max_blob.cx() <= x_max and\
 max_blob.cy() >= y_2 and max_blob.cy() <= y_max :
            flag = 2
        if max_blob.cx()>= x_min and max_blob.cx() <= x_1 and\
 max_blob.cy() >= y_min and max_blob.cy() <= y_1 :
            flag = 3
        if max_blob.cx()>= x_2 and max_blob.cx() <= x_max and \
max_blob.cy() >= y_min and max_blob.cy() <= y_1 :
            flag = 4
        if max_blob.cx()> x_1 and max_blob.cx() < x_2 and\
 max_blob.cy() > y_1 and max_blob.cy() < y_2 :
            flag = 5
        output_str="%d" %flag 
        led.on()
        print('you send:',output_str)
        uart.write(output_str+'\r\n')
    else:
        print('not found!')
        led.off()
STM32程序:

main.c:
#include "STM32f10x.h"
#include "control.h"
#include "Systick.h"
#include "usart.h"		
#include "pwm.h"

int main()
{
	Systick_init(72);
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中断优先级分组 
	USART1_Init(115200);	
	TIM3_CH2_PWM_Init(20000-1,72-1); //20ms
	TIM3_CH1_PWM_Init(20000-1,72-1);
	//舵机角度参数:19500-17500(前者为0°,后者为180°)
	TIM_SetCompare2(TIM3,19500);//x轴角度初始化,下面的舵机。
	TIM_SetCompare1(TIM3,18700);//y轴角度初始化,上面的舵机。
	Delay(2500);
	while(1);
}

pwm.c:
#include "pwm.h"

void TIM3_CH2_PWM_Init(u16 per,u16 psc)//控制x轴舵机(引脚:PC7)
{
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	TIM_OCInitTypeDef TIM_OCInitStructure;
	GPIO_InitTypeDef GPIO_InitStructure;
	/* 开启时钟 */
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
/* GPIO配置 */
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出
	GPIO_Init(GPIOC,&GPIO_InitStructure);	
/* GPIO重映射 */
	GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);//改变指定管脚的映射	
	TIM_TimeBaseInitStructure.TIM_Period=per;   //自动装载值
	TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //分频系数
	TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
	TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;  
	TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);	
/* PWM参数配置 */
	TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
	TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;
	TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
	TIM_OC2Init(TIM3,&TIM_OCInitStructure); //输出比较通道2初始化
	TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable); 
	TIM_ARRPreloadConfig(TIM3,ENABLE);//使能预装载寄存器	
	TIM_Cmd(TIM3,ENABLE); //使能定时器
}

openmv识别小球,课程设计,目标跟踪,单片机
openmv识别小球,课程设计,目标跟踪,单片机

5 最后

🧿 项目分享:

https://gitee.com/sinonfin/sharing

到了这里,关于毕设分享 stm32与openmv的目标跟踪系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 毕业设计 单片机与OpenMV机器视觉目标跟踪系统

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月03日
    浏览(34)
  • stm32毕设分享 单片机 图像分类 智能识别机器人 - 物联网 深度学习 AI

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年01月16日
    浏览(67)
  • 毕设开题分享 STM32的wifi照明控制系统 - 智能路灯(毕设分享)

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月19日
    浏览(57)
  • stm32毕设分享 stm32人体健康状态检测系统(项目开源)

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月07日
    浏览(36)
  • stm32毕设分享 STM32智能饮水机控制系统(源码+硬件+论文)

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月05日
    浏览(29)
  • stm32毕设分享 火灾报警系统设计与实现

    Hi,大家好,这里是丹成学长,今天向大家介绍一个 单片机项目 基于单片机的火灾报警系统设计与实现 大家可用于 课程设计 或 毕业设计 🧿 项目分享: https://gitee.com/sinonfin/sharing 火灾是指在时间或空间上失去控制的燃烧所造成的灾害。在各种灾害中,火灾是最经常、最普

    2024年02月04日
    浏览(45)
  • 毕设开题分享 stm32智能语音垃圾分类系统(项目开源)

    Hi,大家好,这里是丹成学长,今天向大家介绍一个 单片机项目 毕业设计 stm32智能语音垃圾分类系统(项目开源) 大家可用于 课程设计 或 毕业设计 🧿 项目分享: https://gitee.com/sinonfin/sharing 学长设计的系统主要使用 stm32单片机为基础设计并开发一个智能垃圾桶系统。该系

    2024年01月23日
    浏览(59)
  • 毕设开题分享 STM32坐姿疲劳提醒系统(源码+硬件+论文)

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年01月18日
    浏览(30)
  • 物联网毕设 -- 智能语音台灯系统(语音识别+蓝牙+STM32)

    目录 前言 一 连线图 1 原理图 2 PCB效果(开发板不适应) 3 实物效果 4 APP界面 5 功能概括 (1) 硬件端 (2) APP端 (3) 语音控制端 (4) 演示视频 二 底层代码使用方式 1. 使用说明 2. 下载程序 三 APP使用方式 下载APP (1)操作方式 (2)使用说明  四 程序架构及修改(通用

    2024年02月21日
    浏览(34)
  • stm32毕设分享 Stm32酒驾检查系统 - 单片机 嵌入式 物联网

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年01月23日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包