功能介紹放開頭, 使用便捷無需愁
這是全網最詳細、性價比最高的STM32實戰項目入門教程,通過合理的硬件設計和詳細的視頻筆記介紹,硬件使用STM32F103主控資料多方便學習,通過3萬字筆記、12多個小時視頻、20多章節代碼手把手教會你如何開發和調試。讓你更快掌握嵌入式系統開發。
**V3.3.0-STM32智能小車 **
**視頻: **[https://www.bilibili.com/video/BV16x4y1M7EN/?spm_id_from=333.337.search-card.all.click]
V3:HAL庫開發、功能:PID速度控制、PID循跡、PID跟隨、遙控、避障、PID角度控制、視覺控制、電磁循跡、RTOS等功能。
第19章-OpenMV視覺循跡功能
19.3-openmv發送五個uchar
openmv 通過串口發送數據格式:幀頭+一個字節 +一個字節+一個字節+一個字節+一個字節+幀尾。
把上面識別的數據發送出來結合電腦串口上位機調試、顯示上位機上
前面我們通過openmv 識別到線的相對位置,那么現在要openmv 把上面的信息發給STM32,然后STM32接受到信息知道線位置才能更好控制電機運動。
如何完成通信 發送什么數據
如何驗證發送正確的數據了
把openmv 的串口連接串口上位機,通過上位機接收數據,查看數據是否正確。
我們看一下代碼,主要看串口部分
#.....省略部分代碼...
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):#功能發送五個無符號字符(unsigned char)
global uart;
data = ustruct.pack("
整個工程代碼如下
import pyb, sensor, image, math, time
from pyb import UART
import ustruct
from image import SEARCH_EX, SEARCH_DS
import time
import sensor, lcd
#導入需要的庫和模塊
?
#使用中可能根據自己情況需要修改的值
#1. GROUND_THRESHOLD 閾值參數 通過工具- >機器視覺- >閾值編輯器- >幀緩沖區 調整出要識別的LAB閾值。
#2.注意是否有下面兩句根據自己攝像頭調整
#sensor.set_vflip(True)
#sensor.set_hmirror(True)
?
?
#sensor.set_contrast(1)#設置相機圖像對比度。-3至+3。
#sensor.set_gainceiling(16)#設置相機圖像增益上限。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)]#定義一個名為roi1的列表,其中包含了5個元組。每個元組代表了一個矩形感興趣區域在圖像上的位置和大小。
#具體而言,每個元組包含了4個數值依次的含義是:ROI左上角點的x坐標、ROI左上角點的y坐標、ROI的寬度、ROI的高度
?
led = pyb.LED(1) # led = pyb.LED(1)表示led表示紅燈。各種狀態如下:Red LED = 1, Green LED = 2, Blue LED = 3, IR LEDs = 4.
led.on() #點亮紅燈 板載紅燈點亮表示程序得到執行
?
sensor.reset()#初始化相機傳感器。
sensor.set_pixformat(sensor.RGB565)#設置相機模塊的像素模式:sensor.RGB565: 16 bits/像素。
sensor.set_framesize(sensor.QQVGA)#設置圖像分辨率、如果改變分辨率也要調整ROI區域。攝像頭不同、應用場景不同可以選擇不同分辨率。這里使用QQVGA可能畫質很胡,但是為了兼容不同型號攝像頭我們先使用QQVGA 不影響循跡效果
sensor.skip_frames(time=2000)#跳過指定數目的幀。在這里,設置為跳過2000毫秒(即2秒)的幀。這樣可以給傳感器一些時間進行初始化和自適應調整。
sensor.set_auto_whitebal(True)#設置為自動白平衡模式。這使得攝像頭可以根據場景中的光照條件自動調整圖像的白平衡,從而保持圖像色彩更加準確和自然。
sensor.set_auto_gain(False)#關閉自動增益模式。通常情況下,開啟自動增益會幫助攝像頭自動調整亮度,并在低亮度環境下提高圖像清晰度。通過設置為False,禁用了這個功能,使用固定增益值。
?
# 注意是否有下面兩句根據自己攝像頭調整
sensor.set_vflip(True) #垂直方向翻轉 根據自己攝像頭和模塊安裝位置調整 !!!重要不同攝像頭是否需要鏡像根據實際情況定,如果不需要鏡像需要注釋掉
sensor.set_hmirror(True) #水平方向反轉 根據自己攝像頭和模塊安裝位置調整 !!!重要不同攝像頭是否需要鏡像根據實際情況定,如果不需要鏡像需要注釋掉
?
?
#lcd.init() #初始化lcd屏幕
?
#最好根據自己情況設置一下!!!
#GROUND_THRESHOLD=(0, 8, -128, 23, -128, 80)#閾值參數,用于在圖像處理中對標物體進行顏色識別分割。在OpenMV IDE軟件 工具- >機器視覺- >閾值編輯器- >幀緩沖區 調整出要識別的LAB閾值。
GROUND_THRESHOLD=(0, 30, -22, 23, -128, 80)#閾值參數,用于在圖像處理中對標物體進行顏色識別分割。在OpenMV IDE軟件 工具- >機器視覺- >閾值編輯器- >幀緩沖區 調整出要識別的LAB閾值。
def send_five_uchar(c1,c2,c3,c4,c5):#功能發送五個無符號字符(unsigned char)
global uart;
data = ustruct.pack("
openmv在線運行(即板子需要連接openmv IDE 控制運行)
使用openmv連接外部供電時候一定不能接錯接反電源**
通過SSCOM查看發送的數據 是否和攝像頭應該識別的狀態一致
如何脫機運行
然后就可以脫機運行(openmv 板子不連接 openmv IDE 上電自動運行)
- 用USB 把openmv 連接到電腦,點擊連接
- 點擊連接
點擊否保留我們的注釋內容
然后我們在openmv 對應的U盤就會看到多的main文件,打開可以可以看到是剛剛代碼
現在我們拔掉USB進行如下連接
然后打開串口軟件查看接收到的數據。
這里我們openmv發送了數據,下面我們使用STM32進行接受
審核編輯 黃宇
-
小車
+關注
關注
0文章
54瀏覽量
20708 -
STM32F103C8T6
+關注
關注
105文章
160瀏覽量
82447 -
循跡
+關注
關注
0文章
14瀏覽量
12945 -
openMV
+關注
關注
3文章
39瀏覽量
9757
發布評論請先 登錄
相關推薦
評論