加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專(zhuān)業(yè)用戶(hù)
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入

19.3-【星曈科技】openmv Hopenmv發(fā)送五個(gè)uchar Openmv+STM32循跡

06/25 09:31
1809
服務(wù)支持:
技術(shù)交流群

完成交易后在“購(gòu)買(mǎi)成功”頁(yè)面掃碼入群,即可與技術(shù)大咖們分享疑惑和經(jīng)驗(yàn)、收獲成長(zhǎng)和認(rèn)同、領(lǐng)取優(yōu)惠和紅包等。

虛擬商品不可退

當(dāng)前內(nèi)容為數(shù)字版權(quán)作品,購(gòu)買(mǎi)后不支持退換且無(wú)法轉(zhuǎn)移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論
放大
實(shí)物圖
相關(guān)方案
  • 方案介紹
    • 第19章-OpenMV視覺(jué)循跡功能
  • 相關(guān)文件
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜
19.3-【星曈科技】openmv Hopenmv發(fā)送五個(gè)uchar Openmv+STM32F103C8T6視覺(jué)巡線(xiàn)小車(chē) STM32循跡小車(chē)系列教程 使用OpenMV循跡 openMV尋跡與小車(chē)控制
這個(gè)是全網(wǎng)最詳細(xì)的STM32項(xiàng)目教學(xué)視頻。
第一篇在這里:
視頻在這里:


STM32智能小車(chē)V3-STM32入門(mén)教程-openmv與STM32循跡小車(chē)-stm32f103c8t6-電賽 嵌入式學(xué)習(xí) PID控制算法 編碼器電機(jī) 跟隨

第19章-OpenMV視覺(jué)循跡功能

19.3-openmv發(fā)送五個(gè)uchar

openmv 通過(guò)串口發(fā)送數(shù)據(jù)格式:幀頭+一個(gè)字節(jié) +一個(gè)字節(jié)+一個(gè)字節(jié)+一個(gè)字節(jié)+一個(gè)字節(jié)+幀尾。

把上面識(shí)別的數(shù)據(jù)發(fā)送出來(lái)結(jié)合電腦串口上位機(jī)調(diào)試、顯示上位機(jī)上

前面我們通過(guò)openmv 識(shí)別到線(xiàn)的相對(duì)位置,那么現(xiàn)在要openmv 把上面的信息發(fā)給STM32,然后STM32接受到信息知道線(xiàn)位置才能更好控制電機(jī)運(yùn)動(dòng)。
如何完成通信 發(fā)送什么數(shù)據(jù)
在這里插入圖片描述
如何驗(yàn)證發(fā)送正確的數(shù)據(jù)了

把openmv 的串口連接串口上位機(jī),通過(guò)上位機(jī)接收數(shù)據(jù),查看數(shù)據(jù)是否正確。
在這里插入圖片描述
我們看一下代碼,主要看串口部分

#.....省略部分代碼...
uart = UART(3,115200,bits=8, parity=None, stop=1, timeout_char = 1000)#初始化串口三、波特率115200 TXD:P4PB10 RXD:P5PB11

#.....省略部分代碼...
def send_five_uchar(c1,c2,c3,c4,c5):#功能發(fā)送五個(gè)無(wú)符號(hào)字符(unsigned char)
    global uart;
    data = ustruct.pack("<BBBBBBBB",#使用了 ustruct.pack() 函數(shù)將這些數(shù)據(jù)打包為二進(jìn)制格式。使用 "<BBBBBBBB" 作為格式字符串來(lái)指定要打包的數(shù)據(jù)的類(lèi)型和順序:
                   0xA5,
                   0xA6,
                   c1,
                   c2,
                   c3,
                   c4,
                   c5,
                   0x5B
                   )
    uart.write(data);#uart.write(data) 將打包好的二進(jìn)制數(shù)據(jù)幀寫(xiě)入 UART 發(fā)送緩沖區(qū),從而將數(shù)據(jù)通過(guò)串口發(fā)送出去
    print(data)#通過(guò) print(data) 打印發(fā)送的數(shù)據(jù)到串行終端,方便調(diào)試和確認(rèn)發(fā)送的內(nèi)容。
 #.....省略部分代碼...   
    send_five_uchar(flag[0],flag[1],flag[2],flag[3],flag[4])#把五個(gè)數(shù)據(jù)通過(guò)串口發(fā)送出去、發(fā)送五個(gè)無(wú)符號(hào)字符。

整個(gè)工程代碼如下

import pyb, sensor, image, math, time
from pyb import UART
import ustruct
from image import SEARCH_EX, SEARCH_DS
import time
import sensor, lcd
#導(dǎo)入需要的庫(kù)和模塊

