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

QQ登錄

只需一步,快速開始

搜索
查看: 6425|回復(fù): 3
收起左側(cè)

基于STM32F407與OPENMV通信(識(shí)別顏色發(fā)送坐標(biāo)+顏色類別)

  [復(fù)制鏈接]
ID:589140 發(fā)表于 2019-12-8 17:32 | 顯示全部樓層 |閱讀模式
最近擁有了OPENMV,這可是個(gè)好攝像頭,雖然他是用我還沒接觸過(guò)的Python,但是里面例程超級(jí)多��!大部分都是比較常用的
作為新手,剛開始不知道如何將攝像頭獲得的數(shù)據(jù)傳給單片機(jī)..

于是,迷茫的我最終獲得師兄贊助的通信程序,改成了自己需要的,就分享給大家康康啦

通過(guò)單片機(jī)給openmv供電5v,我的是openmv3,將openmv3上的P4與P5與單片機(jī)上的PA9和PA10 連接,就是單片機(jī)的Tx接攝像頭的Rx,單片機(jī)的Rx接攝像頭的Tx。如果接電以后,LCD上數(shù)值無(wú)變化,可能是接線接反了,一般交換過(guò)來(lái)就行。

openmv要脫機(jī)運(yùn)行,就將程序保存進(jìn)去,即在IDE界面點(diǎn)左上方的“工具”選擇“將打開的腳本保存到openmvcam”即可,這時(shí)給攝像頭上電就能執(zhí)行程序

就是攝像頭識(shí)別四個(gè)顏色,四個(gè)顏色是有順序的,在我程序里,紅色是1,黃色是2,綠色是4,深藍(lán)色是8(本來(lái)是紅色是0001,黃色是0010,綠色是0100,深藍(lán)色是1000,傳給單片機(jī)就轉(zhuǎn)成了十進(jìn)制輸出來(lái)),然后傳給單片機(jī)之后,就可以通過(guò)獲得的數(shù)據(jù)判斷識(shí)別到了哪種顏色,進(jìn)而給單片機(jī)相應(yīng)的指令。

可以通過(guò)實(shí)際情況修改攝像頭里面程序中的顏色閾值,以達(dá)到想要的效果。在不同的環(huán)境下,可能顏色的閾值會(huì)有點(diǎn)變動(dòng),就是識(shí)別沒那么準(zhǔn)確啦..有能力的小伙伴可以自己修改程序讓攝像頭適應(yīng)不同環(huán)境,我沒能力就只能修改閾值啦..唉..嘆氣,哪個(gè)伙伴會(huì)的話告訴我!我去下載!

單片機(jī)與攝像頭通信以后,識(shí)別到對(duì)應(yīng)顏色,會(huì)在屏幕上顯示posX,這是顏色中心坐標(biāo)的橫坐標(biāo),顯示posY,這是顏色類別的序號(hào)。

這些都是我個(gè)人理解,有不對(duì)的地方歡迎大家指正啊~我們可以多多交流,一起進(jìn)步鴨!
以下是主函數(shù)的程序
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "lcd.h"

extern u16 posX,posY

void color_s()
{
if(posY==1)
{LCD_ShowString(30,100,210,24,24,"red");        }
if(posY==2)
        {LCD_ShowString(30,100,210,24,24,"yellow");        }
         if(posY==4)
        {LCD_ShowString(30,100,210,24,24,"green");        }
         if(posY==8)
        {LCD_ShowString(30,100,210,24,24,"blue");        }

}


int main(void)
{
         u8 x=0;
        u8 lcd_id[12];                        
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2)
        delay_init(168);     
        uart_init(115200);        
        
        LED_Init();                                
         LCD_Init();         
        POINT_COLOR=RED;     
        sprintf((char*)lcd_id,"LCD ID:%04X",lcddev.id)                                 
          while(1)
        {                 
                USART1_Rx_Task();
                POINT_COLOR=RED;
color_s();         
                LCD_ShowNum(30,40,posX,3,24);
                LCD_ShowNum(30,70,posY,3,24);
                                 
          x++;
                if(x==12)x=0;
                LED0=!LED0;         
                delay_ms(1000);        
        }
}

全部資料51hei下載地址:
STM32F407與OPENMV的通信.7z (335.9 KB, 下載次數(shù): 209)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:696130 發(fā)表于 2021-8-2 12:07 | 顯示全部樓層
樓主,為什么我的串口是亂碼的啊,急
回復(fù)

使用道具 舉報(bào)

ID:955629 發(fā)表于 2021-8-2 16:06 | 顯示全部樓層
YaNGsHuOcONG 發(fā)表于 2021-8-2 12:07
樓主,為什么我的串口是亂碼的啊,急

你看一下你的波特率是不是對(duì)應(yīng)的
回復(fù)

使用道具 舉報(bào)

ID:956087 發(fā)表于 2021-8-2 19:08 | 顯示全部樓層
YaNGsHuOcONG 發(fā)表于 2021-8-2 12:07
樓主,為什么我的串口是亂碼的啊,急

觀察波特率設(shè)定正確,引腳配置是否與復(fù)用引腳沖突。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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