Introduction: Globe Persistence of Vision

Picture of Globe Persistence of Vision

Persistence of Vision Globe, controlled by mobile app and based on Arduino (Atmega1284p)

All the code source and schemas are available in Github

Step 1: Build the Box

Picture of Build the Box

A box was built

Step 2: Build the Two Bands PCB

Picture of Build the Two Bands PCB

The vertical PCB bands are built. They are the frames where the RGB LEDs and their Shif Registers are soldered

Step 3: Build the Shift Register PCBs

Picture of Build the Shift Register PCBs

The to drive the RGB LEDs were used STP08CP05 constant current shift registers. They behave like any other chainable shift register, but they can source/sink a pre-defined constant value of courant.

To keep the vertical PCB bands simple, specific adaptation boards were built using the SMD version of the chip, the capacitors and the resistor.

These adaptation boards are then pluggable into the vertical PCB bands

Step 4: Print the 3d Pieces

Picture of Print the 3d Pieces

Step 5: Build the Led Controller PCB

Picture of Build the Led Controller PCB

Step 6: Assemble the Box and the Rotating PCBs

Picture of Assemble the Box and the Rotating PCBs

Step 7: Finish the Box

Picture of Finish the Box

Step 8: The Result

Picture of The Result


ChanL13 (author)2018-01-02

Hi! I am building something similar but I made the other ring with aluminum but I found you way is much more elegant! May I know how you bend the PCB into a perfect circle? This is something I would like to try!

P.S. May I know how large is the POV you are making? I am building a 50cm diameter one and it easily go unstable while turning around 1500rpm. Also may I know what size the shaft you are using? I am using a 8mm one but seems not strong enough.

rskansi (author)2017-01-20

I'm not very practice in soldering and electronics but I' going to need one like described one, but huge. Dimensions should be about 2 meters in diameter. Is there anybody who can make that for me? I'm willing to pay for it!

JonathanD139 (author)2016-09-20

Can someone give me some advice on how to find all the components?

bpark1000 (author)2016-08-07

Regarding your comment about changing angular speed versus power draw to the rotating LEDs: I see no reason why there should be any impact at all to the the motor speed. The motor is (I assume) powered by a totally independent power source. The rotary transformer, being totally rotationally symmetrical, causes absolutely no load torque on the motor, (other than the "windage" air friction of the rotating coil, which is constant). (It does not extract power from the rotation). I would have 2 coils, each about the diameter of the globe, with perhaps a dozen turns each, one just inside the other, plane perpendicular to and centered on the shaft, mounted under the base plate; inner one rotating with the rotor, the outer stationary, and driven with a half or full bridge circuit/oscillator from the DC supply in the KHz. The rotating coil's output would be rectified by a diode bridge, and fed to the DC/DC converter you now have.

You could also use a coil set with ferrite cores for more compact assembly. If you want to know how to design the transformer, I can explain.

(I got a "404 error" on your github link. I tried a search in github on claudiosousa and got nothing)

The problem I have with C is that it was designed for PCs, which have basically a big bag of RAM, which is loaded with the program in question, then executed. If the program didn't write something in RAM, garbage is assumed to be there, so you can't "look up" something you didn't write FROM THE PROGRAM. On the other hand, embedded machines have programs usually in ROM, which not only have executable code, but also data ("look up") tables on ROM. A BYTE or WORD directive loads ROM with tables in assembly. C is awkward when dealing with look-up tables, and that is 90% of my programming consists of. (My typical object files are 80% tables and 20% code). C also doesn't "know" about machine-specific things such as the carry flag. The other thing I can't do is debug code WHILE IT RUNS, which I can do with my 65816 and 6808 systems. I could never get the stuff to work if I couldn't do that! For example. Say an interrupt routine "is done". I want to jump back to the debug kernel, so I can debug with the leftover cycles, before the next interrupt comes. Where is the debug kernel? The complicated operating systems don't tell me where or what that is! It is all wonderfully hidden behind all the GUI "eye candy" I don't need! I wish someone could tell me how to do things like this. I would be satisfied with a debugger that can read/write registers, go and stop, a simple assembler, a good data sheet on the processor, and no JTAG peripheral stoppage when in "debug" mode to interfere with running interrupts.

jianju (author)2016-08-02

Super-inspiring! May I ask by what means the image can be created? For example, could it be controlled in real time and display global data-streams?

claudiosousa (author)jianju2016-08-04

Any image with the right resolution and can be used, but it is limited to the 8 colors used (2³).

The device is actually controlled by an android app. We can control the device (start, stop, change the rotation speed) and the image itself : (the rotation direction and speed of the image and upload a new image)

You can see in the videos a demo where we upload different images and play with the different possibilities.

In its current state, an image takes 1-3 seconds to be uploaded and displayed. While this delay can certainly be improved, the low frame rate is not fit for video data stream.

A project we have in mind that relates to what your were suggesting is to show on the globe some states (weather, unread emails, stocks values, etc) but those states are obtained in text by the globe and it is the actual microcontroller that updates the image that it is showing depending on those text feeds.

For instance, it would display the sun/rain image depending on the text information about the weather forecasts.

