聚丰项目 > 适用于办公场所的语音控制物联系统
目前市场上的家居物联、智能插座等产品,虽然功能很炫,但使用或应用对象不对,因此销量较低,发展进入低潮。不适用高端人群,他们可以选择高档家居或有专门保姆、管家。不适用低层人群,居住环境小,电器少;中层或中高层是唯一有发展潜力的人群。但普通通过手机遥控的方式不是非常实用,方便程度不一定比传统方式来的高端。 本项目在物联系统的基础上加入语音识别、控制功能。包括对智能插座、红外设备(空调等)、功率可调设备(台灯、加热器、风扇等)等的控制以及实时资讯、天气预报、通讯(手机、QQ、微信、邮件等)的自动在线显示、转接、控制等,非常适合于工程师、管理者等在办公环境中使用,能够大大提高使用者的工作效率和智能化程度。试想,当你使用此产品后,可以在手中工作不停下的同时,打开空调,接听电话,打开电烙铁,打开示波器,收听即时消息,这样的产品是不是非常适合办公场合的应用呢? 项目中结合科大讯飞的语音识别模块,并制作桌面接收/控制的硬件,完成所介绍的功能。
liqijian101

liqijian101
团队成员
李其建 助理工程师
赵丹丹
一、演示硬件说明
1. 设计中语音识别功能使用科大讯飞的语音识别资源库,利用易安卓编写APP程序,使用安卓手机作为识别硬件。
2. 电灯、电烙铁、智能插座、窗户等使用继电器控制,演示中使用5mm蓝色LED代表,以电灯和窗户作为演示示例。
3. 台灯等功率可调设备利用PWM直接驱动LED演示。
4. 室内温度采用DS18B20温度传感器检测。
5. 无线WIFI采用EMW3080模块。
6. 温度等的显示使用OLED显示。
7. 控制器为STM32F401型号。
说明:实际控制时电灯、电烙铁、智能插座、窗户、台灯亮度等的控制,需要专用的驱动电路,或者需要无线组网控制,此处演示中使用基础功能代替。
二、演示硬件功能框图

说明:由于没有空调设备,故演示中以OLED显示解析后语音指令来说明可以实现红外通信类的控制。
1. 语音识别程序
运行平台:安卓手机
编程环境:易安卓
原始代码:
语音识别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();
}
}
