聚豐項(xiàng)目 > 適用于辦公場(chǎng)所的語(yǔ)音控制物聯(lián)系統(tǒng)
目前市場(chǎng)上的家居物聯(lián)、智能插座等產(chǎn)品,雖然功能很炫,但使用或應(yīng)用對(duì)象不對(duì),因此銷量較低,發(fā)展進(jìn)入低潮。不適用高端人群,他們可以選擇高檔家居或有專門保姆、管家。不適用低層人群,居住環(huán)境小,電器少;中層或中高層是唯一有發(fā)展?jié)摿Φ娜巳骸5胀ㄍㄟ^(guò)手機(jī)遙控的方式不是非常實(shí)用,方便程度不一定比傳統(tǒng)方式來(lái)的高端。 本項(xiàng)目在物聯(lián)系統(tǒng)的基礎(chǔ)上加入語(yǔ)音識(shí)別、控制功能。包括對(duì)智能插座、紅外設(shè)備(空調(diào)等)、功率可調(diào)設(shè)備(臺(tái)燈、加熱器、風(fēng)扇等)等的控制以及實(shí)時(shí)資訊、天氣預(yù)報(bào)、通訊(手機(jī)、QQ、微信、郵件等)的自動(dòng)在線顯示、轉(zhuǎn)接、控制等,非常適合于工程師、管理者等在辦公環(huán)境中使用,能夠大大提高使用者的工作效率和智能化程度。試想,當(dāng)你使用此產(chǎn)品后,可以在手中工作不停下的同時(shí),打開(kāi)空調(diào),接聽(tīng)電話,打開(kāi)電烙鐵,打開(kāi)示波器,收聽(tīng)即時(shí)消息,這樣的產(chǎn)品是不是非常適合辦公場(chǎng)合的應(yīng)用呢? 項(xiàng)目中結(jié)合科大訊飛的語(yǔ)音識(shí)別模塊,并制作桌面接收/控制的硬件,完成所介紹的功能。
liqijian101
分享liqijian101
團(tuán)隊(duì)成員
李其建 助理工程師
趙丹丹
一、演示硬件說(shuō)明
1. 設(shè)計(jì)中語(yǔ)音識(shí)別功能使用科大訊飛的語(yǔ)音識(shí)別資源庫(kù),利用易安卓編寫APP程序,使用安卓手機(jī)作為識(shí)別硬件。
2. 電燈、電烙鐵、智能插座、窗戶等使用繼電器控制,演示中使用5mm藍(lán)色LED代表,以電燈和窗戶作為演示示例。
3. 臺(tái)燈等功率可調(diào)設(shè)備利用PWM直接驅(qū)動(dòng)LED演示。
4. 室內(nèi)溫度采用DS18B20溫度傳感器檢測(cè)。
5. 無(wú)線WIFI采用EMW3080模塊。
6. 溫度等的顯示使用OLED顯示。
7. 控制器為STM32F401型號(hào)。
說(shuō)明:實(shí)際控制時(shí)電燈、電烙鐵、智能插座、窗戶、臺(tái)燈亮度等的控制,需要專用的驅(qū)動(dòng)電路,或者需要無(wú)線組網(wǎng)控制,此處演示中使用基礎(chǔ)功能代替。
二、演示硬件功能框圖
說(shuō)明:由于沒(méi)有空調(diào)設(shè)備,故演示中以OLED顯示解析后語(yǔ)音指令來(lái)說(shuō)明可以實(shí)現(xiàn)紅外通信類的控制。
1. 語(yǔ)音識(shí)別程序
運(yùn)行平臺(tái):安卓手機(jī)
編程環(huán)境:易安卓
APP程序:語(yǔ)音識(shí)別APP.zip
APP使用說(shuō)明:需要先安裝訊飛語(yǔ)音+APP,并下載離線識(shí)別庫(kù)。 軟件啟動(dòng)-->確定(無(wú)密碼)-->點(diǎn)擊訊飛語(yǔ)音識(shí)別進(jìn)行中-->點(diǎn)擊右上角開(kāi)始.
2. STM32程序
1)主程序: 完整程序Nucleo_work_iar_nucleo_f401re.zip
#include "mbed.h" #include "Adafruit_SSD1306.h" #include "DS18B20.h" #define READBUFFERSIZE (16) #define ON 0 #define OFF 1 Serial pc(SERIAL_TX, SERIAL_RX,115200); Serial wifi_serial(D8, D2,115200); //wifi; //DigitalOut myled(LED1); PwmOut mypwm(LED1); DigitalOut mylight(PC_5,1); DigitalOut window(PC_6,1); DigitalInOut sensor(PC_11); // sensor connected to pin 5 // an SPI sub-class that provides a constructed default class SPIPreInit : public SPI { public: SPIPreInit(PinName mosi, PinName miso, PinName clk) : SPI(mosi,miso,clk) { format(8,3); frequency(2000000); }; }; SPIPreInit gSpi(PB_5,NC,PB_3);//SPI_SCK= PB_13, SPI_MOSI= PB_15, Adafruit_SSD1306_Spi gOled1(gSpi,PB_1,PB_14,PB_2);//spi DC(PB_1) RST(PB_14) CS(PB_2)<---> float gHome_Temperature; void Serial_Receive_Callback() { char buffer[32]; wifi_serial.gets(buffer,13); pc.printf("I heard %s\n",buffer); if(buffer[0]=='F' && buffer[1]=='F') { if(buffer[3]=='1') { if(buffer[5]=='1') { gOled1.setTextCursor(38,32); gOled1.printf("Light ON "); mylight=ON; } else { gOled1.setTextCursor(38,32); gOled1.printf("Light OFF "); mylight=OFF; } } if(buffer[3]=='2') { if(buffer[5]=='1') { gOled1.setTextCursor(38,32); gOled1.printf("Window ON "); window=ON; } else { window=OFF; gOled1.setTextCursor(38,32); gOled1.printf("Window OFF "); } } if(buffer[3]=='6') { if(buffer[5]=='1') { gOled1.setTextCursor(38,32); gOled1.printf("Desk Lamp %d %",buffer[6]); mypwm.pulsewidth_us(buffer[6]*10); } else { gOled1.setTextCursor(38,32); gOled1.printf("Desk Lamp OFF "); mypwm.pulsewidth_us(0); } } if(buffer[3]=='7') { if(buffer[5]=='1') { gOled1.setTextCursor(38,32); gOled1.printf("Conditioner %dC",buffer[6]); } else gOled1.printf("Conditioner OFF" ); } } gOled1.display(); } int main() { int i = 1; wifi_serial.attach(&Serial_Receive_Callback); mypwm.period_ms(1); mypwm.pulsewidth_us(0); gOled1.setTextSize(1); gOled1.printf(" Voice Control System"); gOled1.drawLine(0, 10, 128,10, 1); gOled1.setTextCursor(2,16); gOled1.printf("Temp:"); gOled1.setTextCursor(2,32); gOled1.printf("Order:"); gOled1.display(); sensor.mode(PullUp); while(1) { wait(1); gHome_Temperature=DS18B20_Temperature(); gOled1.setTextCursor(36,16); gOled1.printf("%2.1fC",gHome_Temperature); gOled1.display(); } }