这个项目使用的一个定制的天花板屏幕,能够使用 raspberry pi 和基于 web 的 gui 播放视频、颜色选择器和色温。
概述
该项目包括一个由 4,661 个由多个 5v 电源供电的 neopixel led、10 个 fadecandy neopixel 驱动板和一个 raspberry pi 3 model b+ 组成的天花板支架。这款 led 吊装能够播放视频,并显示颜色选择器上选择的颜色。开发了一个基于网络的移动应用程序,以便用户可以选择要在天花板安装显示器中显示的视频或颜色。数据通过 wifi 从用户浏览器发送到 led 吊装支架,然后再发送到托管 roswww 服务器的 raspberry pi。我们在这个项目中使用了 ros 框架来管理多个节点并在 raspberry pi 和 web 应用程序之间建立通信。
技术规格
成分
树莓派 3 型号 b+ - x 1
fadecandy neopixel 驱动板 – x 10
neopixel led 灯条 (ws2812b) - 160 米(约)
multi tt usb 驱动程序 – x 4
5v 电源 – x 5
2芯线——1200米(电源线)
cat-6 电缆 – 500 米(数据线)
胶合木底座 - 直径 2.9 米
电容器 – 1000µf – 6.3v
终端连接器 – 85 个。
木板 – 6 块。
母线 – 36 个。
3 芯线 – 5 米
3 针插头 – 3 个。
电缆扎带 - 500
工具
优质烙铁
焊锡铅(无铅)
焊芯
剥线机
钢丝钳
螺丝刀
测试仪
切割播放器
数控机床
电钻机
胶带
743单组份瞬间粘接胶
弹性胶水
真空吸尘器
木工工具(锯、锉)
弹簧线
外科口罩和手套
软件
树莓派 stretch
ros框架
open cv
fadecandy 服务器
gl服务器
计划
我们的项目包括一个胶合木框架,呈圆形,靠近框架底部有一个空心圆。框架的设计方式使其适合天花板上的巴黎石膏层。使用大型安装螺钉直接进入混凝土层进行安装。
我们使用了 30 个 led/m 的灵活 neopixel 灯条。由于框架的形状是圆形的,因此放置一整条 led 并不是一个可行的选择。我们应用了一些简单的数学公式来生成一个文件,该文件将帮助我们确定每次切割条带所需的 led 数量。
最初的挑战
映射 led,在播放视频或运行颜色选择器时实现接近 85 x 85 的分辨率。圆直径为 2.9 m,因此我们最多可以容纳 85 个 led,
根据框架的设计,找出增加和减少条带长度的解决方案,并将数据线和电源线拉到正确的点。
将电源线分开到 led 灯条,以便均匀分配电源,而不会造成过载或 led 闪烁。
要找到这些问题的解决方案,了解框架的布局非常重要。
考虑一个 85x85 的图形,圆的中心位于网格 (0, 42.5) 上。要将 led 安装在框架的圆形图案中,我们必须在某些边缘添加和移除 led,这是我们面临的第一个挑战。
来解决这个问题。我们使用 python 设计了一个文本文件。该文本文件由 (x, y) 坐标组成,有助于放置 led。为了映射 led 以用于视频播放和颜色选择,我们使用相同的文本文件使用 (x, y) 坐标生成元组,并将这些值存储在 pickle 文件中。
因为,我们使用 fadecandy 驱动程序来完成这个项目。每个 fadecandy 最多可支持 512 个 led,这意味着在单个 fadecandy 驱动器的每个端口上最多可支持 64 个 led。但是,由于 raspberry pi 造成了每个通道全部 64 个 led 的问题,我们只使用了 90% 的吞吐量,因此我们决定将每个端口的 led 数量保持在 60 个左右。
由于其独特的设计,led灯带的起点在我们项目的不同地方有所不同。因此,我们生成了一个文件作为标记系统,以便我们跟踪我们将为 led 拉电源线和数据线的点。
代码将附在本文下方
我们在这个项目中使用了 4,661 个 led。为它们供电尤其具有挑战性。在电源波动、低电压期间,led 有可能劣化,因此我们在为 led 供电时必须小心并采取预防措施。我们使用了 5、5v 60a 电源。我们的目标是让每个电源支持大约 950 个 led。有关这方面的更多信息将在电源拓扑部分简要介绍。
数据拓扑
在我们的项目中,我们使用 2 个多 tt usb 将 10 个 fadecandy 驱动程序连接到 raspberry pi 3 b+。每个 multi-tt 最多可支持 4 个 fadecandy 驱动程序,另外 2 个 fadecandy 驱动程序直接连接到 raspberry pi。turbo - 4 端口 usb 集线器专为多个设备之间的高效连接而设计。它使用 mtt(多事务翻译技术),保证每个端口 12 mbps 的速度。这使所有 4 个设备能够同时以 100% 的效率运行。fadecandy 的每个端口传输 12mbps 至关重要,因为我们在 fadecandy 中播放视频,高传输速率对我们来说很重要。
在 raspberry pi 中,我们使用 ros 框架的 roswwww 将服务器托管在本地网络中。我们创建了一个响应式 html 页面,为其提供移动 web 应用程序 ux。我们使用网页中的 rosjs 库与树莓派中的 ros 服务器进行通信。因为,rosjs 能够通过套接字协议发送消息。我们利用这个优势将消息从网页(浏览器)发送到 raspberry pi。树莓派根据发送的socket消息发送fadecandy指令来执行。下面将解释用于执行 fadecandy 操作的代码片段。
电源拓扑
将功率均匀分配到多个 led 灯条,包含 4,661 个 led。我们使用了 5 个电源,每个电源包含大约 950 个 led。每个电源由6个母线、3个+ve和3个-ve组成。从我们小心地连接到母线的 led 灯条上拉出的电源线。
我们还创建了一个公共接地来连接 fadecandy 和电源的接地。
视频功能.py:
import opc
import cv2
import pickle
from pil import image
def video_function(video_name):
pix = list()
# locate and add the video file
vidcap = cv2.videocapture(video_name)
success,image = vidcap.read()
success = true
client = opc.client('127.0.0.1:7890')
#added mapped pixel
mapped_pixel = list()
with open('mapped_pixel.pickle', 'rb') as handle:
mapped_pixel = pickle.load(handle)
try:
while success:
success,image = vidcap.read()
image = cv2.cvtcolor(image,cv2.color_bgr2rgb)
pix = []
im = image.fromarray(image)
im = im.resize((85,85), image.antialias)
# only want rgb, not rgba
for i in range(0,4661):
pix.append(im.getpixel((mapped_pixel[i][0],mapped_pixel[i][1]))[:3])
client.put_pixels(pix)
time.sleep(1/60)
except:
print video terminated unexpectedly!!
APS生产计划排产在企业粗支纱生产的应用
8K电视未来在彩电市场中将会如何发展
ios11 beta3如何升级?ios11 beta3最新消息分享,ios11 beta3值不值得升级?
基于FlexRay协议的媒体接入控制的设计
看GDC 2019展会:6个不得不关注的VR/AR行业大事件
基于WS2812B定制的天花板屏幕
ARM/高通/华为组建CCIX联盟 共推处理器架构
智能魔镜,让生活更有温度
电能表应用常见问题有哪些
苹果发布Apple Watch 4,开启可穿戴设备的里程碑
一文读懂无线传感器网络标准化与协议
华为定下小目标,希望在2021年前鸿蒙OS设备数量达到2亿
一加手机携手国际巨星小罗伯特·唐尼,共同开启“不将就”之旅
三星S21和S21 Plus的电池详细信息已经出现
锂电行业风起云涌 宁德时代/比亚迪等四大巨头各显神通
电连接器的分类种别
一位IT工程师写给四年前自己的信
探测传感器:一个解决了挪威电力耗能问题且每周省下了8成用电量的传感器!
智能制造趋势不可挡 中国或成全球最大的机器人市场
华为助力爱奇艺完成了5G MEC+CDN的边缘加速业务验证