POV Globe - A Robotics-Project at the IWR in Heidelberg

Our POV Globe.

This summer term we have completed an interesting internship at our university: We've constructed a persitence of vision globe.
The internship started in June 2015 already and lasted until the October 2015.


The university

The internship took place at the University of Heidelberg, located in a small, but famous and beautiful town in the south of Germany. The university can proudly call itself the oldest one in Germany.
Altough all of us are studying physics, the project is part of the IWR (interdisciplinary research center for scientific computing) at the Informatics Faculty, which illustrates the flexibility in our studies and also gives a hint of what we're mainly doing here: programming.
As we were not the only ones working in a robotic internship, here is a list of all current robotic-projects at the Robotics Lab.
Our project was supervised by Gero Plettenberg and Thomas Kloepfer.
Thank you guys, for your help!


The resources & components

As we planed to take the super-fancy robot home with us after finishing it, it was necessary to buy all the components by ourselves (the other groups got them payed by the robotics lab). Right from the beginning we tried to keep costs as low as possible (you know, as we're students, we always run out of money.... =/ ) - of course this resulted in a little loss of quality.
The Programming tecniques and the information about how to build a POV-globe were either our personal knowledge or open-source from the internet.
Finally we had a great benefit of using the working-room of the robotics-lab, equipped with computers, internet and a lot of hardware-stuff (cables, connectors, electronic components, wood, metal, screws and many other things); thanks IWR! Also any tools needed, such as screw-drivers, drilling machines, saws, soldering irons, voltage and ampere meters, voltage suppliers and many more things, could be found and used there.

Besides some cables, switches, diodes, resistors, connectors and screws, the components we were using, are


The following pictures demonstrate how the single components work together in our construction (descriptions in the pictures are available in german only - sorry for that). For detailed questions, please contact us!

The whole construction except the motor beneath the slab:
whole POV
The 4-PIN jack plug and the ball bearing on the upper part of the construction:
4-PIN jack plug and ball bearing
The fan-motor and its control beneath the slab:
fan-motor
The toothed belt and the gear-wheel connected to the motor:
toothed belt and gear-wheel
The toothed belt and the gear-wheel connected to the rotating body, as well as the infrared-system: toothed belt and gear-wheel; infrared-LED and photodiode


The programming and scripts

For the scripts and the programming, we mainly used Python as an easy and Raspi-friendly programming language. All the scripts we wrote and used, can be found here in the folder "Raspi". Use them or copy whatever you need from them! (Note, that you may have to install some software on your Raspi like GPIO- & PWM controls or Adafruit's package for controlling LED strips.)
The software mainly consists of a background-thread determining the rotating-frequency (get_freq.py; it simply waits for signals on one of the GPIO-PINs and calculates the time between single signals), another background-thread controlling the LED-Strip (pov_control.py) via the GPIO-PINs conntected to Clock and Data of the Strip and using the given module from Adafruit (dotstar.c / dotstar.so) and the code for the user interface (main.py).
Furthermore you will find pngTOpov.py, which converts given png-files into a byte-list pov-file, the type of file which is used by pov_control.py.

Broadly speaking the png-files are converted into a array containing 4 bytes for each pixel: (0, BLUE, GREEN, RED), where each color is a gamma-corrected value. As we have 60 LEDs, the strip receives a list of 4 times 60 bytes for each new position while the rotation. Transmitting the data is mainly done by Adafruit's module.
The 60 LEDs correspond to a total height of 60 pixels, whereas the width is set by the number of flashing-positions on the globe. For rotation-symmetry-reasons we also used 60 pixels as width.
If the total width of the png-file is bigger than 60, the further columns are interpreted as new images after one or several rotations (like an animation). A height greater than 60 is simply reduced to the first 60 pixels.


Galery

Here there is a short video demostrating the running POV globe (caution: 20mb) and in the following you can see some example png-files and the resulting images on the running POV (note, the faint red LEDs are displaying wrong due to some error) as well as the still construction:

1st example: a house and a tree (png)
1st example: a house and a tree (foto)
2nd example: a worldmap (png)
2nd example: a worldmap (foto 1)
2nd example: a worldmap (foto 2)
Our POV Globe.


This page

On this cool github-webpage, made with jekyll, we want to tell anyone, who's interested, about our project. The homepage files can be found here. Use them for your own website, if you want!
If you have any questions, do not hesitate to aks us!