jianju (author)claudiosousa2016-08-04

What if the image was generated directly by the microcontroller? Maybe with a beefier microcontroller, the image could be more lively?

claudiosousa (author)jianju2016-08-07

Absolutely, that is what I tried to explain in the previous post. Then only the relevant data needs to be sent to the controller, and not the whole image.

If I was to redo the project,I think I would have the ESP8266 microcontroller. I've been playing with it recently with very good results. Native wifi , 80/160MHz clock and much more flash memory available.

jianju (author)claudiosousa2016-08-07

Yes, sorry, I see that now. Very inspiring! Thank you!

bpark1000 (author)2016-08-02

Not explained anywhere I can find is a means to get power and signals from the stationary parts to the rotating parts. Is there a slipring or rotary transformer somewhere?

claudiosousa made it! (author)bpark10002016-08-04

Very good question, that was one of the tough problems to solve.

The signals was easy, we used the nRF24L01 to communicate between the stationary arduino in the base and the microcontroller in the rotating area.

To transmit power, we thought about several options: induction, a generator creating energy from the rotation, etc. Finally, we found an easier approach, we used a rotary connector that uses mercury (liquid metal) to pass the current.

In the rotating are we are only using 5v, but because the connector current is limited to 3A, we transform the voltage to 24v before sending it through the rotary connector, and then we use a couple of step-down voltage regulators to get the 5v.

Bellow you can see the nRF24L01 in the rotating PCB, and some images of the mercury connector

bpark1000 (author)claudiosousa2016-08-05

When you create an Instructable, you need to include all relevant details. I saw nothing about this at all (did I miss something?) This is a key part of the project.