#使用中可能根據(jù)自己情況需要修改的值
#1. GROUND_THRESHOLD 閾值參數(shù) 通過(guò)工具->機(jī)器視覺(jué)->閾值編輯器->幀緩沖區(qū) 調(diào)整出要識(shí)別的LAB閾值。
#2.注意是否有下面兩句根據(jù)自己攝像頭調(diào)整
  #sensor.set_vflip(True)
  #sensor.set_hmirror(True)


#sensor.set_contrast(1)#設(shè)置相機(jī)圖像對(duì)比度。-3+3
#sensor.set_gainceiling(16)#設(shè)置相機(jī)圖像增益上限。2, 4, 8, 16, 32, 64, 128。

uart = UART(3,115200,bits=8, parity=None, stop=1, timeout_char = 1000)#初始化串口三、波特率115200 TXD:P4PB10 RXD:P5PB11

roi1 =	 [( 20,   105, 10, 10),
          ( 45,   105, 10, 10),
          ( 75,   105, 10, 10),
          ( 105,  105, 10, 10),
          (130,   105, 10, 10)]#定義一個(gè)名為roi1的列表,其中包含了5個(gè)元組。每個(gè)元組代表了一個(gè)矩形感興趣區(qū)域在圖像上的位置和大小。
#具體而言,每個(gè)元組包含了4個(gè)數(shù)值依次的含義是:ROI左上角點(diǎn)的x坐標(biāo)、ROI左上角點(diǎn)的y坐標(biāo)、ROI的寬度、ROI的高度

led = pyb.LED(1) # led = pyb.LED(1)表示led表示紅燈。各種狀態(tài)如下:Red LED = 1, Green LED = 2, Blue LED = 3, IR LEDs = 4.
led.on()         #點(diǎn)亮紅燈 板載紅燈點(diǎn)亮表示程序得到執(zhí)行

sensor.reset()#初始化相機(jī)傳感器。
sensor.set_pixformat(sensor.RGB565)#設(shè)置相機(jī)模塊的像素模式:sensor.RGB565: 16 bits/像素。
sensor.set_framesize(sensor.QQVGA)#設(shè)置圖像分辨率、如果改變分辨率也要調(diào)整ROI區(qū)域。攝像頭不同、應(yīng)用場(chǎng)景不同可以選擇不同分辨率。這里使用QQVGA可能畫(huà)質(zhì)很胡,但是為了兼容不同型號(hào)攝像頭我們先使用QQVGA 不影響循跡效果
sensor.skip_frames(time=2000)#跳過(guò)指定數(shù)目的幀。在這里,設(shè)置為跳過(guò)2000毫秒(即2秒)的幀。這樣可以給傳感器一些時(shí)間進(jìn)行初始化和自適應(yīng)調(diào)整。
sensor.set_auto_whitebal(True)#設(shè)置為自動(dòng)白平衡模式。這使得攝像頭可以根據(jù)場(chǎng)景中的光照條件自動(dòng)調(diào)整圖像的白平衡,從而保持圖像色彩更加準(zhǔn)確和自然。
sensor.set_auto_gain(False)#關(guān)閉自動(dòng)增益模式。通常情況下,開(kāi)啟自動(dòng)增益會(huì)幫助攝像頭自動(dòng)調(diào)整亮度,并在低亮度環(huán)境下提高圖像清晰度。通過(guò)設(shè)置為False,禁用了這個(gè)功能,使用固定增益值。

# 注意是否有下面兩句根據(jù)自己攝像頭調(diào)整
sensor.set_vflip(True)  #垂直方向翻轉(zhuǎn) 根據(jù)自己攝像頭和模塊安裝位置調(diào)整 ?。?!重要不同攝像頭是否需要鏡像根據(jù)實(shí)際情況定,如果不需要鏡像需要注釋掉
sensor.set_hmirror(True) #水平方向反轉(zhuǎn) 根據(jù)自己攝像頭和模塊安裝位置調(diào)整 ?。?!重要不同攝像頭是否需要鏡像根據(jù)實(shí)際情況定,如果不需要鏡像需要注釋掉


#lcd.init() #初始化lcd屏幕

