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

“长征历史”智能宣讲机 简单

头像 怀若谷 2021.07.02 1357 2

前 言

今年7月1日,是党的百年华诞。为此,我国举行了一系列庆祝活动。其中,开展时间最长的是党史学习教育活动,将贯穿全年。前一段时间,我制作了一个党史知识答题机(“同学,请听题”),很荣幸地被《爱上机器人》杂志录用。

这次DF举办线上活动,又激起了我的创作欲望。在党史学习中,我印象最深的是红军长征的那段历史,也许是因为小时候就从课本上读到过那一个个催人泪下的故事——《飞夺泸定桥》、《金色的鱼钩》、《丰碑》、《一袋干粮》......

于是,我开始着手制作一个关于长征历史的智能宣讲机。其间,遇到了不少困难和失败。更换了几次主控板,放弃了一些预设的功能......在坚持不懈的努力下,作品于7月1日完工了,算是我为党的百年华诞的献上的一份礼物吧!

长征永远在路上!

project-image

功 能 介 绍

(1)诗歌欣赏——按下对应按钮后,会播放《七律·长征》朗诵音频,上面的画卷会随之转动,展现一幅幅长征主题版画*。

*因时间及技术等因素,成品的画卷中只有3幅画,预设是10幅左右。预想的《七律·长征》书法作品也因为激光切割机加工尺寸不够而放弃。

(2)长征概述——按下对应按钮后,会播放长征介绍音频,一颗颗LED灯会随之亮起,指示出红军长征的行进路线。

(3)了解事件——按下对应按钮后,会提示:请说出你想了解的事件;当识别到某个事件名称后,会亮起该事件发生的地点的指示灯(其他的灯会自动熄灭),并播放介绍该事件的音频。

演 示 视 频

材料清单

  • DFRduino Uno R3 X1
  • IO扩展板 X1
  • 语音识别模块 X1
  • 串口MP3模块 X1
  • 数字按钮模块 X3
  • 360°舵机 X2
  • 小音箱 X1
project-image

其他材料

(1)小滚动轴承 (2)油画布 (3)椴木板 (4)螺丝螺母 (5)合页 (6)小木棒

制 作 过 程

步骤1 硬件搭建

project-image

先将扩展板安装主控板上,然后将各个电子模块连接到扩展板上,连接图如图3所示。

语音识别模块——IIC专用引脚

WS2812灯带——引脚4

360°舵机——引脚8、9

数字按钮模块——引脚A1、A2、A3

串口MP3模块——引脚2、3

小音箱——串口MP3模块

步骤2 编写程序

1. 打开编程软件MIND+ v1.7.0,以“上传模式”运行,如下图所示

project-image

2. 分别加载主控板和各电子模块的扩展积木模块,如下图所示

project-image

3. 根据预设功能编写程序,完整程序下图所示(源程序见附件)

project-image

步骤3 结构设计、加工

1. 设计思路:

考虑到手上的激光切割机加工范围为40cm*60cm,而预设的尺寸较大、内部构件较多,只能采取分体设计、分部分切割再组装的方式完成。

2.使用激光建模软件LaserMaker 进行结构及外型的图纸绘制

project-image

3.使用激光切割机进行加工

project-image

步骤4 组装

1.将电子模块安装到木板件的预设位置

project-image

2.将电子模块重新连接到主控板及扩展板上

project-image

3.将下面的盒体组装起来

project-image

4.安装滚动轴承,组装上面的部分盒体

project-image

5.拼装、制作画轴,并固定到面板上

project-image

6.拼装转轴,并固定在合适的位置

project-image

7.将画布固定在转轴上

project-image

8.装上上面盒体的背板,使用合页与下面的盒体连接在一起

project-image

成 品 图 赏

project-image

折叠状态

project-image

展开状态

project-image

上部特写

project-image

下部特写

project-image

灯全亮状态

代码
/*!
 * MindPlus
 * uno
 *
 */
#include <SimpleList.h>
#include<DFRobot_ASR.h>
#include <SoftwareSerial.h>
#include <DFRobot_NeoPixel.h>
#include <DFRobot_SerialMp3.h>
#include <DFRobot_Libraries.h>

