Introduction: Arduino Mini-Shields

Picture of Arduino Mini-Shields

This is a set of simple, small form-factor, mini-shields that I created almost by accident. As I made more and more of them, I realized that they could be really useful. What started out as a way to use some spare parts, turned into a standardized form factor for a versatile, miniaturized Arduino shield. The added benefit is that they also make a great kit for traveling, or simplified prototyping or for educating kids and beginners about Arduino.

I have been building some custom shields and modules for a while now but while I like the modularity of a shield, they are a little too expensive and large if all you want to add is just a little piece. The modules I make are all small and have to be plugged into a breadboard, which doesn't have that satisfying, finished feeling I'm looking for. I buy a lot of perf board, but the Arduino boards have this annoyingly unusual spacing between the digital pin banks so you have to modify the pins to make them fit. I needed something that was more flexible, lighter weight, and allowed me to change the pins used more easily to avoid conflicts with other shields.

The Mini-Shield Standard
I started making these small modules with standardized pinouts that are mostly plug and play. I call them Mini-Shields and they include everything you need for almost any application. The first 3 pins from the right of each board are connected to the 5v, ground and Digital 2 pins from the Arduino. All of my mini-shields use the following standard and they work pretty well with each other.

Pin |  Pin Function
1    |  5v
2    |  Gnd
3    |  Digital 2 (Hardware Interrupt)
4    |  Analog *
5    |  Digital (PWM)
6    |  Digital (PWM)
7    |  Analog **
8    |  Digital
9    |  Digital (PWM)
* the Real Time Clock module requires analog pin 4
** the Real Time Clock module requires analog pin 5

I liked the idea that these little modules could be added to almost any other shield and you could swap them out as needed. I would then also be able to reuse them in different projects without too much effort. The standardized pinout meant that every one of them could be used in place of the others if everything was wired correctly. Once they are built, they make a good little, rapid prototyping set that would also work as an entry level set for Arduino beginners.

Shield of Mini-Shields
I made a single shield with space for any 3 mini-shields to be connected at the same time. Each mini-shield uses 2 analog pins, and 4 digital pins (plus digital pin 2 which they all share since I have dedicated it for the hardware interrupt feature). I needed to dedicate analog pins 4 and 5 to slot A to ensure the Real Time Clock module would work. Of the 14 digital pins, there are only 6 PWM pins available, so I have dedicated slots B and C to be the PWM mini-shields, so things like the speaker and the full-color LED won't work well if they are plugged into slot A.


Step 1: Parts and Methods

Picture of Parts and Methods
When all was said and done, I built 7 of these mini-shields. I just kept digging through my spare parts and finding things I could make another board out of. These are the current mini-shields and the main parts that go into them:

IR Mini-Shield - A salvaged IR sensor, a salvaged LED, and 2 buttons
Debounced Button Mini-Shield - An RC circuit with an inverting Schmidt trigger to debounce the output from a tactile switch.
D Pad Mini-Shield - 5 button directional pad connected to a single analog pin
Bar Graph Mini-Shield - Uses a shift register to light an 8 segment LED Bar graph with only 3 digital pins.
RGB Mini-Shield - An RGB LED & trimmer pot + 2 buttons.
Real Time Clock Mini-Shield - an adapter to use my off the shelf RTC module.
Theremin Mini-Shield - A salvaged PC speaker, photo cell & 2 buttons.

I made all of these mini-shields with parts I had on hand but I hadn't gotten a chance to use. I always keep a lot of male and female headers on hand. More and more, I like to use these right angle headers which only come as male headers, but I have found you can also bend the pins on the female headers to make them lay down along the board as well. I like the 10 packs of straight and right angle headers that they sell at Schmartboard. Most other places only sell the header strips in singles. Unfortunately, they don't sell the female headers there.

Perf and Proto Boards
I bought a couple of 2 sided, through-hole plated proto boards that I never found a use for. This project gave me a good chance to use them, but once I used the 2 I had, I started cutting pieces off a large perf board that I got at Radio Shack.

