How to make your own Arduino shield

Arduino Shield

After many months of working on my Arduino based project, I decided to finalize my project by making my own custom PCB.  At first I wanted to design a PCB that connected to the Arduino through a series of cables.  After some thought however, I realized that a shield would be better because it would eliminate the need for cables.  This tutorial assumes an understanding of Cadsoft Eagle.  For more information about Eagle, see the Eagle Tutorials section below.  Here are the steps to make your own Arduino shield:

  1. Part Selection- Carefully select your parts. Ensure that your parts meet your performance and power requirements.  It is better to carefully choose your parts now, than wish you chose something else later.
  2. Prototype – Prototype your design on a breadboard.  Ensure that your functional, performance, and power requirements are being met.  Change your design as necessary.  Do not begin designing the PCB until you are completely satisfied with your prototype.
    Figure 1:
    Breadboard prototype
  3. Schematic Capture
    1. Add Custom Parts to Eagle – Place all of your parts in the schematic before drawing any wires.  This allows you to identify which parts you will need to create yourself.  I had to create a custom part for the Arduino.  Drawing a symbol for the Arduino was easy.  Drawing the package was a little bit more difficult because I had to determine the spacing between the headers.  I easily obtained this information from the Arduino Eagle files which I downloaded from the Arduino website.  Download my Eagle Arduino library here.
      Figure 2:
      Header locations relative to one another.  I obtained this information from the Eagle file.


      Figure 3:
      Arduino symbol and package that I created in Eagle.

    2. Connect Parts - After placing all of your parts in the schematic, carefully connect your parts together using the wire tool.  If you make a mistake on your schematic, it will ultimately show up on your PCB.
  4. PCB Layout - Place the parts on the board.  If your PCB is long enough, the PCB will rest on top of the USB connector on the Arduino.  Parts and traces should not be placed here because it could potentially short out your PCB.  I accidentally placed the DC power connector in this area. Fortunately,  I was able to insulate the USB connector with a piece of electrical tape.  Also, follow PCB layout guidelines.  I learned this the hard way when I discovered that the rapid switching of the transistors was inducing a voltage in one of the traces connected to the button.
    Figure 4
    :
    I made the mistake of placing a part above the USB connector.  I prevented the part from shorting out by placing some electrical tape on top of the USB connector.


    Figure 5:
    The shield also doesn’t sit properly because of my poor layout.

  5. PCB Fabrication – Generate the CAM files.  You could fabricate the PCB yourself, but I highly recommend BatchPCB.  BatchPCB fabricates inexpensive, production quality PCBs.  The only drawback is that you have to wait three weeks to a month to receive your order.  BatchPCB has a tutorial on generating the files that they need to fabricate your PCB.
    Figure 6:
    Final product from BatchPCB.

Final Thoughts
Although I am not happy with the way my PCB turned out, I learned valuable information about PCB design.  I am sure that if I follow PCB layout guidelines, I can get this PCB to work properly.  I hope people can learn from my mistakes on this project and design a better Arduino shield of their own.

