基于AdruinoUNO的云台+摄像头追踪|ArduinoUNO、Openmv

5 篇文章 0 订阅
1 篇文章 0 订阅

作品介绍: :

作品介绍:基于Arduino UNO的云台与OpenMV摄像头追踪系统**。

关键组件:
1. Arduino UNO: 作为主控制器,负责控制云台的运动和与OpenMV模块的通信。
2. OpenMV模块:这是一种基于ARM处理器的高性能计算机视觉模块,能够进行实时图像处理和目标识别。它通过串口与Arduino通信,将处理后的图像信息传送给云台控制系统。
3. 舵机云台: 用于安装摄像头和调整其方向。Arduino通过PWM信号控制舵机,使摄像头能够在水平和垂直方向上进行精确的旋转。

4. 摄像头:通常采用OpenMV内置的摄像头或外部USB摄像头,用于捕获环境中的图像,提供给OpenMV模块进行处理。

工作原理:
1. 图像捕获与处理:摄像头捕获环境中的图像,传送给OpenMV模块。OpenMV模块通过算法处理图像,识别并定位需要追踪的目标。

2. 目标追踪算法:OpenMV模块使用预先定义的算法(如色彩追踪、Haar级联检测等)来识别目标物体的位置。一旦目标被识别和定位,OpenMV将目标的坐标信息发送给Arduino UNO。

3. 云台控制:Arduino UNO接收到OpenMV发送的目标坐标信息后,计算云台需要调整的角度和方向。然后通过控制舵机云台的PWM信号,使摄像头对准目标物体。

4. 实时调整与反馈:系统通过持续的图像处理和云台调整,实现对目标物体的实时追踪和跟随。任何目标位置的变化都会导致云台重新计算并调整。

应用领域:
这种基于Arduino UNO和OpenMV的云台与摄像头追踪系统可以广泛应用于以下领域:
自动化监控系统:用于跟踪和监控特定区域内的活动或人员。
摄影与录像:在拍摄视频或拍摄静态图像时,保持摄像机对焦在特定目标上。
机器人导航:在机器人技术中,用于避障、追踪运动目标等。

一、硬件部分:

1.材料:一个openmv,一个二自由度的云台

2.AdruinoUNO开发板

二、软件部分:

1.AdruinoUNO部分:用于云台的控制和接收openmv传来的数据,并进行移动


#include <Servo.h>            //加载文件库
#include <SoftwareSerial.h>
int pos = 0;
Servo myservo;
SoftwareSerial mySerial(2,3);//RX=2,TX=3
int p,m;
void setup(){
  Serial.begin(115200);
  mySerial.begin(115200);
  myservo.attach(9, 500, 2500);
}
 
void loop(){
    while (Serial.available() > 0) {   // 串口收到字符数大于零。
    p = Serial.parseInt();      // 在串口数据流中查找一个有效整数。
    if (Serial.available() != "#")
    {
      Serial.println(p);         //打印接收到的数字
    }
    m = int(0.8*(p-120));
    myservo.write(0.8*(p-120));
    }
    p = 0;
    // while (mySerial.available() > 0)
    // {
    //   p = Serial.parseInt();
    //   Serial.println(p); 
    //   myservo.write(p);
    //   delay(10);
    // }
} 

2.openmv部分(寻找红色色块并发送坐标)

# 颜色阈值示例

import sensor, image, time
from pyb import UART
from pyb import LED
# 初始化摄像头和串口
sensor.reset()
sensor.set_framesize(sensor.QQVGA)
sensor.set_pixformat(sensor.RGB565)
#sensor.rotate(180)
uart = UART(3, 115200)
uart.init(115200, bits=8, parity=None, stop=1)

# 设置颜色阈值 (minL, maxL, minA, maxA, minB, maxB)
red_threshold = (39, 55, 9, 60, 1, 22)  # L A B

sensor.skip_frames(time=2000)  # 等待摄像头稳定
clock = time.clock()
red_led   = LED(1)
green_led = LED(2)
blue_led  = LED(3)
ir_led    = LED(4)
while True:
    clock.tick()
    img = sensor.snapshot()#.rotate(angle(180))  # 拍摄一张图像
    img = img.rotation_corr(180) 
    # 查找矩形并发送矩形中心点的 x 坐标到串口
    for r in img.find_rects(threshold=20000):
        blobs = img.find_blobs([red_threshold], pixels_threshold=200, area_threshold=200, merge=True)
        if blobs:
            for b in blobs:
                img.draw_rectangle(b.rect())
                img.draw_cross(b.cx(), b.cy())
                uart.write("#")
                uart.write(str(b.cx()))  # 将矩形中心点的 x 坐标发送到串口
                print(b.cx())  # 打印中心点 x 坐标到控制台  # 将 x 坐标转换为字符串并发送到串口
    # 若要查找圆形并发送圆心 x 坐标到串口,取消以下代码的注释
    # for c in img.find_circles(threshold=3500, x_margin=10, y_margin=10, r_margin=10,
    #                           r_min=2, r_max=100, r_step=2):
    #     img.draw_cross(c.x(), c.y())  # 绘制圆心标记
    #     print(c.x(), c.y())  # 打印圆形检测结果的 x 坐标
    #     x = c.x()
    #     uart.write("#")
    #     uart.write("#")
    #     uart.write("#")
    #     uart.write(str(x))  # 将 x 坐标转换为字符串并发送到串口

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值