Resistors, Capacitors and Components
At some point I stopped buying one type of resistors and I started buying the assorted packs. It's a much better deal and it's more convenient to use something you have on hand than to run to the store and hope you remember all of the things you needed. If you have a bunch to choose from, you can usually mix and match something to work for you.

I have been using a lot of buttons lately, and I ran out of new ones but I had a bunch that I salvaged out of an old DVD player so I was able to reuse those as well. When I junk old electronics, I open them up to see what could be useful. If I find anything good, I cut the parts out with a pair of tin snips and put them away. If I need them later, I will use some desoldering braid to remove the solder and free the part from the circuit board. I used the same process for the buttons, the IR LEDs and the IR sensor that I used in this project.

My Method
The wire I use in my projects is just solid core UTP network wire. I have a big spool of wire, so every so often I cut a few feet off and strip off the outer sheath. The wires inside use the standard CAT5 standard, so I don't have red and black wires like I would prefer. Instead I use Orange for Red and Green for Black. I use Blue for switches and other digital pin leads. I use White Blue or White Green for data and analog pin leads.

Header Markings
I used some paint pens to mark the header pins with colors so you can easily tell what pins are necessary and how they should be hooked up to an Arduino from a breadboard. I marked the 5v pins with Red and the GND pins with Green. I marked digital pins with Blue and I marked analog pins with Yellow. I marked the PWM (digital) pins with White, but I put a dot of color in the middle. For the Full-Color LED, I matched the dot to the color that the pin relates to on the LED. I mark the female header pins with white masking tape and fine tip permanent markers using the same color scheme as above.

Step 2: IR Mini-Shield Construction

Picture of IR Mini-Shield Construction

This was the first mini shield. I had some parts I wanted to add to my Time and Temp shield, but I had no more room on the shield for the parts. I decided to put them on a daughter board with header pins so it's removable and reusable. I had a few of these 9 x 9 hole proto boards that I hadn't found a use for but it turned out 9 holes was exactly the right size for this project.

I salvaged a few IR LEDs out of old TV remotes, and an IR Receiver from an old A/C unit that I thought I could use on the Time and Temp shield. I also thought it would be nice to add a few buttons, so that I could make a menu for the display.

First I tested the IR LED from the remote with 5v from the Arduino. I had to look at the LED through my camera to see the infrared glowing. The camera showed that the LED worked fine but it did get hot, so I assumed it was getting too much power. I tried a few different resistors until I didn't see too much difference between full brightness and when the resistor was placed in series with the led. With a 47 ohm resistor, the LED doesn't overheat anymore and still shows full brightness on the camera screen.

IR Sensor
I found a little information on Adafruit about a similar IR Sensor. The board I took this from had markings that indicated the + and - leads were the same as Adafruit's guide said, so I soldered it along the top of the proto board for clearance of the sensor's eye.

I had some extra room, so I had to put a couple tactile buttons in place to fill up the space. I like having extra buttons on my projects because there is always a reason to have some way to trigger a process, especially when you are testing something.

Step 3: Debounced Button Mini-Shield

Picture of Debounced Button Mini-Shield

I had another of these 9x9 through-hole plated proto boards so I figured I would make another module that I could use in the same port. I have a section of one of my breadboards devoted to a hardware debounced switch. This way I can hook the switch up to the hardware interrupt on Arduino and begin a new instruction in the middle of a loop. The interrupt pins need to be debounced with hardware because there is no way to use the wait delay to debounce on the interrupt.

There is a really good explanation of hardware debouncing and interrupts on these websites...

Step 4: Directional Pad Mini-Shield

Picture of Directional Pad Mini-Shield

Since the original idea was to add some new inputs for my Time & Temp shield project, I thought a directional pad would be nice. I remembered this post on the Arduino site that only uses 1 analog pin for all of the buttons. Because the resistances are mapped out so nicely, it even allows for the Arduino to recognize combinations of any 2 keys pressed at the same time.

I was trying to use parts I had on hand and I was running out of buttons, so I had to salvage 4 of these buttons from the A/C unit's control panel. I have a set of standard resistors from Radioshack that is getting a little picked over, but I was still able to make something work by combining a few resistors to get the desired resistance.

I had to use 4 resistors for buttons 2 and 3 to make the 390 and 680 values described in this example, and as a result my actual resistance was slightly different, so I had to run the following test code to see what the analog reading would be for each button, and update the button array to allow for these values (usually 1 number above/below the example on the Arduino site).

Test Code:

int analogpin = 3; // analog pin to read the buttons

void setup()

void loop()
Serial.println( analogRead(analogpin));

Step 5: Bar Graph Mini-Shield

Picture of Bar Graph Mini-Shield

I was thinking of other things that would be useful as a mini-shield and I thought I might like to have an LED bar graph circuit, complete with a shift register on it. I have a nice tricolor bar graph, but its a 10 segment one, and my shift register is only 8 bits. I remembered I had these 8 segment (2 per line) LED displays with a strange pinout and I figured this would be a good chance to use them.

With the shift register driving the LED display on the mini-shield, I can get away with only using the 3 digital pins to light up all 8 LEDs. Otherwise, I couldn't put this on the mini shield since I only have 4 digital pins dedicated to each mini shield. Even if I used the shared pin 3 on the mini-shield connector, I would only have 5 digital pins to drive 8 segments. The shift register makes it possible to drive more LEDs without exceeding your available pins.

74HC595 Shift register - These shift registers are great for increasing the number of output pins so you can drive many LEDs from just 3 pins on the Arduino. You can daisy chain them together to get even more output pins, you only need to change your code to allow for the additional shift registers. There is a good tutorial for these here.

LED 8 segment bar graph - I have these in a couple different colors because I was trying to string a lot of them together with daisy chained shift registers. The ones I used here were not what I expected so they were never used.

Resistor Network - I have 2 different kinds of these, Isolated and Bussed. This one is isolated so it contains 8 separate resistors, but I dragged a line of solder down the outgoing leads to tie the grounds together. If I had used the bussed one, I could have just used the one common lead for the ground, but I would have been wasting 7 additional resistor leads.

Step 6: RGB LED Mini-Shield

Picture of RGB LED Mini-Shield

I have a few different kinds of full color RGB LEDs that I occasionally hook up on a breadboard, but when I need space on a breadboard they go right back in a drawer. I thought one of these might make a good mini shield. To take up the rest of the space, I included a few more buttons and a trimmer pot because they are always handy.

I went to the product page on Sparkfun and looked at the datasheet. These have apparently been discontinued, but it's basically the same idea for any full color RGB LED. This one happens to be a common cathode LED, if you have a common anode LED, wire the common pin to 5v instead of to the ground like I did.

To pick the resistors, I went to this page and plugged in the values I got from the product page. This site recommended a 150Ω resistor, but the LED was still too bright and hurt my eyes to look at it, so I ended up going with 220Ω resistors.

I soldered the LED, the 2 switches and the 10k trimmer pot to the perf board first, then I worked on adding the other pieces. I tied the 5v leads and the ground leads together and worked on tying the LEDs, and switches to the digital pins and the wiper of the potentiometer to one of the analog pins. If I had thought more about this, I would have reversed the polarity on the trimmer pot, because I have to turn the knob to the right to decrease and left to increase, which is counter-intuitive.

Step 7: Theremin Mini-Shield

Picture of Theremin Mini-Shield

This one originally started out as just a speaker shield because I had a PC speaker I salvaged from an old motherboard. Then I remembered I had a Photoresistor or Light Dependent Resistor (LDR) that I salvaged from a nightlight and I decided halfway through the project to include the LDR as well. So I decided to bundle the parts necessary for a pseudo-theremin onto one mini-shield.

I used these guides on Adafruit for the general circuit layout and code.

Step 8: Real Time Clock Mini-Shield

Picture of Real Time Clock Mini-Shield

