Light| Sepia| Dark

Volumetric Display

for a long time, i had known about the volumetric displays. mainly from Voxon Photonics and Mitxela. but i finally got the kick when James Brown posted "vortex assembly" . he dropped an assembly video of one of his super cool volumetric displays yet, (he plays doom in it, common that's some real cool stuff). i was about to complete my research on ramsey's theorem and i opted for building a volumetric display for myself.

there was very little i knew formally and academically about electronics. i started with a 8x8 generic monochrome led matrix and an esp32 module.

led matrix was quite fun. i connected esp to my local wifi and set-up a web-server so i can control leds manually through a webpage and was able to get some really cool patterns.

What a volumetric display basically is, and what it takes to build one? you might have seen the led strip fans, which rotate really fast and creates an 2d image in the air, the same goes with swept volumetric displays, but with a greater dimension. here, we rotate a led matrix, say an rectangle such that it sweeps some particular area and we rotate it fast enough to create persistence of vision and hence we see a real 3d image of the object.

so as you might have already guessed it takes an led matrix, a controller(mcu), some sort of mechanism to rotate the whole thing fast enough and a tonn of power(electricity) to build a volumetric display. there are other ways to make this swept volumetric display, one is to move an led matrix along its normal to sweep a cuboidal volume instead of cyndrical one. Voxon as well as Jame's have thier own versions in this style:

Voxon Cuboidal Volumetric Display | James' Cuboidal Volumetric Display

but i continued with the one with cylindrical sweep, where we rotate the led matrix, you'll knnow the reasons yourself as you read along.

i stared with a drone bldc motor (A2212 1000KV motor with 30A ESC). for some reason i took a while for me to understand how the calibration works and why is it necessary.

i tried to create a small pipeline so that motor always tries to run at given rpm, the mcu adjusts pwm as per the feedback (rpm measurement) from the ir sensor.

here are some sketches of my first design, though i did not give much thought to how will i transfer power to the rotating leds.

as you can see in one of the sketches, it says slip rings. LEDs take a lot of power, and are very sensitive to fluctuations in current and voltage. so we need to transfer a lot of steady power to the rotating element. there are multiple ways to do this, 1. tie up a battery along side the LEDs and rotate it as well; 2. wireless transmission with Qi or any other protocol; and 3. slip rings

battery will drain very quick and also affect the centre of mass adversely, the wireless power transfer will lack efficiency. so the only option left is slip rings. though my first iteration was a very quick protopye to test motor rpm as well as learn cad. i went for it without giving much thought to power transmission, i'd have used a battery for then.

i moved to designing pcb for the led matrix. the voxel density is not uniform across the volume in a swept volumetric display. there are two ways to solve this, 1. change the structure of the matrix; 2. use leds with a driver which supports a higher refresh rate, and write such a firmware which can ideally get us a uniform voxel density across the volume.

as you can see, the centre of the cylinder has very dense voxels and they get sparse as r increases from the vertical/z/green axis. to solve this various matrix fashions can be tried.

here, i have rotated the whole matrix by 90deg as well as the distance between two adjacent columns decreases as the radius from vertical axis increases. this may not result in a complete uniform density, but makes it more ideal. also, software can help to create a more uniform density of voxels. it is more clearly explained by james in his mastodon thread. Read Here .

normal / traditionally refreshing led matix v/s refreshing as explained by James

generally 3d objects are stored as obj, step or stl file. but none of them contain object data which is rasterised into voxels. one easy way is to use intersection based rasterisation, as done by Mitxela Candle . i have made several export scripts and visualisers for this sort of voxel exports. the site is live and code is up on github, do check if you're making one. voxel data simulations

as we saw the later, now coming back to pcb design. the genric modules have max7129 drivers, they can at max go for 80Hz of refresh frequency, which is way less than required. but to test power supply, slip ring, and the overall integrity, as well as easy accessiblity if damaged, i designed the PCBs with 2 max7129 driver and 128 leds, each driver driving 64 leds. an 8x16 led matrix.

by now, i was confident with fusion360 (cad designs) and easyeda (PCB schematic and designs), though as i already knew photoshop, illustrator and blender, i was familiar with jargons around the designing softwares. i went for a bigger design this time, with musch inspiration form the James' Vortex and Mitxela's Candle.

initially the plan was to 3d print the whole structure, but later i came to know laser cutting acrylic is very quick as well as acrylic is a more suitable material for timing gears. i was driving the axle with a gt2 timing belt driven by the same A2212 bldc motor as before.

the stack like structure would contain a buck convertor and an mcu (esp32) to control motor rpm and the esc of bldc motor. the hole on top and the wedges on the rotating disc are for a photo-interrupter to know the angular displacement in real time as well as the rpm of the rotating structure.

the top disk would house the semicircular PCB with drivers, and an mcu (esp32), vertical to which would rest the led matrix.

the twitter thread has detailed pics: see thread .

i think i over-engineered the slip ring part, but it was wort it. i also added an encoder to get the angualr displacement accurately in real time. the base assembly was ready:

continuing the blog ...
more to add: