Garage Door Pixel Screen


We created the pixel screen in 2020 to replace the Garage Door Seven-Segment Display we originally built in 2017. The pixel screen is a significant improvement in both functionality and (we believe) in durability over our original attempts at garage door illumination. The pixel screen consists of 608 pixels in a 38 x 16 grid that spans roughly 8 feet wide by 3.5 feet tall.

The LED pixel screen (new in 2020) showing a Christmas message. This new screen is a major improvement over the seven-segment displays we used on the garage door previously.
A close up of the pixel screen showing some ships sailing across. The resolution isn’t TV-like, but we can certainly render numbers, letters, and many images.
The LED pixel screen in the daytime with the wiring harness on the right side. You can see one pixel in the fourth row of the top panel near the right side that we had to replace and it is just held on with white electrical tape temporarily. After the season, we will staple that pixel down like all the others. You can also see a hint of the orange strapping holding the light panels onto the garage door panels.

The Pixels

Due to the low clearance between the garage door and the upper door jamb, we knew that our solution had to be pretty thin. However, there was still enough room for the square bodies of the technicolor pixels that we use all over the house façade and roof and we know that these pixels are much more robust and reliable than the pixel strips we tried for the seven-segment displays. We ordered 12V ws2811 technicolor pixels and had them built with a smaller-than-standard wire length since they would be mounted close together. We ended up with 1 7/8 inch long wires (pixels 3 3/8 inches apart on center), but would have preferred 1 inch long wires instead as it would have made mounting the pixels much, much easier. Unfortunately, ~2 inches was the shortest length that could be manufactured and so we made it work.

See LED Pixels for more details on all of the LEDs used in our show.

Laying Out and Mounting the Pixels

In keeping with the lightweight and thin requirements, we picked up some relatively inexpensive corrugated plastic sheeting from Home Depot. This stuff is strong, thin, and very lightweight and serves as a good backer material for attaching the pixels.

The overall pixel grid is 38 pixels wide by 16 pixels high and the pixels are spaced at 2.5 inches on center in both horizontal and vertical directions. Each panel contains 8 rows of pixels and all connectors for control or power injection come off the right side side of the panel.

Every pixel is held in place by 2 staples across the wires, one on each side of the pixel body. We used an electric staple gun with 1/2″ deep staples and then bent over the back of each staple by hand (using a small block of wood to get leverage). To be honest, this process was fairly miserable but it did work well and the pixels are securely attached to the panel. If we had been able to get the exact wire lengths we needed (or something very close), this process would have been easier. Dealing with the extra wire between pixels and the forces it produced on the pixels when it was bunched up definitely increased the challenge of assembling the panels. That said, the staples are more than sufficient to hold everything in place and are relatively easy to remove if needed to swap out bad pixels in the future. We also made sure to use a few strips of electrical tape across the rows of staples on the back of each panel to add some slight padding and hopefully prevent the staples from scratching the garage door once mounted.

Here is the unfinished backside of one of the panels. You can see the bent over backs of the staples used to hold on the pixels as well as the strips of electrical tape running down each row of staples to provide a cushion for any sharp staple tips and hopefully protect our garage door from lots of little scratches. What isn’t shown (because we added it after this photo was taken) are the 1″ straps running vertically that are used to attach the panel to the garage door.
Wiring diagram for each of the panels. The output of the top panel connects to the input of the bottom panel (with additional power being injected there as well). The output of the bottom panel is the end of the chain, though power is injected at that point too.

Attaching to the Garage Door

We installed a brand new garage door in the fall of 2020 so our previous solution of just bolting the light panels directly to the garage door was no longer an option. Instead, we used E6000 glue to attach lengths of 1″ strapping from an old set of ratchet straps to the back of each panel. We also added 2 bolts with larger washers per strap as a safety feature to ensure the straps couldn’t let loose of the panels. The straps wrap around the garage door panel and are cinched down with buckles we mounted on the backside of the garage door panel. So far, the system seems to be very secure and is working as intended with no shifting or slippage of the panels.

