Светодиоды

Характеристика двухцветных диодов с двумя и тремя выходами

В двухцветный диод установлены 2 кристалла,соединенные встречно-параллельно. Корпус имеет стандартные размеры DIP И SMD с двумя или тремя выводами. При первом варианте каждый вывод служит анодом одного кристалла и катодом другого. Такой источник излучает 2 или 3 цвета. Третий получается при одновременном свечении обеих кристаллов.

Возможные комбинации цветов:

  • красный
    и синий;
  • красный
    и зеленый;
  • красный
    и желтый или желто-зеленый;
  • синий
    и желтый;
  • зеленый
    и желтый.

Падение напряжения зависит от цвета
кристалла:

  • красный
    1,6 В;
  • зеленый
    1,8 В;
  • синий
    3,5 В;
  • желтый
    1,7 В.

Если у двухцветного светодиода 2 вывода, кристаллы соединены встречно-параллельно. В конструкции с общим анодом или катодом установлено 2 светодиода разного цвета.

В чипах с двумя выводами общий контакт чаще всего расположен посередине корпуса, но бывают исключения. Определить полярность можно при помощи омметра.

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

Управление семисегментными индикаторами


Схема подключения семисегментного индикатора с кнопкой

В следующем примере переключение чисел на индикаторе будет происходить только при нажатии тактовой кнопки. Дойдя до числа 3, таймер вновь обнулится и будет ожидать повторного нажатия на кнопку. Это довольно простые программы для Ардуино и семисегментного индикатора, для более сложных и интересных программ необходимо уже использовать сдвиговый регистр 74hc595 для Ардуино.

Скетч. Одноразрядный семисегментный индикатор и кнопка

#define A  8
#define B  7
#define C  6
#define D  5
#define E  4
#define F  3
#define G  2
#define BUTTON  12

byte v = 0;

void setup() {
   pinMode(A, OUTPUT);
   pinMode(B, OUTPUT);
   pinMode(C, OUTPUT);
   pinMode(D, OUTPUT);
   pinMode(E, OUTPUT);
   pinMode(F, OUTPUT);
   pinMode(G, OUTPUT);
   pinMode(BUTTON, INPUT);
}

void loop() {
   digitalWrite(A, HIGH); //цифра нуль
   digitalWrite(B, HIGH);
   digitalWrite(C, HIGH);
   digitalWrite(D, HIGH);
   digitalWrite(E, HIGH);
   digitalWrite(F, HIGH);
   digitalWrite(G, LOW);
   if (digitalRead(BUTTON) == HIGH) { delay(500); v = 1; }

   while (v == 1) {
      digitalWrite(A, LOW); //цифра один
      digitalWrite(B, HIGH);
      digitalWrite(C, HIGH);
      digitalWrite(D, LOW);
      digitalWrite(E, LOW);
      digitalWrite(F, LOW);
      digitalWrite(G, LOW);
      if (digitalRead(BUTTON) == HIGH) { delay(500); v = 2; }
   }
   while (v == 2) {
      digitalWrite(A, HIGH); //цифра два
      digitalWrite(B, HIGH);
      digitalWrite(C, LOW);
      digitalWrite(D, HIGH);
      digitalWrite(E, HIGH);
      digitalWrite(F, LOW);
      digitalWrite(G, HIGH);
      if (digitalRead(BUTTON) == HIGH) { delay(500); v = 3; }
   }
   while (v == 3) {
      digitalWrite(A, HIGH); //цифра три
      digitalWrite(B, HIGH);
      digitalWrite(C, HIGH);
      digitalWrite(D, HIGH);
      digitalWrite(E, LOW);
      digitalWrite(F, LOW);
      digitalWrite(G, HIGH);
      if (digitalRead(BUTTON) == HIGH) { delay(500); v = 0; }
   }
}

Пояснения к коду:

  1. переменная используется в программе для перехода одного цикла while к другому. При нажатии на кнопку значение переменной v меняется;
  2. в программе поставлена небольшая задержка в каждом условии для защиты от быстрого перехода от одного цикла while в другой.

Сигнал квадратурного выхода инкрементального энкодера

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

Сигналы на выходах инкрементального поворотного энкодера при вращении вала по часовой стрелке и против

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

Как подключить семисегментный индикатор

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • одноразрядный семисегментный индикатор 5161as  / hdsp 7503;
  • тактовая кнопка;
  • резисторы 220 Ом;
  • макетная плата (breadboard);
  • провода «папа-папа».

Схема подключения семисегментного индикатора к Ардуино

