Capacitación Arduino · Display de 7 segmentos
Siete LEDs con forma de rayita forman cualquier número. Una perilla elige el número y el Arduino enciende los segmentos que hacen falta. Simulado en Tinkercad y en OpenCircuits.
El componente
Cómo funciona
| Segmento | Pin | Se apaga en… |
|---|---|---|
| a arriba | D4 | 1 y 4 |
| b arriba derecha | D5 | 5 y 6 |
| c abajo derecha | A1 | 2 |
| d abajo | A2 | 1, 4 y 7 |
| e abajo izquierda | A3 | los impares y el 4 |
| f arriba izquierda | D3 | 1, 2, 3 y 7 |
| g centro | D2 | 0, 1 y 7 |
Para simular
Un dígito de 0,56", rojo: 5161BS (ánodo común).
| Qué revisar | Tinkercad trae | Pon esto (como el kit) |
|---|---|---|
| Común (propiedades) | Ánodo | Ánodo (no cambiar) |
| Pata COM | — | a 5V por 220 Ω · el punto dp queda sin conectar |
| Segmentos | — | a, b, f, g a D4, D5, D3, D2 · c, d, e a A1, A2, A3 |
| Entrada | — | potenciómetro en A0 |
En ánodo común un segmento se enciende con BAJA y se apaga con ALTA: al revés de un LED normal.
Paso 1 · Componentes
Buscar: Arduino
Buscar: Placa de pruebas
Buscar: 7 segmentos. Común: ánodo.
Entre COM y GND.
Elige el número.
Paso 2 · Circuito
Paso 2 · Conexiones
| Display sobre la canaleta (columnas 12 a 16) | ||
| — | Fila de arriba (fila g) | g f COM a b |
| — | Fila de abajo (fila c) | e d COM c dp |
| Segmentos de arriba (cables a la fila j) | ||
| Arduino D2 | Columna 12 (g) | |
| Arduino D3 | Columna 13 (f) | |
| Arduino D4 | Columna 15 (a) | |
| Arduino D5 | Columna 16 (b) | |
| Segmentos de abajo (cables a la fila a) | ||
| Arduino A3 | Columna 12 (e) | |
| Arduino A2 | Columna 13 (d) | |
| Arduino A1 | Columna 15 (c) | |
| COM, perilla y alimentación | ||
| — | 220 Ω | Columna 14 (COM) → 18 (fila b) |
| Columna 18 | Riel + | |
| — | Potenciómetro columnas 21-23 | 21 → −, 23 → +, 22 → A0 |
| Arduino 5V / GND | Rieles + / − | |
Paso 3 · Código en bloques
Variables → Crear variable: numero.
Paso 3 · Código C++
// C++ code // int numero = 0; void setup() { pinMode(A0, INPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(A1, OUTPUT); pinMode(A2, OUTPUT); pinMode(A3, OUTPUT); pinMode(3, OUTPUT); pinMode(2, OUTPUT); }
void loop() { numero = (analogRead(A0) / 103); if (numero == 1 || numero == 4) { digitalWrite(4, HIGH); } else { digitalWrite(4, LOW); } if (numero == 5 || numero == 6) { digitalWrite(5, HIGH); } else { digitalWrite(5, LOW); } if (numero == 2) { digitalWrite(A1, HIGH); } else { digitalWrite(A1, LOW); } if ((numero == 1 || numero == 4) || numero == 7) { digitalWrite(A2, HIGH); } else { digitalWrite(A2, LOW); } if (numero % 2 == 1 || numero == 4) { digitalWrite(A3, HIGH); } else { digitalWrite(A3, LOW); } if (numero > 0 && numero < 4 || numero == 7) { digitalWrite(3, HIGH); } else { digitalWrite(3, LOW); } if (numero < 2 || numero == 7) { digitalWrite(2, HIGH); } else { digitalWrite(2, LOW); } delay(10); // Delay a little bit to improve simulation performance }
Paso 4 · Simular
| Se ve al revés | El display quedó en «Cátodo»: déjalo en Ánodo (COM va a 5V). |
| Un segmento nunca prende | Su cable va a otra columna: revisa la tabla de la diapositiva 7. |
| Números raros | Dos cables intercambiados (por ejemplo a y b). |
| Nada se enciende | COM debe ir a GND a través de la 220 Ω. |
Paso 5 · Kit real
Las patas del 5161BS, vistas de frente con el punto abajo a la derecha:
| Fila de arriba | g · f · COM · a · b |
|---|---|
| Fila de abajo | e · d · COM · c · dp |
No hace falta ninguna biblioteca: copia el C++ de la diapositiva 9 en el Arduino IDE y súbelo.
Alternativa · OpenCircuits
OpenCircuits no tiene bloques propios para el display, pero sí para el potenciómetro: «valor de 0 a 9» da el número directo, sin dividir.
Usa map, así que el 9 aparece recién al final de la perilla. Dividir por 103 (Tinkercad) reparte los 10 números más parejo.
// C++ code // int numero = 0; void setup() { pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(A1, OUTPUT); pinMode(A2, OUTPUT); pinMode(A3, OUTPUT); pinMode(3, OUTPUT); pinMode(2, OUTPUT); }
void loop() { numero = map(analogRead(A0), 0, 1023, 0, 9); if (numero == 1 || numero == 4) { digitalWrite(4, HIGH); } else { digitalWrite(4, LOW); } if (numero == 5 || numero == 6) { digitalWrite(5, HIGH); } else { digitalWrite(5, LOW); } if (numero == 2) { digitalWrite(A1, HIGH); } else { digitalWrite(A1, LOW); } if ((numero == 1 || numero == 4) || numero == 7) { digitalWrite(A2, HIGH); } else { digitalWrite(A2, LOW); } if (numero % 2 == 1 || numero == 4) { digitalWrite(A3, HIGH); } else { digitalWrite(A3, LOW); } if (numero > 0 && numero < 4 || numero == 7) { digitalWrite(3, HIGH); } else { digitalWrite(3, LOW); } if (numero < 2 || numero == 7) { digitalWrite(2, HIGH); } else { digitalWrite(2, LOW); } delay(10); // Delay a little bit to improve simulation performance }
Para seguir
Sin perilla: cuenta de 9 a 0, un número por segundo, con «contar».
Al apretar un pulsador, muestra un número al azar de 1 a 6.
Con el sensor infrarrojo: suma 1 cada vez que alguien pasa.
Conecta dp y haz que parpadee una vez por segundo.