找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 6935|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

openmv舵機(jī)云臺(tái) 自動(dòng)追蹤色塊 STM32源程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:516644 發(fā)表于 2019-10-13 21:05 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  之前做的舵機(jī)云臺(tái)自動(dòng)瞄色塊的裝置 現(xiàn)在已經(jīng)拆掉了,所以沒(méi)有圖片

就是類似19年國(guó)賽電磁的發(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)開(kāi)啟的,在顏色識(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ù)位,無(wú)校驗(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)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏15 分享淘帖 頂3 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:504404 發(fā)表于 2019-10-19 12:19 | 只看該作者
老哥這個(gè)很厲害啊,我研究一上午他倆的通訊,你這個(gè)強(qiáng)
回復(fù)

使用道具 舉報(bào)

板凳
ID:473410 發(fā)表于 2019-11-3 17:26 | 只看該作者
這第二個(gè)文件是用python寫(xiě)的嗎?
回復(fù)

使用道具 舉報(bào)

地板
ID:516644 發(fā)表于 2020-2-29 19:34 | 只看該作者
在openmv的程序里,因?yàn)楫?dāng) x > 256時(shí),數(shù)據(jù)會(huì)超過(guò)0XFF,所以我在程序里將 x - 70;其實(shí)可以將x的百位十位個(gè)位分別求出來(lái), 再逐個(gè)進(jìn)行傳輸。

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

5#
ID:480013 發(fā)表于 2020-7-8 11:22 | 只看該作者
LOVEqing 發(fā)表于 2020-2-29 19:34
在openmv的程序里,因?yàn)楫?dāng) x > 256時(shí),數(shù)據(jù)會(huì)超過(guò)0XFF,所以我在程序里將 x - 70;其實(shí)可以將x的百位十位個(gè) ...

學(xué)到了學(xué)到了/&#128077;
回復(fù)

使用道具 舉報(bào)

6#
ID:817192 發(fā)表于 2020-9-30 09:44 | 只看該作者
老哥,這個(gè)不用pid的嗎?
回復(fù)

使用道具 舉報(bào)

7#
ID:775369 發(fā)表于 2020-10-7 13:07 | 只看該作者
我愛(ài)住牛棚 發(fā)表于 2020-9-30 09:44
老哥,這個(gè)不用pid的嗎?

同問(wèn)這個(gè)問(wèn)題
回復(fù)

使用道具 舉報(bào)

8#
ID:1110541 發(fā)表于 2024-2-1 22:28 | 只看該作者
舵機(jī)PID使用他本來(lái)自帶的嗎?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表