这次为大家介绍的是一款使用Arduino制作的电子作品,将分【前篇】和【后篇】两部分进行介绍。为我们介绍这个独特的电子制作项目的是平原真先生,他是一位以事物之间的关系为主题进行探索的艺术家。平原先生同时也是日本大阪艺术大学的副教授,迄今为止,他使用电脑和电子元器件制作了很多媒体艺术作品。在Device Plus上,曾经为我们介绍过用Arduino制作的太阳能电池板供电数字养殖箱的制作。这次,我们请平原先生为大家介绍一款使用Arduino和TOF距离传感器制作的甜甜圈播放器。到底是什么样的作品呢?让我们来一看究竟吧!
前言
大家好!我叫平原。这样问可能有点冒昧,大家平时用什么设备听音乐呢?近年来,随着流媒体服务的发展,用智能手机听音乐已经越来越普遍了,而过去曾经有过唱片时代。唱片是一种用唱针读取刻录在树脂圆盘上的声音波形,将其转换为电信号,并通过扬声器播放出来的声音载体。在唱片中,中间有一个较大圆孔的在日语中被称为“甜甜圈唱片”。
这次,我想做一款“甜甜圈播放器”,让真正的甜甜圈旋转,用距离传感器读取到甜甜圈表面的距离,并根据形状播放声音。
该作品的整体形象类似于真正的留声机。将甜甜圈放在转盘上,将距离传感器安装在唱臂的头部,将扬声器和Arduino放入主体内部。最好还要有一个旋钮可以改变唱臂的高度和位置,并调节音量和唱片旋转速度。
分发文件
请先下载创建作品实例所需的数据。其中包括Arduino草图、用于3D打印机输出的模型数据、以及用于切割椴木板的形状数据等。
- ArduinoSketch:Arduino草图
- MusicDonuts:音阶形甜甜圈模型数据
- SensorArm:感测臂(唱臂)部件的模型数据
- CutData:用激光加工机切割箱体等部件的数据
系统构成
下面,我们将整体的设备结构绘制成图。
首先,需要用电机来使转盘旋转。要想轻松控制电机,最好使用电机驱动器。由于不是便携式播放器,所以我们使用AC适配器供电。还需要用距离传感器来测量与甜甜圈之间的距离。为了播放出声音,还需要扬声器。另外,为了调节电机的速度和音量,最好再准备一个电位器。此外,还需要用来设置距离原点的按钮和用来整体控制的微控制器开发板。
接下来,需要根据电压、耗电量、所使用的引脚、通信方式、实物尺寸、作品的炫酷程度等因素,来选择具体部件。如果您从主要器件和选项较少的器件开始着手,会更容易理清思路。
行星减速电机
用直流电机的话,转速太快,所以我们需要采用某种方法来减速。虽然也可以使用皮带轮或齿轮,但为了减少制作过程中的工作量,我决定使用内置变速功能的减速电机。
电机驱动器
要想轻松控制速度和旋转方向,需要用到电机驱动器。
TOF距离传感器
SHARP的GP2Y0A21YK是常用的距离传感器,但由于它输出不稳定而且不容易测量窄范围的距离,因此不适合该项目。TOF(Tiem of Flight)距离传感器模块的分辨率可达到1mm,很精准,还可获得线性输出。TOF方式是通过测量从红外线发射到反射回来的时间并输出距离的一种测距方式。
Arduino UNO
该项目对微控制器开发板的大小没有限制,所以我们就用常规的Arduino UNO。如果您想使用其他兼容产品也可以。
结构
下面我们根据整体创意来考虑具体结构。建议您先从手绘草图开始,完成大概的轮廓后再用CAD进行设计。
整体为箱型,箱体上方配置开关、电机、传感器等主要部件。将Arduino UNO和面包板放在箱体下方并用稍长的导线连接。至于转盘,由于电机的转速足够慢,所以可以直接连接,用不到皮带轮等部件。转盘重量由固定在箱体顶部的滚珠脚轮支撑。
外观方面,由木材、金属和黑色部件制成,以使播放器呈现出复古风格。箱体和转盘由4mm厚的椴木板制成,装有传感器的唱臂由3D打印机打印的直径10mm的铝管和黑色连接件制成。
零部件清单
*价格为撰写本文时的价格,运费另计。没有提供购买网址的产品,请自行购买。
需要使用的工具
必备工具
- 镊子
- 钳子
- 电烙铁
- 测试仪
- 螺丝刀套装
- 3D打印机
- 激光加工机
- 电脑
- USB数据线 (A-B)
如果有会更方便的工具
- 剥线钳
- 热风焊枪
- 切管机
电路的构建
接线图与电路图
在考虑实际结构的同时,还需要考虑系统配置中所选零部件的布线。
连接各个零部件和面包板的导线,是将跳线针焊接到切割成30cm的导线端部后再使用的。如果您有压接钳,使用QI连接器可能操作起来更容易。
在这里跳线采用不同的颜色只是为了便于区分,实际的导线可以是相同的颜色。不过,由于导线根数很多,如果在一端贴上美纹纸胶带等并标记上连接对象,就不容易出错。
电路图是表示电气连接关系的图,接线图是考虑到表示实际尺寸和位置关系等因素而绘制的接线图。在您还不能熟练使用的阶段,完全按照接线图制作更容易一些,但是当您习惯于制作并能够自己绘制电路或嵌入他人的电路时,通过电路图进行思考更容易理解。
作业步骤
以下是构建电路时的步骤:
- 电机接线
- 电位器接线
- 扬声器和电位器接线
- 针座焊接
- 传感器接线
- 开关接线
- 排针安装
- 在面包板上接线
第1步:电机接线
先将电线焊接到电机电极上。将AWG26的电线剪成30cm(2根),并从两端去除约5cm的绝缘护套。如果预先在电极和电线上涂上焊料,操作起来会更容易。
如果焊接部位暴露在外,可能会因弯曲而断裂,所以最好用热缩套管保护好这些部位。右图下方是焊接部位裸露的状态,上方是套着热缩套管的状态。
第2步:电位器接线
将电线焊接到用来调节电机速度的电位器上。将AWG26的电线剪成30cm(3根),并从两端去除约5cm的绝缘护套。建议使用剥线器这种专用工具,由于剥线器的夹钳当中有孔,因此可以在不切断芯线的情况下快速作业。请将电线分别与电位器的引脚1、2、3焊接在一起。
第3步:扬声器和电位器接线
将电线分别与扬声器和音量控制用的电位器焊接在一起。将AWG26的电线剪成30cm(5根),并从两端去除约5cm的绝缘护套。
请将电线分别与电位器的引脚2、3、4、5焊接在一起。引脚1不连接任何器件。将引脚2的电线末端与扬声器的正极端子连接,并将最后一根电线与扬声器的负极端子焊接在一起。
第4步:针座焊接
将附带的针座与TOF距离传感器焊接在一起。注意不要弄错电路板的正面和背面。附带的排针会在下一步中使用,先放在一边。
第5步:传感器接线
制作一根连接线,用来连接传感器的针座。将切割成30cm的电线焊接到传感器附带的排针上。
接下来,连接传感器和连接线。将排针插入针座,注意要按照照片所示的方向安插。
第6步:开关接线
开关也需要接线。将切割成30cm的电线分别与引脚1、引脚2焊接在一起。
第7步:排针安装
现在,我们已经在电机、电位器、扬声器、传感器和开关上安装了电线。接下来,需要使用面包板进行接线了。由于直接用电线的线芯很难插入面包板,所以我们需要在线芯端部连接单针排针。
排针可以用钳子或剥线器切开。将热缩套管剪成1cm长。焊接前不要忘记在电线上套上热缩套管。
这就完成了焊接所需的工作。用测试仪检查通电情况,以确认五个部位的焊接是否牢固。
第8步:在面包板上接线
使用接线图并参考下面的照片,将部件分别与Arduino UNO和面包板相连接。D11、D13、A0 SCL、SDA要连接到Arduino UNO。接线图中的电线采用了不同颜色,是为了便于区分,实际接线时,跳线可以是任何颜色的。
所有零部件连接好之后的状态如下。电线很多,注意不要缠绕在一起。
工作测试
电路完成了,下面我们来创建程序并测试工作情况。如果一次性测试所有的功能,在工作异常的情况下就很难找出问题具体出在哪里,所以我们需要分别测试主要的功能。这次,我们先做两个侧式,一个是用传感器读取距离并改变音程,另一个是转动电位器来改变电机的速度。
传感器测试
TOF距离传感器使用“I2C”通信方式与Arduino UNO进行信息传输。从下面的链接页面下载库文件,并将其放进Arduino IDE的库文件夹中。
>> https://github.com/pololu/vl6180x-arduino
请在Arduino IDE中输入以下测试用的代码,并将其写入Arduino UNO。
#include #include #define SPEAKER 8 VL6180X sensor; void setup() { Serial.begin(9600); Wire.begin(); sensor.init(); sensor.configureDefault(); sensor.setTimeout(500); } void loop() { float value = sensor.readRangeSingleMillimeters(); float adjustValue = map(value, 0, 200, 0, 1000); tone(SPEAKER , adjustValue ); Serial.println(value); delay(10); }
将您的手靠近传感器,如果扬声器发出的音量发生了变化,则表示成功。您还可以通过在Arduino IDE中打开串口绘图仪,以曲线图的形式确认传感器的值。请确认当转动与扬声器相连的电位器时,音量也会发生变化。
如果用串口绘图仪确认传感器的值时没有反应,请确认连接传感器的四根电线是否焊接得牢固,连接部位是否正确,库文件是否已安装等因素。
电机测试
接下来需要测试电机的运行情况。将AC适配器插入Arduino UNO的DC插孔,并将其连接家庭电源。
用来控制电机的电机驱动器也需要使用库文件。从下面的链接页面下载库文件,并将其放进Arduino IDE的库文件夹中。
>> https://github.com/sparkfun/SparkFun_TB6612FNG_Arduino_Library
请将下面的测试代码输入Arduino IDE,并写入Arduino UNO。
#include #define AIN1 2 #define AIN2 4 #define PWMA 5 #define STBY 9 const int offsetA = 1; Motor motor1 = Motor(AIN1, AIN2, PWMA, offsetA, STBY); void setup() { Serial.begin(9600); } void loop() { int volume = analogRead(A0); volume = map( volume, 0, 1023, 30, 255 ); motor1.drive( volume ); Serial.println( volume ); delay(10); }
如果您转动与Arduino UNO的A0引脚相连的电位器时电机速度发生变化,就表示成功。
在【前篇】中,我们就介绍到工作测试部分。在后续的【后篇】中,将为您介绍如何使用3D打印机制作零部件、如何使用Arduino控制距离传感器、以及这款作品的实际工作情况,敬请期待!
希望了解更多有关传感器基础知识的读者朋友,欢迎访问ROHM官网的“电子小百科”!
本系列连载的内容
前篇:用Arduino和TOF距离传感器制作甜甜圈播放器(本文)
后篇:用Arduino和TOF距离传感器制作甜甜圈播放器