Рубрики
Проекты на Raspberry Pi

Подключение светодиодной матрицы 8×8 к Raspberry Pi

Ранее на нашем сайте мы уже рассматривали подключение к плате Raspberry Pi таких базовых устройств как светодиод, кнопка, ЖК дисплей, двигатель постоянного тока, серводвигатель, шаговый двигатель, АЦП модуль, регистр сдвига и т.д.. В этой же статье мы рассмотрим подключение к плате Raspberry Pi модуля светодиодной матрицы 8×8 и будем управлять отображением символов на этой матрице с помощью программы на Python. Ранее на нашем сайте мы уже рассматривали подключение подобной матрицы к плате Arduino и микроконтроллеру AVR.

Необходимые компоненты

  1. Плата Raspberry Pi (купить на AliExpress).
  2. Светодиодная матрица 8х8 (купить на AliExpress).
  3. Резистор 1 кОм – 8 шт. (купить на AliExpress).
  4. Конденсатор 1000 мкФ, соединенный по питанию (купить на AliExpress).
  5. Светодиод.
  6. Макетная плата.
  7. Соединительные провода.

Модуль светодиодной матрицы 8×8

Модуль светодиодной матрицы 8×8 содержит 64 светодиода, упорядоченных в форме матрицы, поэтому эта структура и называется светодиодной матрицей. Подобные модули доступны в различных размерах и цветовых решениях. Распиновка этого модуля показана на рисунке ниже. Помните о том, что контакты модуля светодиодной матрицы должны быть пронумерованы в точности так, как показано на представленном рисунке, чтобы не возникало ошибок в работе модуля.

У модуля светодиодной матрицы 8+8=16 выводов (контактов). Таким образом, мы имеем 8 общих положительных выводов и 8 общих отрицательных выводов, которые образуют 8 строк и 8 столбцов матрицы. Схему соединений модуля светодиодной матрицы 8×8 можно представить следующим рисунком:

То есть для 8 строк мы имеем 8 общих положительных выводов (9, 14, 8, 12, 17, 2, 5). Если рассматривать первый столбец, то светодиоды с D1 по D8 имеют общий положительный вывод — PIN9. Если мы хотим зажечь один или светодиоды в этой строке, то на PIN9 необходимо будет подать +3.3v.

Аналогично, для 8 столбцов мы имеем 8 общих отрицательных выводов (13, 3, 4, 10, 6, 11, 15, 16). Чтобы зажечь один или несколько светодиодов в конкретном столбце, необходимо на общий отрицательный вывод этого столбца подать напряжение низкого уровня.

Схема проекта

Схема подключения светодиодной матрицы 8×8 к плате Raspberry Pi представлена на следующем рисунке.

В схеме необходимо сделать соединения между платой Raspberry Pi и светодиодной матрицей, показанные в следующей таблице.

Контакт светодиодной матрицы Функция Контакт платы Raspberry Pi
13 POSITIVE0 GPIO12
3 POSITIVE1 GPIO22
4 POSITIVE2 GPIO27
10 POSITIVE3 GPIO25
6 POSITIVE4 GPIO17
11 POSITIVE5 GPIO24
15 POSITIVE6 GPIO23
16 POSITIVE7 GPIO18
9 NEGATIVE0 GPIO21
14 NEGATIVE1 GPIO20
8 NEGATIVE2 GPIO26
12 NEGATIVE3 GPIO16
1 NEGATIVE4 GPIO19
7 NEGATIVE5 GPIO13
2 NEGATIVE6 GPIO6
5 NEGATIVE7 GPIO5

Далее рассмотрим принципы работы проекта.

Объяснение работы проекта

В нашем проекте мы будем использовать технологию мультиплексирования чтобы показывать различные символы на светодиодной матрице 8×8. Допустим, к примеру, нам необходимо зажечь светодиод D10 в матрице. Для этого необходимо подать напряжение высокого уровня на PIN14 матрицы и напряжение низкого уровня на PIN3 как показано на следующем рисунке.

А если мы хотим зажечь светодиод D1, то нам необходимо будет подать напряжение высокого уровня на PIN9 матрицы и напряжение низкого уровня на PIN13 как показано на следующем рисунке.

Теперь, допустим, что нам необходимо одновременно зажечь светодиоды D1 и D10. Для этого нам необходимо подать напряжение высокого уровня на PIN9 и PIN14 матрицы и напряжение низкого уровня на PIN13 и PIN3. Светодиоды D1 и D10 при этом зажгутся, однако при этом начнут светиться и светодиоды D2 и D9 поскольку они имеют общие выводы со светодиодами D1 и D10. Эта ситуация показана на следующем рисунке.

