Рубрики
Схемы на Arduino

Чарлиплексинг (Charlieplexing) в Arduino – управление 12 светодиодами с 4 контактов

Чарлиплексинг (Charlieplexing) – это способ управления большим числом светодиодов с помощью использования небольшого числа контактов ввода/вывода. Чарлиплексинг во многом похож на обычную технологию мультиплексирования, однако в нем для значительного уменьшения числа используемых контактов используют трёхзначную логику (высокий уровень, низкий уровень и не подсоединен ни к чему). Цифровые выводы (контакты) большинства современных микроконтроллеров способны использовать подобную логику. Более подробно о чарлиплексинге можно прочитать в соответствующей статье Википедии.

Техника чарлиплексинга была названа по имени ее изобретателя – Чарли Аллена (Charlie Allen), который придумал ее в 1995 году. Примеры использования подобных мультиплексирующих (уплотняющих) технологий на нашем сайте уже рассматривались: в статье про часы на Arduino и 4-х разрядном семисегментном индикаторе и в статье про скроллинг текста на светодиодной матрице 8×8 с помощью Arduino.

Чарлиплексинг позволяет вам управлять N * (N – 1) светодиодами при использовании N контактов. Например, в этой статье мы рассмотрим управление 12 светодиодами с помощью 4-х контактов платы Arduino – 4*(4-1) =12.

Светодиоды по своей сути представляют собой диоды, а в диодах ток течет только в одном направлении. Таким образом, при использовании способа чарлиплексинга, мы соединяем параллельно два светодиода, но в обратных направлениях – при таком способе их включения мы в выбранный момент времени сможем включить только один из этих светодиодов.

Зачем использовать способ чарлиплексинга? Дело в том, что у платы Arduino достаточно мало свободных контактов (по сравнению с обычными микроконтроллерами) и при проектировании более менее сложных конструкций на Arduino, особенно с использованием ЖК дисплеев, светодиодных матриц и т.д., может возникнуть ситуация с нехваткой свободных контактов для подключения светодиодов. Вот в этом случае и может пригодиться технология чарлиплексинга, позволяющая существенно уменьшить число контактов, используемых для подключения светодиодов.

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

  1. Плата Arduino Uno (купить на AliExpress).
  2. Светодиоды – 12 шт. (купить на AliExpress).
  3. Резисторы 330 Ом – 4 шт. (купить на AliExpress).
  4. Макетная плата.
  5. Соединительные провода.

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

Схема проекта для демонстрации технологии чарлиплексинга в плате Arduino представлена на следующем рисунке.

В представленной схеме 12 светодиодов подключены к 4 контактам платы Arduino с помощью светодиодов. К каждому контакту платы Arduino подключено 3 светодиода. Всего в схеме 6 групп светодиодов, по 2 светодиода в каждой группе. При этом в каждой группе светодиоды включены параллельно и встречно друг другу, поэтому в выбранный момент времени можно зажечь только один светодиод из группы.

К примеру, чтобы зажечь 1-й светодиод на представленной схеме, необходимо подать сигнал высокого уровня (HIGH) на контакт A и сигнал низкого уровня (LOW) на контакт B, а контакты C и D в это время должны быть отключенными (находиться в состоянии INPUT). Аналогичную процедуру необходимо проделать и для включения других светодиодов в схеме. Полная схема необходимых состояний контактов для включения светодиодов в нашей схеме показана на следующем рисунке.

После осуществления всех соединений в схеме у нас получилась конструкция, показанная на следующем рисунке. На этом рисунке отчетливо видно 6 групп светодиодов, в каждой группе светодиоды включены встречно друг другу. Питание на плату Arduino подается через USB порт.

Объяснение программы для Arduino

Полный код программы и видео, демонстрирующее работу проекта, приведены в конце статьи, здесь же мы кратко рассмотрим основные фрагменты кода программы.

В самом начале программы определим (дадим осмысленные названия) всем используемым контактам. Также в этой части программы определим общее число светодиодов и состояние светодиода.

После этого создадим матрицу для включения и выключения светодиодов в определенной последовательности – вы можете в программе изменить эту последовательность на ту, которая вам необходима. В соответствии с приведенной матрицей первым будет включаться 1-й светодиод, затем 2-й светодиод и т.д.

Затем в функции void loop() мы будем в цикле последовательно включать светодиоды в соответствии с ранее записанной матрицей.

После сборки аппаратной части проекта и загрузки программы в плату Arduino можно приступать к тестированию работы проекта.

Применяя рассмотренный пример использования технологии чарлиплексинга, вы можете подключать к плате Arduino большое количество светодиодов, используя для этого небольшое количество ее контактов. К примеру, если вы хотите управлять 20 светодиодами, то просто измените рассмотренную в данной статье матрицу и добавьте условия для этих дополнительных светодиодов.

Исходный код программы (скетча)

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

2 ответа к “Чарлиплексинг (Charlieplexing) в Arduino – управление 12 светодиодами с 4 контактов”

По верхней схеме (с шестью светодиодами)
Не понятно: почему если включить светодиод L5, то не будут гореть L1 и L3 ? и в самом ли деле L1 и L3 не будут в этом случае гореть?

Ну если на Pin 11 подать высокий уровень, а на Pin 13 низкий, то светодиод L5 будет гореть. При этом чтобы L1 и L3 не горели, Pin 12 должен находиться в отключенном состоянии (в состоянии INPUT).

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

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