Eagle Tutorials
Schematic Capture
Creating Custom Parts
PCB Layout
Generating CAM Files

  • http://www.blogdoje.com.br Jeronimo

    Very good post about the construction of Arduino shields. I suggest you to put a link to RSS Feed on your blog in order to people be informed about the new posts in your blog.
    Jeronimo
    http://www.blogdoje.com.br
    Avr, Arduino & ARM

  • Pingback: HOW TO - design a custom Arduino shield » Developages - Development and Technology Blog

  • http://www.arealestateman.com steve

    Your very detailed lesson on the construction of the Arduino Shield will definitely save time and frustration for us who are less experienced in this area. Good job!

  • Pingback: HOW TO - design a custom Arduino shield | Abiyaa

  • Pingback: Paper Bits – links for 2008-09-08

  • julian

    hello Kris!

    how many light bars does this shield support?

  • Kris

    Julian, that is a great question. According to SparkFun Electronics each light bar absorbs approximately 90 milliamps at 12 volts. The relevant trace widths on the printed circuit are rated for about 1.42 amps. The shield should therefore be able to drive about 15 light bars.

    Ignoring the limitations of the printed circuit board, the shield should be able to drive about 25 light bars. This assumes a forward current gain of 25 and a maximum base current of 30 milliamps, each transistor would be able to sink 0.75 amps or 2.25 amps total.

    However, each of the TIP31 transistors are rated for a maximum collector current of 3 amps. In this case, the shield would be able to sink 9 amps or drive 100 light bars! Note that this would require additional transistors to supply the necessary base current to each of the TIP31 transistors because the Arduino cannot supply more than 30 milliamps. Alternatively, you could replace the TIP31 transistors with Darlington transistors.

    I say all of this with some uneasiness because I think the light bars actually absorb more than 90 milliamps. Also, I haven’t tested any of this.

  • Pingback: HOW TO - design a custom Arduino shield | thekevinpipe.com

  • Andre Quirion

    Hi,

    would you mind posting your custom “Arduino package” ?

    I’ll be trying to make a single sided usb arduino clone and this would really help me out.

    Thanks

  • kris

    Andre,

    The package, symbol, and device that I used to make my Arduino shield is included in the Eagle library posted above. The package is very basic: it includes the locations of the 0.1 inch male headers, but no board outline or anything like that. Here is that link again for convenience. Good luck on your project. Let me know how it goes and if you have any more questions.

  • Andre Quirion

    Thanks!

    Sorry, I think I read too fast and skipped the link.

    I’ll let you know how it goes, I might start a thread on the Arduino forum.

  • Pingback: Shield custom para el Arduino | Ingenegros.com.ar - Blog

  • http://www.baymachinedesign.com Phil Rockwell

    Kris,

    I’m a mechanical engineer who knows enough (and little enough) electronics to get into trouble when I try to do an electronics project. I want to develop an embedded app and I’m thinking an Arduino board would be a good test bed. As I look over the processor and Arduino data sheets, I come up with more questions than answers. Any chance I could hire you on an hourly basis to tutor me through this process?

    Phil Rockwell
    (805) 542-9657

  • http://www.aybardesign.com Fatih

    Hi Kris!

    This page is ranked 4th on the first page of results in Google for making arduino shields! Way to go!

    – Fatih

  • john poole

    great site, have do you use the instructable wed site/ i happened on your via a google of arduino shields.. great site.. thanks for taking the time..

  • Pingback: Arduino Blog » Blog Archive » How to make a shield for your arduino

  • http://tronixstuff.wordpress.com John Boxall

    You should use the Freetronics boards – they use the mini-USB connectors which can save a lot of problems when designing shields. Nevertheless thank you for the excellent article.

  • https://sites.google.com/site/0miker0/ miker

    I do pcb layouts full time for my job and have run into pretty much every problem you have had. Learning solidworks, a 3d modeling program now allows me to generate accurate 3d models of every board with components in place. What I did was download an Arduino UNO model that I found, attach the new shield and then correct all the errors and fix before having it manufactured. Solidworks is way too expensive for most people but just letting you know that it will fix most problems.

  • Kris

    John, that’s a great idea. I think the Arduino Pro boards from SparkFun would also work because they have right angle headers instead of USB connectors.

    Miker, that’s also a great point. I wonder if there are some open-source or freeware tools that will do the same thing…

    Thanks for the comments!

  • Pingback: PCB per realizzare shield Arduino | Michele Maffucci

  • Somanshu Mehta

    I would like to know what price u had ot pay for the arduino pcb shield?

  • Ray

    Thanks for sharing your valuable information. You say you made mistake placing components above the USB. Would it be possible to mark the areas in your Eagle CAD file that should be left unpopulated to avoid mechanical problems ? Would save other people making the same mistake.

  • Somanshu

    Thanks, for ur help and now I am with Eagle CAD, trying for a arduino shield.

    Do u have any information of buying SMD components at home , any website or similar things.
    I tried ”elements14.com” but could not get that. Any Idea!!!!!!!!!!

  • Kris

    Digikey.com and mouser.com are excellent sources for all kinds of electrical components. Please let me know if you have any other questions.

  • Kris

    Yes, that’s a great idea. Thanks for the comment.

  • Kris

    If I remember correctly, I paid about $30 using BatchPCB.com. Sunstone.com has a similar service called ValueProto.

  • Somanshu

    Kris, nice to hear again from you.
    Can I have your Skype id or your cell phone no. or even facebook ids.
    We can share a great information hopefully.

    Regards
    Somanshu Mehta
    India

  • Rick

    Man you have a lot of space going spare on your PCB.
    5 minutes of thought would have avoided that power socket placement error.
    I have made similar mistakes in my eagerness to get a project off the ground.

    It usually pays to print out a paper version of the schematic and place it on top of the arduino.

    Better still draw a silkscreen outline showing position of the USB / Power connector on your arduino template .

    Then its just a matter of routing traces around these ‘no-go’ zones.