【关键词】3D打印;Arduino Nano;无源蜂鸣器;纽扣电池;丙烯颜料
1. 简介
2. 手工部分
2.1 关于建模
老图的3D建模工作是土建院的郭泓同学完成的(这个模型也是他参加我校图书馆办的第一届3D打印设计大赛的一等奖作品),据他说是使用 Autodesk 123D Design 软件设计的,不过这个软件现在 AutoDesk 公司似乎已经不更新了。
我自己比较常用的三维建模软件是 Autodesk Inventor,而作为没有任何基础的同学如果想要入门三维设计,做一些简单的尝试的话,建议试一下 Win10 自带的画图3D,还有就是 AutoDesk 公司的在线建模软件 TinkerCAD ,注册一下就可以使用了(记得注册为教育用户,这样 AutoDesk 公司的几十个软件都可以在三年之内免费使用,这里不详述)。
虽然已经有了基本的模型,但也不是立马就能用来做音乐盒的外壳,而是在制作的过程中经过反复的手动调整、反复沟通(si)和二次设计,最后才确定了现在的组合方式。
2.2 3D打印
打印全部的零件差不多花了10余个小时,还是个挺漫长的过程,笔者用的这个打印机精度不算高,出模之后还有一些毛边需要手工用刀片处理下。
2.3 上色
使用丙烯颜料给模型上色,丙烯的特点是可以用水做溶剂,干燥之后防水而且耐磨、不易脱落,所以很适合DIY的时候用来给塑料或金属制品上色。
调色也是个学问,也是做了一两次失败的尝试才确定了比较合适的颜料比例,上色的时候先用较粗的画笔大致上一遍,待颜料基本干后,再用较细的笔勾描一下细节。
3. Arduino部分
下面到了电子元器件的部分
3.1 元器件简介
- Arduino Nano
- 无源蜂鸣器
- 纽扣电池
3.2 组合与焊接
3.3 代码部分
tone() 函数介绍
蜂鸣器音调和频率的对应关系(待补充)
将歌曲的简谱按音调和节拍录入为两个数组
// 列出所有D调的频率
#define NTD0 -1
#define NTD1 293
#define NTD2 329
#define NTD3 368
#define NTD4 390
#define NTD5 438
#define NTD6 492
#define NTD7 554
#define NTDL1 147
#define NTDL2 166
#define NTDL3 185
#define NTDL4 196
#define NTDL5 221
#define NTDL6 248
#define NTDL7 278
#define NTDH1 585
#define NTDH2 657
#define NTDH3 700
#define NTDH4 781
#define NTDH5 882
#define NTDH6 990
#define NTDH7 1112
int note[] = { // 根据简谱列出各频率
// 东湖之滨,珞珈山上,这是我们亲爱的学堂
NTD3, NTD4, NTD5, NTD6, NTD5,
NTD2, NTD4, NTD3, NTD2, NTD1,
NTD3, NTD4, NTD5, NTD5, NTD5, NTDH3, NTDH2, NTDH1,
NTD7, NTD6, NTDH2, NTDH1, NTD5,
//
NTDH1, NTD7, NTD6, NTD5, NTD6,
NTD5, NTD2, NTD4, NTD3, NTD2,
NTD3, NTD2, NTD3, NTD4, NTD5, NTD6, NTD5,
NTDH1, NTD7, NTD6, NTD5, NTDH2,
//
NTDH3,
NTDH2, NTDH1, NTDH3,
NTDH2, NTDH1, NTD6, NTD7,
NTDH1, NTD6, NTD5,
//
NTD3, NTD4, NTD3, NTD2, NTD1,
NTDH1, NTDH1, NTD7, NTD6,
NTD5, NTDH4, NTDH3, NTDH2,
NTDH1
};
float durt[] = { // 根据简谱列出各节拍
// 从东湖之滨开始
0.5, 0.5, 0.5, 0.5, 2,
0.5, 0.5, 0.5, 0.5, 2,
0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5,
0.5, 0.5, 0.5, 0.5, 2,
//
0.5, 0.5, 0.5, 0.5, 2,
0.5, 0.5, 0.5, 0.5, 2,
0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 1,
0.5, 0.5, 0.5, 0.5, 2,
//
4,
0.75, 0.25, 3,
0.75, 0.25, 2.5, 0.5,
0.5, 0.5, 3,
//
1.5, 0.5, 0.5, 0.5, 1,
1, 0.75, 0.25, 2,
1, 1, 1.5, 0.5,
4
};
int length;
int tonePin = 5; // 使用5号接口输出声音
void setup() {
pinMode(tonePin, OUTPUT); // 设置tonePin(5号引脚)为输出
length = sizeof(note) / sizeof(note[0]); // 计算音调数组的长度
}
void loop() {
for(int x = 0; x < length; x++) {
tone(tonePin, note[x]); // tone()函数接收两个参数,第一个为连接蜂鸣器输出声音的引脚,第二个为声音的音调
delay(500 * durt[x]); // 这里用来根据音乐速率调节参数,这首设为500
noTone(tonePin); // 关闭声音
}
delay(2000); // 延时2000毫秒(2秒)
}