Skip to content

dk731/3D-Led-Cube

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Logo

3D Led Display

Explore the docs »

About The Project

If you ever asked yourself, what if monitors could display actual 3D visual output without projecting them on a 2D plane? This project attempts to show how such a device could look like.


Hardware

Following display realization is made up of small (3 x 3 x 1 mm) 3 colored led's SK6812, which allows control of each pixel independently and prevent animations from any flickering (no multiplexers are used). Total cube dimensions are 460 x 460 x 460 with resolution 16 x 16 x 16 voxels. About 20k soldering points had to be connected during assembly, and ~0.5 km of thin copper wire was used. MAX refresh rate is ~110 frames per second with 300 W average power consumption. The Control unit of LEDs is Raspberry PI being more precise its SMI device that gives the ability to produce a very precise PWM (800kHZ) signal on 16 pins at the same time (very nice blog about SMI).

Software

To produce complex output while executing drawing calls in no time, the library's core is written in C/C++ with OpenGL graphical acceleration for even better performance. All speed and feature richness are wrapped to Python modules, which gives an end coder a fast and easy-to-use tool that is precompiled and ready to use almost on all major computer systems. As in theory, this method seemed to be easy to implement and work. In practice connecting everything would produce a volatile result with periodical Arduino freezes.

(back to top)

Want To Try It Yourself?

As mentioned before, the display can be driven by a straightforward Python script so everyone interested can try to write his animation and even run it on an actual device (to run your code on real cube follow for upcoming events here). More information about writing your animation in this doc


Upcoming Events

A small competition event is currently scheduled for the 3rd-5th December. More details can be found on our Facebook page or here


Development Process

Due to a general lack of knowledge at the beginning of the project, many iterations were made to get to where it is right now.


Raspberry GPIO's

The first design of the whole system could not be more straightforward, it was planned that just Raspberry PI board with its 40 GPIO pins would be more than enough, but almost immediately after the first tests, it was apparent that it wouldn't be able to work with the required precision. So a new approach should be used.


Arduino Towers

After some thinking, using the Arduino board appeared to solve the problem, as it had a ready driver and was very easy to use. This was planned to work in the following way. The image would render on the Raspberry PI board. Raspberry board would send all needed data to many Arduino boards using I2C, which later would independently send this data to LEDs. After implementing all hardware and Software, it appeared to work very unstably. For some reason, Arduino's, from time to time, would randomly crash and no longer respond.


Single ATMega board

After some additional research, microchips used in Arduino but with faster oscillators would be just enough to make these LEDs work. Custom LEDs driver was written in pure ASM due to timing restrictions (to hit needed speed, not even one CPU was allowed to be wasted). After redoing almost the whole project 3rd time and running the entire system again, the test result showed considerable stability improvements. Still, one key number was disappointing, and that is the max refresh rate, as now we could use only one I2C channel. It was throttling the whole system to only ~40FPS.

Raspberry SMI

As the potential max refresh rate could be >100 per second, another solution had to be developed. After a long period of researching different approaches, this article about Raspberry PI SMI perephiral was discovered. Mentioned SMI device allows writing a significant amount of data with high precision on 16 GPIO's at the same time directly from Raspberry board. So everything had to be re-done 4th time. A simple PCB with a level shifter and some indicator lights was designed and tested. This appeared to work as expected.

(back to top)

Contributions

  • Dmitry Kaidalov - help with soldering, general design tips, and Hackathon Prize Sponsor
  • Anna Kacane - logo design
  • Anastasija Sirotkina - help with soldering
  • Tom Kaidalov - help with resin works and Hackaton PC station provide

Additional Tools

For the project were also created additional web pages with docs, emulator, and submission platform:

Contact

demid.kaidalov@gmail.com

License

Distributed under the MIT License. See LICENSE.md for more information.

(back to top)

About

3D display driver with a python interface

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published