I like this Real Time Clock module a lot. It allows you to keep perfect time while your Arduino is busy doing other things. I added some female headers to another project to allow me to plug this in and use it, but now I want to be able to use it as a mini-shield, so I decided to make an adapter board.

This module is really simple to wire up, it only needs 5v power, ground, and analog pins 4 and 5. To make this adapter, I just needed to wire up the Arduino's analog pins 4 and 5 as the 2 analog pins in the mini-shield connector.

Adafruit has a very nice guide to using this module with Arduino.

Step 9: Shield of Mini-Shields

Picture of Shield of Mini-Shields

After I had a few of these mini shields, I thought I might like to use them together on one shield. That way I could have a nice ready-made kit that would allow many different combinations of sensors and outputs. I made a new full size shield that I could plug up to 3 mini shields into. 2 ports are vertical and 1 is laying down.

When I laid out the pins, I had to think about what kind of mini-shields would go where. The RTC mini-shield needs to have analog pins A4 and A5 because they aare required by the library. My RGB LED and Theremin mini-shields both need 3 PWM capable pins, and since the UNO has 6 PWM pins, I would like to use 3 for shield B and 3 for shield C. My debounced button mini-shield needs to have either digital pin D2 or D3 to access the hardware interrupt, since D3 is also a PWM pin, I decided to use D2. Since I really only need this for 1 shield right now, and I can't imagine needing 2 interrupting shields, I decided to connect D2 to all 3 mini-shield ports.

As I explained earlier, this is the standard mini-shield pin layout:

Pin | Pin Function
1 | 5v
2 | Gnd
3 | Digital 2 (Hardware Interrupt)
4 | Analog *
5 | Digital (PWM)
6 | Digital (PWM)
7 | Analog **
8 | Digital
9 | Digital (PWM)
* the Real Time Clock module requires analog pin 4
** the Real Time Clock module requires analog pin 5

And here is the layout for all 3 mini-shield header ports:

Mini-Shield Pin | Arduino Pin

A1 | 5v
A2 | Gnd
A3 | Digital 2 (Hardware Interrupt)
A4 | Analog 5 (Required for RTC module)
A5 | Digital 7
A6 | Digital 8
A7 | Analog 4 (Required for RTC module)
A8 | Digital 12
A9 | Digital 13
B1 | 5v
B2 | Gnd
B3 | Digital 2 (Hardware Interrupt)
B4 | Analog 3
B5 | Digital 9 (PWM)
B6 | Digital 10 (PWM)
B7 | Analog 2
B8 | Digital 4
B9 | Digital 11 (PWM)
C1 | 5v
C2 | Gnd
C3 | Digital 2 (Hardware Interrupt)
C4 | Analog 0
C5 | Digital 3 (PWM)
C6 | Digital 5 (PWM)
C7 | Analog 1
C8 | Digital 1
C9 | Digital 6 (PWM)

Step 10: Adding Mini-Shields to Existing Projects

Picture of Adding Mini-Shields to Existing Projects

I bent some of the wires on the shield out of the way so I could squeeze the row of 9 female header pins in place.

I bent the pins on the headers so they will clear the screen and the module I built will lay flat. Unfortunately, I had to bend the header back up to solder in the holes underneath it. I don't know if it would have been simpler to solder the header in after I soldered the jumper wires to the Arduino digital pins, or if that would have caused other confusion. This worked out, but its tough to bend something flush to the board. Usually to get a perfect bend, you have to go slightly past where you want it, and I didn't have the room to do that here.

The Time and Temp shield was the first board I added the mini-shield port to, so this one was kind of shoehorned into place. I didn't come up with my pin standard until later, but this one still follows most of the standards I defined later.

The mini-shield on my tank robot is not finished yet. I need to decide what is important and what will not interfere with any of my other shields. Currently I have an DSRobot motor controller shield and a Sparkfun Xbee shield that the mini-shield port is soldered to in the prototyping area. The Xbee shield has a bluetooth module plugged into the Xbee port.

Step 11: Finish

Picture of Finish

