在〈mBlock & Arduino(4)利用 PWM 模拟类比讯号〉中,我们试着使用 PWM 来模拟类比讯号输出,其中谈到 Arduino 脚位 A0 到 A5,实际上是用来做为类比讯号输入,在这一个主题中,我们将使用这些脚位,并搭配可变电阻(Variable Resistor)来制作一个节拍器。
认识可变电阻
为了要能调整节拍器的速度,我们需要一个可调元件,在这边使用可变电阻,顾名思义,借着调整电阻器上的旋钮,就可以改变电阻值,可变电阻上会标示欧姆数,可分为 A(对数型)、B(线性型)与 C(反对数型),分别代表旋转角度与欧姆值的变化关系,以我手边的这颗可变电阻为例,标示为 A10K,表示为 A 型可变电阻,最高电阻值为 10 KΩ。
可以看到可变电阻有三个接脚,外侧两个接脚两边都可以分别接 GND 与电源,而中间的接脚与另两个接脚之间的电阻值,会因为旋转角度而不同:
视外侧接脚哪个衔接 GND 而哪个衔接电源,可变电阻顺时针与逆时针旋转时的电阻值会分别是增加或减少,一般我们操作旋钮的习惯是顺时针增大讯号(例如音量),逆时针减少,因此,如果是上头照片中的 A10K 可变电阻,左边接脚会接 GND,右边接脚会接电源,中间是讯号输出,这么一来,顺时针旋转时,中间接脚与电源间的电阻值会变小,因而电压输出会增加,逆时针旋转则电压会降低。
类比数位转换器
Arduino 内建类比数位转换器(Analog to Digital Converter, ADC),可使用脚位 A0 到 A5 来个 ADC 输入,可读取 0 到 5V 的电压输入,解析度为 10 个位元,也就是读取而得到的值是 0 到 1023。
如果要读取可变电阻的输出,可以如下衔接电路:
我们打算利用可变电阻改变电压,并利用 Arduino 的 ADC 脚位读取电压变化,转换为节拍 BPM(Beats per minute)。
撰写节拍器程式
在 mBlock 中,有个“弹奏鼓声…”的方块,其中“拍”的设定值,是指每几秒打一下鼓,例如,下面这个方块是指每 2 秒打一下鼓,同理类推,设定“拍”为 4 时,表示每 4 秒打一下鼓:
因此,如果你想要 BPM 为 120 时,“拍”的设定就是 60 / 120 = 0.5,也就是半秒打一下鼓,我们希望转动可变电阻时,BPM 可以从 40 到 208,因此设计了以下这个公式:
为了显示目前设定的 BPM,使用了 Scratch 中的猫咪来显示目前的 BPM,而为了无聊一点,让 Scratch 中的猫咪会随着节拍而放大、缩小,这样在视觉与听觉上,都可以有节拍感…XD
感谢CodeData用户:caterpillar的贡献 著作权归作者所有
整理:宁波家电物联网云平台,中科极动云
听说人走路的节奏是 112 BPM,要不要实际写个程式听听看呢?