回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页
best-icon

基于行空板K10的智能转向灯 简单

头像 DeadWalking 2024.12.30 127 0

【项目介绍】

       1.项目背景

       生活中广泛存在着“输入一计算一输出”的计算模式,从外界获 得的输入经过计算产生输出,进而作用于外界再影响输入,从而形成 反馈系统。理解系统实现过程与控制的原理,对于理解生活中广泛存 在的过程与控制系统至关重要。本模块通过学习生活中的过程与控制系统,帮助学生了解过程与控制的特征及实现方式,理解利用计算机 解决问题的手段,进一步认识过程与控制系统自身的特点和规律 通过本模块的学习,学生能认识到过程与控制广泛存在于日常生活中,知道其中的反馈、环路、优化等概念,针对简单的过程与控制系统,能通过编程进行验证。 本模块包括“系统与模块”“反馈与优化”“逻辑与运算”三部分 内容。

QQ20241230-213058.jpg

      生活中的共享单车对于大多数初中生来说并不陌生,但是由于自行车的随意转向而引发的安全事故缺经常发生。在学习了过程与控制这一主题内容后,尝试结合行空板k10上的板载功能和人工智能语音合成技术,帮助学生运用过程与控制的系统方法解决真实问题的能力。

 

 

      2.项目知识点

      贴合新课标中六年级的内容要求,“智能转向灯”核心教学以下知识点:

      能将智能转向灯抽象出输入、计算、输出三个环节。输入值为加速度传感器感知的当前姿态,计算部分为判断当前姿态为向左倾斜、向右倾斜,输出值为led灯光效果、语音播报和显示的图片效果。引导学生根据上述内容解决真实问题。

 

【制作过程】

       

         一、硬件准备:

image.png
image.png

      行空板K10是一款专为快速体验和学习人工智能而设计的开发学习板,100%采用国产芯片,知识产权自主可控,符合信息科技课程中编程学习、物联网及人工智能等教学需求。凭借高度集成的板载资源,教学过程中无需额外连接其他设备,便可轻松实现传感器控制、物联网应用以及人脸识别、语音识别、语音合成等人工智能项目。

     本项目使用行空板k10中的LCD彩屏、麦克风、扬声器、RGB指示灯、加速度传感器和按键A,进行模拟自动转向灯系统的设计与实施。

 

二、设计过程

     根据自动转向灯,对于骑行者和行空板K10设计相应思维导图,引导学生了解输入-计算-输出这一计算机计算模式。

image.png

下面是程序搭建过程:

 

 

 

步骤1 自定义左转灯和右转灯程序。

image.png

步骤2 设计k10计算过程,分别编写左转、右转和没有转向的效果。

      利用语音合成技术和本地图片显示的效果,使得转向灯效果更有效。

image.png

步骤3 根据效果,设计自动转向灯启动模块,并做好产品说明。

image.png

步骤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);
	}
}

材料清单

评论

user-avatar