The buckles on the back side of the garage door that hold the light panels in place. These cost about US$7.50 for a pack of 10 buckle pairs (we used two packs).

We did learn (the hard way) some very important information about modern steel-encased garage doors compared to old wooden doors. Namely, the modern door is far more fragile. While setting up the first light panel and working out the attachments, we accidentally pinched one of the wire connectors in the gap between two garage door panels. With the old wooden door, the connector would have been crushed and the door no worse for wear. However, with the new door, the connector mostly survived the interaction and caused a dent in the two garage door panels instead. We will hopefully be able to fix it in Spring with some Bondo and paint, but learned a hard lesson on our brand new garage door and will be very careful in the future when putting up or taking down the light panels.

Next to the main light panels, we also have a small wiring harness panel made out of a narrow strip of the corrugated plastic and held onto the garage door panel with a single strap. This small panel gives a mounting point for the wires coming around the edge of the garage door from the power supply and controller mounted inside the garage. Because the wires are too thick for staples to hold in place, we used small cable holders from Home Depot and attached them to the corrugated plastic with small bolts.

The wiring harness connecting the LED strings to each other, and to the power supply and controller inside the garage. You can also see the dent in the garage door just off the bottom right corner of the top panel where we got a connector stuck in between panels when the garage door opened. We will be much more careful going forward when attaching the panels and to never use the door when connectors are dangling during assembly.

Wiring It All Together

As with the seven-segment displays we had previously on the garage door, all of the controlling hardware and wiring is mounted inside the garage and attached to the garage door panels so it can move up and down. We permanently mounted a few thin metal brackets to the inside of the garage door panels, using the same screws that attach the hinges. We can then use bolts to attach a strip of masonite between the brackets and it is to this masonite that we attach the buckles for securing the light panel as well as the power supply, pixel controller, and other wiring elements.

This metal strapping will stay attached to the backside of the garage door all year. The masonite boards can be removed each year and stored along with the light panels.
The backside of the garage door holds all the equipment to drive the LED panels. Zip ties and adhesive zip tie blocks are amazingly useful for ensuring the cables are held tight as they come around the edge of the garage door. The terminal blocks make it easier to attach the cables rather than trying to screw all of them into the few ports on the power supply itself. Any of the cables that go between the two garage door panels have enough slack in them to account for the extra distance as the garage door opens.

Power is supplied to the pixel screen via a 12V 30A Power Supply. An extension cord runs from an outlet on the ceiling of the garage and hangs from some shower curtain rings on a curtain rod mounted to the ceiling. This allows the cord to move along with the garage door as it opens and shuts.

The sliding harness for the power cord to get to the power supply on the back of the garage door. We used a similar mechanism for the previous Garage Door Seven-Segment Display and it works reliably and keeps the cord out of the way. The end of the extension cord is zip-tied to the bracket at the top corner of the garage door.

Controlling the Lights

The entire pixel screen is controlled by a single ESPixelStick Pixel Controller that is also mounted on the back side of the garage door (more just dangling there, actually). Each of the two panels has 304 pixels (912 channels). Since a DMX universe can only handle 512 channels, it takes 2 universes of DMX data for each panel and 4 universes for the entire pixel screen. Fortunately, the ESPixelStick can handle up to 4 universes worth of pixels so only one controller is needed. We were initially concerned that the refresh rate for each pixel would be too low with 4 nearly full universes controlled serially from a single controller, but we have not seen any noticeable effects.

See Channel Output Mapping for more details on how all of our channels are mapped to controllers.

Programming the Pixel Screen

Vixen makes programming a grid of pixels very easy. It has built-in support for scrolling text, displaying images, and even video. Our biggest issue has been with static text displaying properly, given the low resolution of a 38 x 16 screen. If letters are not large (or thick) enough, it’s possible for some of the strokes that make up a letter to fall in the void space between pixels and thus not get rendered. Using big block characters helps prevent this, as does making text scroll so that no part of a character is stuck in the void for long and the human eye does an amazing job of filling in the missing information without the viewer even realizing it is happening.