這個項目使用的一個定制的天花板屏幕,能夠使用 Raspberry Pi 和基于 Web 的 GUI 播放視頻、顏色選擇器和色溫。
概述
該項目包括一個由 4,661 個由多個 5V 電源供電的 NeoPixel LED、10 個 Fadecandy NeoPixel 驅(qū)動板和一個 Raspberry Pi 3 Model B+ 組成的天花板支架。這款 LED 吊裝能夠播放視頻,并顯示顏色選擇器上選擇的顏色。開發(fā)了一個基于網(wǎng)絡(luò)的移動應(yīng)用程序,以便用戶可以選擇要在天花板安裝顯示器中顯示的視頻或顏色。數(shù)據(jù)通過 WiFi 從用戶瀏覽器發(fā)送到 LED 吊裝支架,然后再發(fā)送到托管 ROSWWW 服務(wù)器的 Raspberry pi。我們在這個項目中使用了 ROS 框架來管理多個節(jié)點并在 Raspberry Pi 和 Web 應(yīng)用程序之間建立通信。
技術(shù)規(guī)格
成分
樹莓派 3 型號 B+ - x 1
Fadecandy NeoPixel 驅(qū)動板 – x 10
NeoPixel LED 燈條 (WS2812b) - 160 米(約)
Multi TT USB 驅(qū)動程序 – x 4
5V 電源 – x 5
2芯線——1200米(電源線)
Cat-6 電纜 – 500 米(數(shù)據(jù)線)
膠合木底座 - 直徑 2.9 米
電容器 – 1000μf – 6.3V
終端連接器 – 85 個。
木板 – 6 塊。
母線 – 36 個。
3 芯線 – 5 米
3 針插頭 – 3 個。
電纜扎帶 - 500
工具
優(yōu)質(zhì)烙鐵
焊錫鉛(無鉛)
焊芯
剝線機
鋼絲鉗
螺絲刀
測試儀
切割播放器
數(shù)控機床
電鉆機
膠帶
743單組份瞬間粘接膠
彈性膠水
真空吸塵器
木工工具(鋸、銼)
彈簧線
外科口罩和手套
軟件
樹莓派 stretch
ROS框架
Open CV
Fadecandy 服務(wù)器
GL服務(wù)器
計劃
我們的項目包括一個膠合木框架,呈圓形,靠近框架底部有一個空心圓??蚣艿脑O(shè)計方式使其適合天花板上的巴黎石膏層。使用大型安裝螺釘直接進入混凝土層進行安裝。
我們使用了 30 個 LED/m 的靈活 NeoPixel 燈條。由于框架的形狀是圓形的,因此放置一整條 LED 并不是一個可行的選擇。我們應(yīng)用了一些簡單的數(shù)學(xué)公式來生成一個文件,該文件將幫助我們確定每次切割條帶所需的 LED 數(shù)量。
最初的挑戰(zhàn)
映射 LED,在播放視頻或運行顏色選擇器時實現(xiàn)接近 85 x 85 的分辨率。圓直徑為 2.9 m,因此我們最多可以容納 85 個 LED,
根據(jù)框架的設(shè)計,找出增加和減少條帶長度的解決方案,并將數(shù)據(jù)線和電源線拉到正確的點。
將電源線分開到 LED 燈條,以便均勻分配電源,而不會造成過載或 LED 閃爍。
要找到這些問題的解決方案,了解框架的布局非常重要。
考慮一個 85x85 的圖形,圓的中心位于網(wǎng)格 (0, 42.5) 上。要將 LED 安裝在框架的圓形圖案中,我們必須在某些邊緣添加和移除 LED,這是我們面臨的第一個挑戰(zhàn)。
來解決這個問題。我們使用 python 設(shè)計了一個文本文件。該文本文件由 (x, y) 坐標組成,有助于放置 LED。為了映射 LED 以用于視頻播放和顏色選擇,我們使用相同的文本文件使用 (x, y) 坐標生成元組,并將這些值存儲在 pickle 文件中。
因為,我們使用 Fadecandy 驅(qū)動程序來完成這個項目。每個 Fadecandy 最多可支持 512 個 LED,這意味著在單個 Fadecandy 驅(qū)動器的每個端口上最多可支持 64 個 LED。但是,由于 raspberry pi 造成了每個通道全部 64 個 LED 的問題,我們只使用了 90% 的吞吐量,因此我們決定將每個端口的 LED 數(shù)量保持在 60 個左右。
由于其獨特的設(shè)計,LED燈帶的起點在我們項目的不同地方有所不同。因此,我們生成了一個文件作為標記系統(tǒng),以便我們跟蹤我們將為 LED 拉電源線和數(shù)據(jù)線的點。
代碼將附在本文下方
我們在這個項目中使用了 4,661 個 LED。為它們供電尤其具有挑戰(zhàn)性。在電源波動、低電壓期間,LED 有可能劣化,因此我們在為 LED 供電時必須小心并采取預(yù)防措施。我們使用了 5、5V 60A 電源。我們的目標是讓每個電源支持大約 950 個 LED。有關(guān)這方面的更多信息將在電源拓撲部分簡要介紹。
數(shù)據(jù)拓撲

在我們的項目中,我們使用 2 個多 TT USB 將 10 個 Fadecandy 驅(qū)動程序連接到 Raspberry PI 3 B+。每個 Multi-TT 最多可支持 4 個 Fadecandy 驅(qū)動程序,另外 2 個 Fadecandy 驅(qū)動程序直接連接到 Raspberry PI。Turbo - 4 端口 USB 集線器專為多個設(shè)備之間的高效連接而設(shè)計。它使用 mtt(多事務(wù)翻譯技術(shù)),保證每個端口 12 mbps 的速度。這使所有 4 個設(shè)備能夠同時以 100% 的效率運行。Fadecandy 的每個端口傳輸 12mbps 至關(guān)重要,因為我們在 Fadecandy 中播放視頻,高傳輸速率對我們來說很重要。
在 Raspberry PI 中,我們使用 ROS 框架的 ROSWWWW 將服務(wù)器托管在本地網(wǎng)絡(luò)中。我們創(chuàng)建了一個響應(yīng)式 HTML 頁面,為其提供移動 Web 應(yīng)用程序 UX。我們使用網(wǎng)頁中的 ROSJS 庫與樹莓派中的 ROS 服務(wù)器進行通信。因為,ROSJS 能夠通過套接字協(xié)議發(fā)送消息。我們利用這個優(yōu)勢將消息從網(wǎng)頁(瀏覽器)發(fā)送到 Raspberry pi。樹莓派根據(jù)發(fā)送的socket消息發(fā)送Fadecandy指令來執(zhí)行。下面將解釋用于執(zhí)行 Fadecandy 操作的代碼片段。
電源拓撲

將功率均勻分配到多個 LED 燈條,包含 4,661 個 LED。我們使用了 5 個電源,每個電源包含大約 950 個 LED。每個電源由6個母線、3個+Ve和3個-Ve組成。從我們小心地連接到母線的 LED 燈條上拉出的電源線。
我們還創(chuàng)建了一個公共接地來連接 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!!"
電子發(fā)燒友App

















評論