LumiCube:一款工作空间照明辅助设备





知识探索





查找一些关于不同程度视觉信息处理工作所推荐的光照强度和色温的可靠指导,并找到适合测量光照强度和色温的光传感器。
根据美国国家光学天文台(NOAO)提供的《室内外场所推荐光照水平(照度)》指南,针对不同工作任务设置了四种光照强度:
- 轻松工作:250勒克斯
- 普通办公室工作、电脑工作:500勒克斯
- 普通绘图工作、机械工作:1000勒克斯
- 精细绘图工作、精密机械工作:1500勒克斯
根据西屋电气公司提供的指导,针对不同的工作状态定义了三个灯光色温范围:
- 温馨:2000-3000开尔文
- 明亮:3100-4500开尔文
- 神醒脑:4600-6500开尔文
适合用于测量光强度和色温的光传感器:
原型制作 - 草图

通过草图设计产品的整体结构。
控制板:顶面将设有一个电源开关和一个模式开关。光线传感器也将安装在顶面,以便充分暴露在光照下,从而更准确地测量光强和色温。
工作模式:正面通过一个LED NeoPixel环展示两种照明信息(光照强度和色温)。当顶面的模式开关切换至“工作”时,光传感器开始测量当前照明环境的光照强度和色温。LED NeoPixel环会根据实时的光照强度和色温亮起。环的上半部分附近设有四个工作任务图标,分别代表阅读、常规办公、常规绘图工作和精细工作,对应不同的光照强度。环的下半部分附近设有三个工作氛围图标,分别代表舒适、明亮和活力,对应不同的色温范围。
休闲模式:当顶面的模式开关切换至“休闲”时,屏幕将显示当前的天气温度。此外,LED 霓虹像素环会呈现天气图标以及相应的户外着装/装备建议。
硬件实现





主要电子设备:
NeoPixel环形灯 - 24个带集成驱动器的5050 RGB LED * 1
NeoPixel环形灯 - 16个带集成驱动器的5050 RGB LED * 1
0.96" * 1 串行OLED屏幕,0.96英寸 × 1
带红外滤光片和白色LED的RGB颜色传感器 - TCS34725 * 1
4节AA电池座 * 1
AA电池组 × 4
单刀双掷开关 * 2
带引脚的按钮 * 1
软件开发





开发工具:Particle Web IDE
包含的库:
- Arduino (0.0.10) Arduino(0.0.10)
- Adafruit_TCS34725 (1.0.0) Adafruit_TCS34725(1.0.0)
- Adafruit_SSD1306 (0.0.2) Adafruit_SSD1306(0.0.2)
- SparkJson (0.0.2) SparkJson(0.0.2)
- NeoPixel (0.0.14) NeoPixel(0.0.14)
编程:
在Particle控制台的“集成”标签页中创建Webhook,以从OpenWeatherMap API请求天气信息。在OpenWeatherMap.org上应用appid和天气API。获取带有邮政编码和appid的当前天气API调用,例如https://samples.openweathermap.org/data/2.5/weather?zip=94040,us&appid=b6907d289e10d714a6e88b30761fae22。此API响应将采用JSON格式。
Particle 控制台->集成标签页->新建集成->Webhook:定义名为weatherinfo的Webhook,URL应为当前天气API调用。由于LumiCube只需要天气描述和温度,可以使用mustache模板来处理Webhook响应中的JSON数据。因此,在Webhook的高级设置中,将响应模板设置为“{{#weather}}{{0.main}}~{{/weather}}{{#main}}{{temp}}~{{/main}}”。然后保存该Webhook。
在代码中,定义用于webhook和天气数据的变量:
在setup()中使用以下方式订阅响应事件:
将myHandler函数定义为如下形式以处理webhook响应:
通过以下方式触发Webhook以请求天气信息:
根据电路在代码中初始化两个LED NeoPixel环、OLED屏幕、RGB光传感器和模式开关:
代码每个循环中的主要功能:
检查模式开关的状态。
如果模式开关的状态为LOW,即被设置为LumiCube的工作模式:
使用以下方式从RGB光传感器读取数值:
使用以下方式计算光强度和色温:
根据光照强度和色温,使用以下方式点亮24位NeoPixel上的NeoPixels:
如果模式开关的状态为高电平,即设置为LumiCube的放松模式:
每15分钟触发Webhook以请求并更新天气信息
在OLED屏幕上显示天气温度:
根据天气描述和温度,使用以下方式点亮16个NeoPixel上的NeoPixels:
完整代码位于lumicube.ino文件中。
外观设计

使用Adobe Illustrator设计LumiCube的外观:4.5×4.5×4.5英寸。
使用1/8英寸的桦木对设计进行激光切割。
测试








让Photon连接到云端,并通过Particle Web IDE将代码刷入其中。
调试并确保光照信息和天气信息能正常显示。
组装













将电子元件与木方块组装在一起。
最终原型


















