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

台灯-《小黑的进化》 简单

头像 老邬 2020.12.30 1116 3

回想去年7月份,一次偶然的机会,我市教委安排到广州参训,听龙丽嫦、高伟光老师给我们讲创客;那时才刚接触Arduino开源硬件,顿时明白创客原来还可以这么好玩,从此,买、买、买…在学校建了一间创客室,带着学生一起玩得很嗨,非常感谢DF给我们小白提供这么多的资源,还有要感谢高伟光、张勇老师的指导,还有我不知道姓名的那些老师。

我任高中通用技术学科教师,创客教育与通用技术教学的深度融合是本人探索的方向;我提交的作品是给学生上课的内容,算教具吧,想把平时的教学思路总结一下,所以趁这机会斗胆发布我指导的学生作品,请各位老师多多指教。

在通用技术的教学中,我布置学生完成台灯的设计制作,台灯构造三个部分:灯罩、灯架、灯座;在实际的教学过程中,学生始终摆脱不了这个框架,所以基本都在艺术设计上下功夫,弱化了技术设计;学生设计思路不够丰富,制作的质量太差。

自从有了创客室,通用技术+创客,学生的作品有了很大改观。

上淘宝时看到一个小狗台灯,看下图。

project-image

这个作品很贴合我的要求,满足我教学的需要。(通用技术课程,这里有教这门课的老师吗?)

步骤1 小黑的I代

先找几个学生手工完成以下作品。工具:钢锯、美工刀、热熔胶;材料:胶合板、白炽灯、螺口灯座、船型开关,电线、插头;供电:交流220V。很简陋,学生花了不少时间,完成的满好的,我用这个作品讲了三节的《设计的一般过程》,让他们得瑟了一阵子。

project-image
project-image

步骤2 小黑的II代

用激光切割机代替传统的切割工具,白炽灯换成大功率的LED灯珠,用UNO开发板,然后,用各种传感器控制灯的开关,看起来很简单,对学生而言,很炫很酷,主要是很好地把创客思想传递给学生。

project-image
project-image

步骤3 小黑的III代-掌控板

设计目标--语音控制+免接触式测温;

该装置由掌控板语音识别主人说的话,可以向其下达开启红、蓝、绿以及白灯的指令,同时也可以向其下达测温的指令,语音播报测出的体温。显示屏即时刷新本地天气,最高气温、最低气温。而在平时不使用该装置时,可以当作装饰品,该装置可爱的外形也会使得使用者心情愉悦。

要实现的功能为:

1. 在使用者发出开关指令时,准确识别使用者的指令并打开或关闭灯光。可选择有红灯、蓝灯、绿灯,白灯。

2. 接收到测温指令时,测温头开始测量体温,将体温显示在掌控板屏幕上并用语音合成播报测出的体温。

3. 网课上烦了,还可以用“小黑”练习编程,可烧录程序,化身掌上游戏机!

4. 掌控板方便插、拔,使用与学习两不误。

第一步 用SU建模,确认设计意图,并获得激光切割用的CAD图;

project-image
project-image

分构件导出CAD的DXF格式图,再导入LaserMaker,稍稍修改就可以用了。

第二步 导入LaserMaker,激光切割并拼装,切割到拼装很快,10分钟不到;(模型文件看附件)

project-image
project-image
project-image

第三步 硬件及连接

project-image
project-image

材料清单

  • 掌控板2.0 X1 链接
  • I/O扩展板 X1 链接
  • 免接触测温 GY-906 MLX90614ESF BCC X1 链接
  • SYN6288语音合成模块 X1 链接
  • RGB LED灯盒(自制) X1 链接

第四步 编程(看附件)

project-image
代码
/*!
 * MindPlus
 * mpython
 *
 */
#include <MPython.h>
#include <MPython_ASR.h>
#include <DFRobot_Iot.h>
#include <DFRobot_SYN6288.h>
#include <MPython_NtpTime.h>
#include <mPython_Weather.h>
#include <DFRobot_NeoPixel.h>
#include <DFRobot_MLX90614.h>

// 动态变量
volatile float mind_n_a;
// 函数声明
void DF_ChuShiHua();
void DF_TianQi();
// 创建对象
MPython_ASR      mpythonAsr;
String           str_mpythonAsr_result;
DFRobot_SYN6288  syn6288;
DFRobot_NeoPixel neoPixel_P14;
DFRobot_MLX90614 mlx90614;
SoftwareSerial   softSerialSyn6288(P3, P0);
DFRobot_NeoPixel neoPixel_P13;
DFRobot_Iot      myIot;
MPython_NtpTime  ntptime;
mPython_Weather  myWeather;