Чтобы предотвратить эту проблему, мы будем использовать так называемую технологию мультиплексирования. Подробно суть этой технологии рассмотрена в статье про подключение светодиодной матрицы 8×8 к микроконтроллеру AVR. Также эта же технология использована в статье про скроллинг текста на светодиодной матрице 8×8 с помощью микроконтроллера AVR.

Суть технологии мультиплексирования заключается в следующем. Человеческий глаз не может различить частоту более 30 Гц. То есть если светодиод будет включаться и выключаться с частотой 30 Гц или больше, то человеческий глаз будет воспринимать его непрерывно горящим.

К примеру, мы хотим включить только светодиоды D1 и D10 в матрице, чтобы при этом не зажглись светодиоды D2 и D9. Для этого мы можем сначала подать соответствующие уровни напряжения на контакты PIN 9 и 13 чтобы зажечь светодиод D1. Затем подождать 1 мсек и выключить светодиод D1. После этого мы подадим соответствующие уровни напряжения на контакты PIN 14 и 3 чтобы зажечь светодиод D10. Затем подождать 1 мсек и выключить светодиод D10. Этот цикл будет продолжаться непрерывно, в котором светодиоды D1 и D10 будут с высокой частотой включаться и выключаться, поэтому человеческий глаз будет воспринимать их непрерывно горящими. Аналогичным образом можно поступать если мы хотим зажечь любые другие светодиоды в матрице.

К примеру, мы хотим отобразить на светодиодной матрице букву “A” как показано на следующем рисунке. Для этого нам необходимо выполнить следующую последовательность действий.

В момент времени t=0 мс (миллисекунд) на PIN09 устанавливается HIGH (на остальные выводы данного ряда в это время подается LOW), на контакты PIN3, PIN4, PIN10, PIN6, PIN11, PIN15 подается земля (низкий уровень) (на остальные контакты столбцов в это время подается уровень HIGH).

В момент времени t=1 мс на PIN14 устанавливается HIGH (на остальные выводы данного ряда в это время подается LOW), на контакты PIN13, PIN3, PIN4, PIN10, PIN6, PIN11, PIN15, PIN16 подается земля (на остальные контакты столбцов в это время подается уровень HIGH).

В момент времени t=2 мс на PIN08 устанавливается HIGH (на остальные выводы данного ряда в это время подается LOW), на контакты PIN13, PIN3, PIN15, PIN16 подается земля (на остальные контакты столбцов в это время подается уровень HIGH).

В момент времени t=3 мс на PIN12 устанавливается HIGH (на остальные выводы данного ряда в это время подается LOW), на контакты PIN13, PIN3, PIN15, PIN16 подается земля (на остальные контакты столбцов в это время подается уровень HIGH).

В момент времени t=4 мс на PIN01 устанавливается HIGH (на остальные выводы данного ряда в это время подается LOW), на контакты PIN13, PIN3, PIN4, PIN10, PIN6, PIN11, PIN15, PIN16 подается земля (на остальные контакты столбцов в это время подается уровень HIGH).

В момент времени t=5 мс на PIN07 устанавливается HIGH (на остальные выводы данного ряда в это время подается LOW), на контакты PIN13, PIN3, PIN4, PIN10, PIN6, PIN11, PIN15, PIN16 подается земля (на остальные контакты столбцов в это время подается уровень HIGH).

В момент времени t=6 мс на PIN02 устанавливается HIGH (на остальные выводы данного ряда в это время подается LOW), на контакты PIN13, PIN3, PIN15, PIN16 подается земля (на остальные контакты столбцов в это время подается уровень HIGH).

В момент времени t=7 мс на PIN05 устанавливается HIGH (на остальные выводы данного ряда в это время подается LOW), на контакты PIN13, PIN3, PIN15, PIN16 подается земля (на остальные контакты столбцов в это время подается уровень HIGH).

В результате этих операций человеческий глаз будет видеть на светодиодной матрице непрерывно горящий символ “A” как показано на рисунке выше.

Исходный код программы на Python

В тексте программы имеются комментарии, поясняющие смысл отдельных команд. Значения портов для показа каждого символа приведены в программе. Вы можете выводить любые символы на светодиодной матрице просто поменяв значения переменных ‘pinp’ в соответствующих циклах в приведенной программе. Более подробно работу проекта можно посмотреть на видео, приведенном в конце статьи.

Видео, демонстрирующее работу проекта

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *