久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
openMV實現舵機定位色塊STM32
[打印本頁]
作者:
yuweijun
時間:
2021-7-26 11:13
標題:
openMV實現舵機定位色塊STM32
實驗目的
:本實驗實現使用openMV檢測前方色塊,并傳回色塊的坐標位置給STM32,控制舵機轉動來跟蹤色塊。
openMV部分
import sensor, image, time
from pyb import UART
import json
red_threshold = (46, 80, 19, -5, 38, 103)
sensor.reset() # Initialize the camera sensor.
sensor.set_pixformat(sensor.RGB565) # use RGB565.
sensor.set_framesize(sensor.QQVGA) # use QQVGA for speed.
sensor.skip_frames(10) # Let new settings take affeOpenMV_Xct.
sensor.set_auto_whitebal(False) # turn this off.
clock = time.clock() # Tracks FPS.
uart = UART(3, 115200)
uart.init(115200, bits=8, parity=None, stop=1) #8位數據位,無校驗位,1位停止位
def find_max(blobs):
max_size=0
for blob in blobs:
if blob[2]*blob[3] > max_size:
max_blob=blob
max_size = blob[2]*blob[3]
return max_blob
def sending_data(cx_max,cy_max):
global uart;
data = ustruct.pack("<bbbb", #格式為倆個字符倆個短整型(2字節)
0xff,
0xfe,
int(cx_max),
int(cy_max));
#數據1
# up sample by 4#數據2LCD_ShowStringLCD_ShowString
uart.write(data); #必須要傳入一個字節數組
while(True):
clock.tick() # Track elapsed milliseconds between snapshots().
img = sensor.snapshot() # Take a picture and return the image.
blobs = img.find_blobs([red_threshold])
if blobs:
max_blob = find_max(blobs)
img.draw_cross(max_blob.cx(),max_blob.cy())
img.draw_circle(max_blob.cx(),max_blob.cy(),max_blob.cx()-max_blob.x(), color = (255, 255, 255))
X =int(max_blob.cx()-img.width()/2)
Y =int(max_blob.cy()-img.height()/2)
# FH = bytearray([0xb3,0xb3])
# uart.write(FH) #打印幀頭
data = bytearray([0xb3,0xb3,X,Y,0x5b])
uart.write(data) #打印XY軸的偏移坐標
print("X軸偏移坐標 : ",X)
print("Y軸偏移坐標 : ",Y)
print("幀率 : ",clock.fps())
sending_data(blob.X,blob.Y)
復制代碼
代碼介紹:此部分為openMV追蹤色塊(黃色)并且傳回色塊的橫坐標位置給STM32C8T6t,同時也可以用串口打印出來色塊距離中心坐標位置偏移值。
如圖所示
如果要利用串口顯示的話可以用一根杜杜邦線接openMV的P4和USB轉TTL的RXD接收端即可。
STM32部分
串口接收終端代碼
void USART1_IRQHandler(void) //串口1中斷服務程序
{
u8 com_data;
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS為真,則需要支持OS.
OSIntEnter();
#endif
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中斷(接收到的數據必須是0x0d 0x0a結尾)
{
USART_ClearFlag(USART1,USART_FLAG_RXNE);
com_data = USART1->DR;
Openmv_Receive_Data(com_data); //openmv數據處理函數
Openmv_Data(); //openmv數據處理函數
}
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS為真,則需要支持OS.
OSIntExit();
#endif
}
復制代碼
處理openMV數據代碼
#include "openmv.h"
int openmv[5];//
stm
32接收數據數組
int8_t OpenMV_X; /*OPENMV X 軸反饋坐標*/
int8_t OpenMV_Y; /*OPENMV X 軸反饋坐標*/
int i=0;
void Openmv_Receive_Data(int16_t data)//接收Openmv傳過來的數據
{
static u8 state = 0;
if(state==0&&data==0xb3)
{
state=1;
openmv[0]=data;
}
else if(state==1&&data==0xb3)
{
state=2;
openmv[1]=data;
}
else if(state==2)
{
state=3;
openmv[2]=data;
}
else if(state==3)
{
state = 4;
openmv[3]=data;
}
else if(state==4) //檢測是否接受到結束標志
{
if(data == 0x5B)
{
state = 0;
openmv[4]=data;
Openmv_Data();
}
else if(data != 0x5B)
{
state = 0;
for(i=0;i<5;i++)
{
openmv=0x00;
}
}
}
else
{
state = 0;
for(i=0;i<5;i++)
{
openmv=0x00;
}
}
}
void Openmv_Data(void)
{
OpenMV_X=openmv[2];
OpenMV_Y=openmv[3];
}
復制代碼
其他部分的代碼就很簡單,在這里只列出關鍵部分代碼
下面就是關鍵的控制舵機轉動的代碼
while (1)
{
OpenMV_X= openmv[2];
printf ("\r\n%d\r\n",OpenMV_X);
if(OpenMV_X>=0&&OpenMV_X<80)
{
s=185-OpenMV_X/16;
TIM_SetCompare1(TIM1, s);
}
if(OpenMV_X>=180)
{
s=190-(OpenMV_X-180)/16;
TIM_SetCompare1(TIM1, s);
}
}
作者:
qwe.12345678
時間:
2021-9-14 11:50
求個源碼呀,兄弟
作者:
1045964948
時間:
2021-10-20 14:40
有源碼嗎
作者:
電子設計DS
時間:
2022-2-13 17:24
求源碼大佬
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
亚洲国产成人av好男人在线观看
|
狠狠狠
|
欧美日韩中文国产一区发布
|
亚洲高清在线免费观看
|
欧美国产激情二区三区
|
日日久
|
91在线精品视频
|
亚洲精品一区二区三区中文字幕
|
国产精品成人久久久久a级 久久蜜桃av一区二区天堂
|
北条麻妃99精品青青久久主播
|
av黄色在线
|
国产 欧美 日韩 一区
|
国产在线麻豆精品入口
|
综合中文字幕
|
在线中文视频
|
日日干干
|
国产精品免费看
|
欧美成年黄网站色视频
|
亚洲视频一区二区三区
|
欧美激情啪啪
|
欧美11一13sex性hd
|
久久中文字幕一区
|
久久国产一区二区
|
91激情电影
|
美美女高清毛片视频免费观看
|
99久久久国产精品免费消防器
|
午夜精品视频在线观看
|
青青草免费在线视频
|
色橹橹欧美在线观看视频高清
|
一二三区视频
|
色综合天天天天做夜夜夜夜做
|
91久久网站
|
欧美日韩综合
|
成人精品在线观看
|
欧美中文视频
|
久久久久久九九九九九九
|
亚洲精品久久久久中文字幕欢迎你
|
国产精品国产精品国产专区不卡
|
日韩一二三区视频
|
欧美久久久网站
|
欧美高清一区
|