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:
- 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.
- 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 - Schematic Capture
- 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. - 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.
- 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.
- 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. - 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


10 comments
5 pings
Jeronimo says:
September 4, 2008 at 5:44 am (UTC -7 )
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
steve says:
September 4, 2008 at 3:27 pm (UTC -7 )
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!
julian says:
October 24, 2008 at 7:54 am (UTC -7 )
hello Kris!
how many light bars does this shield support?
Kris says:
October 24, 2008 at 1:37 pm (UTC -7 )
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.
Andre Quirion says:
July 14, 2009 at 10:25 am (UTC -7 )
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 says:
July 14, 2009 at 2:30 pm (UTC -7 )
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 says:
July 15, 2009 at 5:35 am (UTC -7 )
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.
Phil Rockwell says:
April 12, 2010 at 5:00 pm (UTC -7 )
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
Fatih says:
November 25, 2010 at 6:59 pm (UTC -7 )
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 says:
May 21, 2011 at 4:39 pm (UTC -7 )
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..
HOW TO - design a custom Arduino shield » Developages - Development and Technology Blog says:
September 4, 2008 at 2:42 pm (UTC -7 )
[...] – Make a custom Arduino shield [...]
HOW TO - design a custom Arduino shield | Abiyaa says:
September 4, 2008 at 7:08 pm (UTC -7 )
[...] – Make a custom Arduino shield [...]
Paper Bits – links for 2008-09-08 says:
September 23, 2008 at 6:49 am (UTC -7 )
[...] cogsci informationdesign informationoverload paperbits memex engelbart augment video via:ixda.org) KrisBarrett.com » Blog Archive » Make a Custom Arduino Shield "At first I wanted to design a PCB that connected to the Arduino through a series of cables. [...]
HOW TO - design a custom Arduino shield | thekevinpipe.com says:
November 14, 2008 at 10:54 pm (UTC -7 )
[...] Instead of relying on the usual project wiring, Kris designed a custom Arduino shield for controlling an LED light bar. He was also kind enough to document the ins and outs of his process – 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.- Make a custom Arduino shield [...]
Shield custom para el Arduino | Ingenegros.com.ar - Blog says:
February 8, 2010 at 9:02 am (UTC -7 )
[...] http://www.krisbarrett.com/2008/09/03/make-a-custom-arduino-shield/ [...]