Inspiration

The inspiration for this project comes from the novelty of alternative display technologies, we have become bored of rectangles and see the circle as the future.

What it does

Our project rapidly rotates and controls 8 LEDs to trick our vision into seeing a circular display. It works by using the perception of vision effect where an after image will persist in our vision for a short amount of time for quick moving objects.

How we built it

The hardware was designed and assembled alongside the development of the software. We utilised 3 pre-built parts and 3D printed/cut 4 bespoke components. As our system rotates it is important for it to be reasonably well balanced around the centre of rotation, this was achieved by approximating the shape of the Arduino base and moving the battery on its mount to compensate for any discrepancy.

On the software side of things, we implemented all of our code in C++ and used the PlatformIO framework to manage our code on our Arduinos. Our program worked by creating frames which was an array of chars, where each char represented the 8 LEDs through its 8 bits. In our main program loop, we iterate through this grid, mapping it onto our circular display. Our project could automatically generate grids from strings or we could define custom grids to make cool custom patterns. This made it very easy to display whatever we wanted

Challenges we ran into

Our original plan was to create a game on our display, however we struggled with input. As our controller needed to be rotated, any wire based input was not possible, so we hoped to use Bluetooth or Wi-fi. However unfortunately the ESP32 controller we had, which came with built in Wi-Fi and Bluetooth, wasn’t being detected. We had to switch to an Arduino Uno, and we lacked the necessary modules required to provide Bluetooth or Wi-fi. With no way of interacting with our controller, we had to switch to a passive display, leaving our game unimplemented.

Despite this setback, our plan to display text worked as planned. Attempting to visualise our intended output ahead of time proved to be very tricky, and it was an epic moment watching words materialise in front of our eyes.

We learned the importance of testing tools, a lot of our time was spent debugging LED code, and without any good tools constructed for easy testing we had to do many repeated motor tests to test and debug our project. Additionally, having a concrete idea of our hardware requirements ahead of time would’ve helped mitigate issues like our lack of Bluetooth support. Implementing a form of wireless communication would really open up our project with what we could show, and being able to implement our game on our display would be a satisfying next step, given the additional time (and sleep) needed to complete it. :)

Another issue was that Arduinos do not support the C++ standard libraries. This caused us several issues when we wanted to take advantage of C++ libraries. For example, we wanted to use vectors of chars (to use as bytes) however we took this as a challenge and used manual memory management to dynamically allocate memory to a char array.

One more issue was syncing up the rotation of the motor on hardware with the expected rotation speed in software so we could create static images. Ideally we would have used a light sensor or a hall sensor however these were unavailable. We attempted to use a proximity sensor to fill this role however we found this wasn't accurate and reliable enough for our needs. Instead, we put in the extra time and manually tried out different voltages and speeds of updates until we found a value we were satisfied with.

Accomplishments that we're proud of

We're proud of when we finally managed to get our display to show something legible, even if it was just a simple "Hello"! We had struggled to get our motor to rotate fast enough and to get our code to sync up with the rotation, so when we had finally got it right, it was a great feeling!

What's next for Propeller Display?

In future we would complete our original aim by completing the game to integrate onto our display. This game would be something like the dinosaur game in Chrome where a dino will run around the edge of the circle and the user will press a button (of some sort) to jump over random obstacles.

Built With

Share this project:

Updates