1.1 應用背景
坐位體前屈(如圖1.1所示)是一種體育鍛煉項目,也是中國大中小學體質健康測試項目,它的測試目的是測量在靜止狀態下的軀幹、腰、髖等關節可能達到的活動幅度,主要反映這些部位的關節、韌帶和肌肉的伸展性和彈性及身體柔韌素質的發展水平,現坐位體前屈是中國體育中考中的必考項目之一。html
圖1.1 坐位體前屈
1.2 應用簡介
本系統爲利用北醒公司TFmini Plus、Arduino-UNO板、0.91寸OLED顯示模塊、BY8301-16P語音模塊、喇叭以及傳統的坐位體前屈測量儀結合設計開發的自動測量裝置。
系統做用:實現體前屈自動測量,並顯示、播報測量結果,減小人爲讀數過程,使體育測試過程更智能化、人性化。數組
2.1 實驗設備
l Benewake TFmini Plus標版微信
圖2.1 TFmini Plus
TFmini Plus(如圖2.1所示),詳細參數見TFmini Plus使用說明。
l Arduino-UNO板oop
圖2.2 Arduino UNO
l 0.91寸OLED液晶屏測試
圖2.3 OLED顯示屏
規格:0.91寸OLED屏(如圖2.3所示),128*32點陣,IIC控制接口,兼容3.3-5V。
做用:用來顯示測量結果。
l BY8301-16P語音模塊ui
圖2.4 BY8301-16P語音模塊
規格:語音模塊如圖2.4所示,其工做電壓爲DC 3.6-5V,支持MP3/WAV格式,支持UART串口通訊控制,自帶3W功放/可外接功放。
做用:用來控制喇叭,播報提示信息和測量結果。
l BY-90-1W 無源喇叭spa
圖2.5 無源喇叭
規格:喇叭(如圖2.5所示)功率爲8Ω1W。
做用:播報提示信息和測量結果。
l 電腦設計
圖2.6 電腦
如圖2.6所示,做爲該系統的上位機,用來編寫並上傳程序到UNO板。
l 傳統坐位體前屈測量儀code
圖2.7 體前屈測試儀
l 鏈接線htm
圖2.8 鏈接線
杜邦線——用於Plus與UNO板鏈接;
USB方口數據線——用於UNO板與電腦鏈接以及供電。
2.2 接線
圖2.9 系統接線圖
l TFmini Plus 線序:
圖2.10 TFmini Plus線序
TFminiPlus供電電壓爲5V,直接鏈接Arduino板的5V和GND,其餘雷達需查閱產品規格書,確保供電正常;
l 對於Arduino UNO板,串口通訊鏈接須要注意:
(1) TFmini Plus的TX端接板子的pin 4口(軟串口Serial2的RX),雷達的RX端接板子的pin 5口(軟串口Serial2的TX),
(2) 語音模塊接UNO板的5V和GND,TX端接板子的pin 2口(軟串口Serial1的RX),雷達的RX端接板子的pin 3口(軟串口Serial1的TX),軟串口1定義在voice庫中,語音模塊只能按照順序接UNO板的二、3引腳,不然必須修改voice庫文件(支持設置音量0-20);
l 0.91寸OLED顯示屏鏈接5V(或3.3V)和GND供電, SCL和SDA接UNO板的SCL和SDA;
圖3.1 體前屈自動測量系統示意圖
圖3.2 體前屈自動測量工做原理流程圖
如圖3.1和圖3.2所示,爲體前屈自動測量的系統示意圖和工做原理流程圖。
首先,咱們包含voice和oled庫文件,定義變量,對串口、語音模塊和OLED顯示屏進行初始化;讀取雷達數據,對系統進行標定,得到start=dist1,zero=dist0;
而後,讀取數據,判斷位置初始化狀態init_stat和雷達數據與start的關係,若是不知足要求,獲取數據再進行判斷,若是知足要求(!init_stat(沒有初始化) && D==start(雷達數據與標定的初始位置相等)),語音模塊播報「ready」 ,開始測量;
測量過程當中,繼續判斷位置初始化狀態init_stat和雷達數據與start的關係,若是不知足要求,獲取數據再進行判斷,若是知足要求(init_stat(位置初始完畢) && D!=start(擋板離開初始位置));時刻檢測擋板是否移動,若是擋板靜止,大約經歷2.3s,系統測距穩定,播報和顯示測量結果;
最後,判斷是否須要進行下一次測試,若是不須要,斷電,結束測試。
該例程須要添加OLED的庫和自定義的庫voice和oled。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image035.jpg
SoftwareSerial Serial2(4,5); //定義軟串口名稱爲Serial2,並把pin2定爲RX,pin3定爲TX
/對於有多個串口的arduino板如DUE板,註釋掉上面兩段代碼,直接使用Serial1串口/
/雷達基本數據/
int check;//校驗數值存放
int uart[9];//存放雷達測量的數據
int k;
const int HEADER=0x59;//數據包幀頭
/體前屈自動測量數據/
int D;//雷達實測距離值
int d=0;//上一個距離值
int result=0;
const int zero=40;//標定的0點值,安裝完成後須要進行標定設置
int VAR[23]={0};
int var;
int num=0;
const int start=54;//標定的起點值,安裝完成後須要進行標定設置
int CHA[15]={0};
int cha=0;
int count=0;
boolean init_stat=false;//判斷是否進行位置初始化
void setup()
{
Serial.begin(115200);//設置arduinouno與電腦鏈接串口的波特率
Serial2.begin(115200);
oled_begin();//OLED顯示模塊初始化
voice_begin();//語音模塊初始化
voice_setvolume(14);//設置喇叭音量
}
void loop()
{
Serial2.listen();
if(Serial2.available())//查看串口是否有數據輸入
{
if(Serial2.read()==HEADER)//判斷數據包幀頭0x59
{ uart[0]=HEADER; if(Serial2.read()==HEADER)//判斷數據包幀頭0x59 { uart[1]=HEADER; for(k=2;k<9;k++)//存儲數據到數組 { uart[k]=Serial2.read(); } check=uart[0]+uart[1]+uart[2]+uart[3]+uart[4]+uart[5]+uart[6]+uart[7]; if(uart[8]==(check&0xff))//按照協議對收到的數據進行校驗 { D=uart[2]+uart[3]*256;//計算距離值 if(!init_stat&& D==start) { cha=D-start; for(k=15;k>=1;k--) { CHA[k]=CHA[k-1]; } CHA[0] =cha; for(k=0;k<15;k++) { if(CHA[k]==0) { count++; } } oled_measuring(); if(count>=15) { voice_ready(); init_stat=true; } } if(D!=0 &&D!=start && init_stat) { var=abs(D-d); for(k=23;k>=1;k--) { VAR[k]=VAR[k-1]; } VAR[0] =var; for(k=0;k<23;k++) { if(VAR[k]==0) { num++; } } if(num>=23) { result=zero-D; oled_result(result); voice_num(result); Serial2.listen(); init_stat=false; } d=D; num=0; } } } }
}
}
5.1 工做流程圖
圖5.1 系統工做流程圖
l 系統安裝完成後,供電,上傳程序,校準起始點和0位置;
l 擋板置於起始點,等語音模塊播報「ready」後,開始測量;
l 擋板離開起始點後,不能停頓過長時間,通常在2.3s之內,擋板靜止後,穩定測量後,播報並在OLED中顯示測量結果。
5.2 數據查看
圖5.2 工做數據
l TFmini Plus的測量分辨率爲5mm,若是測量精度爲mm,會有較大偏差,因此只測量到cm,後面能夠用精度更高的產品,實現mm級測量。l 體前屈自動測量儀在測量過程當中,不會播報,可是,不能停頓過長時間(小於2.3s)。l 該系統爲一次一測,測量完畢後,須要從新歸位到起始點。 如您承認上述經驗,歡迎您的聯繫:010-57456983北醒(北京)光子科技有限公司北醒激光雷達電話:010-5745 6983官方微信公衆號:benewake-bj或搜索淘寶:北醒光子科技有限公司