// 动态变量
volatile float     mind_n_xzkz, mind_n_b, mind_n_order, mind_n_index, mind_n_a;
SimpleList<String> mind_l_DengHao;
// 函数声明
void DF_YiCiLiangDeng();
// 创建对象
DFRobot_SerialMp3 serialMp3;
SoftwareSerial    softSerialserialMp3(2, 3);
DFRobot_NeoPixel  neoPixel_4;
DFRobot_ASR       asr;
DFRobot_Servo360  servo360_8;
DFRobot_Servo360  servo360_9;


// 主程序开始
void setup() {
	asr.begin(LOOP,MIC);
	asr.addCommand("xiang jiang",2);
	asr.addCommand("zui yi",3);
	asr.addCommand("chi shui",4);
	asr.addCommand("jin sha",5);
	asr.addCommand("du he",6);
	asr.addCommand("lu ding",7);
	asr.addCommand("xue shan",8);
	asr.addCommand("mao gong",9);
	asr.addCommand("cao di",10);
	asr.addCommand("la zi kou",11);
	asr.addCommand("da hui shi",12);
	asr.start();
	servo360_8.attach(8);
	servo360_9.attach(9);
	mind_l_DengHao.push_back("57");
	mind_l_DengHao.push_back("49");
	mind_l_DengHao.push_back("40");
	mind_l_DengHao.push_back("33");
	mind_l_DengHao.push_back("37");
	mind_l_DengHao.push_back("26");
	mind_l_DengHao.push_back("24");
	mind_l_DengHao.push_back("21");
	mind_l_DengHao.push_back("18");
	mind_l_DengHao.push_back("16");
	mind_l_DengHao.push_back("12");
	mind_l_DengHao.push_back("8");
	mind_l_DengHao.push_back("1");
	serialMp3.begin(&softSerialserialMp3);
	serialMp3.volume(100);
	delay(1000);
	neoPixel_4.begin(4, 58);
	neoPixel_4.setBrightness(50);
	neoPixel_4.clear();
	mind_n_xzkz = 0;
	mind_n_b = 0;
}
void loop() {
	if (digitalRead(A1)) {
		while (!(!digitalRead(A1))) {}
		serialMp3.playList(1);
		if ((mind_n_b==0)) {
			servo360_8.speed(10);
			servo360_9.speed(80);
			delay(13000);
			servo360_8.speed(0);
			servo360_9.speed(0);
			mind_n_b = 1;
		}
		else {
			servo360_8.speed(-80);
			servo360_9.speed(-10);
			delay(15000);
			servo360_8.speed(0);
			servo360_9.speed(0);
			mind_n_b = 0;
		}
		delay(50000);
	}
	if (digitalRead(A2)) {
		while (!(!digitalRead(A2))) {}
		serialMp3.playList(2);
		DF_YiCiLiangDeng();
		delay(10000);
	}
	if (digitalRead(A3)) {
		while (!(!digitalRead(A3))) {}
		serialMp3.playList(3);
	}
	mind_n_order = (asr.read());
	mind_n_index = 1;
	for (int index = 0; index < mind_l_DengHao.size(); index++) {
		if ((mind_n_order==mind_n_index)) {
			mind_n_a = (String(mind_l_DengHao[mind_n_index-1]).toInt());
			neoPixel_4.clear();
			neoPixel_4.setRangeColor(mind_n_a, mind_n_a, 0x0000FF);
			serialMp3.playList((mind_n_order + 2));
			delay(5000);
		}
		mind_n_index += 1;
	}
	mind_n_order = -1;
}


// 自定义函数
void DF_YiCiLiangDeng() {
	neoPixel_4.clear();
	delay(2000);
	mind_n_index = 1;
	for (int index = 0; index < mind_l_DengHao.size(); index++) {
		mind_n_a = (String(mind_l_DengHao[mind_n_index-1]).toInt());
		neoPixel_4.setRangeColor(mind_n_a, mind_n_a, 0x0000FF);
		delay(1000);
		mind_n_index += 1;
	}
}

评论

user-avatar
  • HF-CGH

    HF-CGH2021.08.29

    挺棒的

    0
    • 虾虾^0^

      虾虾^0^2021.08.10

      0