全國大學生電子設(shè)計競賽B題賽后分享:無憾的4天3夜+總結(jié)+開源代碼
2017-09-22 15:53:32閱讀量:15715來源:立創(chuàng)商城
金秋九月,好禮來襲!12元千志精品電阻券+16元ALPS品牌優(yōu)惠券無門檻領(lǐng)用:http://www.17719.cn/bulletin/details_11417.html;免費送200套RFsister天線+連接線:http://www.17719.cn/bulletin/details_11446.html。
全國大學生電子設(shè)計競賽是教育部和工業(yè)和信息化部共同發(fā)起的大學生學科競賽之一,2017年 8月9日,2017年全國大學生電子設(shè)計競賽在全國31個賽區(qū)同時開幕。
大學生設(shè)計競賽的難度如何?讓我們先來“欣賞”下B題,然后再來看下一個大三的團隊是怎么完成的。
(點擊查看大圖)
(點擊查看大圖)
題目已經(jīng)審完,最后要怎么做呢,且看網(wǎng)友杰杰和她的團隊的大作。
大家好,我是杰杰。這是我第一次參加電賽,隊友3個人,我們雖然是第一次合作,但是配合的很好,很感謝我的隊友。
下面進入正題
剛出題的那個早上,我們都是挺興奮的,在實驗室睡覺,怕第二天起不來,然而,我們的生物鐘好像比鳥兒還早,早早就興奮的不行,我們第一次參加國賽,是會有這種感覺的。
出題了,我們之前就是準備做自控類的題目,所以第一眼就看B題,覺得好像有點難,然后再看了其他的所有題目,還是覺定做B題,剛好我們學校還有兩組也是做B的,我們就在一起討論了十幾分鐘,就去選擇材料了,開著小電動,去市區(qū)買木板。我們都沒買過木板,不知道哪里有木板,就兜兜轉(zhuǎn)轉(zhuǎn),終于買到了,拿回去,就想著構(gòu)思硬件,很快,硬件就搭好了。另一個隊友就在調(diào)試舵機中值,分工很好,進度算是挺快的,然后就弄好了機械結(jié)構(gòu),開始調(diào)試,我們用了兩塊單片機,一塊stm32作為主控芯片,另一塊k60作為數(shù)據(jù)處理芯片,鷹眼攝像頭采集數(shù)據(jù),通過串口傳輸給stm32,做出相應(yīng)的處理,這些地方我們都做的挺好的,但是,還是有很多問題,下面我一一總結(jié):
由于我們之前一直在準備電賽,買了很多模塊回來調(diào)試,比如帶絲桿的步進電機、舵機、超聲波模塊、mpu6050、角度傳感器。買了那么多東西回來,都調(diào)好了,但是!??!卻一點都沒有用上。最后還是拆了我們之前搞飛思卡爾的舵機跟攝像頭。把基本的模塊搭建起來,用stm32控制舵機的打角與顯示屏的顯示,而k60作為攝像頭的處理,掃描小球,得出小球所在的坐標,傳輸給stm32,讓stm32通過pid算法,讓舵機打角,從而完成操控。
下面是流程框圖
這里的主要難點是攝像頭的掃描。因為木板是正方形,而攝像頭采集的圖像是320*240分辨率的,是長方形。這里不能像飛思卡爾一樣用邊沿掃描的方法,要用全場掃描,找出小球的黑點,從而得出他的圓心(球心)坐標。
然后再做攝像頭采集的數(shù)據(jù)的濾波處理和圓心的濾波:
camera_get_img(); //攝像頭獲取圖像//黑白攝像頭 mg_extract(img,imgbuff, CAMERA_SIZE); //解壓圖像,為了調(diào)用 AllFilt(); //整場濾波 countcenter_ball(); //搜線 x_filte(); //x軸濾波 y_filte(); //y軸濾波 count_ball_center(); //計算小球中心點
這是主函數(shù)的內(nèi)容,代碼我在下面已經(jīng)開源。
還有傳輸數(shù)據(jù)的濾波:假如小球x與y都為0,說明數(shù)據(jù)采集錯誤,這種是不能傳給stm32的,否則會很抖,畢竟那一瞬間通過pid的處理得出的值變化很大:
還有小球x或者y有一個為0也是,所以要對小球限制,
if((ball_x_num!=0)&&(ball_y_num!=0)&&absi((ball_x_num-ball_y_num))<250) { send_ball_num(ball_x_num,ball_y_num); }
就傳一個坐標,stm32就能處理了。
由于這種通訊也是涉及到時間的問題
我們測出k60采集并處理得出坐標的時間為50ms左右,算是比較快的了,再傳輸數(shù)據(jù)。
而stm32用上串口中斷,當他接收到數(shù)據(jù)的時候,舵機才打角,我們舵機是100hz的頻率,最快可以每10ms打一次角。所以這種操作完全適合,還避免了亂打角的問題。
至于關(guān)于算法的問題,下面的代碼也已經(jīng)開源了我的算法: 舵機打角,可以自己去看看代碼。
*還有很重要的一點:硬件要搭的穩(wěn),攝像頭不能動,不然坐標會動的,多多少少都有影響。*
經(jīng)驗之談
電賽遇到的問題簡單描述
選擇材料,選用山外鷹眼攝像頭,硬件二值化,畢竟前段時間做完飛卡,剛好會用這個攝像頭,選擇木板,小球滾動的木板是黃色的,還有樹木黑色的年輪,對攝像頭會照成一點的干擾,所以選擇噴漆,但是組委會明確規(guī)定不能噴漆,但是還是冒險噴漆了,避開了數(shù)據(jù)的不穩(wěn)定。
機械結(jié)構(gòu)的問題
我們選擇木板搭建,真正搭建的時候,才發(fā)現(xiàn)自己想到的模型跟現(xiàn)實還是有很大差別的,機械結(jié)構(gòu)不對稱,舵機打角不好控制,穩(wěn)定性這些都要考慮,還有選擇固定木板的材料,我們選擇502加鐵釘,還算比較牢固,但是502用得比較多,還不容易拆卸,去到送作品現(xiàn)場才發(fā)現(xiàn)別的作品很小,可以拆卸的,但是我們的作品很大很大,90*70*100cm。
木板還容易變形,我們的第一塊板子,小球目標的地方凸起,導致小球無法定在目標里面,遂換了一塊板。
這些是硬件的問題。
軟件問題
軟件上,其實就是算法的處理,還有小球坐標點的精確,對坐標的濾波做的不好,沿用了當時飛思卡爾的濾波,沒有改進,本來飛思卡爾做完有挺多時間改進的,但是沒有改。
其他的東西基本沒什么問題。
現(xiàn)在的我對pid的算法有了更深的理解了。這是一種收獲。
吃虧的地方在于,我都調(diào)出來了,但是由于作品太大,搬運時候?qū)е聰z像頭不正,或者有可能是平橫板歪了,總之,去到現(xiàn)場調(diào)試時候,沒能做出在實驗室的效果,這是很可惜的一個地方,解決的辦法其實有很多的,但是軟件沒做好,沒完善,就解決不了。
請記住以下幾點:
1>:人機交互界面要做好,程序要寫好,通過按鍵查看參數(shù),不斷調(diào)整,這是很好的方法。
2>:對于類似攝像頭這種采集精確數(shù)據(jù)的傳感器,裝箱拆箱后都要重新采集數(shù)據(jù),保存在類似24c02的存儲芯片上,可以使數(shù)據(jù)在程序中運行更加精確,不會因為搬動導致數(shù)據(jù)不精確,這也是我終于知道別的學校的飛思卡爾的隊伍為什么不拿電腦在調(diào)試,只是通過按鍵就能調(diào)試了。
3>:我們實驗室的光線不足,任何一個比賽的場地,光線都是充足的,小球反光應(yīng)該都有這個影響,還有就是攝像頭支架不要用太大的木條,會遮擋光線,導致也會有偏差??梢赃m當添加LED來補光。
還有重中之重的經(jīng)驗就是,網(wǎng)上有猜測題,最好就做,起碼要構(gòu)思硬件并寫好相關(guān)模塊的代碼。
作品照片
這些是我電賽的經(jīng)驗,配上我的作品照片↓↓↓
搭好硬件的當天晚上:
由于當時調(diào)試沒怎么拍照,只能找到這些。這些也是比較激動的時候拍的。
再上原理圖
整體的原理圖
tft_lcd接口原理圖
分享一些我今天整理的算法資料,對于我們來說,資料并不是越多越好。而是對自己需要的有所幫助就是好資料。
這些資料里面,我沒看完,畢竟也是有點多,電賽的時候找到自己需要的就不看了。
攝像頭的資料:
PID算法:
模糊控制:

L7805CV-DG/線性穩(wěn)壓器(LDO) | 0.5401 | |
AMS1117-3.3/線性穩(wěn)壓器(LDO) | 0.1237 | |
BAT54C,215/肖特基二極管 | 0.0336 | |
LM358DR2G/運算放大器 | 0.345 | |
CJ431/電壓基準芯片 | 0.1157 | |
LM393DR2G/比較器 | 0.3143 | |
ADUM4160BRWZ-RL/隔離式USB芯片 | 34.83 | |
REF3012AIDBZR/電壓基準芯片 | 0.9316 | |
SS8050/三極管(BJT) | 0.035 | |
8S005/錫膏/錫漿 | 17.67 |