之前的文章篇幅实在有点太大,找起东西来不太方便,我们接着新开的内容继续描述:

接下来我们要进行的内容是目标跟随,但是目前得到的问题是我们不知道我们要跟随的物体是不是固定的,所以我们先用颜色识别来替代 (所要寻找的东西为橙色的物体,同时,我们要用K210直接驱动我们的舵机,来让摄像头跟随着物体)

1. 物体的颜色识别:

我们使用寻找最大色块的代码,来追踪我们的物体


import sensor,lcd,time
import gc,sys
import ustructfrom machine import UART,Timer
from fpioa_manager import fm#映射串口引脚
fm.register(6, fm.fpioa.UART1_RX, force=True)
fm.register(7, fm.fpioa.UART1_TX, force=True)
uart = UART(UART.UART1, 115200, read_buf_len=4096)#摄像头初始化
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_vflip(1) #后置模式,所见即所得
sensor.set_auto_whitebal(False)#白平衡关闭#lcd初始化
lcd.init()
# 颜色识别阈值 (L Min, L Max, A Min, A Max, B Min, B Max) LAB模型
# 此处识别为橙色,调整出的阈值,全部为红色
barries_red = (20, 100, -5, 106, 36, 123)clock=time.clock()#打包函数
def send_data_wx(x,a):global uart;data = ustruct.pack("<bbhhhhb",0x2c,0x12,int(x),int(a),0x5B)uart.write(data);#找到最大色块函数
def find_max(blods):max_size=0for blob in blobs:if blob.pixels() > max_size:max_blob=blobmax_size=blob.pixels()return max_blobwhile True:clock.tick()img=sensor.snapshot()#过滤blods = img.find_blobs([barries_red],x_strid=50)blods = img.find_blobs([barries_red],y_strid=50)blods = img.find_blobs([barries_red],pixels_threshold=100)blods = img.find_blobs([barries_red],area_threshold=60)blobs = img.find_blobs([barries_red])  #找到阈值色块cx=0;cy=0;if blobs:max_blob = find_max(blobs) #找到最大色块cx=max_blob[5]cy=max_blob[6]cw=max_blob[2]ch=max_blob[3]img.draw_rectangle(max_blob[0:4])img.draw_cross(max_blob[5],max_blob[6])lcd.display(img)     #LCD显示图片print(max_blob[5],max_blob[6])send_data_wx(max_blob[5],max_blob[6])

2. 舵机的驱动代码:

from machine import Timer,PWM
import time
#PWM 通过定时器配置,接到 IO17 引脚tim = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PWM)
S1 = PWM(tim, freq=50, duty=0, pin=17)
'''
说明:舵机控制函数
功能:180 度舵机:angle:-90 至 90 表示相应的角度360 连续旋转度舵机:angle:-90 至 90 旋转方向和速度值。【duty】占空比值:0-100
'''def Servo(servo,angle):S1.duty((angle+90)/180*10+2.5)while True:#-45 度Servo(S1,-45)time.sleep(2)#0 度Servo(S1,0)time.sleep(2)#45 度Servo(S1,45)time.sleep(2)

我们通过文档来看一下,该如何使用180°舵机:

舵机驱动,需要3根线(GND VC++(5V) 信号(P17))

180°舵机的控制一般需要一个 20ms 左右的时基脉冲,该脉冲的高电平部分一般为 0.5ms-2.5ms 范围内的角度控制脉冲部分,总间隔为 2ms 。以 180 度角度伺服为例,在 MicroPython 编程对应的控制关系是从 -90 °至 90°.
tim = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PWM)#配置定时器
S1 = PWM(tim, freq=50, duty=0, pin=17) #开启S1口的PWM控制

开启S1(Pin17的PWM,设置初始占空比为0)

PWM 对象在 machine 模块下。
【tim】K210 的 PWM 依赖于定时器来产生波形,在上方设置
【freq】PWM 频率
【duty】PWM 占空比
【pin】PWM 输出引脚

【enable】是否在构建对象后立即产生波形,默认 True。

在软件内,这些角度都是已经被封装好的,我们可以直接通过PWM来驱动舵机,流程图如下:

其中:

def Servo(servo,angle):S1.duty((angle+90)/180*10+2.5)

这个代码是我们来计算转的角度,调用他,我们就可以直接转到我们需要的角度,其中 0就是我们的居中位(servo是我们的位置,angle则是转的角度)

=====>> to be continue...