I built a similar device, much cruder in that it had only 7 monochrome LEDs, but used a rotary transformer (4" diameter close-coupled open-air coils operating at about 32KHz) to convey both power (1/2W) and data (32Kbit/s) to the rotating part. This would have allowed you to eliminate the belt/pulleys and direct drive, as no access is needed at the center or rotation. You must be careful that the center of rotation of the shaft is accurately aligned with that of the slipring, or the slipring will bind and fail.

I am frustrated by the "new movement" in processing going to C code only, along with the "baggage" of "operating systems" and libraries such as the Arduino. It is almost as bad as a PC! I found out that an Arduino is slowed by a factor of more then 100 by the "system calls" to set a byte to a port. This precludes using "real-time" code that can function in the microsecond time frame (required for generating and decoding the transformer signals, in addition to operating the display). If I could program Arduino (or other processor) in only assembly with all libraries eliminated, I would pursue more projects like this. Now I am stuck with older processors (6808 and 65816) that are not burdened with all this baggage. I can even debug code while it is running!

Where did you get the slipring? Mercotac? What did it cost? (You might want to put this in the Instructable). Did the "mercury police" come after you? what keeps the mercury from escaping? (There have to be rotating seals with a finite lifetime).

claudiosousa made it! (author)bpark10002016-08-07

You are right, an Instructables with all the information would have been much better, but more time consuming as well... I thought an incomplete one with images would be better than nothing at all. But I will gladly answer what questions you may have.

I'm very interested about your idea of rotary transformer to transmit power and data!

We had thought about such a solution, but we had some concerns:

- we need to draw 15W at the center,

- we were concerned that differences in power drawn at the center (depending on image show, communication,etc) would cause immediate angular speed variations

In your experience, do you feel that we could have drawn that much power, and expect no variations in angular speed?

About the Arduino C overhead, I don't agree with you that it has to be a bad thing. It is certainly a big plus that so many people can easy program a micro-controller. Having a slightly more high-level language, hardware independent, and so many available libraries makes microcontrollers accessible to many.

That said, I agree with you that when you want speed, you don't want arduino to get in the way. And you can do just that! I've never used assembly, but you can code in low level C using the microcontroller registers directly.

In this project, we used a microcontroller having 2 full 8bits GPIO ports available. The shift registers used were divided in 16 parallel lines (2 port of 8 bits each), and I've made the low level bit bang code to serialize the data to the SR. Basically, I just write 1 byte to the low level port at the cpu clock.

With a micro-controller running at 20MHz clock, we achieved a 8bits GPIO port refresh rate of 2MHz, that makes 2MB/s. That was enough to handle the display of 648'000 LED/s (30 frames x 120 horizontal steps x 180 leds) and we still had enough CPU available to handle real-time wireless communication.

See the SR bit bang code in github ( and the refresh rate oscilloscope image atatched.

About the slipring, yes it was from a Mercotac reseller, and here are the price details:

1x Slipring coaxial type MERCOTAC 205HS – Code LM02-0205H-S0 – P.U. : 65,80 €. H.T. – TTC = 78,96 €.

205-HS 2x4 A, 3600 rpm, 200 MHz, 2 conductors, high speed, stainless steel bearing

1x Connectors two contact – code LMX2-00592-00 – P.U. : 14,15 €. H.T. – TTC = 16,98 €.

Receptacle -2 wires, 6"

1x Connectors two contact – code LMX2-00595-00 – P.U. : 8,80 €. H.T. – TTC = 10,56 €.

Cap -2 solder lugs

Frais d’expédition / Freight : 35,25 €. H.T. - – TTC = 42,30 €.

TOTAL TTC 20% = 148,80 €. (euro)

bpark1000 (author)2016-08-05

I researched Mercotac sliprings. Regulations prohibit the sale of these to "consumers" because of the mercury content. How did you get yours?

claudiosousa (author)bpark10002016-08-07

I live in Switzerland, where I'm not aware of such restrictions.

The only restriction I was aware of was that they would not ship it through airplane.

Bought my in France, as a private person, from a Mercotac reseller,

Cavotec RMS S.A.S

Z.I. Les Béthunes

16 Avenue du Fief

95310 Saint Ouen l'Aumône


Not exactly easy, and had to make it deliver at friends house that lives in France.

They have other reseller in other countries too.

scottcoulson (author)2016-08-02

Have you considered adding progressively smaller / concentric rings that are out of phase to add a depth component? Basically, once rotating, it would be a sphere within a sphere within a sphere, etc.. Each smaller but still visible because they are out of phase with the others. This would allow the creation of images that had depth to them. For example you could have mountains and valleys in your globe.

It is an interesting idea, but would require redoing the globe entirely.

Among the things that would not scale well:

- the power going to the rotary connector into the rotating part (to power the LEDs) would have to be multiplied several times and we are already at its maximum (2A)

- the microcontroller will not be capable of handling several rings, we would have to have a microcontroller per ring + a master one for communication and synchronization.

KimW8 (author)2016-08-02

Super cool! question - in the Step 8 pictures one shows a large box on top of the case but other photos do not show it. What is it?

claudiosousa made it! (author)KimW82016-08-04

That picture shows the case up-side-down (useful to upload new firmware during development phase).

So that white box you see on top of the case, is actually the base of it and was later painted in black to reduce reflection.

You can see it on the other pics, like this one:

MotamanIT (author)KimW82016-08-03

I think it's just put upside down

Tangski (author)2016-08-03

Goodness, that is advanced! Great job. So many seem to have 3D printers which is needed on such projects...the rest of us just wish for one..sigh...! Not to mention how to create the electronic links!!! Wonderful work!

claudiosousa (author)Tangski2016-08-04

Thank for your praise. Very encouraging

rams273 (author)2016-08-02

I love this i have seen this on a youtube vid done by someone else shame you don't sell this a kit form i would defo buy it and the inclusion of time every so often would just enhance even more but a definite two thumbs up from me cant wait for you next projuect keep up the good work

DylanD581 (author)2016-07-21

Awesome sphere display! Where did you fabricate the small PCBs?

claudiosousa (author)DylanD5812016-07-22
mscott41 (author)2016-07-20

amazing ? but I'm curious, why didn't you go with digital led strips?

Arthak (author)mscott412016-07-20

Because you cannot control them individually which is required to get the required pattern

mscott41 (author)Arthak2016-07-20

I would have used something like these, each led is individually addressable, and they come with more LEDs per metre too. you've done a great job with you'rs though it's one of the best POVs I've seen so far ?

mscott41 (author)mscott412016-07-22

That makes sense then, looks good too huge thumbs up to you can't wait to try this out

claudiosousa (author)mscott412016-07-20

These led strips are amazing to use in projects, easy to use, and handle much more subtle colors (24 bits colors definition).

In this project however, it would have been impossible to use the WS2812 (the chip in those LED strips) because of the speed at which we need to refresh each individual led.

In fact, each second, we are refreshing 648'000 LED (30 frames x 120 horizontal steps x 180 leds). In other words, we are showing 3600 frames/second (30 frames x 120 horizontal steps).

The documentation for the WS2812 gives some details the refresh rate: "When the refresh rate is 30fps, low speed model cascade number are not less than 512 points, high speed mode not less than1024 points".

These numbers are too low for our requirements.

A bit more information on how we could handle such a refresh rate: the main reason we choose to use the atmega1284p was actually the number of available 8 bits GPIO ports. We are actually using two 8-bits ports to serialize the data to the bands, each bit is connected to 3 chained Shift-Registers.

So, to do a refresh in both bands, we simply write 24 bytes in each port. (+ the clock handling + the latch bit).

electronicfrankenstein (author)2016-07-21

what are those little black PCBs ? modules?

I've added a step 3 to this Instructable to describe those PCB's more in detail.

In summary, we designed adapter PCBs to host the constant current shift registers that drive the leds. The SMD shift registers were soldered into those PCBs along with their components (cap + resistor). They were tested independently and plugged into the vertical bands PCBs.

We also had designed a version of the vertical PCB bands where the DIL version of the shift registers are soldered directly, but those bands were larger and we would have had to solder in both side of the PCBs (LEDs on one side, and the components on the other side).

thank you

ThomasK19 (author)2016-07-21

I first thought this is a copy of what the German Make magazine just published. But actually it's very different. They use only single color LEDs and also a very simple circuit with a Nano. Great job you did here. Very impressive!

About This Instructable




More by claudiosousa:Simon says gameMastermind Based on Atmega328pGlobe Persistence of Vision
Add instructable to: