Subido por BETETA MOLINA IRIS CORINA

auto DisplayArduino libro.docx

Anuncio
Aprende ARDUINO
8. Manejo de DISPLAY de 7 segmentos con
ARDUINO
Al momento que se desea mostrar algún resultado numérico hacia el exterior de nuestra tarjeta Arduino una de
los componentes más utilizados son los DISPLAY de 7 segmentos, este componente también llamado visualizador
de 7 segmentos, es un periférico que se utiliza para la representación de números en muchos dispositivos
electrónicos debido en gran medida a su simplicidad. Aunque externamente su forma difiere considerablemente
de un diodo LED (diodos emisores de luz) típico, internamente están constituidos por una serie de diodos LED
con unas determinadas conexiones internas, estratégicamente ubicados de tal manera que forme un número 8 al
activarse los 7 LEDs, a partir de esto que puedan representarse todos los símbolos numéricos y algunas letras. Los
primeros siete segmentos son los encargados de formar el símbolo y con el octavo podemos encender y apagar el
punto decimal.
Figura 8-1, Estructura de un DISPLAY de 7 segmentos.
A cada uno de los segmentos LED que forman el DISPLAY se les denomina con una letra: a, b, c, d, e, f y g y
están ensamblados de forma que se permita activar cada segmento por separado consiguiendo formar cualquier
dígito numérico, ver figura 8-1, y los hay de dos tipos: ánodo común y cátodo común.
En los DISPLAY de tipo de ánodo común, todos los ánodos de los LED o segmentos están unidos internamente a
una patilla común que debe ser conectada a potencial positivo (nivel “1”) y el encendido de cada segmento
individual se realiza aplicando potencial negativo (nivel “0”) por la patilla correspondiente a través de una
resistencia que limite el paso de la corriente.
86
Guía Teórico Práctica
Aprende ARDUINO
En los DISPLAY de tipo de cátodo común, todos los cátodos de los LED o segmentos están unidos internamente
a un terminal común que debe ser conectada a potencial negativo (nivel “0”) y el encendido de cada segmento
individual se realiza aplicando potencial positivo (nivel “1”) por la terminal correspondiente a través de una
resistencia que limite el paso de la corriente hacia cada segmento para que no se arruine, un valor estándar entre
220 o 470 ohmios.
Figura 8-2, Conexión interna de los segmentos de un DISPLAY.
Los segmentos pueden ser de diversos colores, aunque el DISPLAY más comúnmente utilizado es el de color rojo,
aunque se pueden encontrar en diversos colores y por su facilidad de visualización el DISPLAY de 7 segmentos
sigue siendo una excelente opción en ciertas situaciones en las que se requiera mayor poder lumínico y trabajo en
áreas hostiles, donde los DISPLAYs podrían verse afectado por condiciones ambientales adversas. Aún no se ha
creado otro dispositivo de señalización que reúna características como este en cuanto a: Buen poder lumínico,
claridad, sencillez para implementarlo, muy bajo costo, robustez.
Manejo Directo con Arduino.
Como cada segmento de un DISPLAY es básicamente un LED, se deduce que el manejo de estos es sencillo desde
el sketch Arduino manipular el número a desplegar en el DISPLAY, como cada LED interno necesita una terminal
de salida Arduino para ser conmutado, se necesitan al menos 7 salidas digitales para manipular un solo DISPLAY,
a esta conexión se le denomina Manejo Directo, en esta cada pin de salida es manipulado individualmente por
medio de digitalWrite(pin, estado) según el carácter que se desea formar en el DISPLAY, el siguiente
ejemplo nos dejaran más claro esto.
EJEMPLO.DISPLAY01. Se demostrara el Manejo Directo de un DISPLAY de 7 segmentos, siguiendo las
conexiones que se muestran en las figuras 8-3 y 8-4. El Sketch a continuación muestra como desplegar caracteres
numéricos en el DISPLAY, se mostraran todos los caracteres decimales a modo de conteo.
/*
Ejemplo.DISPLAY01 Muestra los numeros de 0 a 9 en un DISPLAY Catodo
Comun Los segmentos se conectan a las salidas 2 a 8 con
87
Guía Teórico Práctica
Aprende ARDUINO
resistores de entre 220 y 470 ohmios, el comun a GND.
Modifica por [email protected]
Distribucion Libre CC
*/
//Salidas Arduino a conectar con los segmentos del DISPLAY
int segA = 2; int segB = 3; int segC = 4;
int segD = 5; int segE = 6; int segF = 7; int segG = 8;
void setup() {
//Configurar los pines como salidas
pinMode(segA, OUTPUT); pinMode(segB, OUTPUT); pinMode(segC, OUTPUT);
pinMode(segD, OUTPUT); pinMode(segE, OUTPUT); pinMode(segF, OUTPUT);
pinMode(segG, OUTPUT);
}
void loop() {
//Se escribe el 0 en el display
digitalWrite(segA, 1); digitalWrite(segB,
digitalWrite(segD, 1); digitalWrite(segE,
digitalWrite(segG, 0); delay(1000);
//Se escribe el 1 en el display
digitalWrite(segA, 0); digitalWrite(segB,
digitalWrite(segD, 0); digitalWrite(segE,
digitalWrite(segG, 0); delay(1000);
//Se escribe el 2 en el display
digitalWrite(segA, 1); digitalWrite(segB,
digitalWrite(segD, 1); digitalWrite(segE,
digitalWrite(segG, 1); delay(1000);
//Se escribe el 3 en el display
digitalWrite(segA, 1); digitalWrite(segB,
digitalWrite(segD, 1); digitalWrite(segE,
digitalWrite(segG, 1); delay(1000);
//Se escribe el 4 en el display
digitalWrite(segA, 0); digitalWrite(segB,
digitalWrite(segD, 0); digitalWrite(segE,
digitalWrite(segG, 1); delay(1000);
//Se escribe el 5 en el display
digitalWrite(segA, 1); digitalWrite(segB,
digitalWrite(segD, 1); digitalWrite(segE,
digitalWrite(segG, 1); delay(1000);
//Se escribe el 6 en el display
digitalWrite(segA, 1); digitalWrite(segB,
digitalWrite(segD, 1); digitalWrite(segE,
digitalWrite(segG, 1); delay(1000);
//Se escribe el 7 en el display
digitalWrite(segA, 1); digitalWrite(segB,
digitalWrite(segD, 0); digitalWrite(segE,
digitalWrite(segG, 0); delay(1000);
//Se escribe el 8 en el display
digitalWrite(segA, 1); digitalWrite(segB,
digitalWrite(segD, 1); digitalWrite(segE,
digitalWrite(segG, 1); delay(1000);
//Se escribe el 9 en el display
digitalWrite(segA, 1); digitalWrite(segB,
digitalWrite(segD, 0); digitalWrite(segE,
digitalWrite(segG, 1); delay(1000);
//Apagamos el display
digitalWrite(segA, 0); digitalWrite(segB,
digitalWrite(segD, 0); digitalWrite(segE,
digitalWrite(segG, 1); delay(1000);
}
//fin del Sketch
88
1); digitalWrite(segC, 1);
1); digitalWrite(segF, 1);
1); digitalWrite(segC, 1);
0); digitalWrite(segF, 0);
1); digitalWrite(segC, 0);
1); digitalWrite(segF, 0);
1); digitalWrite(segC, 1);
0); digitalWrite(segF, 0);
1); digitalWrite(segC, 1);
0); digitalWrite(segF, 1);
0); digitalWrite(segC, 1);
0); digitalWrite(segF, 1);
0); digitalWrite(segC, 1);
1); digitalWrite(segF, 1);
1); digitalWrite(segC, 1);
0); digitalWrite(segF, 0);
1); digitalWrite(segC, 1);
1); digitalWrite(segF, 1);
1); digitalWrite(segC, 1);
0); digitalWrite(segF, 1);
0); digitalWrite(segC, 0);
0); digitalWrite(segF, 0);
Guía Teórico Práctica
Aprende ARDUINO
Figura 8-3. Diagrama de conexiones pictórico para el manejo directo de un DISPLAY
Figura 8-4. Diagrama de conexiones pictórico para el manejo directo de un DISPLAY
89
Guía Teórico Práctica
Aprende ARDUINO
EJEMPLO.DISPLAY02. En este ejemplo se combinara el manejo de DISPLAY con la recepción de datos vía el
Monitor Serial, se recibirá un carácter por el puerto USB y se desplegara este en el DISPLAY conectado a la
tarjeta Arduino, se utilizara la conexión de la figura 8-3 y 8-4.
/*
Ejemplo.DISPLAY02 Muestra los numeros de 0 a 9 en un DISPLAY Catodo
Comun segun la recepcion del Monitor Serial
Los segmentos se conectan a las salidas 2 a 8 con
resistores de entre 220 y 470 ohmios, el comun a GND.
Modificado por [email protected]
Distribucion Libre CC
*/
//Salidas Arduino a conectar con
//los segmentos del DISPLAY
int
int
int
int
segA = 2; int segB = 3; int segC = 4;
segD = 5; int segE = 6; int segF = 7;
segG = 8;
byteSerial = 0;// para los datos de entrada serie
void setup()
{
// abre el puerto serie, establece la velocidad a 9600 bps
Serial.begin(9600);
//Configurar los pines como salidas
pinMode(segA, OUTPUT);
pinMode(segB, OUTPUT);
pinMode(segC, OUTPUT);
pinMode(segD, OUTPUT);
pinMode(segE, OUTPUT);
pinMode(segF, OUTPUT);
pinMode(segG, OUTPUT);
//Imprimir en el Monitor Serial
Serial.println ("Introduzca un numero entre 0 y 9");
}
void loop()
{
//Verificar si hay algun dato proveniente de la PC
if (Serial.available() > 0) //si esta disponible algun dato
{
// lee el byte de entrada:
byteSerial = Serial.read();
Serial.println(byteSerial);
if (byteSerial > 57 || byteSerial < 48)
{
//Apagamos el display
digitalWrite(segA, 0); digitalWrite(segB, 0); digitalWrite(segC, 0);
digitalWrite(segD, 0); digitalWrite(segE, 0); digitalWrite(segF, 0);
digitalWrite(segG, 1);
Serial.println ("Error ! Introduzca un numero entre 0 y 9");
}
//vefificar el dato ingresado
if (byteSerial == '0')
{
//Se escribe el 0 en el display
digitalWrite(segA, 1); digitalWrite(segB, 1); digitalWrite(segC, 1);
digitalWrite(segD, 1); digitalWrite(segE, 1); digitalWrite(segF, 1);
digitalWrite(segG, 0);
delay(750);
Serial.println ("Introduzca un numero entre 0 y 9");
}
90
Guía Teórico Práctica
Aprende ARDUINO
if (byteSerial == '1')
{
//Se escribe el 0 en el display
//Se escribe el 1 en el display
digitalWrite(segA, 0); digitalWrite(segB, 1); digitalWrite(segC, 1);
digitalWrite(segD, 0); digitalWrite(segE, 0); digitalWrite(segF, 0);
digitalWrite(segG, 0);
delay(750);
Serial.println ("Introduzca un numero entre 0 y 9");
}
if (byteSerial == '2')
{
//Se escribe el 2 en el display
digitalWrite(segA, 1); digitalWrite(segB, 1); digitalWrite(segC, 0);
digitalWrite(segD, 1); digitalWrite(segE, 1); digitalWrite(segF, 0);
digitalWrite(segG, 1);
delay(750);
Serial.println ("Introduzca un numero entre 0 y 9");
}
if (byteSerial == '3')
{
//Se escribe el 3 en el display
digitalWrite(segA, 1); digitalWrite(segB, 1); digitalWrite(segC, 1);
digitalWrite(segD, 1); digitalWrite(segE, 0); digitalWrite(segF, 0);
digitalWrite(segG, 1);
delay(750);
Serial.println ("Introduzca un numero entre 0 y 9");
}
if (byteSerial == '4')
{
//Se escribe el 4 en el display
digitalWrite(segA, 0); digitalWrite(segB, 1); digitalWrite(segC, 1);
digitalWrite(segD, 0); digitalWrite(segE, 0); digitalWrite(segF, 1);
digitalWrite(segG, 1);
delay(750);
Serial.println ("Introduzca un numero entre 0 y 9");
}
if (byteSerial == '5')
{
//Se escribe el 5 en el display
digitalWrite(segA, 1); digitalWrite(segB, 0); digitalWrite(segC, 1);
digitalWrite(segD, 1); digitalWrite(segE, 0); digitalWrite(segF, 1);
digitalWrite(segG, 1);
delay(750);
Serial.println ("Introduzca un numero entre 0 y 9");
}
if (byteSerial == '6')
{
//Se escribe el 6 en el display
digitalWrite(segA, 1); digitalWrite(segB, 0); digitalWrite(segC, 1);
digitalWrite(segD, 1); digitalWrite(segE, 1); digitalWrite(segF, 1);
digitalWrite(segG, 1);
delay(750);
Serial.println ("Introduzca un numero entre 0 y 9");
}
if (byteSerial == '7')
{
//Se escribe el 7 en el display
digitalWrite(segA, 1); digitalWrite(segB, 1); digitalWrite(segC, 1);
digitalWrite(segD, 0); digitalWrite(segE, 0); digitalWrite(segF, 0);
digitalWrite(segG, 0);
delay(750);
Serial.println ("Introduzca un numero entre 0 y 9");
}
91
Guía Teórico Práctica
Aprende ARDUINO
if (byteSerial == '8')
{
//Se escribe el 8 en el display
digitalWrite(segA, 1); digitalWrite(segB, 1); digitalWrite(segC, 1);
digitalWrite(segD, 1); digitalWrite(segE, 1); digitalWrite(segF, 1);
digitalWrite(segG, 1);
delay(750);
Serial.println ("Introduzca un numero entre 0 y 9");
}
if (byteSerial == '9')
{
//Se escribe el 9 en el display
digitalWrite(segA, 1); digitalWrite(segB, 1); digitalWrite(segC, 1);
digitalWrite(segD, 0); digitalWrite(segE, 0); digitalWrite(segF, 1);
digitalWrite(segG, 1);
delay(750);
Serial.println ("Introduzca un numero entre 0 y 9");
}
}
}
//fin del Sketch
EJEMPLO.DISPLAY03. En este ejemplo se combinara el manejo de DISPLAY con un Puldador (Boton) para crear
un dado digital, Al presionar le boton se mustra en el display un numero aleatorio, se utilizara la conexión de la
figura 8-4.1.
/*
Ejemplo.DISPLAY03 Muestra los numeros de 0 a 9 en un DISPLAY Anodo Comun
Modificado por [email protected]
Distribucion Libre CC
*/
int numSort = 0;
void setup()
{
pinMode(2,
pinMode(3,
pinMode(4,
pinMode(5,
pinMode(6,
pinMode(7,
pinMode(8,
pinMode(9,
}
OUTPUT);
OUTPUT);
OUTPUT);
OUTPUT);
OUTPUT);
OUTPUT);
OUTPUT);
INPUT);
void loop()
{
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
while (digitalRead(9) == HIGH) {
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
92
Guía Teórico Práctica
Aprende ARDUINO
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
delay(100); // Wait for
digitalWrite(2, LOW);
delay(100); // Wait for
digitalWrite(3, LOW);
delay(100); // Wait for
digitalWrite(4, LOW);
delay(100); // Wait for
digitalWrite(5, LOW);
delay(100); // Wait for
digitalWrite(6, LOW);
delay(100); // Wait for
digitalWrite(7, LOW);
delay(100); // Wait for
digitalWrite(2, HIGH);
delay(100); // Wait for
digitalWrite(3, HIGH);
delay(100); // Wait for
digitalWrite(4, HIGH);
delay(100); // Wait for
digitalWrite(5, HIGH);
delay(100); // Wait for
digitalWrite(6, HIGH);
delay(100); // Wait for
digitalWrite(7, HIGH);
delay(100); // Wait for
digitalWrite(2, LOW);
delay(100); // Wait for
digitalWrite(3, LOW);
delay(100); // Wait for
digitalWrite(4, LOW);
delay(100); // Wait for
digitalWrite(5, LOW);
delay(100); // Wait for
digitalWrite(6, LOW);
delay(100); // Wait for
digitalWrite(7, LOW);
delay(100); // Wait for
digitalWrite(2, HIGH);
delay(100); // Wait for
digitalWrite(3, HIGH);
delay(100); // Wait for
digitalWrite(4, HIGH);
delay(100); // Wait for
digitalWrite(5, HIGH);
delay(100); // Wait for
digitalWrite(6, HIGH);
delay(100); // Wait for
digitalWrite(7, HIGH);
delay(100); // Wait for
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
delay(500); // Wait for
numSort = random(1, 6 +
100 millisecond(s)
100 millisecond(s)
100 millisecond(s)
100 millisecond(s)
100 millisecond(s)
100 millisecond(s)
100 millisecond(s)
100 millisecond(s)
100 millisecond(s)
100 millisecond(s)
100 millisecond(s)
100 millisecond(s)
100 millisecond(s)
100 millisecond(s)
100 millisecond(s)
100 millisecond(s)
100 millisecond(s)
100 millisecond(s)
100 millisecond(s)
100 millisecond(s)
100 millisecond(s)
100 millisecond(s)
100 millisecond(s)
100 millisecond(s)
100 millisecond(s)
500 millisecond(s)
1);
}
if (numSort == 1) {
93
Guía Teórico Práctica
Aprende ARDUINO
digitalWrite(3, LOW);
digitalWrite(4, LOW);
}
if (numSort == 2)
digitalWrite(2,
digitalWrite(3,
digitalWrite(5,
digitalWrite(6,
digitalWrite(8,
}
if (numSort == 3)
digitalWrite(2,
digitalWrite(3,
digitalWrite(4,
digitalWrite(5,
digitalWrite(8,
}
if (numSort == 4)
digitalWrite(3,
digitalWrite(4,
digitalWrite(7,
digitalWrite(8,
}
if (numSort == 5)
digitalWrite(2,
digitalWrite(4,
digitalWrite(5,
digitalWrite(7,
digitalWrite(8,
}
if (numSort == 6)
digitalWrite(2,
digitalWrite(4,
digitalWrite(5,
digitalWrite(6,
digitalWrite(7,
digitalWrite(8,
}
{
LOW);
LOW);
LOW);
LOW);
LOW);
{
LOW);
LOW);
LOW);
LOW);
LOW);
{
LOW);
LOW);
LOW);
LOW);
{
LOW);
LOW);
LOW);
LOW);
LOW);
{
LOW);
LOW);
LOW);
LOW);
LOW);
LOW);
}
94
Guía Teórico Práctica
Aprende ARDUINO
Figura 8-4.1. Diagrama de conexiones para el ejemplo DISPLAY03
Los ejemplos anteriores permite el manejo directo de un DISPLAY, pero si se observa bien, se nota que si se
desean manejar más de un DISPLAY a la vez y mostrar datos compuestos de 3 o más cifras, los pines de una
tarjeta Arduino UNO no son suficientes ya que se necesitan 7 por cada DISPLAY a controlar, además en ocasiones
se necesita tener más pines para conectar otros dispositivos como sensores, es en esta situación que mejor se
recomienda el uso de circuitos integrados interfaces controladores de DISPLAY, es decir un componentes
diseñados para que solo necesiten un par de pines Arduino y sea este circuito integrado interface quien se encargue
de las conexiones a los DISPLAY, algunos ejemplos comúnmente usados son los circuitos integrados MAX7219
y TM1640, a continuación se verán algunos ejemplos para manipular DISPLAY usando estos circuitos.
95
Guía Teórico Práctica
Descargar