цифровая электроника
вычислительная техника
встраиваемые системы

 

Arduino и светодиодный матричный дисплей своими руками

Автор: Mike(admin) от 11-01-2018, 17:05

Для отображения информации в радиолюбительских и инженерных проектах сегодня зачастую используют дисплеи. К Arduino можно подключать различные дисплеи, например, TFT и LCD, но для некоторых они могут быть довольно дорогими, если они проектируют низкобюджетное устройство.


Arduino и светодиодный матричный дисплей своими руками

В таких случаях можно сделать простой и дешевый матричный дисплей на основе светодиодов, который может управляться посредством Arduino.


В данном примере мы рассмотрим пример построения светодиодного матричного дисплея размером 7 x 5 точек. Количество точек может быть расширено по желанию. Если вы используете Arduino Uno, количество строк может быть увеличено до 14, а число столбцов может быть увеличено до 6. Прежде чем перейти к описанию схемы, стоит рассказать о методе мультиплексирования, используемого в матричном дисплее. Пусть, предположим, мы имеем светодиодный матричный дисплей 5 × 5, и вы хотите, чтобы засветился один светодиод, например, 7-й светодиод. Тогда включается вся строка, состоящая из светодиода номер 7 (строка 3), в результате один вывод всех светодиодов этой строки получает напряжение. Теперь, чтобы зажегся светодиод 7, активируется соответствующий столбец (4-й столбец). В результате загорается только седьмой светодиод.


Схема подключения матричного дисплея 7 × 5 к плате Arduino Uno показана на приведенном ниже рисунке. Помимо Arduino и самих светодиодов, организованных в матрицу, в схеме присутствуют NPN-транзисторы BC547 с токоограничивающими резисторами, подключенными к базе. Всего таких транзисторов семь – по одному на каждый столбец.


Arduino и светодиодный матричный дисплей своими руками

Плата Arduino Uno не может использовать эти все светодиоды напрямую. Чтобы включать и выключать все светодиоды, используется схему коммутации на основе 7 транзисторов. Выход берется с цифровых линий D2-D8 и передается на базу транзисторов T1-T7. Коллектор транзистора подключен к питанию + 5 В с платы Arduino. Анод каждого столбца закорочен и подключен к эмиттеру транзистора, как показано на схеме. Катоды каждого ряда закорочены и подключены к аналоговым линиям для организации на них нулевого потенциала. Чтобы загорелся определенный светодиод, соответствующий цифровой контакт в столбеце устанавливается в высокий логический уровень, а соответствующий аналоговый вывод в строке устанавливается в низкий логический уровень. Когда цифровой контакт становится «высоким», соответствующий транзистор включается, в результате напряжение коллектора (+5 В) становится доступно на аноде светодиодов, а аналоговый вывод ведет себя как земля, в результате образуется путь для тока и светодиод начинает светиться.


Ниже приведен код (скетч) для Arduino, позволяющий выводить на светодиодном матричном дисплее буквы B, E и P. Соответствующие функции можно поменять для вывода своих символов.


int RowLed[7] = {2,3,4,5,6,7,8};        // Точки подключения катодов
int colLed[5] = {15,16,17,18,19};       // Точки подключения анодов

int Rpin = 6;                           // Всего линий для катодов
int cpin = 4;                           // Всего линий для анодов

void setup()                
{
  for (int i = 0; i <= Rpin; i++) 
  {
    pinMode(RowLed[i], OUTPUT);
  }
  
  for (int j = 0; j <= cpin; j++) 
  {
    pinMode(colLed[j], OUTPUT);
  }
}

void alloff() 
{
  
  for (int i = 0; i <= Rpin; i++) 
  {
    digitalWrite(RowLed[i],LOW);
  }
  
  for (int j = 0; j <= cpin; j++) 
  {
   digitalWrite(colLed[j],HIGH);
  }

}  

void ledon(int x, int y) 
{
  alloff();                             // сначала вызывается функция выключения, чтобы убедиться, что включен только этот светодиод.
  digitalWrite(RowLed[x], HIGH);        // Анодный вывод конкретного светодиода в +5 В
  digitalWrite(colLed[y], LOW);         // Катодный вывод конкретного светодиода в 0 В


}

/*   Функция для отображения буквы B*/

void L_B()
{
  
  ledon(0,0);delay(1);
  ledon(1,0);delay(1);
  ledon(2,0);delay(1);
  ledon(3,0);delay(1);
  ledon(4,0);delay(1);
  ledon(5,0);delay(1);
  ledon(6,0);delay(1);
  ledon(0,1);delay(1);
  ledon(0,2);delay(1);
  ledon(0,3);delay(1);
  ledon(1,4);delay(1);
  ledon(2,4);delay(1);
  ledon(3,0);delay(1);
  ledon(3,1);delay(1);
  ledon(3,2);delay(1);
  ledon(3,3);delay(1);
  ledon(4,4);delay(1);
  ledon(5,4);delay(1);
  ledon(6,0);delay(1);  
  ledon(6,1);delay(1);
  ledon(6,2);delay(1);
  ledon(6,3);delay(1);
}

/*   Функция для отображения буквы E*/

void L_E()
{
  
  ledon(0,0);delay(1);
  ledon(1,0);delay(1);
  ledon(2,0);delay(1);
  ledon(3,0);delay(1);
  ledon(4,0);delay(1);
  ledon(5,0);delay(1);
  ledon(6,0);delay(1);
  ledon(0,1);delay(1);
  ledon(0,2);delay(1);
  ledon(0,3);delay(1);
  ledon(0,4);delay(1);
  ledon(3,0);delay(1);
  ledon(3,1);delay(1);
  ledon(3,2);delay(1);
  ledon(3,3);delay(1);
  ledon(3,4);delay(1);
  ledon(6,0);delay(1);  
  ledon(6,1);delay(1);
  ledon(6,2);delay(1);
  ledon(6,3);delay(1);
  ledon(6,4);delay(1);

}

/*   Функция для отображения буквы P */

void L_P()
{
  ledon(0,0);delay(1);
  ledon(1,0);delay(1);
  ledon(2,0);delay(1);
  ledon(3,0);delay(1);
  ledon(4,0);delay(1);
  ledon(5,0);delay(1);
  ledon(6,0);delay(1);
  ledon(0,1);delay(1);
  ledon(0,2);delay(1);
  ledon(0,3);delay(1);
  ledon(1,4);delay(1);
  ledon(2,4);delay(1);
  ledon(3,0);delay(1);
  ledon(3,1);delay(1);
  ledon(3,2);delay(1);
  ledon(3,3);delay(1);
}

void BEP()
{
  for(int i=0;i<=50;i++)
  {
    L_B();
  }
  alloff();
  delay(200);
  for(int i=0;i<=50;i++)
  {
    L_E();
  }
  alloff();
  delay(200);
  for(int i=0;i<=50;i++)
  {
   L_P();
  }
  alloff();
  delay(200);
}

void loop() 
{
  BEP();
}



© digitrode.ru


Теги: Arduino, дисплеи, светодиодная матрица




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий