====== Optical Output Devices ======
{{:en:iot-open:czapka_b.png?50| General audience classification icon }}{{:en:iot-open:czapka_e.png?50| General audience classification icon }}\\
== Light-Emitting Diode ==
Unlike the other diodes, the light-emitting diode, also called LED, is a particular type that emits light. LED has an entirely different body, which is made of transparent plastic that protects the diode and lets it emit light (figure {{ref>led1}}). Like the other diodes, LED conducts the current in one way, so connecting it to the scheme is essential. There are two safe ways to determine the direction of the diode:
* the cathode's side of the diode housing is chipped,
* the anode's leg is usually longer than the cathode's leg.
The LED is one of the most efficient light sources. Unlike incandescent bulbs, LED transforms most of the power into light, not warmth; it is more durable, works for a more extended period and can be manufactured in a smaller size.\\
The semiconductor material determines the LED colour. Diodes are usually silicon, and LEDs are made from elements like gallium phosphate silicon carbide. Because the semiconductors used are different, the voltage needed for the LED to shine is also different.\\
When the LED is connected to the voltage and turned on, a considerable current starts to flow through it, and it can damage the diode. That is why all **LEDs have to be connected in series with a current-limiting resistor** (figure {{ref>led2}}).
Current limiting resistors resistance is determined by three parameters:
* //I_D// – Current that can flow through the LED,
* //U_D// – Voltage that is needed to turn on the LED,
* //U// – Combined voltage for LED and resistor.
A short guide on calculating resistance for a diode is present below:
- Find out the voltage needed for the diode to work //U_D//; you can find it in the diode parameters table.
- Find out the amperage needed for the LED to shine //I_D//; it can be found in the LEDs datasheet, but if you can't find it, then 20 mA current is usually a correct and safe choice.
- Find out the combined voltage for the LED and resistor; usually, it is the feeding voltage for the scheme.
- Insert all the values into this equation: //R = (U – U_D) / I_D//.
- You get the resistance for the resistor for the safe use of the LED.
- Find a resistor with a nominal value that is the same or slightly bigger than the calculated resistance.
An example of the blinking LED code:
int ledPin = 8;//Defining the pin of the LED
void setup()
{
pinMode(ledPin,OUTPUT); //The LED pin is set to output
}
void loop()
{
//Set pin output signal to HIGH – LED is working
digitalWrite(ledPin,HIGH);
//Belay of 1000 ms
delay(1000);
//Set pin output signal to LOW – LED is not working
digitalWrite(ledPin,LOW);
//Delay of 1000 ms
delay(1000);
}
LED's brightness can be controlled easily with a PWM signal.\\
There exist LEDs with more than one light-emitting chip in one enclosure. They are made as two-coloured or RGB elements with coloured controlled separately. There are two internal configurations of such elements:
* common anode - anodes of all internal LEDs are connected (for sample MCU connection, look in figure {{ref>ledrgb1}}),
* common cathode - cathodes of all internal LEDs are connected (for sample MCU connection, look in figure {{ref>ledrgb2}}).
== Digital LED ==
Digital LED does not have anode or cathode connections available externally. They have power supply pins and two pins for data transmission, one for input and a second for output. The input accepts the digital signal from the microcontroller to set the brightness of all three internal LEDs. Output connects the input of another LED to form a series of LEDs. Digital LEDS are available as single elements but also as strips, rings or matrices that a microcontroller with one pin can control. Every LED can shine in different colours, creating interesting visual effects. An example of a popular digital LED is WS2812. A particular protocol is used to transmit data. One LED requires 24 bits (1 byte for red, 1 for green, and 1 for blue) to set the colour. After receiving its data, the LED resends any further byte to the following LEDs in the chain.\\ There are software libraries for Arduino and other platforms available to ease the handling of digital LEDs, including advanced visual effects for stripes, matrices and other shapes. Sample 8 LED WS2812 stripe is present in the figure {{ref>smartled1}} and its connection to the MCU in {{ref>smartled2}}.
The example code that uses the popular Adafruir NeoPixel library:
#include
#define PIN 34 //Define the pin connected to the digital LED data input
#define NUMPIXELS 8 //Define the number of LEDs in the strip
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
void setColor(uint8_t red, uint8_t green, uint8_t blue) {
for (int i = 0; i < pixels.numPixels(); i++) {
pixels.setPixelColor(i, pixels.Color(red, green, blue));
}
pixels.show();
}
void setup() {
pixels.begin(); // Initialize the NeoPixel library
}
void loop() {
// Change the colour of the NeoPixel LED
setColor(255, 0, 0); // Red color (R, G, B)
delay(1000); // Delay to make the colour change visible (in milliseconds)
setColor(0, 255, 0); // Green color (R, G, B)
delay(1000); // Delay to make the colour change visible (in milliseconds)
setColor(0, 0, 255); // Blue color (R, G, B)
delay(1000); // Delay to make the colour change visible (in milliseconds)
}
== Displays ==
A display is a quick way to get feedback information from the device. There are many display technologies. For IoT solutions, low-power, easy-to-use displays are used:
* 7-segment LED display,
* LED matrix display,
* liquid-crystal display (LCD),
* organic light-emitting diode display (OLED),
* electronic ink display (E-ink).
**7-segment LED display**\\
The seven-segment LED display is built with seven LEDs forming the shape, making it possible to display symbols similar to digits and even some letters. Usually, the eighth LED is added as the decimal point. 7-segment displays can have similar internal connections as RGB LEDs, common anode or common cathode. If there is more than one digit in the element, all the same segments are also connected. Such displays need special controllers or the software part that displays separate digits in a sequence one by one. To avoid unnecessary blinking or differences in the brightness of digits, software for sequential displays is written using timers and interrupts. As for the RGB LEDs, 7-segment displays need a separate resistor for every segment. Sample 2-digit 7-segment module is present in the figure {{ref>7segled}}.
**LED matrix display**\\
LED matrix displays offer the possibility of displaying not only digits and letters but also pictograms and symbols. The most popular versions have 8 rows and 8 columns (figure {{ref>ledmatrix}}), or 7 rows and 5 columns, but it is possible to find other configurations. As for the 7-segment displays, there are common anode and common cathode configurations. All anodes in one row and all cathodes in one column are connected to a common anode. For a common cathode, all cathodes in one row and all anodes in one column are connected. Modern LED matrix displays have built-in controllers or are made with digital RGB LEDs, making it possible to display pictures and videos.
**Liquid-Crystal Display (LCD)**\\
Monochrome LCD uses modulating properties of liquid crystal to block the passing-through light. Thus, when a voltage is applied to a pixel, it is dark. A display consists of layers of electrodes, polarising filters, liquid crystals and a reflector or backlight. Liquid crystals do not emit light directly but through reflection or backlight. Because of this reason, they are more energy efficient. Small, monochrome LCDs are widely used to show little numerical or textual information like temperature, time, device status, etc. The most popular LCD device is an alphanumerical 2x16 characters display based on the HD44780 controller (figure {{ref>lcd2x16_1}}).\\ There also exist graphic monochrome and colour TFT displays that use LCD technology. LCD modules commonly come with an onboard control circuit and are controlled through parallel or serial interfaces. Sample circuit for 2x16 display is present in figure {{ref>lcd2x16_2}}.
The example code:
#include //include LCD library
//Define LCD pins
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
//Create an LCD object with predefined pins
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
lcd.begin(16, 2); //Set up the LCD's number of columns and rows
lcd.print("hello, world!"); //Print a message to the LCD
}
void loop() {
//Set the cursor to column 0, line 1 – line 1 is the second row
//Since counting begins with 0
lcd.setCursor(0, 1);
//Print the number of seconds since the reset
lcd.print(millis() / 1000);
}
**Organic Light-Emitting Diode Display (OLED)**\\
OLED display uses electroluminescent materials that emit light when the current passes through these materials. The display consists of two electrodes and a layer of an organic compound. OLED displays are thinner than LCDs, have higher contrast, and can be more energy efficient depending on usage (figure {{ref>oledi2c_1}}). OLED displays are commonly used in mobile devices like smartwatches and cell phones, replacing LCDs in other devices. OLED displays come as monochrome or RGB colour devices. Small OLED display modules usually have an onboard control circuit that uses digital interfaces like I2C (figure {{ref>oledi2c_2}}) or SPI.
//Add libraries to ensure the functioning of OLED
#include
#include
#include
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
void setup() {
//Setting up initial OLED parameters
display.begin(SSD1306_SWITCHCAPVCC, 0x3C, false);
display.setTextSize(1); //Size of the text
display.setTextColor(WHITE); //Colour of the text – white
void loop() {
//Print out on display output sensor values
display.setCursor(0, 0);
display.clearDisplay();
display.print("Test of the OLED"); //Print out the text on the OLED
display.display();
delay(100);
display.clearDisplay();
}
**Monochrome Electronic Ink Displays (E-Ink)**\\
E-ink display uses charged particles to create a paper-like effect. The display comprises transparent microcapsules filled with oppositely charged white and black particles between electrodes. Charged particles change their location depending on the orientation of the electric field; thus, individual pixels can be either black or white (figure {{ref>eink0}}). The image does not need power to persist on the screen; power is used only when the image is changed. Thus, the e-ink display is very energy efficient. It has a high contrast and viewing angle but a low refresh rate. E-ink displays are commonly used in e-readers, smartwatches, outdoor signs, and electronic shelf labels. Sample E-Ink module is present in figure {{ref>eink1}}. The majority of the e-Ink displays are controlled with an SPI interface. Sample connection is present in figure {{ref>eink2}}.
#include
#include
E_ink Eink;
void setup()
{
//BS LOW for 4 line SPI
pinMode(8,OUTPUT);
digitalWrite(8, LOW);
Eink.InitEink();
Eink.ClearScreen();//Clear the screen
Eink.EinkP8x16Str(14,8,"IoT e-ink example");
Eink.EinkP8x16Str(10,8,"IoT-open.eu");
Eink.EinkP8x16Str(6,8,"0123456789");
Eink.EinkP8x16Str(2,8,"9876543210");
Eink.RefreshScreen();
}
void loop()
{
}
** Colourful e-Ink displays **\\
Recent advances in E-Ink (E-Paper) technology present the ability to display coloured information. Various approaches are present in the engineering of colourful E-Ink displays, along with multiple technologies for the presentation of colours.
Tri-colour e-Ink displays with predefined colour areas are a development of the black-white ones where part of the capsules (usually the upper half), instead of containing black microcapsules, contain yellow or red. This enables the presence of the information in black or selected colour, but the colour depends on the location of the information on the display. This display was designed for shopping shelves (ESL-Electronic Shelf Label) to emphasize benefits or bargains.
Grayscale e-Ink displays benefit from the fact that microcapsules inside a pixel sphere do not travel simultaneously. As some capsules have more charge than others, it is possible to design and charge them the way that variable external charge can pull or push not all of them but just partially. In practice, it enables the presentation of grayscale in a single pixel as observed from a distance. A principle of operation is present in figure {{ref>eink3}}.
Opposite to the above, multicolour e-Ink displays provide a true selection of colours per pixel and are implemented in various technologies presented below.
**Multicolour with filtering**\\
In this construction, classical black-white capsules are covered with colour RGB filters on top of them. A single pixel is then composed, in fact, of 3 spheres, covered with red, green and blue and the final colour is observed as a mixture of those. Moreover, controlling a single sphere similarly to the grayscale displays enables an even bigger number of colours presented by a single pixel domain without using high resolution and dithering. This kind of display uses additive colour mixing (RGB). A principle of operation is present in figure {{ref>eink4}}.
Note, in RGB filtered displays, at least 3 spheres are needed to present a single colourful pixel, so the overall resolution is lower than in monochrome or grayscale E-Inks.
**Multicoloured capsules in a single sphere (ACEP Advanced Colour ePaper)**\\
In this approach, capsules in a single sphere are multicoloured rather than black-white. Microcapsules of different colours have slightly different charging, so a variating external electric field applied to the single sphere controls the colour of the capsules on the top of the sphere that is visible to the user. A single sphere can then present a wide range of colours. This kind of display uses subtractive colour mixing (CMY/CMYK). A principle of operation is present in figure {{ref>eink5}}.
This solution provides quite good resolution, but controlling the microcapsules is tricky and requires complex electric field control.
**Multicoloured capsules in separate spheres**\\
This approach is theoretical as manufacturing such devices is inefficient because of the need to compose a matrix of spheres with different colours of microcapsules nearby. A domain of such spheres composes a single pixel. A principle of operation is present in figure {{ref>eink6}}.