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

小学六年级跨学科主题——基于行空板K10的智能绿色节能教室设计 简单

头像 Michael 2025.01.07 55 0

项目来源:

     六年级跨学科主题学习,结合信息科技新课标中的小型系统模拟中的小型安全系统。设计了“智能绿色节能教室”。

跨学科学习.png

项目简介:

        在“智能绿色节能教室”项目中,学生将使用K10行空板自带的温度传感器在SIOT物联网平台上监控环境温度,并且显示在k10行空板上;同时也将环境光传感器采集的数据以及LED状态在siot平台以及屏幕上进行显示。根据环境光对灯补光进行控制,同时对教室中的灯光进行远程监控,减少电能损耗。结合行空板中自带的语音识别人工智能技术,对安全教育方面的知识,采用图像与文字结合以及语音合成的方式进行科普。

 

 

项目知识点:

结合新课标内容,通过项目学习,知识点如下:

1.      通过体验项目,了解过程控制中的输入、计算、和输出三个环节。

2.      理解智能绿色节能教室这个大系统中的三个小系统:环境光控制灯;语音控制显示屏内容输出以及语音合成输出;采用物联网方式远程发送指令控制灯的开关。

3.      通过对该项目的体验分析,了解反馈是过程与控制中的重要手段,初步了解反馈对系统优化的作用。

4.      通过对环境光以及温度数据的采集,了解系统的输入与输出可以是连续量,同时了解连续量可以经由阈值判断形成开关量;通过物联网信息发送,了解系统的输入与输出可以是开关量。

5.      通过项目学习,了解计算机可以用于实现过程与控制,能够在实验系统中通过编程可以验证过程与控制系统的设计。

 

项目原理:

六年级的过程与控制抽象包含为:输入、计算和输出。

智能光照反馈系统如下:

环境光控灯.png

环境光控制灯

 

语音输入.png

人工智能语音输入知识科普

 

siot物联网控制系统.png

基于siot物联网平台控灯

 

硬件连接如下:

微信图片_20241225094644.jpg

 

智能绿色节能教室控制流程图如下:

补光灯开关.png

环境光控制灯

 

siot控灯.png

Siot控灯

程序编写如下:

程序MQTT初始化,初始化语音识别

1程序语音识别、MQTT初始化.png

显示屏对温度和光照以及LED数据显示状态初始化

2显示屏显示环境温度以及光照强度,同时显示灯光状态.png

语音唤醒设置

语音唤醒.png

定义地震避险

定义地震避险.png

定义火灾逃生

定义火灾逃生.png

定义补光灯亮灯

定义亮灯.png

定义siot控灯

siot控灯.png

 

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

// 动态变量
String         mind_s_kaiguan;
volatile float mind_n_ShiJian;
// 函数声明
void obloqMqttEventTeqc3l(String& message);
void DF_HuoZaiTaoSheng();
void DF_DiZhenBiXian();
void DF_ZiDongLiangDeng();
// 静态常量
const MsgHandleCb msgHandles[5] = {NULL,obloqMqttEventTeqc3l,NULL,NULL,NULL};
const String topics[5] = {"siot/风扇","siot/LED","siot/光照","siot/温度",""};
// 创建对象
DFRobot_Iot  myIot;
UNIHIKER_K10 k10;
uint8_t      screen_dir=2;
ASR          asr;
AHT20        aht20;


// 主程序开始
void setup() {
	myIot.setMqttCallback(msgHandles);
	k10.begin();
	pinMode(P1, OUTPUT);
	k10.initScreen(screen_dir);
	k10.creatCanvas();
	asr.asrInit(CONTINUOUS, CN_MODE, 6000);
	while(asr._asrState == 0){delay(100);}
	asr.setAsrSpeed(2);
	mind_s_kaiguan = "off";
	myIot.wifiConnect("ChangyanTCH", "iFlytek1234");
	myIot.init("192.168.1.200","siot","025468387381277324","dfrobot", topics, 1883);
	myIot.connect();
	k10.canvas->canvasText("WiFi连接成功", 1, 0x0000FF);
	k10.canvas->updateCanvas();
	asr.addASRCommand(0+1, "huo zai tao sheng");
	asr.addASRCommand(1+1, "di zhen bi xian");
	mind_n_ShiJian = 0;
}
void loop() {
	if (((millis() - mind_n_ShiJian)>1000)) {
		mind_n_ShiJian = millis();
		myIot.publish(topic_3, aht20.getData(AHT20::eAHT20TempC), 1);
		myIot.publish(topic_2, k10.readALS(), 1);
		k10.canvas->canvasText((String("当前灯光状态是:") + String(mind_s_kaiguan)), 0, 0, 0x00FF00, k10.canvas->eCNAndENFont24, 50, true);
		k10.canvas->canvasText((String("当前环境温度是") + String(aht20.getData(AHT20::eAHT20TempC))), 0, 30, 0x0000FF, k10.canvas->eCNAndENFont24, 50, true);
		k10.canvas->canvasText((String("当前环境光强度是") + String(k10.readALS())), 0, 60, 0x0000FF, k10.canvas->eCNAndENFont24, 50, true);
		k10.canvas->updateCanvas();
	}
	if (asr.isWakeUp()) {
		k10.canvas->canvasText("你可以问我安全相关知识,比如说:", 0, 120, 0xFF6666, k10.canvas->eCNAndENFont16, 50, true);
		k10.canvas->canvasText("火灾逃生、地震避险", 0, 140, 0xFF6666, k10.canvas->eCNAndENFont16, 50, true);
		k10.canvas->updateCanvas();
	}
	else {
		k10.canvas->canvasText("请唤醒我:“你好,小行”", 0, 120, 0xFF6666, k10.canvas->eCNAndENFont16, 50, true);
		k10.canvas->updateCanvas();
	}
	DF_HuoZaiTaoSheng();
	DF_DiZhenBiXian();
	DF_ZiDongLiangDeng();
}


