En efecto podemos construir nosotros mismos nuestros propios displays leds de la medidas que necesitemos simplemente con Arduino ;Netduino o Raspberry Pi y por supuesto un poco de bricolaje
Un dígito led en realidad esta formado por 7 segmentos o mas y es un componente que se utiliza para la representación de caracteres o números en muchos dispositivos , debido en gran medida a su simplicidad y bajo coste
Aunque externamente difiere considerablemente de un led típico, internamente están constituidos por una serie de leds con unas determinadas conexiones internas, estratégicamente ubicados de tal forma que forme un número ‘8’.
Cada uno de los segmentos que forman la pantalla están marcados con siete primeras letras del alfabeto (‘a’-‘g’), y se montan de forma que permiten activar cada segmento por separado, consiguiendo formar cualquier dígito numérico
Por ejemplo para representar el numero 15 lo conseguiremos , activando los segmentos B y C del primer dígito y los segmentos AF,G C y D para el segundo dígito
Montaje
Ahora que entendemos como funciona un display de 7 segmentos, la idea es realmente sencilla pues básicamente consiste en auto-construirnos dicho dígito pensando en los 7 segmentos de los que lo compone usando para ellos 7 leds acoplados a un caja con difusores para todos los leds ¿sencillo verdad ?
Para el montaje necesitaremos los siguientes elementos:
- Trozos de cartón
- Trozos de cartulina
- 7 LEDs difusa
- 7 resistencias de 50 ohm
- Cinta carrocera (usada por los pintores )
- Pegamento
- Soporte con Esquema del display
- Cables
- Arduino uno
- Un trozo de papel contacto
Una vez que tengamos el dígito compuesto por 7 los leds lo conectaremos a 7 salidas binarias de Arduino siguiendo el siguiente esquema de conexiones;
- PD2 segmento a;
- PD3 segmento b
- PD4 segmento c
- PD5 segmento d
- PD6 segmento e
- PD7 segmento f
- PD8 segmento g
Y para facilitar la gestión del display también dos pulsadores
- PP1
- PB2
Y finalmente en la siguiente imagen podemos ver el esquema donde se aprecian claramente las resistencias de 50ohm para los leds y las de 10 K para los pulsadores
Según la configuración ya decidida para gestionar el display solo necesitamos mapear cada combinación de segmentos asociado a cada numero que queramos representar , y por medio delos pulsadores incrementamos o decrementamos una unidas representando el siguiente o el anterior digito respectivamente
Como en muchos otros casos ,es de señalar que debemos controlar los rebotes en las pulsaciones para lo cual leeremos varias veces el valor de la entrada hasta asegurarnos que el valor esta estables.
El código arduino es bien sencillo
//definiciones de segmentos con las primeras pines digitales puerto A
const int a = 2;
const int b = 3;
const int c = 4;
const int d = 5;
const int e = 6;
const int f = 7;
const int g = 8;
//Definición de pines de entrada para los pulsadores
const int botonIncremento = 9;
const int botonDecremento = 10;
//valor para controlar los antirrebotes
const int tiempoAntirebote = 10;
//Al encender parece este numero
int cuenta = 0;
int estadoBotonIncremento;
int estadoBotonAnteriorIncremento;
int estadoBotonDecremento;
int estadoBotonAnteriorDecremento;
boolean antirebote(int pin) {
int contador = 0;
boolean estado;
boolean estadoAnterior;
do {
estado = digitalRead(pin);
if(estado != estadoAnterior) {
contador = 0;
estadoAnterior = estado;
}
else {
contador = contador + 1;
}
delay(1);
} while(contador < tiempoAntirebote);
return estado;
}
void actualizarNumero() {
switch(cuenta) {
case 0: // digito 1
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, LOW);
break;
case 1:// valor 2
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
break;
case 2:
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);
break;
case 3: //digito 3
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);
break;
case 4://digito 4
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
break;
case 5: //digito 5
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
break;
case 6: //digito 6
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
break;
case 7: //digito 7
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
break;
case 8: //digito 8
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
break;
case 9: //digito 9
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
break;
}
}
//programamos lo 7 primeros pines del puerto A como salida
//y los dos primeros del puerto B como entrada
void setup() {
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(botonIncremento, INPUT);
pinMode(botonDecremento, INPUT);
}
void loop() {
estadoBotonIncremento = digitalRead(botonIncremento);
if(estadoBotonIncremento != estadoBotonAnteriorIncremento) {
if(antirebote(botonIncremento)) {
cuenta++;
if(cuenta > 9) {
cuenta = 9;
}
}
}
estadoBotonAnteriorIncremento = estadoBotonIncremento;
estadoBotonDecremento = digitalRead(botonDecremento);
if(estadoBotonDecremento != estadoBotonAnteriorDecremento) {
if(antirebote (botonDecremento)) {
cuenta–;
if(cuenta < 0)
{
cuenta = 0;
}
}
}
estadoBotonAnteriorDecremento = estadoBotonDecremento;
actualizarNumero();
}
Y finalmente en este vídeo del canal MFH de youtube podemos ver el montaje en funcionamiento
Buenos días, estoy necesitando construir un cronometro de 4 dígitos de esta forma y realmente no tengo conocimientos sobre arduino. Me podrías ayudar con algún diagrama? Gracias.-
Me gustaMe gusta
En realidad no creo que sea muy difícil encontrar el código. Respecto al display podría usar tiras de led ( las hay de muchos tipos colores), pero no los conecte directamente a los pines del gpio.use en medio drivers
Me gustaMe gusta
Claro, esa es la parte que desconozco, como conectar por ejemplo una placa Arduino Uno a los displays 7 segmentos, los cuales ya he impreso en 3d con ubicación para 7 leds rojos
Me gustaMe gusta
No es demasiado complejo.solo hay que buscar un driver que soporte unos 140mA x 7 segmentos x num digitos
Me gustaMe gusta