Hemos creado una serie de tutoriales de Raspberry Pi, en los que hemos cubierto la interfaz de Raspberry Pi con todos los componentes básicos como LED, LCD, botón, motor de CC, servomotor, motor paso a paso, ADC, registro de cambios, etc. publicó algunos proyectos sencillos de Raspberry Pi para principiantes, junto con algunos buenos proyectos de IoT. Hoy, como continuación de estos tutoriales, vamos a controlar el módulo de matriz de LED 8x8 de Raspberry Pi. Escribiremos un programa de Python para mostrar caracteres en el módulo de matriz.
Consulte también Interfaz de matriz de LED 8x8 con Arduino y matriz de LED con microcontorlador AVR.
Componentes requeridos:
Aquí estamos usando Raspberry Pi 2 Model B con Raspbian Jessie OS. Todos los requisitos básicos de hardware y software se discutieron anteriormente, puede buscarlos en la Introducción de Raspberry Pi y el Parpadeo del LED de Raspberry PI para comenzar, aparte de eso, necesitamos:
- Tablero Raspberry Pi
- Fuente de alimentación (5v)
- Condensador de 1000uF (conectado a través de la fuente de alimentación)
- Resistencia de 1KΩ (8 piezas)
Módulo de matriz LED 8x8:
Un módulo de matriz de 8 * 8 LED contiene 64 LED (diodos emisores de luz) que están dispuestos en forma de matriz, por lo que el nombre es matriz de LED. Estos módulos compactos están disponibles en diferentes tamaños y muchos colores. Uno puede elegirlos según su conveniencia. La configuración del PIN del módulo es como se muestra en la imagen. Tenga en cuenta que los pines del módulo no están en orden, por lo que los PIN deben numerarse exactamente como se muestra en la imagen para evitar errores.
Hay 8 + 8 = 16 terminales comunes en el módulo de matriz de LED. Sobre ellos tenemos 8 terminales positivos comunes y 8 terminales negativos comunes, en forma de 8 filas y 8 columnas, para conectar 64 LED en forma de matriz. Si el módulo se dibujara en forma de diagrama de circuito, tendremos una imagen como se muestra a continuación:
Entonces, para 8 filas, tenemos 8 terminales positivos comunes (9, 14, 8, 12, 17, 2, 5). Considere la primera fila, los LED de D1 a D8 tienen un terminal positivo común y el pin se coloca en el PIN9 del módulo de matriz de LED. Cuando queremos que uno o todos los LED en una FILA estén ENCENDIDOS, el pin correspondiente del MÓDULO LED debe estar alimentado con + 3.3v.
Similar a los terminales positivos comunes, tenemos 8 terminales negativos comunes como columnas (13, 3, 4, 10, 6, 11, 15, 16). Para conectar a tierra cualquier LED en cualquier columna, se conectará a tierra el respectivo terminal negativo común.
Explicación del circuito:
Las conexiones que se realizan entre Raspberry Pi y el módulo de matriz LED se muestran en la siguiente tabla.
Módulo de matriz de LED Pin no. |
Función |
Pin GPIO de Raspberry Pi No. |
13 |
POSITIVO0 |
GPIO12 |
3 |
POSITIVO1 |
GPIO22 |
4 |
POSITIVO2 |
GPIO27 |
10 |
POSITIVO3 |
GPIO25 |
6 |
POSITIVO 4 |
GPIO17 |
11 |
POSITIVO 5 |
GPIO24 |
15 |
POSITIVO6 |
GPIO23 |
dieciséis |
POSITIVO7 |
GPIO18 |
9 |
NEGATIVO0 |
GPIO21 |
14 |
NEGATIVO1 |
GPIO20 |
8 |
NEGATIVO2 |
GPIO26 |
12 |
NEGATIVO3 |
GPIO16 |
1 |
NEGATIVO4 |
GPIO19 |
7 |
NEGATIVE5 |
GPIO13 |
2 |
NEGATIVO6 |
GPIO6 |
5 |
NEGATIVO7 |
GPIO5 |
Aquí está el diagrama de circuito final para interconectar la matriz LED 8x8 con Raspberry Pi:
Explicación de trabajo:
Aquí usaremos la técnica de multiplexación para mostrar caracteres en el módulo de matriz de LED de 8x8. Así que analicemos en detalle esta multiplexación. Digamos que si queremos encender el LED D10 en la matriz, necesitamos encender el PIN14 del módulo y conectar a tierra el PIN3 del módulo. Con este LED, D10 se encenderá como se muestra en la siguiente figura. Esto también debe verificarse primero para que MATRIX sepa que todo está en orden.
Ahora, digamos que si queremos encender D1, necesitamos encender el PIN9 de la matriz y conectar a tierra el PIN13. Con ese LED D1 brillará. La dirección actual en este caso se muestra en la siguiente figura.
Ahora, para la parte complicada, considere que queremos encender tanto D1 como D10 al mismo tiempo. Por lo tanto, debemos alimentar tanto el PIN9 como el PIN14 y conectar a tierra el PIN13 y el PIN3. Esto encenderá el LED D1 y D10, pero junto con eso también encenderá el LED D2 y D9. Es porque comparten terminales comunes. Entonces, si queremos encender los LED a lo largo de la diagonal, nos veremos obligados a encender todos los LED a lo largo del camino. Esto se muestra en la siguiente figura:
Para evitar este problema, utilizamos una técnica llamada Multiplexación. También hemos discutido esta técnica de multiplexación mientras interactuamos con la matriz LED 8x8 con AVR, aquí lo explicamos nuevamente. Esta misma técnica de multiplexación también se utiliza en Scrolling Text en matriz LED 8x8 con Arduino y con microcontrolador AVR.
El ojo humano no puede capturar una frecuencia superior a 30 HZ. Eso es si un LED se enciende y apaga continuamente a una velocidad de 30 HZ o más. El ojo ve el LED continuamente encendido. Sin embargo, este no es el caso y el LED se encenderá y apagará constantemente. Esta técnica se llama multiplexación.
Digamos, por ejemplo, que solo queremos encender el LED D1 y el LED D10 sin encender D2 y D9. El truco es que primero proporcionaremos energía solo al LED D1 usando los PIN 9 y 13 y esperaremos 1 mSEC, y luego lo apagaremos. Luego proporcionaremos energía al LED D10 usando PIN 14 y 3 y esperaremos 1mSEC y luego lo apagaremos. El ciclo va continuamente con alta frecuencia y D1 y D10 se encenderán y apagarán rápidamente y ambos LED parecerán estar continuamente ENCENDIDOS a nuestro ojo. Significa que solo estamos proporcionando energía a una fila (LED) a la vez, eliminando las posibilidades de encender otros LED en otras filas. Usaremos esta técnica para mostrar todos los personajes.
Podemos entenderlo mejor con un ejemplo, como si quisiéramos mostrar "A" en la matriz, como se muestra a continuación:
Como se dijo, activaremos una fila en un instante, En t = 0m SEC, PIN09 se establece en ALTO (otros pines de FILA están BAJOS en este momento) en este momento, PIN3, PIN4, PIN10, PIN6, PIN11, PIN15 están conectados a tierra (otros pines de COLUMNA están ALTOS en este momento)
En t = 1m SEC, PIN14 está configurado en ALTO (otros pines de FILA están BAJOS en este momento) en este momento, PIN13, PIN3, PIN4, PIN10, PIN6, PIN11, PIN15, PIN16 están conectados a tierra (otros pines de COLUMNA están ALTOS en este momento)
En t = 2m SEC, PIN08 se establece en ALTO (otros pines de FILA están BAJOS en este momento) en este momento, PIN13, PIN3, PIN15, PIN16 están conectados a tierra (otros pines de COLUMNA están ALTOS en este momento)
En t = 3m SEC, PIN12 se establece en ALTO (otros pines de FILA están BAJOS en este momento) en este momento, PIN13, PIN3, PIN15, PIN16 están conectados a tierra (otros pines de COLUMNA están ALTOS en este momento)
En t = 4m SEC, PIN01 está configurado en ALTO (otros pines de FILA están BAJOS en este momento) en este momento, PIN13, PIN3, PIN4, PIN10, PIN6, PIN11, PIN15, PIN16 están conectados a tierra (otros pines de COLUMNA están ALTOS en este momento)
En t = 5m SEC, PIN07 está configurado en ALTO (otros pines de FILA están BAJOS en este momento) en este momento, PIN13, PIN3, PIN4, PIN10, PIN6, PIN11, PIN15, PIN16 están conectados a tierra (otros pines de COLUMNA están ALTOS en este momento)
En t = 6m SEC, PIN02 está configurado en ALTO (otros pines de FILA están BAJOS en este momento) en este momento, PIN13, PIN3, PIN15, PIN16 están conectados a tierra (otros pines de COLUMNA están ALTOS en este momento)
En t = 7m SEC, PIN05 se establece en ALTO (otros pines de FILA están BAJOS en este momento) en este momento, PIN13, PIN3, PIN15, PIN16 están conectados a tierra (otros pines de COLUMNA están ALTOS en este momento)
A esta velocidad, la pantalla se verá mostrando continuamente el carácter "A" como se muestra en la figura.
El programa Python para mostrar caracteres en la matriz de LED con Raspberry Pi se muestra a continuación. El programa está bien explicado por los comentarios. Los valores de puerto para cada carácter se dan en el programa. Puede mostrar los caracteres que desee simplemente cambiando los valores 'pinp' en los 'bucles for' en el programa dado. También consulte el video de demostración a continuación.