I have always thought that the user interface [UI] is the most interesting part of any software, as I have written before. I think this is true for desktop programs, hand-held device apps and embedded systems. It is, of course, the last of these which are of interest here.
It is easy to think of UIs as being flashy touch sensitive displays, like you can build with the Mentor Graphics Inflexion UI product, but that is only one example. I have been pondering something much simpler. Having been working in this field for 30 years or so, I guess it may be safely assumed that I eat, drink and sleep embedded software. Giving credence to this, I found myself thinking about an embedded system UI while I was brushing my teeth …
As in most houses nowadays, there are embedded systems to be found in almost every room in our home. The bathrooms are the main exceptions, as we do not have fancy shower controls or entertainment systems. But we do have electric toothbrushes. And I realized that mine was an embedded system. A simple one, of course, but quite ingenious is certain ways.
For the designer of the toothbrush’s software [I wonder if anyone has ever used the term "toothbrush's software" before?], there were a selection of inputs and outputs available:
- Control of the motor.
- Control of a single LED indicator [2 colors].
- Monitoring of the control button.
- Monitoring of the battery/charging state.
Some of the operation is obvious. Pressing the button starts/stops the motor. The LED flashes green to indicate that the battery is charging. The LED glows green to indicate that the battery is fully charged. The LED glows red to indicate that the charge is low. However, there is some more sophisticated functionality.
It is recommended that a tooth brushing session should last about 2 minutes. Many toothbrushes feature a timer, which makes a bleeping sound after this interval. Some time ago, I suggested an alternative approach. The designers of this brush had a challenge: how to incorporate a timer without any additional I/O? The solution was absurdly simple, as most really clever ideas tend to be. When the 2 minutes is up, the motor pauses for just a moment – a kind of stutter – which is immediately apparent to the user. Neat eh? Actually, there is a very short stutter every 30 seconds which enables the user to time brushing for each of the 4 quadrants of their mouth.
There is one very odd feature of this toothbrush. We have two of them, which are installed side by side [yes, his and hers]. They were purchased at very different times – about a year apart – but deployed together. Although they are identical models and are indistinguishable to look at, they have very slightly different behavior. The fully charged status on one is the LED illuminated; for the other it is extinguished. Clearly, at some point in the life of the product, the design was changed. It is not a fault, as I have found online that I can download user manuals for each variant. I cannot figure out why they went to the trouble of changing this small detail.