Для использования модуля 5161as / hdsp 7503 без сдвигового регистра потребуется использовать большое количество пинов Arduino Uno для включения светодиодов на индикаторе. В первом примере мы будем просто поочередно включать / мигать светодиодами для индикации на панели различных чисел. Соберите схему, как на представленной выше картинке и загрузите следующий скетч в микроконтроллер.

Скетч. Вывод чисел на 7-сегментный индикатор Ардуино

#define A  8
#define B  7
#define C  6
#define D  5
#define E  4
#define F  3
#define G  2

void setup() {
   pinMode(A, OUTPUT);
   pinMode(B, OUTPUT);
   pinMode(C, OUTPUT);
   pinMode(D, OUTPUT);
   pinMode(E, OUTPUT);
   pinMode(F, OUTPUT);
   pinMode(G, OUTPUT);
}

void loop() {
   digitalWrite(A, LOW); //цифра один
   digitalWrite(B, HIGH);
   digitalWrite(C, HIGH);
   digitalWrite(D, LOW);
   digitalWrite(E, LOW);
   digitalWrite(F, LOW);
   digitalWrite(G, LOW);
   delay(1000);
   digitalWrite(A, HIGH); //цифра два
   digitalWrite(B, HIGH);
   digitalWrite(C, LOW);
   digitalWrite(D, HIGH);
   digitalWrite(E, HIGH);
   digitalWrite(F, LOW);
   digitalWrite(G, HIGH);
   delay(1000);
   digitalWrite(A, HIGH); //цифра три
   digitalWrite(B, HIGH);
   digitalWrite(C, HIGH);
   digitalWrite(D, HIGH);
   digitalWrite(E, LOW);
   digitalWrite(F, LOW);
   digitalWrite(G, HIGH);
   delay(1000);
}

Пояснения к коду:

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

Семисегментный индикатор распиновка

Распиновка 1-разрядного семисегментного индикатора hdsp 7503 / 5161as 

На картинке выше представлена распиновка одноразрядного семисегментного индикатора с общим катодом (минусом). Модуль представляет из себя небольшую led индикатор в котором находится семь светодиодов (благодаря этому индикатор и получил свое название) и восьмой светодиод в виде точки. Включая светодиоды в разной последовательности от Ардуино Уно, можно выводить различные цифры.

Обратите внимание, что панель не имеет резисторов, поэтому при подключении светодиодов используйте внешние резисторы. Если цоколевка семисегментного индикатора с общим анодом, вам непонятна, то можно опытным путем установить распиновку, подключая питание к разным выводам

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

Пример 2: Использование нескольких сдвиговых регистров

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

Цепь

Добавляем второй сдвиговый регистр. Его контакты GND, Vcc, OE и MR нужно подключить туда же, куда и у первого регистра.

Теперь соединяем два регистра. Два «интерфейсных» контакта второго сдвигового регистра (для тактового сигнала и «защелкивания») подключаем к тем же контактам Arduino, которые использует первый регистр (т.е. речь о контактах clockPin и latchPin) – это желтый и зеленый провода. Также добавляем дополнительный синий провод, соединяя им контакт 9 (Q7’’) на первом регистре и контакт 14 (DS) на втором регистре.

Добавляем еще 8 светодиодов. Лучше поставить зеленые, чтобы при чтении кода было ясно, какому набору светодиодов соответствует тот или иной байт.

Так будет выглядеть вся схема:

Код

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

  • 2.1 – Два светодиодных счетчика от «0» до «255» (в двоичном формате). Это модифицированная версия скетча «Простая передача битов» из первого примера. Вдобавок к первому она отсылает второй байт. В процессе Arduino отсылает первый байт первому сдвиговому регистру (т.е. тому регистру, к которому Arduino подключена напрямую), а он отсылает его второму сдвиговому регистру, который, в свою очередь, зажигает зеленые светодиоды. Второй байт идет к первому регистру и зажигает красные светодиоды.
  • 2.2 – Поочередное зажигание 16 светодиодов. Это модификация скетча «Один за одним» из первого примера. Функция blinkAll() уступила место blinkAll_2Bytes() – чтобы наглядно продемонстрировать, что теперь нам нужно управлять 16 светодиодами. Кроме того, в первой версии этого скетча пульсирование latchPin происходило внутри функций lightShiftPinA() и lightShiftPinB(). Но сейчас эти функции вернули в главный блок loop(), чтобы их можно было запускать два раза подряд: один раз для зеленых светодиодов, и один – для красных.
  • 2.3 – Использование двух массивов. Как и скетч-пример 1.3, этот пример тоже был модернизирован новой функцией blinkAll_2bytes(). Другое изменение заключается в том, что вместо одной переменной data и одного массива array мы имеем теперь dataRED, dataGREEN, dataArrayRED и dataArrayGREEN. Это также значит, что строчка…
