It's been a few weeks since my last two posts, on How would you change the Arduino Part 1 and Part 2. And now I'm all done, and even have a couple boards in, hand-soldered and hand assembled ... I'm going to be building up a few of them over the next two weeks, so if you want one, I just put it up for sale over at liquidware shop for $29.95.
Anyway, I got a lot of emails and some comments on the blog about things to change and alter, and I tried to include as many as possible. Mainly, I focused on the following list:
-Code compatibility, works with IDE (backwards compatible with Arduino sketches)
-More digital I/O (for LED matrices and robotics)
-More code space
-Faster PC transfer and serial speeds
-PWM (interrupt driven pulse width modulation for servos)
-Fits Arduino shields (like Ethernet Shield and XBee board)
-In circuit programming interface (for debugging)
-Works with TouchShield and GamePack (of course!)
Mostly, though, I wanted to make sure I helped out my old professor / mentor by making a board with more I/O, which is what he wanted for his class. On the way, I used the Atmega645, which has twice the code space, and a much faster code download speed. To be perfectly honest, the circuit schematics were actually the easiest part. The biggest challenge in the whole experience was trying to figure out how to keep the Arduino shape, and also allow it to work with the TouchShield Slide, Stealth and other shields out there. Here are some early idea sketches as I brainstormed the format:
After I had a rough idea of what I was looking for (you can tell some of the ideas didn't make it to the actual board), Chris showed me how to lay out parts using the PCB trace and layout software. The coolest part was that he had a program that lets you view the file in 3d in before you actually build it... so I used it just like I would have a drawing program (I don't know why no one's done this before):
Anyway, here it is! (I took some pictures with my personal camera at Starbucks this morning, and with Matt's insanely nice SLR camera too ... in my "ghetto" homemade lightbox which is still standing!)
On the back side I put 10 white surface mount LED's, encased in gold solder mask, which turn on and off with the bling() function. I also organized everything on the board to be perfectly symmetrical, yet 45 degrees rotated so that it looks like something out of Terminator 2.
The row of gold-lined aerodynamic holes up at the front of the board server two purposes:
1) reducing drag when the board flies over 200 mph :) and
2) they also double as in-circuit programming pins, so that I can program the Atmel chip with the initial bootloader
There's a reset button up in the corner, but the biggest change is the fact that it has 42 I/O pins in a configuration that accepts any shield that was made for the Arduino's pin header arrangement.
Since the whole point of it was to make a board with lots more I/O to interface to things like an LED matrix, I figured... why not wire up an LED matrix (this is before I realized how time consuming it is to actually sit there with tweezers and wire up a whole set of 24 wires):
Here's a video of it running a complete LED matrix with 24 input pins all from wires sitting down on the board - I've uploaded the source code over at the app store:
And here's another video of me showing the board's closeup, especially with the backlighting pulsing LED's - the source code for this is over here:
This board is 100% open source - all the way down to the fact that it's GNU GPL'd (as opposed to Creative Commons non-commercial, which Phil has convinced me is not really 100% "open source hardware"). Since I built this from scratch, literally everything can be taken, tweaked and modified - by companies or by individuals or by aliens or martians, for that matter. In fact, big companies, please take this and PLEEEEEASE build it, because it takes an awful long time to solder by hand :) Here are the source files and schematics in case you want to play around and add things or tweak, or even work with me on the next revision maybe?
I'm especially thankful to Chris for his help making core files so I could just program the Illuminato from the Arduino IDE environment, by selecting the core from a drop-down. I'll post an update with a link to his files as soon as I'm done. In the meantime, I've written a small pocket-reference for myself so I remember all the new pin numbers (click here to see the bigger version - it's also on the wiki):
And of course, everything is posted over at liquidware and on the wiki :)