- 難度系數(shù):4分
- 工作量:4分
- 創(chuàng)新點(diǎn):3分
1 簡(jiǎn)介
盲人因?yàn)槿鄙倭艘曈X的感知能力而行走不便,如何安全舒適獨(dú)立出行已經(jīng)成為目前困擾他們外出的最主要原因.目前最常用的導(dǎo)盲工具有拐杖和導(dǎo)盲犬,但傳統(tǒng)的導(dǎo)盲拐杖不能發(fā)現(xiàn)較遠(yuǎn)處的障礙物且對(duì)于復(fù)雜的路況難以做出正確的判斷,不能滿足盲人獨(dú)立出行的基本需求;此外,我國(guó)導(dǎo)盲犬的數(shù)量很少,需求遠(yuǎn)遠(yuǎn)大于供應(yīng),而且有些盲人也可能由于各種原因不愿意使用導(dǎo)盲犬.因此,設(shè)計(jì)出一種智能導(dǎo)盲設(shè)備更加方便的幫助盲人出行。
2 主要器件
- STM32單片機(jī)
- HC-SRO4超聲波模塊
- 導(dǎo)航模塊
- 圖像識(shí)別模塊
- 光敏傳感模塊
- 智能語(yǔ)音合成模塊
3 實(shí)現(xiàn)效果
4 設(shè)計(jì)原理
4.1 硬件設(shè)計(jì)
設(shè)計(jì)的核心模塊采用STM32模塊,它負(fù)責(zé)頭盔上各種傳感器的相互協(xié)調(diào)以及信息的存儲(chǔ),保障各個(gè)模塊正常的工作,電路圖如圖:
STM32模塊
STM32單片機(jī)的主要硬件設(shè)計(jì)性能、集成度都比較高,功耗、電壓等均都比較低,具有實(shí)時(shí)性、數(shù)字信號(hào)邏輯優(yōu)化和預(yù)處理、開發(fā)簡(jiǎn)易的特點(diǎn)[2].能更好的負(fù)責(zé)頭盔上各種傳感器的相互協(xié)調(diào)以及信息的存儲(chǔ),保障各個(gè)模塊的正常工作.STM32原理見圖
HC-SR04超聲波避障模塊
簡(jiǎn)介
HC-SR04超聲波模塊常用于機(jī)器人避障、物體測(cè)距、液位檢測(cè)、公共安防、停車場(chǎng)檢測(cè)等場(chǎng)所。HC-SR04超聲波模塊主要是由兩個(gè)通用的壓電陶瓷超聲傳感器,并加外圍信號(hào)處理電路構(gòu)成的。如圖:
兩個(gè)壓電陶瓷超聲傳感器,一個(gè)用于發(fā)出超聲波信號(hào),一個(gè)用于接收反射回來的超聲波信號(hào)。由于發(fā)出信號(hào)和接收信號(hào)都比較微弱,所以需要通過外圍信號(hào)放大器提高發(fā)出信號(hào)的功率,和將反射回來信號(hào)進(jìn)行放大,以能更穩(wěn)定地將信號(hào)傳輸給單片機(jī)。模塊整體電路如圖:
模塊參數(shù)
(1)模塊主要電氣參數(shù)
- 使用電壓:DC—5V
- 靜態(tài)電流:小于2mA
- 電平輸出:高5V
- 電平輸出:底0V
- 感應(yīng)角度:不大于15度
- 探測(cè)距離:2cm-450cm
- 高精度 可達(dá)0.2cm
(2)模塊引腳
超聲波模塊有4個(gè)引腳,分別為Vcc、 Trig(控制端)、 Echo(接收端)、 GND;其中VCC、GND接上5V電源, Trig(控制端)控制發(fā)出的超聲波信號(hào),Echo(接收端)接收反射回來的超聲波信號(hào)。模塊如圖
導(dǎo)航模塊
導(dǎo)航功能的實(shí)現(xiàn)是通過使用百度API,對(duì)收到的坐標(biāo)和目的地坐標(biāo)發(fā)起檢索請(qǐng)求,百度 API將顯示出到達(dá)目的地的最佳路線以及所用時(shí)間等信息,通過語(yǔ)音提示引導(dǎo)用戶到達(dá)目的地[3].該模塊是通過STM32的響應(yīng)串口,獲取一個(gè)GPS響應(yīng)端口協(xié)議數(shù)據(jù),再將一個(gè)GPS的串口數(shù)據(jù)發(fā)送給需要STM32的響應(yīng)串口,由串口數(shù)據(jù)采用GPS串口協(xié)議編譯解碼,解析編譯出來后數(shù)據(jù)保存在需要響應(yīng)的串口結(jié)構(gòu)體中.
圖象識(shí)別模塊
由于超聲波模塊只能對(duì)前方4 m范圍內(nèi)的障礙物進(jìn)行檢測(cè),所以為了更好地檢測(cè)和識(shí)別盲區(qū)內(nèi)的人和障礙物,以及實(shí)現(xiàn)助盲社交的功能,設(shè)計(jì)采用了圖像識(shí)別模塊.
基于雙目立體圖像視覺三維儀的測(cè)量
這種雙目立體圖像視覺三維儀的測(cè)量方法是基于立體視差計(jì)算原理[4],主要通過對(duì)兩幅立體圖像進(jìn)行視差的綜合計(jì)算,直接對(duì)前方兩個(gè)物體高度進(jìn)行一定距離上的測(cè)量.基線距為兩個(gè)連線投影點(diǎn)或攝像機(jī)的基點(diǎn)基線中心的距離,用字母b表示.攝像機(jī)坐標(biāo)所在投影鏡頭的內(nèi)部有一光學(xué)坐標(biāo)中心,光學(xué)坐標(biāo)原點(diǎn)是作為整個(gè)投影攝像機(jī)所在鏡頭光學(xué)坐標(biāo)系的一個(gè)運(yùn)動(dòng)原點(diǎn),坐標(biāo)的運(yùn)動(dòng)關(guān)系如圖5所示.設(shè)O1和O2為光軸坐標(biāo)原點(diǎn)距離左右俯視對(duì)象攝像機(jī)光軸以及光軸坐標(biāo)交點(diǎn)1 m的距離,設(shè)空間中點(diǎn)的坐標(biāo)為P,左反射圖像和右反射圖像中對(duì)應(yīng)的兩點(diǎn)坐標(biāo)分別為P1(U1,V1)和P2(U2,V2).若兩臺(tái)攝像機(jī)的圖像處于同一平面,點(diǎn)P上兩個(gè)點(diǎn)的坐標(biāo)與點(diǎn)y的坐標(biāo)相同,即V1=V2.f表示焦距,b表示基線距,Zc表示P點(diǎn)在Z軸上的坐標(biāo).
由三角幾何關(guān)系得到位置差d:
及攝像機(jī)坐標(biāo)系中的坐標(biāo)值.
人臉圖像識(shí)別處理
對(duì)于人臉識(shí)別以及對(duì)于紅綠燈、斑馬線的圖像識(shí)別主要基于美國(guó)opencv公司發(fā)行的一款跨行業(yè)平臺(tái)自動(dòng)計(jì)算機(jī)圖形視覺和自動(dòng)機(jī)器智能學(xué)習(xí)軟件庫(kù)[5].對(duì)于使用人臉識(shí)別采集功能,首先需要利用人臉數(shù)據(jù)庫(kù)采集市opencv采集中的人臉數(shù)據(jù)庫(kù)采集orl構(gòu)建人臉識(shí)別數(shù)據(jù)庫(kù),在不同人物表情、光照、人臉識(shí)別細(xì)節(jié)的不同情況下可以采集一個(gè)熟人的嘴和臉大小作為技能測(cè)試集,采集集中包含一個(gè)陌生人和一個(gè)熟人的嘴與臉大小作為技能訓(xùn)練集;對(duì)一個(gè)熟人的嘴和臉大小進(jìn)行分割預(yù)處理,檢測(cè)一個(gè)熟人的嘴和臉大小并用新的orl進(jìn)行分割產(chǎn)生出新的人臉,通過分割改變?nèi)四槾笮】梢允顾c熟人orl利用人臉識(shí)別數(shù)據(jù)庫(kù)檢測(cè)人物的臉細(xì)節(jié)大小一致.再利用人臉識(shí)別算法檢測(cè)出熟人的臉.對(duì)于斑馬線以及紅綠燈的判定,是利用攝像頭對(duì)周圍環(huán)境進(jìn)行拍攝并按幀保存圖像;通過對(duì)圖像的預(yù)處理將圖像采集的過程中采集到的干擾項(xiàng)進(jìn)行剔除.圖像預(yù)分析處理之后將直接進(jìn)入二次目標(biāo)圖像定位分析階段,確定一個(gè)目標(biāo)后對(duì)其圖像進(jìn)行二次數(shù)值邊緣化與目標(biāo)邊緣化的提取,再與目標(biāo)樣本像素做高度比較,相似度較高若達(dá)到超過一個(gè)特定的圖像值則可以認(rèn)為其指的是一個(gè)目標(biāo),記錄的是目標(biāo)在其像素中的坐標(biāo).運(yùn)用圖像預(yù)處理方法,可計(jì)算出每個(gè)紅綠燈光線位置,通過與紅綠燈樣本對(duì)比,確定每個(gè)紅綠燈準(zhǔn)確的光線位置,并對(duì)紅綠燈的顏色進(jìn)行判別并輸出,再根據(jù)各個(gè)燈所在位置像素的R、G、B分量來判斷燈的顏色,最后通過智能語(yǔ)音模塊告訴盲人.
光敏傳感模塊
光敏信號(hào)傳感器指的是一種可以利用這些光敏傳感元件將光線電信號(hào)進(jìn)行轉(zhuǎn)換成為無線電信號(hào)的電子傳感器,基本工作原理圖如下:
圖中光敏電阻的工作是基于光電磁場(chǎng)效應(yīng),其阻值隨光強(qiáng)的增大而減小.LM393則是雙有源電壓比較器,不受限于vcc的兩端有源電壓設(shè)定值的最大限制,它的負(fù)載電阻可以連接輸出電壓設(shè)定范圍內(nèi)的任何功率輸出電壓,還可用亮度電位控制器自動(dòng)調(diào)節(jié)顯示的亮度系數(shù)閾值亮度系數(shù)大于系統(tǒng)設(shè)定值時(shí)顯示DO會(huì)自動(dòng)輸出亮度低電平,反之則會(huì)自動(dòng)輸出亮度高電平.利用這個(gè)特性,可以使頭盔在夜間發(fā)光,以提醒周圍行人和車輛,保障盲人夜間出行的安全.
智能語(yǔ)音合成模塊
智能語(yǔ)音合成模塊的功能是將控制模塊發(fā)送的文本信息轉(zhuǎn)換成語(yǔ)音從而輸出,該部分采用XF-S4240中文語(yǔ)音合成模塊,其主要應(yīng)用于嵌入式領(lǐng)域。該模塊有如下特點(diǎn):
- 可通過GB2312、GBK、Big5、Unicode的快速文本合成;同時(shí),它支持中文文本和英文的合成,能夠正確快速地識(shí)別英文、數(shù)字、時(shí)間點(diǎn)、日期和常用的國(guó)際度量單位符號(hào);還支持處理各種音節(jié)和字母.
- 擁有UART、SPI、I2C三種數(shù)據(jù)通信接口.
- 支持合成、停止、暫停合成、繼續(xù)合成等多種控制指令.
存儲(chǔ)模塊用于存儲(chǔ)待合成的文本數(shù)據(jù)文件.存儲(chǔ)設(shè)備為語(yǔ)音控制系統(tǒng)SD卡(安全數(shù)字存儲(chǔ)卡),具有便攜性、通用性和安全性三大特點(diǎn)。
4.2 軟件設(shè)計(jì)
具體軟件流程
5 部分核心代碼
//超聲波測(cè)距 //晶振=8M //MCU=STC10F04XE //P0.0-P0.6共陽(yáng)數(shù)碼管引腳 //Trig = P1^0 //Echo = P3^2 #include <reg52.h> //包括一個(gè)52標(biāo)準(zhǔn)內(nèi)核的頭文件 #define uchar unsigned char //定義一下方便使用 #define uint unsigned int #define ulong unsigned long //*********************************************** sfr CLK_DIV = 0x97; //為STC單片機(jī)定義,系統(tǒng)時(shí)鐘分頻 //為STC單片機(jī)的IO口設(shè)置地址定義 sfr P0M1 = 0X93;
sfr P0M0 = 0X94;
sfr P1M1 = 0X91;
sfr P1M0 = 0X92;
sfr P2M1 = 0X95;
sfr P2M0 = 0X96; //*********************************************** sbit Trig = P1^0; //產(chǎn)生脈沖引腳 sbit Echo = P3^2; //回波引腳 sbit test = P1^1; //測(cè)試用引腳 uchar code SEG7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//數(shù)碼管0-9 uint distance[4]; //測(cè)距接收緩沖區(qū) uchar ge,shi,bai,temp,flag,outcomeH,outcomeL,i; //自定義寄存器 bit succeed_flag; //測(cè)量成功標(biāo)志 //********函數(shù)聲明 void conversion(uint temp_data); void delay_20us(); //void pai_xu(); void main(void) // 主程序 { uint distance_data,a,b;
uchar CONT_1;
CLK_DIV=0X03; //系統(tǒng)時(shí)鐘為1/8晶振(pdf-45頁(yè)) P0M1 = 0; //將io口設(shè)置為推挽輸出 P1M1 = 0;
P2M1 = 0;
P0M0 = 0XFF;
P1M0 = 0XFF;
P2M0 = 0XFF;
i=0;
flag=0;
test =0;
Trig=0; //首先拉低脈沖輸入引腳 TMOD=0x11; //定時(shí)器0,定時(shí)器1,16位工作方式 TR0=1; //啟動(dòng)定時(shí)器0 IT0=0; //由高電平變低電平,觸發(fā)外部中斷 ET0=1; //打開定時(shí)器0中斷 //ET1=1; //打開定時(shí)器1中斷 EX0=0; //關(guān)閉外部中斷 EA=1; //打開總中斷0 while(1) //程序循環(huán) {
EA=0;
Trig=1;
delay_20us();
Trig=0; //產(chǎn)生一個(gè)20us的脈沖,在Trig引腳 while(Echo==0); //等待Echo回波引腳變高電平 succeed_flag=0; //清測(cè)量成功標(biāo)志 EX0=1; //打開外部中斷 TH1=0; //定時(shí)器1清零 TL1=0; //定時(shí)器1清零 TF1=0; // TR1=1; //啟動(dòng)定時(shí)器1 EA=1; while(TH1 < 30);//等待測(cè)量的結(jié)果,周期65.535毫秒(可用中斷實(shí)現(xiàn)) TR1=0; //關(guān)閉定時(shí)器1 EX0=0; //關(guān)閉外部中斷 if(succeed_flag==1)
{
distance_data=outcomeH; //測(cè)量結(jié)果的高8位 distance_data<<=8; //放入16位的高8位 distance_data=distance_data|outcomeL;//與低8位合并成為16位結(jié)果數(shù)據(jù) distance_data*=12; //因?yàn)槎〞r(shí)器默認(rèn)為12分頻 distance_data/=58; //微秒的單位除以58等于厘米 } //為什么除以58等于厘米, Y米=(X秒*344)/2 // X秒=( 2*Y米)/344 ==》X秒=0.0058*Y米 ==》厘米=微秒/58 if(succeed_flag==0)
{
distance_data=0; //沒有回波則清零 test = !test; //測(cè)試燈變化 } /// distance[i]=distance_data; //將測(cè)量結(jié)果的數(shù)據(jù)放入緩沖區(qū) /// i++; /// if(i==3) /// { /// distance_data=(distance[0]+distance[1]+distance[2]+distance[3])/4; /// pai_xu(); /// distance_data=distance[1]; a=distance_data; if(b==a) CONT_1=0; if(b!=a) CONT_1++; if(CONT_1>=3)
{ CONT_1=0;
b=a;
conversion(b);
} /// i=0; /// } }
} //*************************************************************** //外部中斷0,用做判斷回波電平 INTO_() interrupt 0 // 外部中斷是0號(hào) {
outcomeH =TH1; //取出定時(shí)器的值 outcomeL =TL1; //取出定時(shí)器的值 succeed_flag=1; //至成功測(cè)量的標(biāo)志 EX0=0; //關(guān)閉外部中斷 } //**************************************************************** //定時(shí)器0中斷,用做顯示 timer0() interrupt 1 // 定時(shí)器0中斷是1號(hào) {
TH0=0xfd; //寫入定時(shí)器0初始值 TL0=0x77; switch(flag)
{case 0x00:P0=ge; P2=0xfd;flag++;break; case 0x01:P0=shi;P2=0xfe;flag++;break; case 0x02:P0=bai;P2=0xfb;flag=0;break;
}
} //***************************************************************** /*
//定時(shí)器1中斷,用做超聲波測(cè)距計(jì)時(shí)
timer1() interrupt 3 // 定時(shí)器0中斷是1號(hào)
{
TH1=0;
TL1=0;
}
*/ //****************************************************************** //顯示數(shù)據(jù)轉(zhuǎn)換程序 void conversion(uint temp_data) {
uchar ge_data,shi_data,bai_data ;
bai_data=temp_data/100 ;
temp_data=temp_data%100; //取余運(yùn)算 shi_data=temp_data/10 ;
temp_data=temp_data%10; //取余運(yùn)算 ge_data=temp_data;
bai_data=SEG7[bai_data];
shi_data=SEG7[shi_data];
ge_data =SEG7[ge_data];
EA=0;
bai = bai_data;
shi = shi_data;
ge = ge_data ;
EA=1;
} //****************************************************************** void delay_20us() { uchar bt ; for(bt=0;bt<100;bt++);
} /*
void pai_xu()
{ uint t;
if (distance[0]>distance[1])
{t=distance[0];distance[0]=distance[1];distance[1]=t;} /*交換值
if(distance[0]>distance[2])
{t=distance[2];distance[2]=distance[0];distance[0]=t;} /*交換值
if(distance[1]>distance[2])
{t=distance[1];distance[1]=distance[2];distance[2]=t;} /*交換值
}
*/
嵌入式物聯(lián)網(wǎng)的學(xué)習(xí)之路非常漫長(zhǎng),不少人因?yàn)閷W(xué)習(xí)路線不對(duì)或者學(xué)習(xí)內(nèi)容不夠?qū)I(yè)而錯(cuò)失高薪offer。不過別擔(dān)心,我為大家整理了一份150多G的學(xué)習(xí)資源,基本上涵蓋了嵌入式物聯(lián)網(wǎng)學(xué)習(xí)的所有內(nèi)容。點(diǎn)擊下方鏈接,0元領(lǐng)取學(xué)習(xí)資源,讓你的學(xué)習(xí)之路更加順暢!記得點(diǎn)贊、關(guān)注、收藏、轉(zhuǎn)發(fā)哦!
點(diǎn)擊這里找小助理0元領(lǐng)取:掃碼進(jìn)群領(lǐng)資料