Actuator Driven 7 Segment Display

by RoboJon in Circuits > Arduino

263 Views, 1 Favorites, 0 Comments

Actuator Driven 7 Segment Display

7 Segment Display.png

A simple physical 7 segment display panel made with DYNAMIXEL servos and 3d printed components.

Supplies

This project doesn't actually require very many unique components, although it does use quite a lot of servos per panel.

  • 7 DYNAMIXEL actuators (I used XL330s, but any DYNAMIXEL will work as long as you adjust the prints to fit)
  • Arduino based microcontroller (whichever one that you prefer)
  • A 3d printer or other method to fabricate the frames and armatures.

Additionally, the SCAD and STL files for the printed parts, as well as my Arduino code are available on my Github.

Design 3D Printed Components

7SegmentLabeled.png
7 Seg Armature OpenSCAD.png
7 Seg Base OpenSCAD.png
Armatures.jpg

Once I had the basic idea of what I wanted to do in mind, I figured the best place to start the design was with the 3D printed components. I took measurements of the dimensions that I needed fitment for (The size of the horn, and placement of the screw holes as well as the length and width of the sides of the unit) and started modeling up the attachments.

First I started by designing the armature that would attach to the horns on the servos in order to illustrate which of the segments are "on" or not. I tried to get a shape reminiscent of the angled ends of a traditional 7 segment display, so I put little chamfered edge on two corners to try and evoke that.

In order to make this as legible as possible, having a frame where all 7 actuators will be kept as close as possible together with even spacing is important. I designed the frame mainly with that in mind. At this point, I'm actually a little worried that I may have placed the actuators a little too close to one another without leaving enough room for the wiring. I really want this to be as tight as possible though, so I'll try this out first to see if I can make everything fit.

After designing both of these attachments, I set up a print run of 7 units of the armatures and waited to see how they came out.

Test Fits, Positioning

Armature Top.jpg
Armature Front.jpg

Once the print was done, I attached all the armatures to the horns on the servos and celebrated the fact that I got the spacing for the mounting holes perfect on my first try! Unfortunately, I am not happy with the size or placement of the panels on the armatures. I will keep using these for this first display panel, but before printing the next batch I want to make the panels themselves maybe twice as big, and move the connecting piece away from the midpoint of the horn. That way the panel will ideally cover the whole actuator, and sit more closely to the upper edge of the actuator.

After a quick stop in the DYNAMIXEL Wizard configuration software in order to figure out the positional values for the "off" position (2048) and the "on" position (3073), I set up the print for the baseplate and moved on to the Arduino IDE in order to start programming the patterns for the characters.

Programming Character Patterns

Test Box.jpg

While the baseplate was printing, I taped the actuators to a cardboard box and started writing the Arduino code to represent characters on the display. The numbers were easy enough to figure out on my own, since that's what 7 segment displays were designed to represent. For the letters, I looked up a chart on WikiChip and got to coding.

For now, I just want to verify the display and make sure that I have a display pattern for every letter and number, so I just wrote some simple code that goes through the numbers 0 through 9, then the entire alphabet. I put in a pause between every position so I can check that the characters look good.

During my first test run, I realized that the controller that I was using can't reliably deliver enough current over just USB to power all 7 servos. Only 3 of them were actuating at any one time, seemingly at random. If I was dead set on powering this with only USB I probably could have set something up to move the actuators one or two at a time to lower the peak current draw, but moving over to a benchtop supply just made more sense. Once I had an adequate power supply going, one of the armatures snapped off. I think I weakened it when pulling it off the raft I used when printing it, and it just flew off when the actuator started to move. Since I was planning on resizing the armatures later anyway I figured it wouldn't be worth it to print a replacement now, so I did the rest of my testing with the broken armature in place.

I decided put in a few lines to read characters from serial input to double check my work before putting everything on the baseplate.

The End (for Now)

On Baseplate.jpg

After getting everything fitted to the printed baseplate, I am very happy with how the whole assembly turned out. The tighter spacing on the baseplate makes the symbols much more readable than they were on the testing bench, even with the armatures being a little bit small for my liking.

At this point, I unfortunately have to put this 7 segment display on hold. I only had enough actuators on hand to create one panel, as a proof of concept to make sure that this would be legible to scale up to a larger display. Going through this prototyping phase has given me a good idea of quite a few improvements that I will need to make when I scale this up to multiple panels.

A short list of improvements that I intend to make before scaling this up to multiple panels include:

  1. Make the armatures larger, and move the arm to the bottom most edge of the horn. That way they cover the actuators more fully and make more legible symbols
  2. Cut some cables to shorten the length as much as possible. The cables that come with the actuators had a lot of extra length that got in the way.
  3. Minimize the baseplate, I can add some cutouts in the unused space to reduce materials used.
  4. Add mounting holes to directly attach the servos to the baseplate (instead of taping them down like I did)
  5. Refactor the code, current method to parse strings is very very slow.

I'm sure that there are more minor issues that I will run into later that I will feel the need to improve when I get to them. I also may consider upscaling this to a full sixteen segment display for better alphanumeric representation, but that would also over double the number of servos needed per panel.

All in all, I am quite happy with how this prototype project turned out, and look forward to making more panels and turning this into a more fleshed out project.