It fits on a 1"x1" board (as part of the Square Inch Project) and uses the minimal amount of parts needed to satisfy USB specs.
The design goal was to make something somewhat useful (a programmable indicator light) that is very easy to reproduce (with minimal, common, through-hole parts).
Components
1×
ATTiny85
1×
USB-B connector
1×
RGB LED
Common cathode
2×
68 ohm resistors
For USB data lines
1×
5k ohm resistor
Pull up for D- (anywhere between 2.5k and 10k seems to work)
I came back from holiday vacation to discover a Shapeways box waiting on the doorstep. Inside I found two copies of the 3d printed cube enclosure, which came out looking nice, fit together well, and let enough light through to show up in sunlight.
The light is a little unbalanced in the corner but that's more an issue with the LED placement than the cube itself.
Starting with a fork of the ATTinyTemp enclosure i created a rounded cube enclosure for the blink(inch) in OpenSCAD. It is just a bit larger than an inch^3, and thanks to the original parametric design the only real effort went into making sure the hole for the USB plug was the right size.
To test the circuit I used the HID mouse wiggling example from http://codeandlife.com/2012/02/11/v-usb-tutorial-continued-hid-mouse/ . I've had troubles with enumeration before with V-USB and ATTiny85 but having the 3.6V zener diodes seems to mitigate that -- it enumerated on the first try.
I also ran a non-USB color fading test with pleasant results
The design files are now in this repo: https://github.com/spro/blinkinch. It includes the Eagle schematic and board files plus a .zip of gerber and drill files
While I wait for the PCBs to arrive from OSHPark I'll use an equivalent breadboard to start developing the firmware and driver.
My current conception of the driver exposes a service with a single method:
setRGB(r, g, b, message=null)
Scripts can go about their business (e.g. poll the bitcoin price) and call the service when they want to display some information (e.g. setRGB(255, 0, 0) when the price is declining). The optional message parameter can be used to explain the change, potentially showing up as an unobtrusive notification (like Growl).
Hey, just for your information—your PCB can be smaller and have a different size than a 1x1 inch square. However, it must fit within that square—a 0.5x2 inch rectangle wouldn't be allowed.
[verified: no design files missing]