聚豐項目 > 適用于辦公場所的語音控制物聯(lián)系統(tǒng)
目前市場上的家居物聯(lián)、智能插座等產(chǎn)品,雖然功能很炫,但使用或應用對象不對,因此銷量較低,發(fā)展進入低潮。不適用高端人群,他們可以選擇高檔家居或有專門保姆、管家。不適用低層人群,居住環(huán)境小,電器少;中層或中高層是唯一有發(fā)展?jié)摿Φ娜巳?。但普通通過手機遙控的方式不是非常實用,方便程度不一定比傳統(tǒng)方式來的高端。 本項目在物聯(lián)系統(tǒng)的基礎上加入語音識別、控制功能。包括對智能插座、紅外設備(空調(diào)等)、功率可調(diào)設備(臺燈、加熱器、風扇等)等的控制以及實時資訊、天氣預報、通訊(手機、QQ、微信、郵件等)的自動在線顯示、轉接、控制等,非常適合于工程師、管理者等在辦公環(huán)境中使用,能夠大大提高使用者的工作效率和智能化程度。試想,當你使用此產(chǎn)品后,可以在手中工作不停下的同時,打開空調(diào),接聽電話,打開電烙鐵,打開示波器,收聽即時消息,這樣的產(chǎn)品是不是非常適合辦公場合的應用呢? 項目中結合科大訊飛的語音識別模塊,并制作桌面接收/控制的硬件,完成所介紹的功能。
liqijian101

liqijian101
團隊成員
李其建 助理工程師
趙丹丹
一、演示硬件說明
1. 設計中語音識別功能使用科大訊飛的語音識別資源庫,利用易安卓編寫APP程序,使用安卓手機作為識別硬件。
2. 電燈、電烙鐵、智能插座、窗戶等使用繼電器控制,演示中使用5mm藍色LED代表,以電燈和窗戶作為演示示例。
3. 臺燈等功率可調(diào)設備利用PWM直接驅動LED演示。
4. 室內(nèi)溫度采用DS18B20溫度傳感器檢測。
5. 無線WIFI采用EMW3080模塊。
6. 溫度等的顯示使用OLED顯示。
7. 控制器為STM32F401型號。
說明:實際控制時電燈、電烙鐵、智能插座、窗戶、臺燈亮度等的控制,需要專用的驅動電路,或者需要無線組網(wǎng)控制,此處演示中使用基礎功能代替。
二、演示硬件功能框圖

說明:由于沒有空調(diào)設備,故演示中以OLED顯示解析后語音指令來說明可以實現(xiàn)紅外通信類的控制。
1. 語音識別程序
運行平臺:安卓手機
編程環(huán)境:易安卓
原始代碼:
語音識別E4A程序.zip![]()
APP程序:
語音識別APP.zip
APP使用說明:需要先安裝訊飛語音+APP,并下載離線識別庫。 軟件啟動-->確定(無密碼)-->點擊訊飛語音識別進行中-->點擊右上角開始.
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();
}
}