I'm very happy with how these mini-shields came out. I have a couple others in mind for future projects and I think it would be handy to make a simple adapter for every pre-made module I can find. Specifically, I have my eye on an ultrasonic sensor adapter for my tank robot and a humidity sensor for my Time & Temp shield.


Patel Darshil (author)2017-06-15

Great Instructable.

dracorabbid (author)2015-04-17

hey man great instructable!!
I just wanted to ask you what sort of pens you use to mark the headers?

JmsDwh (author)dracorabbid2015-06-30

I was looking at the headers the other day and realized you might have meant the paint dots on the male headers. Those are just regular paint pens from a variety pack that I bought at a craft store.

JmsDwh (author)dracorabbid2015-04-20

Thanks, they are just regular Sharpie fine point markers. They write really well on plain masking tape.

script_coded (author)2015-06-06

Okey, this is great! Thank you for sharing!

JmsDwh (author)script_coded2015-06-16

Thanks! I'm glad you like it.

garethllewelyn (author)2015-01-22

So useful, thanks muchly.

JmsDwh (author)garethllewelyn2015-04-01


Akin Yildiz (author)2015-02-12

amazing post, i love making shields and i think i have something exciting to share with you :)

once your shields are done, you can also make a custom body/case for them really cheap, check this out;

thank you for sharing !!

JmsDwh (author)Akin Yildiz2015-02-12

Very cool project. How hard does that paper clay get? I sometimes use plumber's epoxy putty which hardens in about 5 minutes and will never come off without power tools.

Akin Yildiz (author)JmsDwh2015-02-12

very hard. you can drop it to floor and wont break. i use my items daily still no problems/breaks. just keep it dry.
it hardens based on thickness used. i usually set them aside at night and in the morning they will be solid. but tiny pieces can dry in 10minutes.
its just incredible, im very satisfied with results, you should definetly try it. its easier to take a part for fixes or to re build on, just wet it amd shape again :)

garethllewelyn (author)2015-01-22

So useful, thanks muchly.

muscrat (author)2014-12-28

Hey ProfMuggs,

You are awesome! Thanks for sharing.

JmsDwh (author)muscrat2014-12-28

Thanks! I'm glad you like it.

dan3008 (author)2014-12-23

I've just ordered my first arduino off of Ebay, and in the 24 hours since I've ordered, I've already made all your mini shields :D

they are so amazing, and will be so usefull

JmsDwh (author)dan30082014-12-25

Thanks! I'm glad you like them. I have been a bit distracted lately, but I have some new ones I will finish soon.

Kante Tech (author)2014-08-14

This project is really useful. I have many arduino applications that can now be simplified thanks to this process.

JmsDwh (author)Kante Tech2014-08-14

Thanks! I'm working on another set of 6 or so mini shields. I'll post them soon.

Kante Tech (author)JmsDwh2014-08-16

Also do you know how to get the arduino to recognize the directional button shield as if it was already built in with the lcd screen. I often find it difficult to get many programs to recognize the dpad with out a lot of script changing.

Fabrizio Araujo (author)2014-04-06

Hello fellow!
I've found a this 3$ arduino and was trying to build a really cheap gps
but the gps shield would make everything expensive again
soo u think that its possible to make a really cheap shield with ur projects?
like less than 16.20€ like this one?

I live in brazil so for me 16€ is really expensive

I want to make one that can cost less than 25$ or 35 $

JmsDwh (author)Fabrizio Araujo2014-04-07

These are all very simple components, so it's easy to make them into these lightweight min-shields. The expensive part is the GPS module itself, which would be very difficult to replicate.

3stepps (author)JmsDwh2014-05-24

How about stripping the GPS out of an old cell phone?

Jan_Henrik (author)2014-05-01

I love the bargraph shield :O

JmsDwh (author)Jan_Henrik2014-05-06

Thanks! I have an idea for a better one I am working on.

Jan_Henrik (author)JmsDwh2014-05-06

Cool, i hope you will also post it :)

zimirken (author)2014-04-18

Just pretend you're opening a needle valve and it should feel more natural.