data = dataArrayj];

…превращается в…

dataRED = dataArrayREDj];dataGREEN = dataArrayGREENj];

А строчка…

shiftOut(dataPin, clockPin, data);

…превращается в…

shiftOut(dataPin, clockPin, dataGREEN); shiftOut(dataPin, clockPin, dataRED);

Плавное управление RGB светодиодом

Управление rgb светодиодом на Arduino можно сделать плавным, используя аналоговые выходы с «ШИМ». Для этого ножки светодиода необходимо подключить к аналоговым выходам, например, к пинам 11, 10 и 9. И подавать на аналоговые выходы микроконтроллера различные значения ШИМ (PWM), для этого воспользуемся циклом for, с помощью которого можно повторять нужные команды в программе.

Скетч для плавного мигания RGB светодиода

#define RED 11  // присваиваем имя RED для пина 11
#define GRN 10 // присваиваем имя GRN для пина 10
#define BLU  9   // присваиваем имя BLU для пина 9
 
void setup() {
   pinMode(RED, OUTPUT);  // используем Pin11 для вывода
   pinMode(GRN, OUTPUT); // используем Pin10 для вывода
   pinMode(BLU, OUTPUT);  // используем Pin9 для вывода
}
 
void loop() {
   // плавное включение/выключение красного цвета
   for (int i = 0; i <= 255; i++) {
      analogWrite(RED, i);
      delay(2);
   }
   for (int i = 255; i >= 0; i--) {
      analogWrite(RED, i);
      delay(2);
   }

   // плавное включение/выключение зеленого цвета
   for (int i = 0; i <= 255; i++) {
      analogWrite(GRN, i);
      delay(2);
   }
   for (int i = 255; i >= 0; i--) {
      analogWrite(GRN, i);
      delay(2);
   }

   // плавное включение/выключение синего цвета
   for (int i = 0; i <= 255; i++) {
      analogWrite(BLU, i);
      delay(2);
   }
   for (int i = 255; i >= 0; i--) {
      analogWrite(BLU, i);
      delay(2);
   }
}

Пояснения к коду:

  1. с помощью директивы мы заменили номера пинов 9, 10 и 11 на соответствующие имена , и . Это сделано для удобства, чтобы не запутаться в скетче и понимать какой цвет мы включаем;
  2. пины 9, 10 и 11 мы использовали, как аналоговые выходы .

5Подключение RGB светодиода с общим катодомк Arduino

Если вы используете RGB светодиод с общим катодом, то подключите длинный вывод светодиода к GND платы Arduino, а каналы R, G и B – к цифровым портам Arduino. При этом нужно помнить, что светодиоды загораются при подаче на каналы R, G, B высокого уровня (HIGH), в отличие от светодиода с общим анодом.

Схема подключения RGB светодиода с общим катодом к Arduino

Если не менять вышеприведённый скетч, то каждый цвет светодиода в этом случае будет гореть 0,2 секунды, а пауза между ними составит 0,1 секунду.

Полезный совет

Если вы хотите управлять яркостью светодиода, то подключайте RGB светодиод к цифровым выводам Arduino, которые имеют функцию ШИМ (PWM). Такие выводы на плате Arduino обычно помечены знаком тильда (волнистая линия), звёздочкой или обведены кружочками.

Распиновка 4 разрядного 7 сегментного индикатора

Распиновка сегментов индикатора, состоящего из четырех символов ничем не отличается от одно символьного семисегментного индикатора Ардуино. Отличие модуля в количестве разрядов (символов) — каждый разряд включается отключением питания от соответствующего катода. Таким образом все светодиоды одного сегмента в разрядах (например, A-A-A-A) подключены параллельно к общему катоду.

Распиновка четырехразрядного семисегментного светодиодного индикатора

С включением сегмента довольно просто разобраться. Разберем небольшой пример. Изначально на все 4 разряда (D1, D2, D3, D4) подано напряжение. Чтобы включить сегмент A на втором символе, необходимо на ножку A (анод) подать напряжение. Но сегмент не загорится, пока мы не отключим напряжение у ножки D2. Таким образом можно включать любой светодиод на модуле 7 сегментного индикатора.

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

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

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

Adblock
detector