When Microsoft Research hardware engineer Steve Hodges was developing SenseCam—a wearable digital camera that automatically takes pictures that track the wearer’s activities—he needed months to create a workable prototype.
“It took me six months to get something working, and another person six months to write the software, and then another six months for each of us to finesse it,” says Hodges, who manages the Sensors and Devices Group at Microsoft Research Cambridge. “Two man years! It worked out well, but in a project like that, you want to build it quickly, so you learn quickly if it’s going to work or not.”
Not long ago, Hodges helped run a seminar on creating smart gadgets. Participants built something similar to SenseCam in a matter of hours. The difference? They had access to a new device created by the Sensors and Devices team: .NET Gadgeteer.
.NET Gadgeteer combines flexible hardware and powerful, .NET-based software to enable users to create a myriad of different smart “gadgets” within a few hours—sometimes even quicker. It has enormous potential in fields such as research, fostering the creation of fast prototype devices without the months of labor Hodges endured to help develop SenseCam. It could help teachers make educational instruction more interactive, encouraging a new generation of engineers. It even could help hobbyists create devices that exist only in their imaginations.
Nicolas Villar and James Scott, researchers in the Sensors and Devices Group, worked over the past 2½ years to develop .NET Gadgeteer. As a result of these labors, this week a public web site for .NET Gadgeteer goes live. In addition, the .NET Gadgeteer source and binary code releases are available via CodePlex. And Gadgeteer retail hardware is available for pre-order from Gadgeteer’s first manufacturing partner, GHI Electronics.
.NET Gadgeteer has its roots in problems such as what Hodges faced with SenseCam: How do device and sensor experts find a way to build their devices and sensors quickly and easily?
“We felt like we were re-inventing the wheel over and over again,” Villar explains. “Any time we wanted to build a new prototype in the hope of finding out quickly if it was a good idea or not, it took weeks to get an electronic circuit designed, and built up, and tested, and maybe it doesn’t work the first time and you have to do it again.
“And then, you have to write some code to make it work. Usually that involves some arcane code, very low-level language assembly, or C, or something like that–without good debugging tools.”
The team started to look for something better. Early on, the researchers considered a Microsoft tool called the .NET Micro Framework, which is designed to give small, resource-constrained devices many of the same development tools used for PCs and other powerful computing platforms.
Moreover, the .NET Micro Framework enables object-oriented programming, which assigns packages of software code to perform specific tasks. In effect, developers can pick from a set of software “objects” that perform specific tasks.
That notion gave the Cambridge team an idea for how to develop hardware that would help their quest for fast prototype construction.
”Our idea,” Villar says, “was that if you have this object-oriented software, which breaks down functionality into individual modules, maybe we could make some object-oriented hardware to go with it.”
After early experiments with a system called Project Dragonfly, .NET Gadgeteer emerged. It consists of a small mainboard powered by an ARM processor, along with an open-source software platform built on the .NET Micro Framework.
But what really gives .NET Gadgeteer its punch is that it comes with an array of easily attached modules that give Gadgeteer the ability to take pictures, play sound, sense the surrounding environment, communicate with other devices, or interact with a human user. In turn, it has USB ports and other connections that enable it to be linked to a PC or other computing devices.
And just as .NET Gadgeteer has plug-in hardware, its .NET Micro Framework software works much the same way. It is based on Microsoft Visual Studio, which has a feature called IntelliSense that serves to auto-complete lines of code and even prompts users to choose particular code packages that fulfill their intent.
At the same time, the .NET Gadgeteer software is powerful enough to satisfy professional developers and has the robust de-bugging tools and other features of Visual Studio.
“We’re taking these features in Visual Studio, which was designed for professionals,” Villar says, “and using them as much as possible to help beginners with their own programming.”
With an array of hardware options and powerful software, the possibilities for creating new devices with .NET Gadgeteer are limited largely to what a user can envision. Scott, for instance, used .NET Gadgeteer to create an automated home-heating system.
“The system individually controls whether you get heat in any one room and also senses when people are in the rooms,” he says. “The idea is to more efficiently heat homes by automatically heating rooms at the right time—and doing so without requiring users to do a lot of programming.”
Scott will present a paper on his heating system during UbiComp 2011, the 13th International Conference on Ubiquitous Computing, to be held in Beijing from Sept. 17 to 21.
Other .NET Gadgeteer-inspired papers that have emerged from Microsoft Research scientists—and, in some cases, in collaboration with non-Microsoft colleagues—include a device that helps people make decisions while shopping and one that enables users to replay recordings to elicit family memories.
“These are all highly custom devices,” Villar says, “but the time scales in which they were built were really short.”
Another aspect of Gadgeteer on which the Cambridge team is working is the ability to give a .NET Gadgeteer-based device an appropriate form. Using a 3-D printer, having specified the type of device—a camera, for instance—it’s then possible to design a container for it, even down to attachment points for the internal components.
“You can design a case around a device very accurately,” Villar says, “and when it comes out of the printer, all the Gadgeteer components fit exactly in place.”
In demonstrations to groups ranging from engineers to hobbyists to educators, the .NET Gadgeteer team has found a warm reception for the project.
“We’d get this feedback where people in education would say, ‘Wow, this would be a really neat way to get people excited about programming,’” Villar says. “Or hobbyists would say, ‘I’d really love to have this and build things for fun at home.’”
The team members credit the supportive atmosphere of Microsoft Research and Microsoft with making .NET Gadgeteer possible. Early demos at internal Microsoft events, for instance, led to people offering to help with beta testing or other chores in their spare time.
“But as well as that, we also signed up others to work on .NET Gadgeteer as part of their day jobs,” Scott says. Kerry Hammil, senior program manager in Microsoft Research Redmond, and Colin Miller, product-unit manager heading the .NET Micro Framework team, have become key contributors to the project.
“We had maybe a dozen people committing some serious time with the documenting, testing, giving us feedback,” Villar says. “It’s been a really inspiring community project.”
Much of that help came through the Garage, Microsoft’s in-house incubation initiative aimed at encouraging innovation.
“Kerry and Colin have been key to getting folks from the Garage behind Gadgeteer,” adds Villar. “They also helped us engage with external partners such as the hardware manufacturers.”
Adds Scott: “This really says a lot about Microsoft as a company. We’re putting this all out there as open source, and we hope it will enable a lot of innovation and the participation of the community of hardware manufacturers. Vendor A can make a main board, then Vendor B can say, ‘Well, I’m an expert at robotics modules and won’t worry about the main board,’ and they can all work together.”
From smartphones to digital cameras to athletic equipment that measures location and heart rate, the world today is full of gadgets. .NET Gadgeteer could lead to devices that nobody has even imagined, save for that one tinkerer who just wishes she had an easier way to make a prototype.