My basic strategy for the electronics in the T1 is to have a distributed network of “End Effector” systems connected via a network to a Linux “brain”. It may seem like massive overkill but I’m not just thinking about the T1, I’m thinking far into the future with the possibility of far more complex machines.
It was time to revisit the design for the ArduNet board for the next round of prototypes. I expect these will be the ones actually used in the T1, and as such I want to be as sure as possible that they will be as robust as possible. One of the problems I see is that an autonomous robot bouncing around at 15 to 20 MPH while trying to use electronic sensors to chart it’s location is a fairly hostile environment. The last thing you need is for the MCU chips to be barely running, susceptible to ESD, or pumping out noise that could interfere with the sensitive sensors.
So I went with a 4 layer board and carefully reconsidered the ATMEGA’s basic reset and power connections. This Application Note from Atmel was very helpful:
http://www.atmel.com/dyn/resources/prod_documents/doc2521.pdf
At first I was confused. There was no practical way to connect the decoupling caps to the VCC / GND connection “pairs” on the chip. There are 3 VCC lines, 3 GND lines, and they are next to each other… so what’s the problem? Well, one of the pairs is for the analog part of the chip, and needs to treated slightly differently. The problem is the part outline I was using has the Analog ground swapped with one of the digital grounds. Once I verified that with the data sheet, it was a simple matter to correct the part and place all 3 decoupling caps in the most effective locations. And since this board has a ground plane instead of discreet traces, I had to make sure that the MCU’s power lines go to the decoupling caps first, and then connect to the ground and power planes. This way, current spikes inside the chip that result from signals being clocked will be tightly supplied by the decoupling caps and not the power planes. I then used the same technique with the decoupling of the UART chips.
What’s new for this version? I lost the battery charge circuit and the 3.3 volt only rule. The LiPo battery was one of those ideas that seemed like a good idea, but became too limiting after exposing it to the full light of day, oh well. For stuff that really need it, I’ll use Sparkfun’s new LiPo charger / Monitor / 5 volt booster board. But for the robots, I’ll use a dual regulator design that provides separate regulators for 3.3V and 5V. That way, I can still make a 3.3V only board if I want just by swapping out the regulator and the MCU’s ceramic resonator. I also changed the UART’s serial connector to a footprint that mates to a discreet pin header as opposed to the general purpose one I was using. Originally, I was thinking you could go ribbon cable or discreet wire harness… but the ribbon cables are unreliable, packets are lost and the software has to correct for them. So I’m going to use only discreet pin headers and shielded cable. I also added status LEDs to the UARTs through their GPIO outputs.
The board outline is slightly larger now. Before, it was exactly the same size as the standard Arduino shield. Now it’s a quarter inch higher at the top, that gives more room for mounting holes and allows the FTDI connector and the reset button to peek out past the shield. 4 3/8″ threaded standoffs are used below the board for mounting, with the 2 matching the shield holes connecting to the shield with 2 7/16″ unthreaded standoffs. That way everything is securely mounted. I also labeled the heck out of the connectors where I could and added pads for A6 and A7 (Note that these signals don’t have digital ports associated with them, they’re only analog inputs.)
I’m also getting jiggy with the schematics. Instead of just sticking a label on the net and expecting people to search for them, I’m placing them into busses and routing the busses from page to page. Of course, that also means I’m breaking the schematic into pages that can be printed with a laser printer more clearly. Another thing I’m trying is to put a BOM of the less generic parts on the BOM. Here is the schematic:
I’m still trying to figure out the best way to put schematics in the blog post. There are 2 basic ways to do it, and I switch back and forth. The first way is like I just did, which is print the schematic as a .PDF file and link the file. This allows easier printing of the schematic, but doesn’t show it as an image on the page. The other way is to export the schematic as a .PNG image and display that on the page. I could even do both, that would look like this:
I like that. You can click on a page and just see the image, or you can click on the link if you want to see the PDF version.
The problem with doing the schematic this way is the buss lines want to label the member nets in an index fashion: I.E. “I/O[0:15]” instead of using discreet names like I did. This breaks the ERC for the schematic… I had to use “wires” to connect to the buss instead of “nets” like you’re supposed to. I’m not sure what to do about that.
Here is an image of the board:
And here are the Eagle Files (Version 6.1):
ArduNet board: Eagle 6.1 sch, brd, and Gerber files in .ZIP archive
The .ZIP file contains the board and schematic file, as well as Gerber files for all layers (Including the top cream layer for a stencil.) and the Excellon drill files.
One final file: the Bill of Materials in Open Document Spreadsheet format with the Digi-Key part numbers on it:
I like to use a spreadsheet to maintain the BOM. I can add columns as I need to calculate costs or have somewhere to include order quantities, etc. It’s also easy to order the parts from Digi-Key by clicking on the part number on the BOM, pressing CTL-C and then pasting that to the entry field on Digi-Key’s website. It’s pretty fast and painless.
I went with these guys for the PCB fab: www.eiconnect.com
I wanted to use a “real fab” instead of a batch service both for the faster turn time and the eventual possibility of better control. Also, these guys have a stencil service as well, I got a stainless steel stencil with my order complete with a board holder, solder paste, and a squeegee for only 100 bucks over the cost of the boards. I need to make a bunch of these boards, so I expect the stainless steel stencil will considerably outperform the Kapton variety. I got the Kapton one for the first prototypes, and didn’t like it. Sure, it was cheap at only 25 bucks but it was warped by the laser and the fine pitch patterns started breaking after only 2 boards. I don’t want to have to baby the stencil… I just want it to work.
Heh. It’s going to be fun setting up a “Production Line” to populate and solder all the boards when the parts come in!



