回想去年7月份,一次偶然的机会,我市教委安排到广州参训,听龙丽嫦、高伟光老师给我们讲创客;那时才刚接触Arduino开源硬件,顿时明白创客原来还可以这么好玩,从此,买、买、买…在学校建了一间创客室,带着学生一起玩得很嗨,非常感谢DF给我们小白提供这么多的资源,还有要感谢高伟光、张勇老师的指导,还有我不知道姓名的那些老师。
我任高中通用技术学科教师,创客教育与通用技术教学的深度融合是本人探索的方向;我提交的作品是给学生上课的内容,算教具吧,想把平时的教学思路总结一下,所以趁这机会斗胆发布我指导的学生作品,请各位老师多多指教。
在通用技术的教学中,我布置学生完成台灯的设计制作,台灯构造三个部分:灯罩、灯架、灯座;在实际的教学过程中,学生始终摆脱不了这个框架,所以基本都在艺术设计上下功夫,弱化了技术设计;学生设计思路不够丰富,制作的质量太差。
自从有了创客室,通用技术+创客,学生的作品有了很大改观。
上淘宝时看到一个小狗台灯,看下图。
这个作品很贴合我的要求,满足我教学的需要。(通用技术课程,这里有教这门课的老师吗?)
步骤1 小黑的I代
先找几个学生手工完成以下作品。工具:钢锯、美工刀、热熔胶;材料:胶合板、白炽灯、螺口灯座、船型开关,电线、插头;供电:交流220V。很简陋,学生花了不少时间,完成的满好的,我用这个作品讲了三节的《设计的一般过程》,让他们得瑟了一阵子。
步骤2 小黑的II代
用激光切割机代替传统的切割工具,白炽灯换成大功率的LED灯珠,用UNO开发板,然后,用各种传感器控制灯的开关,看起来很简单,对学生而言,很炫很酷,主要是很好地把创客思想传递给学生。
步骤3 小黑的III代-掌控板
设计目标--语音控制+免接触式测温;
该装置由掌控板语音识别主人说的话,可以向其下达开启红、蓝、绿以及白灯的指令,同时也可以向其下达测温的指令,语音播报测出的体温。显示屏即时刷新本地天气,最高气温、最低气温。而在平时不使用该装置时,可以当作装饰品,该装置可爱的外形也会使得使用者心情愉悦。
要实现的功能为:
1. 在使用者发出开关指令时,准确识别使用者的指令并打开或关闭灯光。可选择有红灯、蓝灯、绿灯,白灯。
2. 接收到测温指令时,测温头开始测量体温,将体温显示在掌控板屏幕上并用语音合成播报测出的体温。
3. 网课上烦了,还可以用“小黑”练习编程,可烧录程序,化身掌上游戏机!
4. 掌控板方便插、拔,使用与学习两不误。
第一步 用SU建模,确认设计意图,并获得激光切割用的CAD图;
分构件导出CAD的DXF格式图,再导入LaserMaker,稍稍修改就可以用了。
第二步 导入LaserMaker,激光切割并拼装,切割到拼装很快,10分钟不到;(模型文件看附件)
第三步 硬件及连接
第四步 编程(看附件)
/*!
* 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("℃")))))))))));
}
混沌2021.01.12
太棒了!麻烦问下语音合成有什么要注意的吗?我的怎么不出声?谢谢
混沌2021.01.12
太棒了!麻烦问下语音合成有什么要注意的吗?我的怎么不出声?谢谢
混沌2021.01.12
太棒了!麻烦问下语音合成有什么要注意的吗?我的怎么不出声?谢谢