Arduino Ottawa Contest #1

POV_display_rightOur local Arduino Ottawa group created a design contest which required an Arduino design that uses a mystery component. The last day of the contest is June 10th so I had to get my project started quickly. To that end, I re-used as much of my paper car work as I could. This allowed me to advance the car project testing while also allowing me to build an experimental robot.

The project consists of a 3D printed body that holds a motor, LiPo battery and charger along with the Tiny84 Arduino processor and a string of 10 WS2812 RGB LEDs. Oh and lets not forget the TCRT5000 mystery component. The 3D parts were completed in less than a day including several revisions.

Originally I was thinking of just a free running blinky robot but to include the TCRT5000 I decided to turn the robot into a POV robot display. The TCRT5000 is used to read a synchronization mark that allows me to display a stable POV image. I read the time between detecting the black sync. mark which gives me the rotational time for the robot. One rotation is then divided by the columns of image data that I want to display. The code is located here: ArduinoOttawaContestOne.ino

One interesting wrinkle of using the WS2812 is that interrupts are disabled while the LEDs are being updated. This means that the Arduino millis() function is off part of the time resulting in less predictable timing. For now I’m just sticking with a fixed delay until I code a time function based on a hardware timer. The hardware timer would provide accurate timing regardless of whether the interrupts are enabled or disabled.

POV_botThe design of the package was captured in OpenSCAD. I have included the code so that you can see how I have constructed the design using only primitive shapes like cubes and cylinders. Designing in OpenSCAD is a great review of 3D graph theory. I use lots of sketches to rough out the assembly. I start with the largest body elements and then subtract material to add details.

Leave a Reply

Your email address will not be published. Required fields are marked *