Nice work on the board!
May I humbly recommend BOM-Ex as a tool for maintaining BOMs for your schematics? I’ve been using it a year or more now and it is a huge time saver. It runs off a simple text database and exports to .csv for DigiKey upload (or Mouser) Now that I’ve built up a good collection of common parts, it has become insanely easy to select parts. Go into bom-ex parts manager, and select from your database. No more cutting and pasting after the first time. I’ll happily send my parts database file to get you started.
BOM-Ex, eh? That sounds promising. But I cannot find a reference to it on teh “google”. Could you provide a link? I would greatly appreciate it.
This got me inspired to write it up, actually. http://www.bot-thoughts.com/2012/03/eagle-managing-parts-with-bom-ex.html The actual download is on the Eagle CAD site: http://www.cadsoftusa.com/downloads/ulps — just search the page for BOM-Ex
Ah! I found it. Apparently, it’s a ULP that’s an extension of Eagle’s internal BOM system. (Which I haven’t tried either.) I found it at http://www.bobstarr.net in the downloads section.
It looks VERY promising, I’ll try the base Eagle BOM system first, and then if I think it’s lacking and in need of upgrade, switch to BOM-EX.
I stumbled onto your site today while Googling for help in troubleshooting a WiFly shield I am adding to my robot. I’m so glad I found it – you seem to be working on very similar projects to the ones I’m tackling right now. I’m a web developer by trade and am still very new to robotics and electronics hacking, so this is a great resource for me.
Your EventManager class is especially helpful, as I’m just at the stage with the development of my (soon to be) autonomous rover that I have been pondering ways to implement an event-driven behavior model for my ‘bot.
Thanks for contributing this blog and for open sourcing code like the EventManager. Keep up the good work!
Yeah, WiFly shields can be a pain, I spent a lot of time getting the WiFly Gateway to work right.
Do you have a Logic Analyzer? You can get low cost ones that do 8 channels, this is the one I use: http://www.sparkfun.com/products/8938 Sparkfun Electronics sell it. It is INVALUABLE for troubleshooting SPI, Serial, etc. for starting things like the WiFly Shield up.
I’m dedicated to Open Sourcing and documenting my stuff to the best of my ability. I’m glad it’s helpful!
No, I don’t have one yet. I’ll check that out. Thanks!