聚丰项目 > 适用于办公场所的语音控制物联系统
目前市场上的家居物联、智能插座等产品,虽然功能很炫,但使用或应用对象不对,因此销量较低,发展进入低潮。不适用高端人群,他们可以选择高档家居或有专门保姆、管家。不适用低层人群,居住环境小,电器少;中层或中高层是唯一有发展潜力的人群。但普通通过手机遥控的方式不是非常实用,方便程度不一定比传统方式来的高端。 本项目在物联系统的基础上加入语音识别、控制功能。包括对智能插座、红外设备(空调等)、功率可调设备(台灯、加热器、风扇等)等的控制以及实时资讯、天气预报、通讯(手机、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(); } }