好久没有玩arduino了,参加成长记活动拿起封尘好多年的arduino,接上电脑,打开MIND+发现好多的惊喜,arduino支持的传感器好多,很多都没体验过。这个项目就用arduino配上离线语音识别板搞起来,选择语音控制门、快递柜、衣架、风扇、灯等执行器,获取温湿度传感器并实现语音播报室内温度、湿度。
语音识别采用Gravity Voice Recognition I2C UART模块:该模块采用了全新的离线语音识别芯片。内置150条常用的固定命令词条,新增命令词自学习功能,自学习命令词可以不是一段语音,可以是一段口哨、一个响指、一声猫叫等,支持17条自学习命令词。采用双麦克风收音使模块有更好的抗噪音能力和更远的识别距离。
设计唤醒词和自定义词
唤醒词:小爱同学
定义1:开灯
定义2:关灯
定义3:当前温度
定义4:当前湿度
定义5:开递柜
定义6:关递柜
定义7:通风
定义8:关通风
定义9:晾衣服
定义10:收衣服
原始定义:开门和关门
代码如图
代码
/*!
* MindPlus
* uno
*
*/
#include <DFRobot_DHT.h>
#include <DFRobot_Servo.h>
#include "DFRobot_DF2301Q.h"
#include <DFRobot_SpeechSynthesis_M.h>
// 创建对象
DFRobot_SpeechSynthesis_I2C sstts;
DFRobot_DF2301Q_I2C asrDF2301Q;
Servo servo_8;
Servo servo_10;
Servo servo_12;
DFRobot_DHT dht11_5;
// 主程序开始
void setup() {
Serial.begin(9600);
servo_8.attach(8);
servo_10.attach(10);
servo_12.attach(12);
dht11_5.begin(5, DHT11);
sstts.begin(sstts.eV2);
sstts.setVolume(8);
sstts.setSpeed(5);
sstts.setSoundType(sstts.eMale1);
sstts.setTone(5);
sstts.speak("初始化完成");
while (!(asrDF2301Q.begin())) {delay(3000);}
asrDF2301Q.setVolume(5);
asrDF2301Q.setMuteMode(0);
asrDF2301Q.setWakeTime(20);
asrDF2301Q.playByCMDID(23);
// 8为快递柜舵机
// 10为晾衣架舵机
// 12为门口舵机
servo_8.angle(abs(0));
servo_10.angle(abs(0));
servo_12.angle(abs(0));
}
void loop() {
int asrDF2301Q_CMDID = asrDF2301Q.getCMDID();
if ((not asrDF2301Q_CMDID==0)) {
Serial.println((asrDF2301Q_CMDID));
if (((asrDF2301Q_CMDID)==5)) {
digitalWrite(13, HIGH);
}
if (((asrDF2301Q_CMDID)==6)) {
digitalWrite(13, LOW);
}
if (((asrDF2301Q_CMDID)==7)) {
sstts.speak((String("当前温度为") + String((String((String(dht11_5.getTemperature()).toInt())) + String("摄氏度")))));
}
if (((asrDF2301Q_CMDID)==8)) {
sstts.speak((String("当前湿度为百分之") + String((String(dht11_5.getHumidity()).toInt()))));
}
if (((asrDF2301Q_CMDID)==9)) {
servo_8.angle(abs(90));
}
if (((asrDF2301Q_CMDID)==10)) {
servo_8.angle(abs(0));
}
}
if (((asrDF2301Q_CMDID)==11)) {
digitalWrite(3, HIGH);
digitalWrite(2, LOW);
}
if (((asrDF2301Q_CMDID)==12)) {
digitalWrite(3, LOW);
digitalWrite(2, LOW);
}
if (((asrDF2301Q_CMDID)==13)) {
servo_10.angle(abs(150));
}
if (((asrDF2301Q_CMDID)==14)) {
servo_10.angle(abs(0));
}
if (((asrDF2301Q_CMDID)==155)) {
servo_12.angle(abs(90));
}
if (((asrDF2301Q_CMDID)==156)) {
servo_12.angle(abs(0));
}
}
庞老师122024.10.24
老师你好,这个房子的电子切割图可以分享一下吗?給学生学习参考一下
庞老师122024.10.23
你好老师,可以要一份激光切割的电子文件吗?給学生学习参考