Personal computers for the disabled; the computer scientist. (evaluation) Forrest M Mims III.
There are many people for whom personal computers can offer a genuine improvement in the quality of life. I have in mind those who have lost or who never had the use of one or more senses or limbs. This column discusses some of the ways computers can assist such people. It also presents two sample programs that enable a profoundly handicapped person to use a computer merely by puffing into a tube or by touching a switch.
Most of you readers are not physically disabled. Nevertheless, I hope you will read this article. You might pick up a few programming tips and ideas that can be applied in other areas. Or you might have a disabled friend or relative who can benefit from the ideas presented here. In any event, I hope you will come away with a new appreciation for the incredibly versatile machine that is the personal computer.
The Input Barrier
The keyboard of the MS-DOS computer into which this text was typed has 90 keys. Most of these keys have two functions, the second being implemented when a SHIFT or CONTROL key is pressed. Through this keyboard is beautifully designed and a delight to use, it is an impenetrable barrier between the computer and a disabled person who cannot use his hands.
The same can be said of other kinds of input devices. Graphics tables, nice, light pens, touch screens, and virtually all other popular means of controlling a computer require a fair degree of manual dexterity.
In 1972, several years before the arrival of the personal computer, Rick Foulds, an engineer at Tufts University, invented a communication device for severaly handicapped people. Fould's device, which was called the Tufts Interactive Communicator (TIC), permitted users to compose messages on an LED display. Instead of a traditional keyboard, a single on-off switch was used to enter messages. Virtually any kind of switch could be used. For example, a pressure-sensitive "puff-sip" switch would allow a user to compose messages simply by puffing into a plastic tube. Or the same result could be had by closing a leaf switch with the tongue, chin, or any part of the body that could be moved by the user.
The key to Fould's communicator was a self-scanned array of characters. The alphabet was divided into clusters of five characters, and each cluster was then momentarily selected by an LED indicator. If a desired character was in the selected cluster, the user actuated the switch. The individual characters within the cluster were then scanned one by one until the user selected the target character by a second closure of the switch. In this fashion, words could be assembled on the display of the TIC.
Using the TIC and similar devices that employ row-column scanning is both tedious and time consuming. A speech recognition system that enables a disabled person to control a computer or other device simply by speaking offers a much faster approach. However, some disabled people either cannot speak or slur their words so badly that consistently reliable macine speech recognition isn't possible.
Another alternative is an eyeglass-mounted optical system that detects the point on a screen at which a user is staring. This approach is much faster than row-column scanning, because the human eye does the scanning. It has not, however, been perfected, and it is expensive.
Accessing Personal Computers
The principle behind Rick Fould's Tufts Interactive Communicator can be easily used to make ordinary personal computers at least partially accessible to the severely disabled. I have experimented with various ways to replace the keyboard of such machines with either a single switch or a switch and a variable resistor. Before describing two of the experimental programs I have designed, let's discuss some of the switches and variable resistors that are suitable for use as keyboard replacements.
A person who can move a finger or toe can operate an ordinary pushbutton or spring-return toggle switch. Of course, the switch must be firmly mounted in an accessible location. Switches having a lever activator can sometimes be used by those who cannot operate a pushbutton or toggle switch. Lever activated switches can be closed by moving an elbow, knee, chin, head, or even tongue. Sound activated switches can be operated by a person who can whistle or make a clicking sound. There is even a switch that is attached to the forehead by means of a sweat band. It is activated when the user wrinkles his brow. There are also circuits that can detect an eectrical signal in a muscle and, in turn, activate a relay.
One of the most interesting switches is a pressure activated puff-sip switch like the Fairchild Model PSF 100A Pressure Sensor. This unique switch, which is shown here atop a keyboard, has an operating life of 1,000,000 on-off cycles. The switch is extremely sensitive and can be activated by an air pressure of only about 0.02 pound per square inch (psi). This is equivalent to the pressure of about half an inch of water or a gentle puff of air from a distance of a few inches. The switch has two ports. If the port marked low is left open, the switch will be triggered when a gentle puff of air is blow into the port market high. If the port marked high is left open, the switch will be triggered when a gentle sip is taken from the port marked low.
A disabled person who can move a finger over a distance of an inch or so can change the resistance of a slide resistor or potentiometer. The potentiometer can have a handle attached to its shaft to transform the linear motion of a moving finger into rotary motion. A person who cannot move a finger, hand, or toe can use head, chin, or tongue movements to change the setting of a slide resistor or potentiometer.
Light-sensitive cadmium sulfide photoresistors can also be used. The cell can be illuminated by either ambient light or a small flashlight bulb or LED mounted an inch or so away. Very small movements of a finger placed between the cell and the light source will cause the resistnace of the cell to change. This method could also be used with the tongue and other parts of the body.
Of course electrical safety should be a concern when connecting a switch to a line-operated appliance like a personal computer. Even when connecting an external switch to low-voltage joystick switch terminals, it is important to be sure there is no danger of electrical shock. This precaution is particularly applicable if the switch is to be operated by a highly conductive part of the body like the tongue.
A Single-Key Calculator
Listing 1 is a Basic program that transforms a computer into a single-key, five-function calculator. Though the program was developed with an IBM PCjr, it should work with any IBM-compatible machine. With a few simple revisions, it can be made to work with Microsoft Basic machines like the Radio Shack Color Computer.
Figure 1 shows a typical arithmetic problem as displayed by the calculator program. When the program is run, the small arrow travels under the "keyboard," pausing for a fraction of a second under each digit and function "key." The user selects a key by closing a switch connected to the left joystick switch port (STRIG) (0)) when the arrow is under the desired key. I'll refer to this switch as the one on a joystick connected to the computer. However, it can be any of the special function switches discussed above. Selecting a function key automatically halts entry of the first number and permits the second number to be entered. Selecting the = key displays the result of the calculation. The arrow then resumes its scan.
Selecting C at any time clears the display and permits a new problem to be entered. The three symbols on the far right side of the display permit one of three scan speeds to be selected. The left arrow is slow, the bar is medium, and the right arrow is fast.
The calculator program is very straightforward and easy to modify. Indeed, you may wish to expand it to transform the basic calculator into a full-function business or scientific calculator. Referring to Listing 1, lines 10 through 50 perform basic housekeeping chores and can be easily modified. Line 60 sets the initial scanning speed of the moving arrow to the slowest of the three available rates (see line 300 and lines 580 through 600 below). Lines 70 through 150 draw the calculator keyboard and display, and lines 160 through 240 print the digits and symbols on the keyboard.
Lines 250 through 370 generate the scanning arrow and move it along the keyboard. Line 300 is a delay loop that determines the scan speed. Lines 310 and 320 detect when the joystick switch has been closed. Since line 270 assigns to the variable S a number equivalent to each key, the program automatically detects which digit or function has been selected. When the joystick switch is closed, line 310 directs program control to the subroutine between lines 380 and 670 that processes the selected digit or function.
Line 390 is necessary to disable the joystick switch-trapping function. Without line 390, selected digits will be entered twice. Lines 400 through 490 convert selected digits from numbers into string ($) values that can be assembled by lines 620 and 650 into numbers that can be displayed on the screen.
Incidentally, experienced programmers will probably wonder why I didn't condense lines 400 through 490 into something much simpler, perhaps: IF S<10 THEN S$=STR$(S). This single line replaces the ten lines of 400 through 490, but is causes spaces to be placed between the digits. Since the answer is printed without the spaces, I decided to use the longer version.
Lines 510 through 540 detect the selection of the first four function keys and print the selected function on the screen (lines 770 and 780). If the = or SQR (square root) key has been selected, line 550 or 560 transfers program control to the calculation routine at lines 680 through 760. Notice that the selected function is assigned to the variable F$ and that the = key is assigned to the variable T$. Line 570 detects when the clear key has been selected. When this occurs, program control is transferred back to line 30. This clears the screen and restarts the program. Lines 580 through 600 set the keyboard scan rate as described above.
Line 610 detects whether a function key has been selected. If not, then the selected digit is assembled into a string along with previously selected digits and printed on the screen by lines 620 through 640. If a function key has been selected, the selected digit is assembled into a second string which is then printed on the screen below the first.
The actual calculations are performed by the routine in lines 680 through 760. Remember that the numbers displayed on the screen are strings of characters. Therefore, line 690 is necessary to convert the string back into numbers. Lines 710 through 750 check the selected function in F$ and then perform the indicated calculation. The result is then printed on the screen.
A Two-Control Message Writer
Imaging a personal computer without a display. The machine is no less capable; it simply cannot inform its user of what it is doing or has done. I suppose a person with a severe physical disability but normal reasoning and intellectual abilities must feel a little like that computer.
The scanning approach in the calculator program in Listing 1 can be used to implement a simple message writer for a handicapped person who can close a single switch. Instead of a keyboard, the screen would show the letters of the alphabet and various other symbols. The switch would be closed when a scanning arrow pointed to the desired character.
Though the scanning method will work, I have developed the experimental program given in Lising 2 to provide somewhat faster results. Instead of an automatic scanning function used in Listing 1, the program in Listing 2 permits the handicapped user to select a character by altering the resistance of a variable resistor or potentiometer. The joystick, external potentiometer, slide resistor, or photoresistor can be used.
When the desired character has been selected, a switch is closed to print it on the screen. A message can contain up to 225 characters. An on-screen counter informs the user how many characters are remaining. At any time the message can be cleared or printed by selecting the arrow symbols shown on the screen. Incidentlly, the program in Listing 2 permits the user to print any character or symbol listed in the ASCII character code.
Figure 2 is a screen photograph that shows a message generated with the message writer program in Listing 2. Though this program requires both a switch and a variable resistor, there is no reason why both of these devices cannot be assembled into a single fixture. For instance, a subminiature microswitch could be attached to the handle of a slide resistor or the shaft of a potentiometer. In this fashion, the user could type messages with a single finger or other part of the body that could be moved.
I make no claims that entering text with this experimental program is as easy or as efficient as a keyboard. On the contrary, it is very tedious and time consuming. Moreover, a few characters may be difficult to enter if the variable resistance device has a slightly non-uniform resistance at certain settings. For instance, the joystick I used made it more difficult to select the letters A and I than other characters. But the program does work. And it illustrates one of the ways an ordinary computer can be used to help a severely disabled person communicate with the outside world.
Like Listing 1, Listing 2 was developed with a PCjr. It should run with IBM PC-compatible machines, and it can be revised to run on computers that use Microsoft Basic. The program is very simple and easy to modify. Referring to Listing 2, lines 10 through 100 perform housekeeping tasks and place prompts and labels on the screen. Note that line 30 sets the characters remaining variable, CR, to an initial value of 255.
Lines 110 through 200 present characters on the screen according to the resistance applied to joystick part 0. Line 130 traps unwanted clears that can result when certain non-character ASCII codes are selected (tab, linefeed, home, form feed and carriage return). Lines 160 and 170 inform the user if the selected character is a cursor arrow or a space. This helps prevent mistaken selection of the up arrow when a space was intended.
A selected character is printed in the text section of the screen when joystick switch 0 is closed. The switch closure is detected by lines 180 and 190 which transfer program control to the subroutine at lines 210 through 320. Line 220 disables the switch trapping instruction to prevent unwanted double entries. Line 230 detects when the print symbol has been selected. If it has, the message string is sent to the printer. Line 240 detects when the clear symbol has been selected. If it has, program control is transferred back to line 30, and the text string is cleared.
Lines 250 through 270 keep track of the characters remaining in the text string (A$) and print the result on the screen. Line 280 converts the selected character from ASCII to text. Line 290 adds the selected character to the text string, and line 300 prints the assembled text string on the screen. Line 310 is a delay loop which is included to prevent inadvertent multiple character entries. If multiple entries are desired, just continue pressing the selected key.
Going Further
Since the programs given here have not been tested with disabled people, they should be considered experimental. Perhaps they will give you some ideas about other ways for assisting the severely handicapped with personal computers.
For starters, you might want to try one or both of these programs with a disabled friend or relative. Using their suggestions, you can then revise the programs given here to include new features. And you can consider developing completely new programs. For instance, you might want to develop a message writer program that automatically scans the alphabet much like the Tufts Interactive Communicator.
For more information about computers and the disabled, see Peter Bates' article, "New Developments in Handicapped Access," in the March 1985 issue of Creative Computing.