elliot5445 (author)2014-04-02

I know I will sound like a complete idiot, but what's arduino?

Machine (author)elliot54452014-04-03

Search the word and then try Wikipedia.

elliot5445 (author)Machine2014-04-03

I'm not allowed on Google or Wikipedia.

I know, I know...

Wynfordeagle (author)elliot54452014-04-06

"Arduino is a single-board microcontroller, intended to make the application of interactive objects or environments more accessible. The hardware consists of an open-source hardware board designed around an 8-bit Atmel AVR microcontroller, or a 32-bit Atmel ARM. Current models feature an USB interface, 6 analog input pins, as well as 14 digital I/O pins which allow to attach various extension boards." That is the first paragraph of the Wikipedia article. Simplifying it, it consists of a single board that contains a processor. This processor can be programmed by a language called C. You can write it on a PC or Mac, upload to the Arduino and it will run. So it can used to receive inputs, humidity, light, temperature, sound pretty much anything represented as an electronic signal and the software you write can be used to turn on or off equipment. Both the design and software are open source are free and maintained.

I am concerned that you are unable to use Wikipedia or Google. Both provide a wealth of useful information. As with all things on the internet you do have to apply some judgment and circumspection but Wikipedia in particular is a useful and very accurate source of knowledge and for those that say it is not then it is in there own hands to correct.

You can clearly access this site and searching within this site will show a great many projects that use the Arduino.

elliot5445 (author)Wynfordeagle2014-04-07

Kind of like the sensor in my mindstorms unit. Thanks!

carfin33 (author)elliot54452014-04-14

Its basically a big kids version of the mindstorms.

geraldpaxton (author)elliot54452014-04-06

search it on '' ...visit your local 'Radio Shack' store

JmsDwh (author)elliot54452014-04-05

I didn't go into much detail about what Arduino is, but there are some great Instructables that should answer that for you without going out to Google or Wikipedia.

PaulCo (author)2014-04-08

this is an excellent introduction to interfacing the arduino and similar board.

thankyou for this great effort.

very much appreciated.

caitlinsdad (author)2014-04-02

Cool. Someone may have beat you to the market though with this There sure was definitely a need to simplify and modularize components in packages especially for beginners.

JmsDwh (author)caitlinsdad2014-04-07

I hadn't seen that, but I have since found this one that was also along the same lines. I like that there are a variety of kits out there to suit different needs, but I like that mine was built with mostly salvaged parts and things I had laying around.

jdevries4 (author)2014-04-06

Fantastic instructable. Yes, there are professionally made versions of a lot of these items, but they tend to be pricey & not necessarily what you want. This suggests a method that takes a little work, but you end up with something exactly like what you _need_ and might well be less expensive.

JmsDwh (author)jdevries42014-04-07

Thanks, I'm glad you liked it. I like to reuse things and I don't want to be locked into using things in one particular way, so this project kind of mushroomed out of a simple IR sensor module.

slyght (author)2014-04-06

I'm EXTREMELY new to Arduino and coding. I have a MechE degree, so I like to problem solve, but electricity-based solutions haven't really held my interest until lately. My basic question is, why are they called shields? Originally I figured they were shielding from stray EM pulses or something, but after reading the 'ible, is the name just due to the shape and modularity? thanks

JmsDwh (author)slyght2014-04-07

I think they wanted to use terms that seemed less intimidating to beginners who had no experience with programming or electronics. Shield is what they call the physical add-on modules and Sketch is what they call the code you upload to the Arduino.

Armandur (author)slyght2014-04-06

Large "standard" shields connect to all the female header pins on the arduino board and basically "shields" the entire board with the extension-card/shield.

Roshy10 (author)slyght2014-04-06

nothing to do with shielding, just a name that sounds kinda cool

agis68 (author)2014-04-07

love it....So ardunii-it!!!!lol

About This Instructable




More by JmsDwh:Magnetic Workshop OrganizerSawdust Collection SystemsUpgraded Helping Hands
Add instructable to: