Sunday, January 11, 2009

Introducing the Illuminato, 100% GNU GPL'd Open Source Hardware

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):




Done!


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 :)

Thanks!

27 comments:

[P!]Wack said...

Wow, the board look very sexy, I have some comments:

- The six holes look sexy, but a standard ISP port is more standard and the users can tend to put screws in these (not exactly being hi-z).
- maybe putting two pins with 5 and 3.3 volts in the "digital" side.
- DC plug? well thats unnecessary for most of the users, for me isn't, in fact is better an {AC|DC} ready plug (the wall wart of the Lego Brainstorms are AC, dunno why).

Well, maybe I'll STFU and work in these changes.

Chris said...

You're right with the 6 holes, in fact, one time I even sent 5V and GND through an actual metal screw -up to another shield!

I've seen some pretty cool uses of the mounting holes, so that's why on the Illuminato, they are untouched.

With the 6 holes, only the 4 inside ones are electrically connected to the programming pins of the processor.

The programming cable that Mike had to make for this looks kind of like a crazy squid!

Matt said...
This comment has been removed by the author.
Matt said...

Thanks!

Yeah, the ISP port only starts on the third hole in, since I didn't want someone to put in a metal screw, just like you mentioned (someone else = aka me in 3 months when I forget) ... you know, the DC plug was a toss-up. I ended up just putting a +5 and GND right angled header at the end of the board, since a lot of guys just power these things on or close to breadboards with their own stable power supplies anyway (but I guess you can't please all the people all the time). Personally, I've never ever used the DC plug, but it wouldn't be too hard to solder back on manually...

Here's a link to the schematic: http://www.liquidware.com/wikipages/name/Illuminato_Circuit

Matt said...

Hmmm... blogspot doesn't let you edit a post after you've typed it ... you have to delete it and then repost it. Ugh.

Matt said...

And here's a link to the LED matrix and spec sheet I used: http://www.futurlec.com/LED/LEDM88OG.shtml

Severino said...

Matt, this is awesome. I was wondering what the 2pin right angle header is for? The one next to the usb connector? Is that more I/O or something?

-Mike

Matt said...

Ha - I'm checking the blog and email in between work meetings :)

Yeah, Mike - those are the power and ground pins, for power. They're flush on the board, and really close to where I'd wire the Lithium Backpack over to it using two small wires, or where it could be wired into a breadboard...

PaulC said...

ZOW
EEE!

Wery cool.
I agree with [P!]Wack on the ISP port. It would be nice to be able to use my standard programmer to lay down my code. The nice thing about the arduino (in my opinion) is that I can use the IDE, or just use AVR C with the ISP.

So, how long before we see an extender shield that breaks out those extra pins? :)

Also, I am not versed in the inner workings of the arduino IDE, so... Can you access the extra IO with standard arduino code, or does that require AVR code?

for example, will
digitalWrite
work, or would the developer have to use the standard AVR C bit twiddling?

anyway, I LOVE the new hardware!!!

Matt said...

@PaulC - yeah, in the LED matrix code, I used digitalWrite(38, HIGH) and pinMode(41,OUTPUT).

Actually, I got lazy, so I just used a for loop like this:

for(int i=2;i<42;i++) {
digitalWrite(i,LOW);
}

Erik Dasque said...

Does this AVR (the 645) have a better Analog to Digital resolution ? I am trying to measure .1 mv over 1v or so.

PaulC said...

@Erik Dasque
It appears to be the same.
you can read the data sheet
here

gyro_john said...

A reply to what Erik Dasque said...
"Does this AVR (the 645) have a better Analog to Digital resolution ? I am trying to measure .1 mv over 1v or so."

Eric, you need 14-bit ADC to get the required resolution.

Regards from gyro_john

Dan said...

Erik Dasque: or a differential amplifier, or an external adc.

Any chance you'll just sell the PCBs, and if not, does anyone wanna go in on a order?

Chris said...

Hi!

Nice work. I'm very impressed! One question though... What program(s) did you use to generate the 3D version of the board, the circuit diagrams and, well, the connections between all the components.

Thanks! :)

g7nbp said...

Excellent! Ive been looking around at several offerings with extra IO pins for a while - as I always seem to run out. The ability to mate up with standard shields however sells this design for me.

But... I also worry about the holes.

Certainly amongst the local dweenofurkling community, (Im trying to get that accepted as a dictionary word by the way!) The vast majority of users never use the ICSP pins.

Possibly a better solution could be just a row of holes on the board at normal header pitch so that the few users who need ICSP can add a header, or even just just tack on a few wires temporarily?

Other than that, as commented - truly excellent!

atomriot said...

Instead of the extra pins on the inside, why not put them on the outside spaced 1 away so you can use a shield as well as those extra pins?

otherwise, brilliant work. I just picked one up. cannot wait to get it.

Matt said...

@PaulC - actually, i was just thinking about an extendershield for those extra pins too...

@Chris - ha for a second i thought you were the other chris, who actually helped me build it, and it was his laptop that had the 3d program on it... i think he uses digicad or simucad or something like that... chris l, are you around? (the program i think is some plugin, and has some combination of simu, digi, and cad. whatever it is, i think he uses it at work)

@g7nbp - "dweenofurkling" can you use it in a sentence? "i was dweenofurkling and then i went to the drug store" :-) ha ha... that's a really good point about icsp though ... maybe up along the top back row, just a line of 4 pins. if someone really wants, they could solder right into that set of holes a row of female pin headers, and then they'd have ICSP... or is it a specific box shape? i noticed that on the arduino it's a 3 x 2 layout...

@atomriot - ha. stop hacking into my hard drive (or reading my mind) ... ! actually, that was one of the revisions i made. i was seriously considering that, but it would have made the board ever so slightly wider than a normal arduino. and there's something really pleasing about the geometry of the current board. i wonder if dave mellis chose it because it's in close to the golden ratio? :) (ps one of these days i also want to build a case of some sorts for the arduino / touchshield, and wanted to make it a standard width)

Matt said...

@Chris - the program he used is called "ultiboard". Which contains neither a "cad" or a "simu" or "digi"...

jhb said...

You mention additional PWM. How is this exposed? Can the standard Arduino servo libraries be modified to support this?

Chris said...

@Matt - Thanks guy! :) Really appreciate it. I'll have to look into Ultiboard... Keep up the good work!

Matt said...

@jnb - yep, the PWM pins are exposed, but the chip only has a total of 4, and 1 of them is being used for the backlight. so that leaves 3 left... i'll have to look more closely at the chip spec sheet to see where they're wired. p.s. do you actually use the pwm pins? i've usually done manual pwm.

yeah, i'm looking at the servo libraries right now and trying to port them! :)

jhb said...

I use PWM for servo control and IR generation using the timers. I would love to have additional independently controlled PWM pins, as some of the things that I'm working on would require more than are currently available.

Matt said...

@jhb - i know, i know, it's really hard to find a nice avr though that has lots and lots of pwm pin ports. most of the reasonably priced ones come with 4 by default, and i think you can use interrupts to make more, but i don't have a lot of experience with those... hmmm i'm going to research that right now and see what i can find

Ghost said...

I really would like to have an jtag connector on the board

cuqui said...

Nicelly done!

You should have probalby used a usb mini-b connector instead.

Matt said...

@Ghost - actually, the jtag is built into the front end of the port, it's the gold rimmed holes at the front of the board... i just soldered myself up a home-made jtag port to interface with it, for programming the board for instance

@cuqui - thanks! i know, i know, i've gotten lots of comments about that in retrospect... :)