回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

行空板K10案例征集——基于行空板k10的智能家居控制系统 中等

头像 qzs1982 2025.02.07 173 0

项目背景

        随着科技的飞速发展,智能家居逐渐成为现代生活的重要组成部分。智能家居系统通过物联网、人工智能等技术,实现了对家居环境的智能化控制,为人们的生活带来了极大的便利。2022年发布的义务教育信息科技新课程标准强调培养学生的信息意识、计算思维、数字化学习与创新能力以及信息社会责任。2024年教育部办公厅发布《关于加强中小学人工智能教育的通知》,进一步推动了人工智能教育在中小学的普及。在此背景下,将智能家居与信息科技教学相结合,不仅能够激发学生的学习兴趣,还能培养学生的跨学科思维和创新能力。

项目来源

        智能家居作为现代科技的典型应用,融合了多种先进技术,涵盖了多学科知识领域。将其引入中小学信息科技教学,能够使学生直观地感受信息技术在生活中的应用,促进信息技术与数学、物理、艺术、科学等学科的深度融合,培养学生的综合素养和跨学科解决问题的能力。因此,结合跨学科主题“智能家居”,设计了“行空板K10智能家居控制系统”项目。

项目原理

       本项目基于物联网架构,通过行空板K10实现家居设备智能控制。行空板K10直接驱动控制130风扇模块和LED灯、k10内置的扬声器喇叭(播放音频),通过K10自带语音识别功能接收语音指令(开关灯和风扇、查询天气、播放音乐),物联网平台siot v2用于接收远程终端(web端)的控制指令。项目中还利用行空板K10的屏幕实时显示当前时间、温度、光线强度,增强智能家居控制的体验性和趣味性。

步骤1 根据项目主题确定功能

1.系统实时显示时间

2.实时显示家居环境如家里的温湿度、环境光强度等;

3.语音识别控制家居设备:LED、风扇、行空板k10内置的扬声器喇叭(播放音频);

4.实时查询天气情况:本地的天气阴晴、最低温度、最高温度

步骤2 选择硬件设备

主控器:行空板K10(一块)

传感器:行空板K10自带的语音识别模块、温湿度传感器、数字环境光传感器、麦克风传感器;

执行器:Gravity: 130 直流电机、数字Red LED模块

其他组件:连接线、TF卡、局域网内部署siot服务器1台

image.png

步骤3 硬件组装与基础编程

1.硬件连线及系统运行界面

微信图片_20250206170656.jpg

2.mind+编程界面截图(主要包括程序初始化、语音识别与控制、物联网Mqtt控制指令发送与接受)

image.png
image.png

 

材料清单

代码
/*!
 * MindPlus
 * esp32s3bit
 *
 */
#include "asr.h"
#include <DFRobot_Iot.h>
#include "unihiker_k10.h"
#include <mPython_Weather.h>
#include <MPython_NtpTime.h>

// 动态变量
String mind_s_weather, mind_s_temp_1, mind_s_temp_2, mind_s_text;
// 函数声明
void obloqMqttEventT4sebh(String& message);
void DF_ChuShiHua();
void DF_WuLianWangYuYinKongZhiCeShi();
void onButtonAPressed();
void DF_K10NaZhiRGBDengShanShuo();
// 静态常量
const MsgHandleCb msgHandles[5] = {NULL,obloqMqttEventT4sebh,NULL,NULL,NULL};
const String topics[5] = {"siot/001","siot/002","","",""};
// 创建对象
DFRobot_Iot     myIot;
UNIHIKER_K10    k10;
ASR             asr;
uint8_t         screen_dir=2;
mPython_Weather myWeather;
MPython_NtpTime ntptime;
AHT20           aht20;
Music           music;


// 主程序开始
void setup() {
	myIot.setMqttCallback(msgHandles);
	k10.begin();
	asr.setAsrSpeed(0);
	k10.initScreen(screen_dir);
	k10.creatCanvas();
	asr.asrInit(CONTINUOUS, CN_MODE, 6000);
	while(asr._asrState == 0){delay(100);}
	k10.initSDFile();
	k10.buttonA->setPressedCallback(onButtonAPressed);
	DF_ChuShiHua();
}
void loop() {
	if ((k10.readALS()<100)) {
		digitalWrite(P0, HIGH);
		delay(3000);
		digitalWrite(P0, LOW);
	}
	DF_WuLianWangYuYinKongZhiCeShi();
}


