Shahid MemonShahid Memon
Published © GPL3+

4,661 NeoPixel WS2812B Ceiling LED with RPi and 10 Fadecandy

Customized ceiling screen, capable of playing videos, color picker, and color temperature using Raspberry Pi and a web-based GUI.

AdvancedFull instructions providedOver 8 days7,119
4,661 NeoPixel WS2812B Ceiling LED with RPi and 10 Fadecandy

Things used in this project

Hardware components

Raspberry Pi 3 Model B+
Raspberry Pi 3 Model B+
×1
Adafruit Fadecandy
×1
NeoPixel strip
NeoPixel strip
×1
Power supply 5V/60A
×1
Multi TT usb hub
×1

Software apps and online services

Robot Operating System
ROS Robot Operating System
Raspbian
fcserver
OpenCV
OpenCV

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)
cnc
Hot glue gun (generic)
Hot glue gun (generic)
Drill Taps
OpenBuilds Drill Taps

Story

Read more

Schematics

Data Tapping

How data lines have been tapped within the design

Data Topology

How data is passed within the system

Power Topology

How power supply is connected

Layout

Layout of the ceiling design for the led

Code

Video Function

Python
Playing video on fadecandy server using python
In this code, we get the pickle file called mapped_pixel.pickle. This file contains the coordinates of the LED in (x, y) format, based on our grid. We assign the value from the pickle file, and put into the list called pix. We use the OPC library, to assign RGBA color to the LED, based on our pixel position using opc.put_pixels(pix) function.
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!!"

Credits

Shahid Memon
1 project • 0 followers
Shahid Memon
0 projects • 1 follower
Approachable, passionate technologist with 3+ years of proven experience in leading engineering projects in various active roles.

Comments