【项目介绍】
1.项目背景
生活中广泛存在着“输入一计算一输出”的计算模式,从外界获 得的输入经过计算产生输出,进而作用于外界再影响输入,从而形成 反馈系统。理解系统实现过程与控制的原理,对于理解生活中广泛存 在的过程与控制系统至关重要。本模块通过学习生活中的过程与控制系统,帮助学生了解过程与控制的特征及实现方式,理解利用计算机 解决问题的手段,进一步认识过程与控制系统自身的特点和规律 通过本模块的学习,学生能认识到过程与控制广泛存在于日常生活中,知道其中的反馈、环路、优化等概念,针对简单的过程与控制系统,能通过编程进行验证。 本模块包括“系统与模块”“反馈与优化”“逻辑与运算”三部分 内容。
生活中的共享单车对于大多数初中生来说并不陌生,但是由于自行车的随意转向而引发的安全事故缺经常发生。在学习了过程与控制这一主题内容后,尝试结合行空板k10上的板载功能和人工智能语音合成技术,帮助学生运用过程与控制的系统方法解决真实问题的能力。
2.项目知识点
贴合新课标中六年级的内容要求,“智能转向灯”核心教学以下知识点:
能将智能转向灯抽象出输入、计算、输出三个环节。输入值为加速度传感器感知的当前姿态,计算部分为判断当前姿态为向左倾斜、向右倾斜,输出值为led灯光效果、语音播报和显示的图片效果。引导学生根据上述内容解决真实问题。
【制作过程】
一、硬件准备:
行空板K10是一款专为快速体验和学习人工智能而设计的开发学习板,100%采用国产芯片,知识产权自主可控,符合信息科技课程中编程学习、物联网及人工智能等教学需求。凭借高度集成的板载资源,教学过程中无需额外连接其他设备,便可轻松实现传感器控制、物联网应用以及人脸识别、语音识别、语音合成等人工智能项目。
本项目使用行空板k10中的LCD彩屏、麦克风、扬声器、RGB指示灯、加速度传感器和按键A,进行模拟自动转向灯系统的设计与实施。
二、设计过程
根据自动转向灯,对于骑行者和行空板K10设计相应思维导图,引导学生了解输入-计算-输出这一计算机计算模式。
下面是程序搭建过程:
步骤1 自定义左转灯和右转灯程序。
步骤2 设计k10计算过程,分别编写左转、右转和没有转向的效果。
利用语音合成技术和本地图片显示的效果,使得转向灯效果更有效。
步骤3 根据效果,设计自动转向灯启动模块,并做好产品说明。
步骤4 完成程序搭建,上传调试。
在最开始测试的时候,遇到左转后一直播报左转效果的困惑。通过询问活动群内的大佬和DF技术客服,了解到因为使用了死循环的结构导致这一bug。在尝试改进后达到了预设的效果(去除一些循环结构积木块)。
/*!
* MindPlus
* esp32s3bit
*
*/
#include "asr.h"
#include "unihiker_k10.h"
#include "arduino_image_cache.h"
// 函数声明
void onButtonAPressed();
void DF_ZuoZhuanDeng();
void DF_YouZhuanDeng();
void DF_ZhuanXiangPanDing();
// 创建对象
UNIHIKER_K10 k10;
uint8_t screen_dir=2;
ASR asr;
// 主程序开始
void setup() {
k10.begin();
k10.buttonA->setPressedCallback(onButtonAPressed);
k10.initScreen(screen_dir);
k10.creatCanvas();
asr.setAsrSpeed(2);
}
void loop() {
}
// 自定义函数
void DF_ZuoZhuanDeng() {
k10.rgb->write(2, 0xFF0000);
delay(500);
k10.rgb->write(2, 0xFF0000);
k10.rgb->write(1, 0xFF0000);
delay(500);
k10.rgb->write(-1, 0xFF0000);
delay(500);
k10.rgb->write(-1, 0x000000);
}
void DF_YouZhuanDeng() {
k10.rgb->write(0, 0xFF0000);
delay(500);
k10.rgb->write(0, 0xFF0000);
k10.rgb->write(1, 0xFF0000);
delay(500);
k10.rgb->write(-1, 0xFF0000);
delay(200);
k10.rgb->write(-1, 0x000000);
}
void DF_ZhuanXiangPanDing() {
k10.canvas->canvasClear();
while (1) {
if ((k10.isGesture(TiltLeft))) {
asr.speak("左转,请注意!");
k10.canvas->canvasDrawBitmap(40,80,150,150,image_data2);
k10.canvas->updateCanvas();
DF_ZuoZhuanDeng();
}
if ((k10.isGesture(TiltRight))) {
asr.speak("右转,请注意!");
k10.canvas->canvasDrawBitmap(40,80,150,150,image_data3);
k10.canvas->updateCanvas();
DF_YouZhuanDeng();
}
if ((!((k10.isGesture(TiltLeft)) || (k10.isGesture(TiltRight))))) {
k10.rgb->write(-1, 0x00FF00);
k10.canvas->canvasClear();
}
}
}
// 事件回调函数
void onButtonAPressed() {
k10.canvas->canvasText("行空板k10", 60, 35, 0x0000FF, k10.canvas->eCNAndENFont24, 50, true);
k10.canvas->canvasText("自动转向灯", 55, 65, 0x0000FF, k10.canvas->eCNAndENFont24, 50, true);
k10.canvas->canvasText("1.0版", 85, 95, 0x0000FF, k10.canvas->eCNAndENFont16, 50, true);
k10.canvas->canvasDrawBitmap(50,125,150,150,image_data1);
k10.canvas->updateCanvas();
delay(2000);
while (1) {
DF_ZhuanXiangPanDing();
delay(100);
}
}
材料清单
- 行空板 K10 X1 链接
附件
评论