Automatic screen rotation has been popularized by the iPhone but is also available on the OQO Model 02 thanks to Kenrick's Automatic Screen Rotator Utility (executable download). Just hold the device the way you want to use it. The screen flips to the correct portrait or landscape orientation in one second. You don't even have to think about it. What could be simpler? Kudos to Kenrick for putting this great utility together and making it available for free!
This is a program near and dear to my heart. I cobbled together custom sensor hardware, including an accelerometer to support automatic screen rotation, for my old Cassiopeia E105 Pocket PC back in the late 1990's:

Here's our video of the Sensing Pocket PC, with screen rotation and other fun stuff too.
Video: Sensing Techniques for Mobile Interaction
Later, I built sensors for the original slate Tablet PC prototypes that were floating around Microsoft. Many devices now include accelerometers for drop detection, but I'm pretty sure my prototype was the world's first Tablet PC with an accelerometer. It came with an extensive user manual: TILT ME.

That wad of electronics on the top is my sensor module. Here, I'm using the Tilt-a-Sketch application. You could draw on the tablet like an Etch-a-sketch by tilting it back and forth. Yes, it was really hard to sign your name this way, and yes, if you flipped it upside down and shook it, it erased the screen. Accelerometers can be a lot of fun.
But what was the most useful? Like Kenrick's utility, it supported automatic portrait/landscape switching depending on how you held the device. After all that hard work I had to put into building my own sensors, firmware, and software, it's mind-blowing to see this available in a free utility that I can download from the 'net for an off-the-shelf device!
My demo had a few tweaks, some never published before, that might be useful future embellishments to Kenrick's Automatic Screen Rotation utility. In essence these tweaks reduce accidental changes to the display orientation when you're working with your device. They also help to avoid rotation of the screen when you go to set your device down on your desk. Plus there's one bonus idea I tinkered with, described at the end - let me know if you like it or not.
Dead Bands for Increased Stability
Dead bands between the screen orientations made the device tend to stick to the current display orientation. This helped to avoid accidental changes to orientation.

Plot of tilt angles versus inferred instantaneous screen orientation.
To change display orientation, the tilt angles had to pass all the way through the gray ±5° dead bands, and stay within the same display region for 0.5 seconds. No screen rotation occured in the central "Flat" area.
Rotation Preview
Feedback for impending display rotations makes automatic changes to the display orientation more predictable and controllable. My Tablet PC demo displayed a "THIS SIDE UP" arrow at the center of the screen as soon as the tablet was tilted in a different direction. The change to the display format occurred one second after the arrow appeared, but only if the device was still tilted towards the new display orientation. This allowed the user to stop tilting the device to prevent an inadvertent switch.

To foreshadow a change to the display orientation, an arrow appeared immediately when the user rotated the tablet.
Of course, the arrow should not be there all the time. The arrow vanished when:
- The screen changed orientation. The arrow remained visible for a couple of seconds after the switch to provide continuing feedback.
- The instantaneous screen orientation returned to the current display orientation for a couple of seconds. This case occured if a user acted on the feedback to avoid an accidental change.
- The user set the Tablet down flat without changing screen orientation.
I used black color-key transparency (in a layered window) for the actual bitmap used in the code.
Motion Detection
Movement of the device serves as a secondary indicator of when to switch the display format. To avoid accidental changes to the screen orientation, my Tablet PC implementation waited for motion to stop before rotating the screen. For example, this made the device less likely to change screen orientations as you set it flat on a desk.
The OQO Model 02 supports only about a 4 Hz sampling frequency on the accelerometer, so it might not be feasible to implement good motion detection at present. Nonetheless it seems worthwhile to mention it, in the hope that an increased sampling rate becomes possible in the future.
One hack to detect motion is to calculate how much the tilt values are changing, as follows:
Δx = tiltX - prevTiltX
Δy = tiltY - prevTiltY
sampleEnergy = √(Δx2 + Δy2)
signalEnergy = signalEnergy*(1-α) + sampleEnergy
In the final equation, α is a decay rate. I used 0.25, with the tilt values in degrees, and signalEnergy initialized to 1.0. Motion "begins" when the signal energy rises above an onset threshold for a few samples and "stops" when the signal energy drops below a termination threshold.
Movement helped to control switching of the display format as follows:
- When movement stopped, if the physical screen orientation did not match the inferred instantaneous screen orientation, a 1 second time-out began, after which the software switched the physical display orientation.
- If movement began again during this time-out, the time-out for the physical display switch was cancelled.
- If the instantaneous screen orientation changed again during this time-out, the time-out was restarted at its full one-second duration.
Orientation-specific Tasks
Here's one other nutty idea I experiemented with. Maybe it's useful, maybe it's not.
I assigned specific applications to specific orientations of the screen. For example, here's a screen shot where I set up Excel to appear in the landscape format, and Windows Journal in the portrait format. Flipping my Tablet PC between the two would switch between the applications, rather than just rotating the screen.

Switching orienations can switch between sets of applications as well...
This offered a simple way to partition applications into task-specific sets for each screen orientation. Unfortunately my prototype of this feature never really worked all that well. You could check off windows as belonging to each screen orientation. The prototype would hide and show the windows as you rotated your tablet. But it had some bugs. Sometimes it would hide the windows permanently, never to be seen again. That's not terribly useful. So I never did usability testing on it, but I found something about it intuitively appealing. What do you think? Would you want this feature on your tablet or mobile devices?
Summary
My experience is that the devil is in the details with sensing techniques. Small touches here and there go a long way to keep the interaction invisible in the background, rather than becoming a focus of attention when things happen that the user didn't intend. Ultimately, the goal should be to create the best possible user interface. What is the best possible interface, you might ask?
The best possible user interface is the one that you don't even notice is there at all.
Resources:
Posted
05-08-2008 3:41 AM
by
Ken Hinckley