7-Segment Display Matrix Visualizes More Than Numbers


You can pretty much tell that this is an outstretched hand shown on a large grid of 7-segment displays. But the only reason you have to look twice is because it is a still photo. When you see the video below it’s more than obvious what you’re looking at… partly because the device is being used as an electronic mirror.

In total there are 192 digits in the display. To make things easier, four-digit modules were used, although we still couldn’t resist showing you the well-organized nightmare that is the wiring scheme. Each module is driven by its own discrete Arduino (driving 28 LEDs as they’re apparently not connecting the decimal point). All 48 Arduino boards receive commands from a Raspberry Pi which is running openFrameworks to generate the animations.

Now of course the project was well under way before [Peter] discovered a similar display from more than a year ago. But we’re glad that didn’t stop them from forging ahead and even building on the idea. They added a camera to the display’s frame which lets it mirror back whatever is in front of it.

What popped into our minds was one of the recent entries for the Trinket contest.

[Thanks Eren]

40 thoughts on “7-Segment Display Matrix Visualizes More Than Numbers

      1. Exactly. That’s a far more elegant solution than I was initially thinking, but that ought to do just fine. 10MHz should be more than enough bandwidth to get the job done, and you could always break it up over multiple channels if needed. Shouldn’t be that difficult. ;)

    1. I don’t disagree… but I would bet that part of the choice is that you don’t need to get breakout boards for an Arduino. It looks like each of the connector cables has pin sockets to plug right into the pins of a breadboard-ready Arduino.

      If time is more valuable to you than money is, this would be an obvious way to do.

    1. Yeah, that’s just bizarre. I had to re-read it multiple times to make sure I hadn’t missed something. I’m not an electronics guy, so I’m not sure what the alternatives are, but it seems like there *have* to be some.

      1. We were using off the shelf parts to test the idea. Sparkfun has a 4 digit 7-seg display that is driven by an Ardiuno. The next revision will be a custom solution that is more thought out (from an electronics point of view).

        Thanks for the write up and feedback guys!

        1. Couldn’t you connect several quad-LED modules to each Arduino? Surely there’s enough pins! If the modules all have the same address, go into the code and lightly alter it so they can have one each. Have a little table of display-module-address, from 1 to 8, say. Then a corresponding table of which pins it’s connected to, and optionally a buffer that contains any data that needs sending there.

          All the heavy lifting seems to be done by Openframeworks, which I don’t know anything about, but I can guess what it’s function is here. I’d be interested to see how it’s configured to change a bitmap into 7-segment displays, what rules it uses, and any tricks that help!

          Whichever way the main controller is sending the info for which segments to light up, you must already be splitting it into groups for each ‘weeno concerned. So just send each ‘ino several groups, split into however much data each one needs to control the LEDs it’s attached to. You could even have the complete set of screen data sent on a common serial bus, since there can’t be that many bytes a second. Let all ‘inos read it, and only bother with the ones it needs.

    2. its exactly same problem as few articles below “Raspis and Arduinos for FM Broadcast Streaming”
      basically some artsy guy knows only Arduino, and what do you do when all you have is a hammer?

      What is sad tho, is the fact that LCD panel will be cheaper, even if you exclude man hours that went into this and account for smart engineering (using ONE microcontroller and IO expanders instead of gazillion arduinos).

      Economies of scale killed it even before it was made.

      1. It would never be practical anyway. But it is very cool, and that’s what it’s for. The same thing on an LCD display would be “meh”.

        But for what it is, it could be done more simply with 47 less Arduinos. But then again the guy who had the idea only knew about Arduinos, so without them it’d be nothing. Now he knows better, so maybe he could make a simpler one and have 47 spare Arduinos to do other things with.

  1. Why use discrete arduino for each 7-segment? Ever heard about serial in-parallel out chips such as 74HC595? They are way cheaper than arduino boards.. and smaller too. Cool display though :)

  2. Anyone else getting tired of the:
    x(arduino) + raspii = “hack”

    I know the libraries for Arduino are great etc. but I am more interested in actually learning several layers of abstraction down. When we stop talking about scientific laws and their effects on a project and go down the Arduino rabbit trail I think a lot of us start to lose interest.

    Arduino bashing aside it’s still a great idea, I love the fact that it can be a mirror as well as a display and the use of the 7 segment displays to display content other than intended is definitely in the hacker spirit.

    Keep up the good work Peter, hope to see more great ideas like this one.

    1. No, not really. I enjoy reading what others have done. I’d rather have too many articles that I need to filter out than not enough.

      I’m just the opposite. I’d rather see a quick hack that can be done in a weekend than one where it took a team writing their own drivers and OS’s to complete the project. To me that is not a “Hack” but a long term project. While interesting, it doesn’t motivate me to take the time to hack something myself.

        1. “I think it’s a bit rough saying this is not a hack.” You are right. It was.

          But I still see it as more of a long term project that is hacking items to be used as components in it, as apposed to a quick hacking of an object directly to get it to fit your needs.

          Both styles are valid, and I have done both. I prefer the later, but still enjoy seeing people use parts in ways not intended. So, I have no real argument except that with [h3ll0_w0rld]’s complaint about using the Arduino’s libraries and wanting more detailed science and less shortcuts.

          I like the articles, keep up the good work.

    2. Nope, not tired of seeing what others are doing with Arduinos and RPi’s. I am tired of seeing other people complain about it though. 9^)

      Like Trav says, I would rather have a few extras to weed through than see a half dead site that only caters to the ‘elite hacker’ . If you think Arduino’s are overkill, show us how you would do it. Throw out a schematic, build a better mousetrap and show it to the community. Someone may learn something, or perhaps judge your project unworthy.

    1. I always used to have problems with vimeo imbedded into website. I would have to follow the link and watch it straight from their site. I don’t know if one of the latest Firefox updates (or a plugin update) fixed that, but now I can watch them fine.

  3. Wow, they built a tractor to to dig a fence post hole. Lashing up 48 arduinos isn’t just overkill, it is harder than doing it a sensible way. The end effect is pretty cool, and their build of the display panel is gorgeous, though.

    1. “built a tractor to dig a fence post hole” – love that line! Sadly, that’s exactly what we did. As you can clearly tell, we’re not engineers. :) This was a design experiment.

      Thanks for the comments guys! Believe me, all this constructive advice will be factored into the revision.

    1. I’m still residually impressed by the Czech (I think) chaps who did a framebuffer driver for dumb terminals. Nearly always, in practice, running on a PC rather than an actual terminal, but they compiled Linux Doom linked with it, there was video of actual ASCII Doom! Tho this was before Youtube, about 1997-ish. They also played video through it.

      It’s still my ambition to get hold of a real dumb terminal and get that working.

      1. What I’m saying is, that it would render a real bitmap screen into ASCII text, in realtime, lots of frames per second, case that wasn’t clear!

        It could be linked in with anything that used whatever (was it SVGALib?) library Linuxers were using at the time for full-screen graphics (and not X). I think it needed linking in at compile time (well, strictly speaking, link time), but that’s not a problem with Linux where most of the apps come with source code.

        Just wondering, is possible to take an existing compiled, linked, on the shelf then bought from a store, program; and then link it against it’s will to your own stuff after? As in, emulate the libraries it calls? For DLLs I know that’s done all the time, but would you also be able to hook into it’s calls for other functions? Maybe look out for call instructions and translate the address before it runs it?

        Anyway irrelevantly enough, the ASCII driver could also play video using whatever SVGALib full-screen player there was. What would’ve been a really nice final step would be to install it as a device driver, so anything could use it. Still emulating (some of) the SVGA graphics modes, but to run unmodified binaries.

        The same thing in Windows would be s00per-neat too. Say, 800×600 ASCIItized! Running off a serial port, real or USB, at some nice fast rate, 115200 should work with a nice cable, used to for my old modem with my old, real, 16550 chip on a 16550-bearing ISA card. Then try running Windows Whichever on a Wyse 60, particularly if you could get text lined up. Maybe with a hack into the font-renderer too, so you could snatch text as it was writted, to make a better job of displaying it, make it usable. Wyse 60 had a 132 column mode that was a bit cramped on the little green monitor, but I’d love to have a go.

        Failing that, maybe one of those flat-desk-display things Microsoft think people are going to want and be able to use. But using 7-segment LEDs! Red ones! Or bicolour!

      2. SDL supports rendering using AALIB, and there’s a port of doom that uses SDL. Libcaca has a patch to SDL that adds their color ascii art renderer, which helps a lot with parsing what’s going on.

        Alternatively, googling “aalib doom” finds a few videos.

  4. it might be crude, but i’m pretty sure you could do this with one 74595 per display and one MCU

    12 rows of SIPO’s would equate to 25 pins if you have a common data pin and one clock and latch for each row.

    shifting out one row, then latching it.. then starting the next…

  5. I won’t join in the “f***ing arduinos” crowd as that’s now been said, and the guy has made clear they KNOW it’s a dumb way of doing it (although HaD could perhaps editorialise a bit on some ideas for improvement, for the sake of any kids/newbs reading).

    What I would say is that, given the implied project goal of making an interesting visual effect and hang the expense/complexity, I’d be tempted to laser-print the negative image of the digits on a transparency sheet and glue it over an LCD screen as a mask. You either pixellate & filter the video to make it look like real 7-segs or screw with people’s minds by not bothering ;)

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.