初学者的 Arduino 免焊接套件附带了您创建 MP3 播放器所需的一切,而 JJ 通过将 Vishay 环境光线传感器添加到混合体中来对其进行了增强。
包装盒中提供了用来播放音乐的 Adafruit Music Maker。
参阅相关产品
下面我们创建自己的应用程序,其中播放的音乐将依赖于环境光线。来自 Vishay 的 VEML6030 用作环境光线传感器来为我们提供勒克斯数。通过 I2C 总线获取此数据。
参阅相关产品
即使 Arduino 使 I2C 总线的编程变得非常容易,但必须了解基础知识才能对其进行编程。
I2C 总线是一项广泛用于传感器的标准。它由 Philips 设计(如今的NXP)并且仅使用 2 条线:一条线用于时钟(称作 SCL),一条用于数据(称作 SDA)。最后一条线是双向的。这些 teo 线是开路,并且需要上拉电阻器。这些是可在电路试验板上看到的电阻器。很显然,在最后的应用中,您将在电路试验板上设计这些电阻器。总线的主设备将生成时钟并启动与从设备的通信。每台从设备均具有一个 7 位地址。
参阅相关产品
协议如下:主设备发送一个起始位(具有高 SCL 的 SDA 的高到低过渡),后跟要与之通信的地址的 7 位地址,再后跟单个位(如果希望在从设备中写入(0 位)或读取( 1 位)。在每个 8 位传输后,从设备将响应 ACK 位(SDA 置于较低位)。如果发射器发现位 1,则为 NACK(未确认)
通信结尾对应于 STOP 位。具有高 SCL 的 SDA 的低到高过渡。由于 SCL 较高时会出现起始位和停止位,因此 SDA 的所有其他过渡将在 SCL 较低时进行。
现在,我们已了解 I2C 的工作方式,我们来读取 VEML6030 数据表中的数据以了解要写入程序中的值。
首先,通过参阅 VEML6030 的原理图,我们可以看到地址 pin 允许配置地址值。在我们的电路试验板上,此 pin 是接地的,这意味着设备的地址为 0x10。
数据表说明了 I2C 接口以及如何发送命令。当我们需要对设备进行写入时,需要发送地址和命令代码。在 VEML6030 中,所有寄存器都是 16 位,并且 LSB 必须是第一个。因此,我们需要为 VEML6030 配置四分之一的增益和 100 毫秒的积分时间,并且我们需要启动环境光线传感器,LSB 等于 0x00,而 MSB 等于 0x18。在我们的程序中,我们依次在设置和 loop 函数中定义了宏,包括线库(称作 Wire.begin()),我们开始使用 VEML6030 的地址进行传输,寄存器命令(目前为 0x00),发送 LSB 和 MSB,然后 endTransmission。要参阅这些命令的更详细说明,您可以转至 Arduino 网站来查看库的说明。
读取数据的方式相同。我们开始传输,发送要从中读取数据的寄存器值、具有地址的 requestFrom 函数以及要读取的 2 个字节,并最终读取数据。
我们转换整数形式的勒克斯等级,并根据勒克斯值来最终决定要播放的音乐。
如果低于 20 勒克斯,我们将播放可促进睡眠的音乐。如果介于 20 和 50 勒克斯之间,则播放用于放松的音乐;如果介于 50 和 800 勒克斯之间,则播放积极向上的音乐;如果高于 800 勒克斯,我们会想象您在外参加聚会,并准备好播放电子音乐。
您现在已准备好使用任何类型的传感器来创建您自己的应用程序并定制您的音乐播放器。