#最好根據(jù)自己情況設(shè)置一下!??!
#GROUND_THRESHOLD=(0, 8, -128, 23, -128, 80)#閾值參數(shù),用于在圖像處理中對(duì)標(biāo)物體進(jìn)行顏色識(shí)別分割。在OpenMV IDE軟件 工具->機(jī)器視覺(jué)->閾值編輯器->幀緩沖區(qū) 調(diào)整出要識(shí)別的LAB閾值。
GROUND_THRESHOLD=(0, 30, -22, 23, -128, 80)#閾值參數(shù),用于在圖像處理中對(duì)標(biāo)物體進(jìn)行顏色識(shí)別分割。在OpenMV IDE軟件 工具->機(jī)器視覺(jué)->閾值編輯器->幀緩沖區(qū) 調(diào)整出要識(shí)別的LAB閾值。
def send_five_uchar(c1,c2,c3,c4,c5):#功能發(fā)送五個(gè)無(wú)符號(hào)字符(unsigned char)
    global uart;
    data = ustruct.pack("<BBBBBBBB",#使用了 ustruct.pack() 函數(shù)將這些數(shù)據(jù)打包為二進(jìn)制格式。使用 "<BBBBBBBB" 作為格式字符串來(lái)指定要打包的數(shù)據(jù)的類(lèi)型和順序:
                   0xA5,
                   0xA6,
                   c1,
                   c2,
                   c3,
                   c4,
                   c5,
                   0x5B
                   )
    uart.write(data);#uart.write(data) 將打包好的二進(jìn)制數(shù)據(jù)幀寫(xiě)入 UART 發(fā)送緩沖區(qū),從而將數(shù)據(jù)通過(guò)串口發(fā)送出去
    print(data)#通過(guò) print(data) 打印發(fā)送的數(shù)據(jù)到串行終端,方便調(diào)試和確認(rèn)發(fā)送的內(nèi)容。

while(True):
    data=0
    blob1=None
    blob2=None
    blob3=None
    blob4=None
    blob5=None
    flag = [0,0,0,0,0]
    img = sensor.snapshot().lens_corr(strength = 1.7 , zoom = 1.0)#對(duì)獲取到的圖像執(zhí)行鏡頭校正的操作。
    blob1 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[0])#在圖像中通過(guò)顏色閾值 GROUND_THRESHOLD1 檢測(cè) roi1[0] 區(qū)域內(nèi)的色塊,并將檢測(cè)結(jié)果賦值給 blob1。
    blob2 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[1])#同理
    blob3 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[2])
    blob4 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[3])
    blob5 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[4])

    if blob1:#如果roi1區(qū)域內(nèi)找到閾值色塊 就會(huì)賦值flag[0]1
        flag[0] = 1
    if blob2:
        flag[1] = 1
    if blob3:
        flag[2] = 1
    if blob4:
        flag[3] = 1
    if blob5:
        flag[4] = 1
 #   print(flag[0],flag[1],flag[2],flag[3],flag[4])#把數(shù)據(jù)打印在串行終端方便調(diào)試
    send_five_uchar(flag[0],flag[1],flag[2],flag[3],flag[4])#把五個(gè)數(shù)據(jù)通過(guò)串口發(fā)送出去、發(fā)送五個(gè)無(wú)符號(hào)字符。

    for rec in roi1:#遍歷所有感興趣的區(qū)域roi1 并繪制color=(255,0,0)顏色
        img.draw_rectangle(rec, color=(255,0,0))
        #lcd.display(img) # Take a picture and display the image.#將圖像顯示在lcd中

openmv在線(xiàn)運(yùn)行(即板子需要連接openmv IDE 控制運(yùn)行)

使用openmv連接外部供電時(shí)候**一定不能接錯(cuò)接反電源
在這里插入圖片描述
通過(guò)SSCOM查看發(fā)送的數(shù)據(jù) 是否和攝像頭應(yīng)該識(shí)別的狀態(tài)一致
在這里插入圖片描述

如何脫機(jī)運(yùn)行

然后就可以脫機(jī)運(yùn)行(openmv 板子不連接 openmv IDE 上電自動(dòng)運(yùn)行)

  1. 用USB 把openmv 連接到電腦,點(diǎn)擊連接
  2. 點(diǎn)擊連接
    在這里插入圖片描述
    點(diǎn)擊否保留我們的注釋內(nèi)容
    在這里插入圖片描述
    然后我們?cè)趏penmv 對(duì)應(yīng)的U盤(pán)就會(huì)看到多的main文件,打開(kāi)可以可以看到是剛剛代碼
    在這里插入圖片描述

現(xiàn)在我們拔掉USB進(jìn)行如下連接

然后打開(kāi)串口軟件查看接收到的數(shù)據(jù)。
在這里插入圖片描述
這里我們openmv發(fā)送了數(shù)據(jù),下面我們使用STM32進(jìn)行接受

聯(lián)系:Q,1930299709

  • 聯(lián)系方式.txt

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠(chǎng)商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
ECS-80-10-30B-CWN-TR 1 ECS International Inc Parallel - Fundamental Quartz Crystal,

ECAD模型

下載ECAD模型
$0.92 查看
ABS07-32.768KHZ-4-T 1 Abracon Corporation CRYSTAL 32.7680KHZ 12.5PF SMD

ECAD模型

下載ECAD模型
$1.36 查看
ASFL1-12.000MHZ-ERS-T 1 Abracon Corporation XTAL OSC XO 12.0000MHZ HCMOS TTL
$1.28 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