DIY一个以武大老图书馆外形的电子音乐盒

2019-04-03  本文已影响0人  创客大杨

【关键词】3D打印;Arduino Nano;无源蜂鸣器;纽扣电池;丙烯颜料

1. 简介

2. 手工部分

2.1 关于建模

使用Win10自带的3D查看器浏览模型文件

老图的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 元器件简介

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秒)
}

4. 大功告成

上一篇下一篇

猜你喜欢

热点阅读