OpenMV入门(下)相关推荐

  1. Qt学习之Qt基础入门(下)

    1. 前言 前两篇博客简单的阐述了一下Qt的入门用法,这篇博客继续跟着视频学习. Qt入门系列: Qt学习之C++基础 Qt学习之Qt安装 Qt学习之Qt基础入门(上) Qt学习之Qt基础入门(中) ...

  2. Openmv入门01——HAL库stm32

    Openmv入门01 开启一个项目 Openmv程序 1.识别长度 2.识别面积 STM32 1.识别长度 2.识别面积 开启一个项目 看看例程~很快上手https://docs.singtown.c ...

  3. OpenMV入门介绍

    目录 一.OpenMV是什么 二.OpenART mini与OpenMV对比 三.图像处理背景知识 1.像素和分辨率 2. 帧率 3.RGB三原色 4.LAB颜色空间 四.OpenMV图像处理方法 1 ...

  4. mysql 同一张表 某个字段更新到另一条数据上_面试基础:数据库MySQL基础入门(下)...

    本文是面试基础的第二篇.本篇偏理论,包括三节: 事务和并发 数据库设计 索引 所选的三个内容均是面试的高频考察点,需要细致地理解 No.1     事务和并发 事务:数据库操作的基本单元.对于数据库的 ...

  5. 一、基础入门下------------视频处理

    1.cv2.VideoCapture类函数介绍* cv2.VideoCpature类的常用函数包括初始化.打开.帧捕获.释放和属性设置等. 1.1初始化 捕获对象 = cv2.VideoCapture ...

  6. 【菜鸟教程】Dubbo基础入门下——Dubbo的入门案例

    hm视频还是有点粗-源码分析跟没讲一样 要学深入的话还是买书吧 Dubbo高可用 服务路由 服务路由包含一条路由规则,路由规则决定了服务消费者的调用目标,即规定了服务消费者可调用哪些服务提供者,Dub ...

  7. JavaScript的入门(下)

    目录 一.JavaScript的内置对象-----Array 二.JavaScript自定义对象的方式 1.第一种表示方式:function 对象名(形式列表...) 2.第二种表示方式:定义对象的时 ...

  8. 崔毅东 C++程序设计入门(下) 第9单元:白公曾咏牡丹芳,一种鲜妍独“异常” 笔记

    第01节:概览异常 QuotientWithException.cpp #include <iostream> using namespace std;int main() {// Rea ...

  9. 第一周 Web开发入门(下)

    七.JavaScript对象模型---BOM对象 使JavaScript可以与浏览器进行对话. 1.window对象 window.innerHeight - 浏览器窗口的内高度(以像素计) wind ...

最新文章

  1. C++11中std::async的使用
  2. LSTM 时间序列数据的异常检测
  3. spring boot 传递 List参数
  4. Swift数据类型_整型和浮点型
  5. 每日一题(22)——malloc与free(三)
  6. j2me模拟器java游戏存档修改_单机游戏存档修改
  7. 三星智能共享计算机软件,Samsung Smart View
  8. SetTimer函数的用法
  9. hub设备_铝合金机身,既是HUB也是充电器,ORICO A3H7体验
  10. 十折交叉验证 matlab,Matlab 十折交叉验证
  11. Android应用帧率--FPS测试
  12. CSDN(Markdown编辑)怎样打出各种表情符号和文章目录【图文】
  13. 中二青年付杰的逆袭故事:从二本生到 ICLR 杰出论文奖,我用了20年
  14. vivo是安卓手机吗_拜托你看看vivo手机自带的翻译功能,这么强大的功能浪费了合适吗...
  15. SpringBoot2 核心知识点
  16. 伽马函数公式 ∫x^ne^{-x}dx=n!
  17. 推荐计算机 在线使用方法,在线记笔记平台推荐:如何优雅地用电脑记笔记
  18. 埃拉托色尼筛选法------筛选质数
  19. 二十一世纪“新元宇宙”奇科幻小说原创作品系列连载【第一部】第二回 登峰时刻
  20. linux tc流量控制(一):classless qdisc

热门文章

  1. linux 使用usb转串口模块并读串口数据
  2. C语言实现秒与时间的互相转换
  3. 荟聚新动能 数创新经济 2022全国工业App和信息消费大赛在湖南株洲举行
  4. Git常用操作速查,没有人比我更简单!!
  5. Java毕业设计-图片生成MP4格式视频
  6. 历年 ESRI 开发者大会 网盘资料
  7. PAT日志 1042
  8. C语言初学者如何做出美观的图形界面(附源码及完整文件)
  9. 基于kali2020环境,熟悉数据库服务的部署及基本验证方法及访问数据库
  10. 学生信息管理系统(一)