// 自定义函数
void DF_ChuShiHua() {
	k10.setScreenBackground(0x33FFFF);
	k10.canvas->canvasText("智能家居监控", 46, 5, 0x0000FF, k10.canvas->eCNAndENFont24, 50, true);
	k10.canvas->updateCanvas();
	k10.rgb->brightness(round(9));
	k10.rgb->write(-1, 0x000000);
	myIot.wifiConnect("zlwxxrobot", "123456789");
	while (!myIot.wifiStatus()) {}
	DF_K10NaZhiRGBDengShanShuo();
	myWeather.init("server.mindplus.top", "31982666", "E6MtBcxQ");
	ntptime.setNtpTime(ntptime.UTCEast8_t, "edu.ntp.org.cn");
	k10.canvas->canvasText(ntptime.getDate(), 2, 0x000000);
	k10.canvas->canvasText(myIot.getWiFiLocalIP(), 13, 0x000000);
	k10.canvas->updateCanvas();
	delay(1000);
	myIot.init("192.168.10.203","siot","3466242875331742","dfrobot", topics, 1883);
	myIot.connect();
	while (!myIot.connected()) {}
	DF_K10NaZhiRGBDengShanShuo();
	asr.addASRCommand(0+1, "kai deng");
	asr.addASRCommand(1+1, "guan deng");
	asr.addASRCommand(2+1, "da kai feng shan");
	asr.addASRCommand(3+1, "guan bi feng shan");
	asr.addASRCommand(4+1, "bo fang yin yue");
	asr.addASRCommand(5+1, "tian qi");
	pinMode(P0, OUTPUT);
	pinMode(P1, OUTPUT);
}
void DF_WuLianWangYuYinKongZhiCeShi() {
	k10.canvas->canvasText(ntptime.getTime(), 3, 0x000000);
	k10.canvas->canvasText((String("温           度:") + String(aht20.getData(AHT20::eAHT20TempC))), 4, 0x000000);
	k10.canvas->canvasText((String("环境光强度:") + String(k10.readALS())), 5, 0x000000);
	if (asr.isWakeUp()) {
		k10.canvas->canvasText("进入语音识别状态。请说出控制命令词", 5, 126, 0xFF0000, k10.canvas->eCNAndENFont16, 50, true);
	}
	else {
		k10.canvas->canvasText("进入休眠状态。请说唤醒词“你好小行”", 5, 126, 0xFF0000, k10.canvas->eCNAndENFont16, 50, true);
	}
	k10.canvas->updateCanvas();
	if (asr.isDetectCmdID(0+1)) {
		myIot.publish(topic_1, "turn on the light");
	}
	if (asr.isDetectCmdID(1+1)) {
		myIot.publish(topic_1, "turn off the light");
	}
	if (asr.isDetectCmdID(2+1)) {
		myIot.publish(topic_1, "turn on the fan");
	}
	if (asr.isDetectCmdID(3+1)) {
		myIot.publish(topic_1, "turn off the fan");
	}
	if (asr.isDetectCmdID(4+1)) {
		music.playTFCardAudio("S:/1.wav");
	}
	if (asr.isDetectCmdID(5+1)) {
		mind_s_weather = (String("扬州今天天气:") + String(myWeather.getWeather("weather", "101190601")));
		mind_s_temp_1 = (String("最低温度:") + String((String(myWeather.getWeather("temperaturLow", "101190601")) + String("度"))));
		mind_s_temp_2 = (String("最高温度:") + String((String(myWeather.getWeather("temperaturHigh", "101190601")) + String("度"))));
		mind_s_text = (String(mind_s_weather) + String((String(mind_s_temp_1) + String(mind_s_temp_2))));
		asr.speak(mind_s_text);
		k10.canvas->canvasText(mind_s_weather, 7, 0x000000);
		k10.canvas->canvasText(mind_s_temp_1, 8, 0x000000);
		k10.canvas->canvasText(mind_s_temp_2, 9, 0x000000);
		k10.canvas->updateCanvas();
		delay(6000);
	}
}
void DF_K10NaZhiRGBDengShanShuo() {
	k10.rgb->write(0, 0xFF0000);
	delay(200);
	k10.rgb->write(0, 0x000000);
	delay(200);
}

// 事件回调函数
void obloqMqttEventT4sebh(String& message) {
	if ((message=="turn on the light")) {
		asr.speak("灯已打开");
		digitalWrite(P0, HIGH);
	}
	if ((message=="turn off the light")) {
		asr.speak("灯已关闭");
		digitalWrite(P0, LOW);
	}
	if ((message=="turn on the fan")) {
		asr.speak("风扇已打开");
		digitalWrite(P1, HIGH);
	}
	if ((message=="turn off the fan")) {
		asr.speak("风扇已关闭");
		digitalWrite(P1, LOW);
	}
}
void onButtonAPressed() {
	music.stopPlayAudio();
}

评论

user-avatar