Professional Documents
Culture Documents
blink(1)
blink(1)
USB RGB Notication Light
What is blink(1)? Its just an RGB LED that you can control over USB. You can control it via many different applications and programming languages. Make anything visible to your computer, visible as a ashing colored light.
blink(1)
Connect the Cloud to a Color via IFTTT
Via IFTTT or your own code, you can hook blink(1) up to events in the cloud.
In mid 2012 we decided to try out Kickstarter as a way to help us fund the initial production run. It ended up being a *lot* more popular than we anticipated.
My Background
But rst, who am I? I write occasionally for Make. I make open source tools for the Arduino community like the WingShield and the Wiichuck adapter. I founded a hackerspace in Los Angeles, and sometimes I make big kinetic art installations with others. But what I mainly do is...
BlinkM Family
2 weeks
3 months
1 month
3 months
blink(1) Process
Arduino sketch to prove the hardware Migrate to smaller chip Add USB Iterate, iterate, iterate Design enclosure, packaging, software Iterate enclosures, 3d print variations Commit to production
This was the rough process for the blink(1) hardware. It doesnt cover the software, retail packaging, customer service, etc. etc. All these are actually more important than the hardware, depending on the device you are creating. We wouldve done better by focussing on the non-hardware aspects earlier.
How it Started
a.k.a my rst Arduino sketch
red
green
blue
if( Serial.available() == 3 ) { redVal = Serial.read(); grnVal = Serial.read(); bluVal = Serial.read(); analogWrite( redPin, redVal ); analogWrite( grnPin, grnVal ); analogWrite( bluPin, bluVal ); }
I got started playing with Arduino in mid 2006. Arduino was a game-changer. I wrote a widely-distributed post called Arduino, the Basic Stamp Killer that highlighted what I felt were many of the benets of Arduino over the previous easy-to-use embedded kit. (http://todbot.com/blog/2006/09/25/arduino-the-basic-stamp-killer/) I quickly started using RGB LEDs with it. But that used up a lot of the I/O of the board, particularly, it used up all three of the PWMs available at the time.
At the same time I was exploring the tiniest microcontrollers at the time. These are ATtiny chips. These chips have just enough I/O for controlling an RGB LED and some sort of control input. I experimented with sensor-based input and then started thinking about combining this with the problems of I/O-limitations of Arduino. The techniques (and much of the code) for these chips is the same as an Arduino sketch. For more details, see: http://todbot.com/blog/2007/03/25/smart-led-prototypes/
BlinkM!
After several iterations of the Smart LED idea, the result was BlinkM. BlinkM is designed to plug directly into Arduino for programming, but can work on its own without an Arduino. Its been a great hit. I later generalized my desire for smart components in the talk Smart Interface Components at Sketching07. For more details, see: http://todbot.com/blog/2007/07/03/smart-interfacecomponents-my-sketching07-talk/
The same time the Smart LED research was happening, I also was experimenting with USB. Here in 2007 I strapped an RGB LED to my USB research and created the AVR USB RGB LED FOB. This used lightly-modied Arduino sketches plopped into an AVR-USB demo.
The USB RGB FOB turned into LinkM, a BlinkM programmer. By this time, we had many BlinkM users and some wanted to program them without needing an Arduino. Thus LinkM. It let us play a little bit with injection-molded enclosures and the logistics issues of managing PCB assembly vs. nal packaging assembly. But it was not meant to be a huge seller; we made it more as a convenience for our users.
blink(1)
+
=
blink(1)
BlinkM
LinkM
The rst real blink(1) task then was making it small like a proper USB dongle should be. Using Eagle for drawing schematics, and then SketchUp (with EagleUp), lets you get a good idea. EagleUp is a plugin for SketchUp. Having a board design with dimensionally-accurate parts is a great way to explore the physicalness of a design without spending a lot of money on prototypes.
Make it smaller
Here is another size study I did using Eagle, SketchUp and EagleUp. This particular case was testing the size difference between a proper metal USB connector vs a connector created by traces on a PCB. We found that while the area size shrunk, the height increase (particularly the distance between the top of the LED to the top of the case), was too much for us. Also, the PCB-based connector could have akey electrical connections.
Enclosure Visualization
And with 3D models of the circuit board, we can start tting it into enclosure ideas to see how things might all go together. Its incredibly instructive.
3D Print Enclosures
With a 3D printer like a Makerbot, Ultimaker, Bukobot, or similar, we could try out a bunch of ideas in physical form using prototype electronics. This lets us get very close to a production look & feel. Unfortunately, consumer 3d printers dont have the same resolution as injection-molding, so we had to intuit a bit what was actually possible for the ner details.
Kickstarter!
And with that we had enough to make a video and launch a kickstarter.
So we did a few more design iterations using 3d printers, Shapeways (which produces higher-res 3d prints), and ProtoMold to do CNC versions.
Final, really
Production!
Congratulations! Youre done!*
*Nope
Production Problems
Expect production problems. They will cost you money, cost you time, make you feel dumb. In the top photo are three ways the blink(1)s metal tops were bad: too thick, too thin, or crooked. In the bottom photo, we had a sizable portion of our retail boxes damaged in shipping.
Production w/ Friends
Production!
Time To Ship
And nally shipped all the hardware to our fulllment house to be shipped to our backers.
In blink(1)s case, theres a large aspect of the product that exists as software. And it has to exist on Mac, Windows, Linux, Raspberry Pi, WRT, Beaglebone, etc. And the Mac & Windows versions need to be user-friendly, stable, and have good design. This is something we denitely didnt have much experience in and we should have started it much sooner. Shipping 6000 units to 2500 people means theres lots of ways you can screw up shipments. Having a third-party help with this can save you from going crazy but even they will make mistakes. And even if you dont make any obvious mistakes in packing & addressing, international orders have an additional level of complexity. And even if you get all that correct, your shipments may still be held up in customs for no understandable reason. Particularly if its German customs, for some reason. And the most important thing to consider is that youre making a product. You will have ongoing customer support questions to handle. You will need to put in place mechanisms to help people. But Kickstarter is a great community to get to try your product. They are curious, eager to help you do well, and love to see the details of how youre doing what youre doing. Show them your mistakes, even though it pains you. Part of the fun of being a Kickstarter backer is learning how people go about creating, so dont deprive backers of the full story. Show them your successes and your mistakes.
Whats Next?
Improve the hardware Improve the software Find better manufacturing partner Streamline fulllment with resellers Increase production
For blink(1), were still working on it. Were working on a improving the hardware to work on even more USB hosts. Were planning a major update to the software that will be easier and more powerful. Were also looking at different ways of manufacturing. We used the same company we used for BlinkMs, who is a great PCB and assembly company, but doesnt do retail packaging. Maybe we nd someone who can do everything. Were also trying to get blink(1)s out there quicker and more efficiently by nding resellers (particularly in EU) And once we have those in place, we can really ramp up production.
Thank You
@thingm / @todbot http://thingm.com/ http://todbot.com/blog/
Please feel free to contact me if youd like to learn more. Thank you!