標(biāo)題: openmv舵機(jī)云臺(tái) 自動(dòng)追蹤色塊 STM32源程序 [打印本頁]

作者: LOVEqing    時(shí)間: 2019-10-13 21:05
標(biāo)題: openmv舵機(jī)云臺(tái) 自動(dòng)追蹤色塊 STM32源程序
  之前做的舵機(jī)云臺(tái)自動(dòng)瞄色塊的裝置 現(xiàn)在已經(jīng)拆掉了,所以沒有圖片

就是類似19年國賽電磁的發(fā)揮部分要求

單片機(jī)源程序如下:
  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中斷發(fā)生與否: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. }
復(fù)制代碼
  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. #關(guān)閉白平衡。白平衡是默認(rèn)開啟的,在顏色識(shí)別中,需要關(guān)閉白平衡。

  11. clock = time.clock()

  12. uart = UART(3, 115200)

  13. uart.init(115200, bits=8, parity=None, stop=1)  #8位數(shù)據(jù)位,無校驗(yàn)位,1位停止位、

  14. while(True):
  15.     clock.tick()
  16.     img = sensor.snapshot()
  17.     blob = img.find_blobs(threshold, area_threshold=300)
  18.     if blob: #如果找到了目標(biāo)顏色
  19.        # print(blob)
  20.        # uart.write("B3 B3 ")    #一幀數(shù)據(jù)的幀頭
  21.         FH = bytearray([0xb3,0xb3])
  22.         uart.write(FH)
  23.         for b in blob:
  24.         #迭代找到的目標(biāo)顏色區(qū)域
  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)
復(fù)制代碼


所有資料51hei提供下載:
原—顏色 數(shù)傳.rar (807 Bytes, 下載次數(shù): 173)
自動(dòng)瞄 - 改.7z (184.28 KB, 下載次數(shù): 164)



作者: QI0609    時(shí)間: 2019-10-19 12:19
老哥這個(gè)很厲害啊,我研究一上午他倆的通訊,你這個(gè)強(qiáng)
作者: 放眼天下    時(shí)間: 2019-11-3 17:26
這第二個(gè)文件是用python寫的嗎?
作者: LOVEqing    時(shí)間: 2020-2-29 19:34
在openmv的程序里,因?yàn)楫?dāng) x > 256時(shí),數(shù)據(jù)會(huì)超過0XFF,所以我在程序里將 x - 70;其實(shí)可以將x的百位十位個(gè)位分別求出來, 再逐個(gè)進(jìn)行傳輸。
作者: 不成佛便成魔    時(shí)間: 2020-7-8 11:22
LOVEqing 發(fā)表于 2020-2-29 19:34
在openmv的程序里,因?yàn)楫?dāng) x > 256時(shí),數(shù)據(jù)會(huì)超過0XFF,所以我在程序里將 x - 70;其實(shí)可以將x的百位十位個(gè) ...

學(xué)到了學(xué)到了/&#128077;
作者: 我愛住牛棚    時(shí)間: 2020-9-30 09:44
老哥,這個(gè)不用pid的嗎?
作者: 額外的·    時(shí)間: 2020-10-7 13:07
我愛住牛棚 發(fā)表于 2020-9-30 09:44
老哥,這個(gè)不用pid的嗎?

同問這個(gè)問題
作者: yuan8848    時(shí)間: 2024-2-1 22:28
舵機(jī)PID使用他本來自帶的嗎?




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1