找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6869|回复: 7
收起左侧

openmv舵机云台 自动追踪色块 STM32源程序

  [复制链接]
ID:516644 发表于 2019-10-13 21:05 | 显示全部楼层 |阅读模式
  之前做的舵机云台自动瞄色块的装置 现在已经拆掉了,所以没有图片

就是类似19年国赛电磁的发挥部分要求

单片机源程序如下:
  1. #include "control.h"

  2. u8 key = 0;
  3. u8 mode = 0;
  4. u8 sign = 0;
  5. u16 mode_r = 0;
  6. u16 mode_p = 0;

  7. void TIM1_UP_IRQHandler(void)   //TIM1中断
  8. {
  9.         if(TIM_GetITStatus(TIM1,TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
  10.         {
  11.                         TIM_ClearITPendingBit(TIM1,TIM_IT_Update);  //清除TIMx的中断待处理位:TIM 中断源                 
  12.                         key = KEY_Scan();
  13.                   mode = click_N_Double(50);

  14.                         if(key == 1)
  15.                         {
  16.                                 LED0 = 1;
  17.                                 mode_r++;
  18.                                 if(mode_r <= 6)
  19.                                         roll = 1500 + 110 * mode_r; //9.9度
  20.                                 if(mode_r > 6)
  21.                                         roll = 1500 - 110 * (mode_r - 6);
  22.                                 if(mode_r > 12)
  23.                                 {
  24.                                         roll = 1500;
  25.                                         mode_r = 0;
  26.                                 }
  27.                                 delay_ms(100);
  28.                                 LED0 = 0;
  29.                         }
  30.                         if(key == 2)
  31.                         {
  32.                                 LED1 = 1;
  33.                                 mode_p++;
  34.                                 if(mode_p <= 3)
  35.                                         pitch = 1000 + 110 * mode_p; //9.9度
  36.                                 if(mode_p > 3)
  37.                                         pitch = 1000 - 110 * (mode_p - 3); //9.9度
  38.                                 if(mode_p > 6)
  39.                                 {
  40.                                         pitch = 1000;
  41.                                         mode_p = 0;
  42.                                 }
  43.                                 delay_ms(100);
  44.                                 LED1 = 0;
  45.                         }
  46.                         
  47.                  if(key == 3)
  48.                  {
  49.                          LED0 = 1;
  50.                          LED1 = 1;
  51.                          TIM_SetCompare1(TIM4,roll);
  52.                          TIM_SetCompare2(TIM4,pitch);
  53.                          delay_ms(100);
  54.                          LED0 = 0;
  55.                          LED1 = 0;
  56.                  }
  57.                  if(mode == 2)
  58.                          sign = 1;
  59.                  if(sign == 1)
  60.                         autoaid();
  61.         }
  62. }

  63. void autoaid(void)
  64. {
  65.         delay_ms(100);
  66.         if(OpenMV_Rx_BUF[0] < 140)
  67.         {
  68.                 roll += 33;
  69.                 if(roll >= 2160)
  70.                         roll -= 33;
  71.                 TIM_SetCompare1(TIM4,roll);
  72.         }
  73.         if(OpenMV_Rx_BUF[0] > 180)
  74.         {
  75.                 roll -= 33;
  76.                 if(roll <= 840)
  77.                         roll += 33;
  78.                 TIM_SetCompare1(TIM4,roll);
  79.         }
  80.         if(OpenMV_Rx_BUF[1] < 90)//0x5F 95
  81.         {
  82.                 pitch += 33;
  83.                 if(pitch >= 1440)
  84.                         pitch -= 33;
  85.                 TIM_SetCompare2(TIM4,pitch);
  86.         }
  87.         if(OpenMV_Rx_BUF[1] > 140)//0x87  135
  88.         {
  89.                 pitch -= 33;
  90.                 if(pitch <= 670)
  91.                         pitch += 33;
  92.                 TIM_SetCompare2(TIM4,pitch);
  93.         }
  94. }
复制代码
  1. import sensor, image, time
  2. from pyb import UART
  3. import json

  4. threshold = [(32, 60, 127, 41, -128, 127)]

  5. sensor.reset()
  6. sensor.set_pixformat(sensor.RGB565)
  7. sensor.set_framesize(sensor.QVGA)
  8. sensor.skip_frames(time = 2000 )
  9. sensor.set_auto_whitebal(False)
  10. #关闭白平衡。白平衡是默认开启的,在颜色识别中,需要关闭白平衡。

  11. clock = time.clock()

  12. uart = UART(3, 115200)

  13. uart.init(115200, bits=8, parity=None, stop=1)  #8位数据位,无校验位,1位停止位、

  14. while(True):
  15.     clock.tick()
  16.     img = sensor.snapshot()
  17.     blob = img.find_blobs(threshold, area_threshold=300)
  18.     if blob: #如果找到了目标颜色
  19.        # print(blob)
  20.        # uart.write("B3 B3 ")    #一帧数据的帧头
  21.         FH = bytearray([0xb3,0xb3])
  22.         uart.write(FH)
  23.         for b in blob:
  24.         #迭代找到的目标颜色区域
  25.             img.draw_rectangle(b[0:4]) # rect
  26.             img.draw_cross(b[5], b[6]) # cx, cy
  27.             x = b.cx()
  28.             y = b.cy()
  29.             #area = b.area()
  30.             if x >= 256:
  31.                 x -= 70
  32.             if x < 256:
  33.                 print(x, y,'\n')
  34.                 data = bytearray([x,y])
  35.                 uart.write(data)
复制代码


所有资料51hei提供下载:
原—颜色 数传.rar (807 Bytes, 下载次数: 173)
回复

使用道具 举报

ID:504404 发表于 2019-10-19 12:19 | 显示全部楼层
老哥这个很厉害啊,我研究一上午他俩的通讯,你这个强
回复

使用道具 举报

ID:473410 发表于 2019-11-3 17:26 | 显示全部楼层
这第二个文件是用python写的吗?
回复

使用道具 举报

ID:516644 发表于 2020-2-29 19:34 | 显示全部楼层
在openmv的程序里,因为当 x > 256时,数据会超过0XFF,所以我在程序里将 x - 70;其实可以将x的百位十位个位分别求出来, 再逐个进行传输。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:480013 发表于 2020-7-8 11:22 | 显示全部楼层
LOVEqing 发表于 2020-2-29 19:34
在openmv的程序里,因为当 x > 256时,数据会超过0XFF,所以我在程序里将 x - 70;其实可以将x的百位十位个 ...

学到了学到了/&#128077;
回复

使用道具 举报

ID:817192 发表于 2020-9-30 09:44 | 显示全部楼层
老哥,这个不用pid的吗?
回复

使用道具 举报

ID:775369 发表于 2020-10-7 13:07 | 显示全部楼层
我爱住牛棚 发表于 2020-9-30 09:44
老哥,这个不用pid的吗?

同问这个问题
回复

使用道具 举报

ID:1110541 发表于 2024-2-1 22:28 | 显示全部楼层
舵机PID使用他本来自带的吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表