User Output Devices
.
Here is a short introduction and overview of the most common user output options for embedded devices. Links are provided to mbed code examples and additional hardware details.
LED Status Lights
Red LEDs have been used as status lights in electronic devices for almost 50 years. Yellow LEDs followed red 10 years later. Blue and then white LEDs took another thirty years to develop and did not appear until the mid 1990s. White LEDs use a blue LED to illuminate a phosphor that produces white light. Once red, green, and blue LEDs were available, the RGB LED was developed. LEDs can be dimmed using PWM and other more advanced lighting effects can be produced. RGB LEDs with PWM hardware for dimming can produce millions of different colors. Some new RGB LEDs such as the ones seen below even include a PWM driver chip in the LED package. Drivers are available for many of the LED controller chips for mbed.
Neopixel RGB LEDs with internal PWM driver circuit
Early computers used small incandescent or neon light bulbs for their large front panel indicator displays. It was possible to enter machine language programs and debug programs in binary using the front panel toggle switches and lights.
The 1975 Altair 8800, the world's first PC, used red LEDs on the front panel display. The LEDs displayed address and data bus lines along with bus status signals.
Seven Segment and Bar Graph Displays
Soon after the development of the lower cost red LEDs, seven LEDs were assembled in a single IC package to display numeric digits in a device that is called a seven segment display. The decimal digits 0..9 can be displayed by turning on the required LEDs. This is still an option for devices that need to display a few digits, but newer LCDs are probably a better option for more than a few digits. They are still found on some devices such as digital alarm clocks.
Seven LEDs in a seven segment display can display a digit
Several LEDs arranged in a linear array called a bar graph display are often used as an analog style level sensor. Bar graph displays are commonly seen in many audio devices.
Bar Graph display with 10 LEDs
Neon filled Nixie tubes were used on early computer and calculator numeric displays. They required around 170 volts and were replaced by LEDs and LCDs in the 1970s. There is even a retro style IoT clock built using mbed.
Vacuum Fluorescent Displays
VFDs have been widely used in consumer electronics and automobile dashboards. They are typically customized for mass produced devices. Since they are typically customized for each application, they are difficult and expensive to use on initial prototypes and limited production quantity devices. They were brighter and worked over a wider temperature range than early LCDs. Around 50 volts was required for VFDs. Recent advances in LCDs is making them more attractive than VFDs for most new designs.
A VFD digital dashboard display in an automobile.
LCD Displays
LCDs may be the best option today for devices that need a complex display. Older standalone LCD modules such as the one seen below displayed only a few lines of BW text. They contain a simple display controller and used a parallel interface with handshaking. Data is typically transferred using the ASCII character code. A light source is needed to view an LCD in a dark room. This is called the backlight. Early LCDs with the backlight feature used incandescent or fluorescent bulbs for backlights. Drivers for mbed for the older BW LCDs are available. Most of the basic text LCDs used the same controller chip, so this driver works with many of them. In addition to text, a bar graph display can also be generated on them. A few custom characters can be downloaded to provide very primitive graphics.
Older BW 16 by 2 text LCD
Newer LCDs can display in color and typically support both text and graphics modes. White LEDs are used to backlight the LCD panel on the newest ones. Small LCD modules often have a built-in control microprocessor with a serial command interface and larger LCD panels may use a parallel interface. The mbed LCD components page shows several LCD options for mbed with code examples. With a little effort, drivers can use C's printf for easy user text output by setting up a C++ virtual function for putc(). A common small low-cost LCD module option for mbed is the uLCD-144-G2 seen below.
Small 4DSystems Color Graphic LCD module
There are even small standalone VGA controller boards that generate video signals for standard PC LCD monitors. The one seen below features a serial interface. These devices work well for 2D displays and can play video clips from SD cards. They are however too slow for high res 3D graphics at a high frame rate unlike the high power and performance graphics cards found in PCs. A user mbed code example is available.
Small 4DSystems VGA controller board
The LCD was invented at RCA's David Sarnoff Research Center in 1968. RCA owned the early patents, but failed to commercialize the liquid crystal display.
Analog Style Gauges
Analog gauges have been used for almost two centuries to display voltage and current measurements. Early voltmeters used analog gauges that deflected a needle using the magnetic field from a wire coil. Mechanical clocks used moving hands to display time several centuries earlier. Some users still prefer the analog gauge style user display. Analog displays provide many users a more intuitive feel about the relative range of values with just a quick glance and are often visible at a greater distance. Digital displays are by their nature more precise.
A pocket multi-meter from the 1920s.
With current technology, it is cheaper and easier to use a stepper motor to move a needle or to draw an analog style gauge on an LCD as seen in the images below.
A stepper motor analog style gauge from a GM car speedometer. An mbed hello world code example is available.
An analog style gauge simulated on a small LCD
In 1826, this early galvanometer used a compass needle and a wire coil to measure current
Audio Output
Many embedded devices use audio output to provide user feedback. These can include alarms, clicks to confirm a user input selection, and even human speech. Speakers can be used to provide audio output. An mbed PWM or Analog output pin can be used to generate tones or play recorded audio files on a speaker. A driver circuit is typically needed to provide the higher current levels required by speakers.
A small speaker from Sparkfun
There are also speech synthesis algorithms and software to convert ASCII text to speech (TTS). These are available in hardware modules, such as the Emic 2 or web APIs such as the one available from Google. There are also some public domain speech synthesis programs such as Espeak. Espeak needs about 2M of memory, so it is probably too large for many small systems.
Emic 2 Text to Speech Engine
Vibration Motors and Haptic Feedback
Vibration motors can provide user feedback by shaking a device. They are basically a small DC motor with an out of balance weight attached the drive shaft. Product functionality can be improved by augmenting the sense of hearing and sight with the sense of touch. Vibration motors are widely used in cellphones, tablets, and game controllers. Some cars have them in seats or steering wheels for driver alerts. The weight on the motor is sometimes enclosed in a case as seen in the vibration motor below. They will typically need a driver circuit just like a DC motor to provide the required current for the DC motor. Vibration motors can be used to provide tactile feedback on touch screens.
Newer devices do more than a simple buzz, they use advanced vibration patterns and waveforms to convey eyes free information to a user or operator. It is becoming an important part of modern user interface design. Haptic (i.e., touch) feedback is becoming so widespread in embedded devices that there are even new haptic driver chips such as the TI DRV2605 available with over 100 built-in effects for vibration motors. This chip also includes the H-bridge driver circuit and can function as an audio sub-sonic woofer using an audio stream. An mbed component page with a hello world example is available for the DRV2605. The effects in the chip are licensed by Immersion, a haptics technology company. Immersion also has a haptics Andriod SDK.
Small Vibration motor from Sparkfun
Xbox controllers use two vibration motors for user feedback. The off balance weight on the motor can be seen in this video.
Printers
Some embedded devices such as cash registers, point of sale terminals, and Bank ATM machines still need to produce hard copy output using a printer. Small low cost printer mechanisms usually have a serial interface, but older ones may have a parallel interface with handshaking. Standalone printers contain a microprocessor with firmware and a USB or Network interface. An Adafruit thermal printer code example for mbed is available along with another small printer.
Small Sparkfun Thermal Printer
The first computer printer was designed by Babbage in the 1800s, but it was not built until 1991.
File I/O using Non-Volatile Storage
While it is not directly an interactive user I/O device, input or output from a file in non-volatile storage is often used. Hard disk drives such as those found in PCs have a lower cost per bit but they require more power, weigh more and are less reliable over time, so they only make sense in large embedded devices.The most common option today for embedded devices is Flash memory. USB flash drives or SD cards are easy to use with mbed with a breakout board and code examples are available to read and write files. On some mbed platforms, internal flash can also be used for program file I/O, but using it for this purpose locks out USB access from the PC and can make debug and download operations just a bit more complex.
Sparkfun uSD card breakout board
Sparkfun USB A breakout board for USB flash drive
An IBM Model 350 5M Hard Disk being delivered in 1956. It was the first commercial hard disk drive. Engineers wanted to make the disk capacity larger, but marketing was certain no one in the world would ever need a drive larger than 5M! The system leased for $3,200 a month in 1956 dollars ($30,000 adjusted for inflation!).
Please log in to post comments.