// 自定义函数
void DF_HuoZaiTaoSheng() {
	if (asr.isDetectCmdID(0+1)) {
		k10.canvas->canvasClear();
		k10.canvas->canvasDrawBitmap(0,0,240,320,image_data1);
		k10.canvas->canvasText("教室和楼道都出现烟雾怎么办 :", 0, 60, 0xFF6666, k10.canvas->eCNAndENFont16, 50, false);
		k10.canvas->canvasText("1用湿毛巾或湿纸巾捂住口鼻。", 0, 80, 0xFF6666, k10.canvas->eCNAndENFont16, 50, false);
		k10.canvas->canvasText("2弯腰并小步移动向前。", 0, 100, 0xFF6666, k10.canvas->eCNAndENFont16, 50, false);
		k10.canvas->canvasText("3向空旷和安全的地方转移。 ", 0, 120, 0xFF6666, k10.canvas->eCNAndENFont16, 50, false);
		k10.canvas->canvasText("4烟雾沉积时匍匐撤离。", 0, 140, 0xFF6666, k10.canvas->eCNAndENFont16, 50, false);
		asr.speak("教室和楼道都出现烟雾怎么办 ?1 用湿毛巾或湿纸巾捂住口鼻。2 弯腰并小步移动向前。3 向空旷和安全的地方转移。4 烟雾沉积时匍匐撤离。");
		k10.canvas->updateCanvas();
		delay(12000);
	}
}
void DF_DiZhenBiXian() {
	if (asr.isDetectCmdID(1+1)) {
		k10.canvas->canvasClear();
		k10.canvas->canvasDrawBitmap(0,0,240,320,image_data2);
		k10.canvas->canvasText("地震发生时在教室怎么办 :", 0, 60, 0xFF0000, k10.canvas->eCNAndENFont16, 50, false);
		k10.canvas->canvasText("在老师的指挥下迅速抱头、闭眼,", 0, 80, 0xFF0000, k10.canvas->eCNAndENFont16, 50, false);
		k10.canvas->canvasText("躲在各自的课桌下,绝不能乱跑或者跳楼;", 0, 100, 0xFF0000, k10.canvas->eCNAndENFont16, 50, false);
		k10.canvas->canvasText("地震后,有组织地撤离教室", 0, 120, 0xFF0000, k10.canvas->eCNAndENFont16, 50, false);
		k10.canvas->canvasText("到就近的开阔地带避震。", 0, 140, 0xFF0000, k10.canvas->eCNAndENFont16, 50, false);
		asr.speak("在老师的指挥下迅速抱头、闭眼,躲在各自的课桌下,绝不能乱跑或者跳楼;地震后,有组织地撤离教室,到就近的开阔地带避震。");
		k10.canvas->updateCanvas();
		delay(12000);
	}
}
void DF_ZiDongLiangDeng() {
	if ((k10.readALS()<90)) {
		digitalWrite(P1, HIGH);
	}
	else {
		digitalWrite(P1, LOW);
	}
}

// 事件回调函数
void obloqMqttEventTeqc3l(String& message) {
	mind_s_kaiguan = message;
	if ((mind_s_kaiguan==String("on"))) {
		k10.rgb->write(-1, 0x00FFFF);
	}
	if ((mind_s_kaiguan==String("off"))) {
		k10.rgb->write(-1, 0x000000);
	}
}

附件

评论

user-avatar