// 主程序开始
void setup() {
	mPython.begin();
	neoPixel_P13.begin(P13, 5, 255);
	DF_ChuShiHua();
	DF_TianQi();
	mind_n_a = 0;
}
void loop() {
	str_mpythonAsr_result=mpythonAsr.getAsrResult(2);
	display.setCursorLine(4);
	display.printLine((str_mpythonAsr_result));
	if (((String(str_mpythonAsr_result).indexOf(String("小黑")) != -1))) {
		syn6288.playText("主人,我在呢", 0);
		delay(3000);
	}
	if (((String(str_mpythonAsr_result).indexOf(String("红灯")) != -1))) {
		neoPixel_P14.setRangeColor(0, 35, 0xFF0000);
		syn6288.playText("红灯开了", 0);
		delay(2000);
	}
	else if (((String(str_mpythonAsr_result).indexOf(String("关灯")) != -1))) {
		neoPixel_P14.clear();
		syn6288.playText("灯已经关了", 0);
		delay(2000);
	}
	else if (((String(str_mpythonAsr_result).indexOf(String("绿灯")) != -1))) {
		neoPixel_P14.setRangeColor(0, 35, 0x00FF00);
		syn6288.playText("绿灯开了", 0);
		delay(2000);
	}
	else if (((String(str_mpythonAsr_result).indexOf(String("蓝灯")) != -1))) {
		neoPixel_P14.setRangeColor(0, 35, 0x0000FF);
		syn6288.playText("蓝灯开了", 0);
		delay(2000);
	}
	else if (((String(str_mpythonAsr_result).indexOf(String("体温")) != -1))) {
		display.setCursorLine(3);
		display.printLine((String("您的体温") + String((String(mlx90614.getObjectTempC()) + String("℃")))));
		syn6288.playText((String("您的体温") + String((String(mlx90614.getObjectTempC()) + String("摄氏度")))), 0);
		delay(6000);
		if ((mlx90614.getObjectTempC()<=37)) {
			syn6288.playText("您的体温正常", 0);
			delay(2000);
		}
		if ((mlx90614.getObjectTempC()>37)) {
			syn6288.playText("您的体温偏高", 0);
			delay(2000);
		}
	}
	else if (((String(str_mpythonAsr_result).indexOf(String("台灯")) != -1))) {
		neoPixel_P14.setRangeColor(0, 35, 0xFFFFFF);
		syn6288.playText("主人,请认真做作业吧", 0);
		delay(2000);
	}
	else if (((String(str_mpythonAsr_result).indexOf(String("神经")) != -1))) {
		syn6288.playText("主人,你该吃药了", 0);
		delay(2000);
	}
}


// 自定义函数
void DF_ChuShiHua() {
	syn6288.begin(&softSerialSyn6288, P2);
	syn6288.setVolume(true, 12);
	neoPixel_P14.begin(P14, 36);
	syn6288.setSpeed(5);
	neoPixel_P13.clear();
	display.setRotaion(eROTATION_0);
	display.setCursorLine(1);
	display.printLine("连接wifi中");
	myIot.wifiConnect("Ndwz-jishushi2", "ndwz0593");
	while (!myIot.wifiStatus()) {yield();}
	ntptime.setNtpTime(ntptime.UTCEast8_t, "ntp.ntsc.ac.cn");
	myWeather.init("server.mindplus.top", "31982666", "E6MtBcxQ");
	display.fillScreen(0);
	display.setCursor(30, 0);
	display.print("智能语音小狗");
	display.setCursor(44, 16);
	display.print("为您服务");
	syn6288.playText("智能语音小狗为您服务", 0);
	delay(6000);
	syn6288.playText("请叫我小黑", 0);
	delay(3000);
	display.setCursorLine(2);
	display.printLine("                                                                                               ");
}
void DF_TianQi() {
	display.setCursor(24, 16);
	display.print((String(myWeather.getWeather("weather", "101230301")) + String((String("  ") + String((String(myWeather.getWeather("temperaturLow", "101230301")) + String((String("℃   ") + String((String(myWeather.getWeather("temperaturHigh", "101230301")) + String("℃")))))))))));
}

评论

user-avatar
  • 混沌

    混沌2021.01.12

    太棒了!麻烦问下语音合成有什么要注意的吗?我的怎么不出声?谢谢

    0
    • 混沌

      混沌2021.01.12

      太棒了!麻烦问下语音合成有什么要注意的吗?我的怎么不出声?谢谢

      0
      • 混沌

        混沌2021.01.12

        太棒了!麻烦问下语音合成有什么要注意的吗?我的怎么不出声?谢谢

        0