Arduino Based Meter - a Many LED Driver




About: I'm an Engineer, who originally inherited the family business (Thanks Dad (RIP JC Taylor, 1938-2011)) after working in it for 25 years, designing and building scientific instruments. In 2013, I was head-h...

As the direct result of a question in the Instructables forum, for a bargraph to display data on the dashboard of a car, a custom electronics instructable.

Here, for your delectation is the Car-barDuino, a simple display system for analog and digital stuff, for a car, for a timer, for a thermometer, for whatever. I built it for a manifold pressure meter for friends car, I'm going to use it at work for some monitors in a research instrument.

Under the hood, it uses a micro configured to run "Arduino" sketches, so anyone can play with the code. All the spare I/O has been brought out to connectors to play with.

Enjoy and employ.

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: What It Can (and Can't) Do

In its current form, we can drive 2,  7 segment displays and a 30 element bargraph. We can mix LEDs from red/green/yellow, but it can't drive white or blue. If there was enough interest, I'd redo the design to allow higher voltage LED technology to be used. The current design is open ended, since each MAX7221 can be connected to the next over just 5 wires, and each can drive 64 LEDs at once.

There are 15 levels of digital control of LED brightness, and a SINGLE resistor to set the maximum brightness of all of the LEDs on one chip.

The processor can be any standard Arduino (Atmega 168 or 328) and with the ICSP connector, you can burn your own bootloaders.

The input interface uses a simple current limiting resistor and two diode clamps to the 5V rail. DON'T make a habit of driving into the clamps !

There are no input scaling resistors on the circuit at the moment.

Step 2: How It Works

Here are the schematics.  At the right hand end, Its a generalised, basic ATmega 168 or 328 layout, with the FTDI interface cable for serial connection to the outside world, and the ICSP connector for fast programming and/or bootloader installation.  The LEDs are driven by a Max 7221 or Max 7219 (datasheet)

There are currently only two analog inputs wired, and they have diode clamps to the 5V supply rails.

The unit is designed to run off a 12V supply, there is an on-board 5V regulator that barely gets warm at all in use.

Step 3: Building One

I designed the PCB by hand, but the PCB was made professionally. I like putting big ground planes on my boards, since it kills noise dead at the source, but it makes the board hard to make well at home. Its also seriously double sided and plated through. Whereever ground connections are made to ICs, the connection is direct to the ground plane. There are also several capacitors, which again reduce noise, so don't omit them. I am sure Maxim must have had a neat layout planned when they designed the 7221 , but I'll be damned if I can see it yet. I gave up on my auto-router too - the tracking looked nasty.

The Bill of Materials shows what you need. Suggested sources ? In the UK, Rapid, RS and Farnell have everything. Farnell is Newark in the USA.

Assembly has been made deliberately easy, since Chris, who suggested it (Hi Chris !!) hasn't got access to surface mount assembly, and should present no problems at all to anyone with decent soldering skills. There are a couple of simple SM capacitors to fit, and a resistor, which should be fitted before the Arduino !!

If anyone is interested, I have some spare PCBs that I can sell on - it turned out to be as cheap to make 5 as 1 ! Go figure.  The board has a couple of very minor screwups that I'll fix if I make more of 'em, but the lucky first buyers get to fix their own.

Step 4: Using It

The coding is pretty simple. I integrated the whole thing using the excellent LEDcontrol library in Arduino, and it worked off the shelf.

You need to look at my "ledSetup" command to allocate the right pins to the MAX7221, and I also made things better by limiting the scanregister to 4.

Take a look at my pin mapping functions in "BarGraph" I can do dots, and bars. A bit more work, probably with the mapping function and you could do some really neat animations.

The source includes a digital filter called an "exponential forgetter" or first order low-pass filter. Its designed around binary math as far as possible, for high speed operation using shifts and not explicit multiply operations.

The input (0.1024) digits is scaled to 0..30 digits currently: there's no reason not to scale it 0.99 for the 7 segs, and scale it 0..30 for the bar.

I've got several little projects lined up, a VU meter is pretty obvious - the next gen board'll squeeze in two rows of bar, probably only 20 bits per row !

Design requests.

A couple of folks have asked about adding OBD-II interfaces to the thing. I am looking at suitable interfaces for it at the moment - there are three different standard interfaces !!

What I WILL be doing on my next boards is two rows of 20 bars + 4 digits, 2 on each line. Optionally, you can have just 30 bars on each line.

Here's a (future) list of other projects running on the same hardware. If you've got a project you've done using it, let me know in the comments and I'll add a link here:

  • VU meter, coming soon
  • Reaction timer
  • Bath thermometer
  • Kitchen timer
  • TDS/EC meter
  • Moisture meter
  • Vacuum/Boost Gauge (gage !)  by skullmaster20

Be the First to Share


    • Assistive Tech Contest

      Assistive Tech Contest
    • Reuse Contest

      Reuse Contest
    • Made with Math Contest

      Made with Math Contest

    21 Discussions


    4 years ago on Introduction

    Great concept! I'm thinking of a sleek wall clock showing the time in a bargraph. Will this easily expand to 2 bars of 60 LEDs each (making 120 LEDs)? I don't immediately see why not.

    1 reply

    Reply 4 years ago on Introduction

    Yes. use 2 boards. You only need the processor on one of the boards. They were designed to be cascadable.


    9 years ago on Introduction

    Minimalist design at it's very finest! Is it possible to connect an external sensor, somthing like a hall sensor, and use this as a speedometer/tachometer?

    Either way an interesting concept!

    8 replies

    Reply 9 years ago on Introduction

    Yep, its eminently possible.

    Listen carefully, because this spec even confuses me ;-)

    The new board I have done (ready for a prototype or two) has TWO rows. You can use 2 digits on the top row, and 20 bars, or you can have no digits and 30 bars.

    The 2nd row has provision for none,  2 or 4 digits. no digits 30 bars, 2 digits 20 bars and 4 digits no bars.

    The board is standalone arduino....or it will work as a shield, if you don't populate the board, or it can accept shields.

    AND it has expansion slots, so you can extend the display to EIGHT 7221s.

    Its only very slightly wider than the MK1 board in the article.



    Reply 9 years ago on Introduction

    Very confusing, but I think I have it. :)

    So in theory I could have 2 Digits for 99MPH then the 20 bars for a tachometer, or 4 digits for MPH and RPM.

    If I chose to extend I could have 8 digits and 40 bars? Or would I have to use 2 boards with 4 digits and 20 bars.

    Or some variation thereof, I think, perhaps, sort of, mabey...

    Regardless thoroughly intrigued and I will follow with great interest! :)


    Reply 9 years ago on Introduction

    See ? Now I'M confused, and I designed it ROFL.

    I could have 2 Digits for 99MPH then the 20 bars for a tachometer, or 4 digits for MPH and RPM.


    I could have 8 digits and 40 bars? Or would I have to use 2 boards with 4 digits and 20 bars.

    Only on two boards.

    Looking at OBD functionality at the moment as well, as a shield board.


    Reply 9 years ago on Introduction

    Oh well, that would simplify programming greatly, 1 board for the speedo and one for the tacho!

    Now to get a grip on programming! How I long for a world of logic gates and PROMs! LOL!

    Jeffrey G C

    9 years ago on Step 4

    i cant get it to download, ive tried to save it, but it wont let me save it as anything other than .tmp

    1 reply

    9 years ago on Step 4

    Hi i am trying to download your code, i want to have a look at how you use a bargraph and 7 segment separately on max 7221 (im doing 7 seg + LED indicators) it points to a temp file.

    1 reply