Как подключить светодиод к плате Arduino

Добавляем светодиод

Давайте подключим светодиод который будет загораться при нажатии на нашу кнопку. Сделать это очень просто. Достаточно подключить анод светодиода (длинная ножка) в порт “13”. Далее в программе мы будем включать светодиод просто подавая 5 вольт на этот порт. Катод светодиода (короткая ножка) подключаем на землю через разъём “GND”. Но не забываем про резистор, так как 5 вольт для одного светодиода слишком много и светодиод может перегореть.

Что бы правильно подобрать резистор с нужным нам сопротивлением можно воспользоваться специальной таблицей:

Цветовая характеристика светодиода

Напряжение

Инфракрасный

до 1.9 В

Красный

от 1.6 до 2.03 В

Оранжевый

от 2.03 до 2.1 В

Желтый

от 2.1 до 2.2 В

Зелёный

от 2.2 до 3.5 В

Синий

от 2.5 до 3.7 В

Фиолетовый

от 2.8 до 4 В

Ультрафиолетовый

от 3.1 до 4.4 В

Белый

от 3 до 3.7 В

Рассчитать необходимое сопротивление резистора можно по следующей формуле: 

R=(Uист-Uд)/Iд, где Uист – напряжение источника питания, – напряжение диода, – ток диода (обычный светодиод потребляет около 20 миллиампер).

Пример рассчёта для красного светодиода:

Проект “Мигалка”

Давайте попробуем сделать проект посложнее. Добавим два светодиода, которые будут мигать поочередно.

Вам понадобится:

  • Плата Arduino Uno или Nano
  • Макетная плата
  • Два резистора 220 Ом
  • Два светодиода. Если есть возможность, лучше взять синий и красный.
  • Провода для соединения.

Сложность:  простой проект.

Что мы узнаем:

  • Как подключить светодиод к ардуино.
  • Как изменить стандартную программу мигалки.
  • Повторим процедуру загрузки скетча в микроконтроллер.

Принцип  подключения при этом не меняется. Мы используем два пина платы контроллера для соединения со светодиодами – 13 и 12. Можно использовать следующую схему:


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

Положительные контакты светодиода соединяем с цифровыми пинами, отрицательные – с GND.

Программирование мигалки

В скетч с мигающим светодиодом нам надо будет внести определенные изменения. Алгоритм действий таков:

  • Включаем синий светодиод
  • Ждем какое-то время (1 секунду)
  • Выключаем синий светодиод и одновременно включаем красный
  • Ждем какое-то время (1 секунду)
  • Повторяем еще раз

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

// Этот блок команд выполняется один раз
void setup() {
  pinMode(13, OUTPUT); // Эти строчки нужны для того, чтобы оба светодиода светились ярко
  pinMode(12, OUTPUT);
}

// Этот блок команд выполняется постоянно
void loop() { 
  digitalWrite(13, HIGH); // Включение синего светодиода
  digitalWrite(12, LOW);  // Выключение красного светодиода
  delay(1000);            // Задержка
  digitalWrite(13, LOW);  // Выключение синего светодиода
  digitalWrite(12, HIGH); // Включение красного светодиода
  delay(1000);            // Задержка

}

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

Давайте поговорим более подробно о блоке setup. Мы видели его и в прошлом примере. Внутри setup обычно располагаются команды инициализации, которые запускаются только один раз, в момент подключения контроллера к питанию.

В примерах с мигалками мы устанавливаем пины в нужный режим – OUTPUT. В этом режиме мы работаем с внешними устройствами, получающими питание с данного пина ардуино. Например, наш светодиод ничего не передает в плату, он использует пин 13 для того, чтобы включиться. Поэтому мы устанавливаем режим OUTPUT – “на выход”. По умолчанию все пины находятся в режиме INPUT, оптимальном для подключения датсиков. Более подробную информацию вы можете найти в описании функции pinMode.

Надеемся, процедура проверки скетча и прошивки контроллера не вызвала каких-то трудностей. Запустите программу и вы увидите, как весело перемигиваются светодиоды на плате. Поздравляем с написанием своих первых проектов на Ардуино!

Принцип управления нагрузкой через Ардуино

Плата Ардуино имеет два типа портов вывода: цифровой и аналоговый (ШИМ-контроллер). У цифрового порта возможно два состояния – логический ноль и логическая единица. Если подключить к нему светодиод он либо будет светиться, либо не будет.

Аналоговый выход представляет собой ШИМ-контроллер, на который подаётся сигнал частотой около 500Гц с регулируемой скважностью. Что такое ШИМ-контроллер и принцип его работы можно найти в интернете

Через аналоговый порт возможно не только включать и выключать нагрузку, а и изменять напряжение (ток) на ней.

Синтаксис команд

Цифровой вывод:

pinMode(12, OUTPUT); — задаём порт 12 портом вывода данных; digitalWrite(12, HIGH); — подаём на дискретный выход 12 логическую единицу, зажигая светодиод.

Аналоговый вывод:

analogOutPin = 3; – задаём порт 3 для вывода аналогового значения; analogWrite(3, значение); – формируем на выходе сигнал с напряжением от 0 до 5В

Значение – скважность сигнала от 0 до 255. При значении 255 максимальное напряжение

Способы управления светодиодами через Ардуино

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

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

Управляем освещением при помощи датчика освещенности

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

  • Arduino UNO — одна из разновидностей плат ардуино;
  • Блок реле SRD-12VDC-SL-C;
  • Резистор на 10 кОм;
  • Фоторезистор (выступает в роли датчика освещенности);
  • Arduino IDE — программное обеспечение для загрузки микрокода в микроконтроллер Arduino;
  • Лампочка, подключаемая к сети 220 вольт.

Первым делом соберем схему с помощью этих компонентов изображенную ниже.

Теперь откроем Arduino IDE и внесем в нее такой код:
Этот код не предназначен для включения нашей лампочки. С помощью этого кода мы проверим наш датчик освещенности. Поэтому загрузим этот код в Arduino UNO и откроем «Монитор порта».

В «Мониторе порта» видно, что мы получаем значения с фоторезистора, а это значит, что он нормально функционирует. Теперь пришло время загрузить основной код для автоматического управления светом. Для этого вставьте этот код в Arduino IDE:
Принцип работы этого скетча основан на условном операторе, при котором выполняется условие «s2 < 700». Это условие означает, что при значении датчика меньше 700 лампочка будет включаться, а если значение больше 700, то лампочка отключится. Из примера видно, как легко можно создать адаптивную систему автоматического освещения.

Дребезг контактов

Очень хорошо, когда всё идеально. Но к сожалению всё на так и идеально. И с кнопками та же проблема. Механические контакты кнопки не могут замыкаться/размыкаться мгновенно. Это называется «дребезг контактов». Как это понять. На вход микроконтроллера поступают импульсы. Но вместо того чтоб просто получить 1 или 0 из-за данного явления на вход поступает целая кучка импульсов. Это может создать ложные сигналы. И именно поэтому мы делаем небольшую задержку в нашей программе. На скорость это особо не повлияет, но обеспечит нас от ошибки.

На этом у нас конец второй части

Спасибо за внимание

Управление яркостью светодиода

Мы можем не только включать или выключать свет, но и управлять его яркостью. Для этого используется специальная технология с красивым названием ШИМ. Подключившись к пинам контроллера, поддерживающим ШИМ, можно регулировать интенсивность свечения с помощью функции analogWrite(). Мы должны указывать ей в качестве параметров номер пина и значение из диапазона от 0 до 255. Чем больше число, тем ярче будет светить лампочка. Например, для пина 3 пример будет выглядеть так: analogWrite(3, 255) или analogWrite(3, 100). В первом случае яркость будет максимально возможная, во втором – гораздо меньше.

Управление яркостью светодиода

Мы можем не только включать или выключать свет, но и управлять его яркостью. Для этого используется специальная технология с красивым названием ШИМ. Подключившись к пинам контроллера, поддерживающим ШИМ, можно регулировать интенсивность свечения с помощью функции analogWrite(). Мы должны указывать ей в качестве параметров номер пина и значение из диапазона от 0 до 255. Чем больше число, тем ярче будет светить лампочка. Например, для пина 3 пример будет выглядеть так: analogWrite(3, 255) или analogWrite(3, 100). В первом случае яркость будет максимально возможная, во втором – гораздо меньше.

Нужно помнить, что далеко не все пины контроллера поддерживают ШИМ. У Arduino Uno, Nano, основанных на ATMEGA328, шим поддерживают пины 3, 5, 6, 9, 10, 11. У платы Mega таких пинов гораздо больше.

Принципы работы трехцветного светодиода

Внешний вид трехцветного светодиода показан на следующем рисунке:

Трехцветный светодиод имеет 4 контакта как показано на рисунке ниже:

  • контакт 1: цвет 1 отрицательный вывод при общем аноде или цвет 1 положительный вывод при общем катоде;
  • контакт 2: общий положительный вывод для всех трех цветов при общем аноде или общий отрицательный вывод для всех трех цветов при общем катоде;
  • контакт 3: цвет 2 отрицательный вывод или цвет 2 положительный вывод;
  • контакт 4: цвет 3 отрицательный вывод или цвет 3 положительный вывод.

Таким образом, есть 2 типа трехцветных светодиодов – с общим катодом (ОК) и с общим анодом (ОА). При общем катоде (общий отрицательный вывод) мы имеем три положительных вывода, где каждый вывод отвечает за свой цвет, и один общий отрицательный вывод. Внутренняя схема подключений трехцветного светодиода с общим катодом показана на следующем рисунке:

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

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

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

В нашей схеме мы будем использовать трехцветный светодиод с общим анодом (ОА). Если вам будет необходимо подсоединить больше подобных светодиодов к плате Arduino Uno, к примеру 5, то вам будет нужно 5×4= 20 контактов, но можно уменьшить количество контактов в этом случае до 8 если мы соединим трехцветные светодиоды параллельно и будем использовать технологию мультиплексирования.

Как подключить LED ленту через транзистор


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

Скетч для плавного включения светодиодной ленты

void setup() {
   pinMode(10, OUTPUT); // объявляем пин 10, как выход
}

void loop() {
   // плавное включение
   for(int i=0; i<=255; i++) {
   analogWrite(10, i);
   delay(5); // ставим задержку для эффекта
}

   //плавное затухание
   for(int i=255; i>=0; i--) {
   analogWrite(10, i);
   delay(5); // ставим задержку для эффекта
}

}

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

  1. Используем для плавного зажигания LED ленты 10 пин с ШИМ сигналом;
  2. Для этого примера датчик движения к Ардуино можно не подключать.

Скетч для плавного включения от датчика движения

unsigned long counttime;
byte w = 1;

#define LED  10 // назначаем порт для реле
#define PIR  2    // назначаем порт для датчика

void setup() {
   pinMode(LED, OUTPUT); // объявляем пин LED, как выход
   pinMode(PIR, INPUT);      // объявляем пин PIR, как вход
   }

void loop() {
   delay(200);

   // если есть движение - плавно включаем свет и заходим в цикл while (w == 2)
   if (digitalRead(PIR) == HIGH) {

    for (int i = 0; i <= 255; i++) {
      analogWrite(LED, i);
      delay(5);
    }

    w = 2;
    while (w == 2) {
      if (digitalRead(PIR) == HIGH) {
        delay(200);

        // если движения нет - свет не выключаем, а заходим в цикл while (w == 0)
        if (digitalRead(PIR) == LOW) {
          w = 0;
        }
      }
    }
  }

    // если движения нет - включаем счетчик и заходим в цикл while
    if (digitalRead(PIR) == LOW) {
    counttime = millis(); w = 0;

    while (w == 0) {
      delay(200);

      // если движения нет в течении 10 секунд - выключаем свет и выходим из цикла
      if (millis() - counttime > 10000) {

        for (int i = 255; i >= 0; i--) {
          analogWrite(LED, i);
          delay(5);
        }
        w = 1;
      }

      // если обнаружено движение - переходим в цикл (w == 2), не выключая свет
      if (digitalRead(PIR) == HIGH) {
        w = 2;
      }
    }
  }
}

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

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

Эффективность (светоотдача)

Отношение светового потока к потребляемой мощности (Лм/Вт)

Это та величина, которая в первую очередь попадает во внимание специалистов, потому что именно по эффективности определяется применимость светодиодов для систем освещения. Для сравнения:

  • лампочка накаливания: 8-12 лм/Вт;
  • люминесцентные (энергосберегающие) лампы : 30-40 Лм/Вт
  • современные светодиоды: 120-140 Лм/Вт
  • газоразрядные лампы (ДРЛ): 50-60 Лм/Вт

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

Цветовая температура

Цветовая температура используемых светодиодов: 2500 Кельвинов- 9500 Кельвинов.

  • -2500-3000 Кельвинов: теплый белый свет. (warm white или сокращенно WW) Он ближе к лампам накаливания.
  • -4000-5000 Кельвинов: нейтральный белый свет.( white neutral или сокращенно NW)
  • -6500-9500 Кельвинов: холодный белый свет. (cold white или сокращенно CW)

Будет интересно Что такое фотодиод

По источникам независимых исследований, именно нейтральный белый свет является наиболее комфортным для офисной работы, и в нем предметы становятся наиболее четкими. Нашей компанией используются светодиоды с нейтральным светом .Кроме того, в осветительных приборах мы используем цветные светодиоды (основные цвета : красный, синий, зеленый, желтый) и светодиоды RGB(полноцветный светодиод).


Размеры светодиода

Мощность светодиодов.

  • малой мощности: до 0,5 Вт (20-60 мА);
  • средней мощности:0,5-3Вт (100-700 мА);
  • большой мощности: более 3-х ватт (1000м А и более).

Угол свечения как правило 120-140 градусов, в индикаторных 15-45 градусов.

Деградация (ресурс) светодиодов

Очень важный показатель. Многие производители декларируют около 100 тысяч часов и даже более. Какие факторы оказывают влияние на ресурс светодиодов? В первую очередь это токовая деградация. Если через диод пропустить силу тока большую, чем та, на которую он рассчитан, то наступает быстрая деградация. Как правило: в пределах первых 1000 часов. Этим пользуются недобросовестные производители. Следующий фактор – температурная деградация. Светодиод в процессе работы нагревается. И, если не отводить тепло, то диод быстро потускнеет.

Для отвода тепла применяется много конструкторских решений. В наших светильниках применяется плата с алюминиевой подложкой. Подложка в свою очередь имеет механический контакт с корпусом светильника, что дополнительно отводит тепло. Главное: в точке пайки светодиода соблюдать температурный режим не более 65 градусов Цельсия. В наших светильниках это достигается. Соответственно, находясь в рабочем режиме, ресурс диодов в предлагаемых светильниках составляет декларируемые 40-50 тысяч часов.

Индикаторные светодиоды (ILT)

Сегодня являются лидерами в повсеместном использовании. Появившись в 60-х годах, они быстро завоевали популярность, вытеснив лампы накаливания, используемых в качестве подсветки и индикации. А использование в данных светодиодах кристаллы с повышенной яркостью позволяют использовать их в мощных светоизлучающих устройствах (фонари, стоп-сигналы, индикаторные огни, светофоры, DIP-ленты и т.д.). На сегодняшний день практически ни одна бытовая техника не обходится без индикаторного светодиода. Существуют следующие стандартные типоразмеры индикаторных светодиодов : 3; 5; 4,8; 8 и 10мм. Рабочий ток таких светодиодов как правило 20-40мА, световая отдача может доходить для белого света 3-5Лм со светодиода. Угол излучения у данных светодиодов либо узкий (15-45 градусов), либо широкий (110-140 градусов).

Подключение нескольких светодиодов

Для подключения нескольких светодиодов к ардуино нужно просто подключить каждый из них к своему цифровому порту по той же схеме. Например, для создания проекта «Мигалка» можно взять два светодиода красного и синего цвета, подключив через сопротивление их положительные (длинные ножки)контакты к 13 и 12 пину соответственно. Короткие ножки подключаются к минусу – земле.


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

Мы уже знаем, что на плате нас дожидаются три разъема с таким обозначением («GND»), можно подключать к любому. Если разъемов питания будет не хватать, у нас есть три варианта.

  • Сформировать нужные уровни питания на свободных пинах. Например, подав в скетче низкий уровень сигнала на пин 5, мы получим на этом разъеме необходимый нам «минус».
  • Использовать макетную плату, на которой есть отличные варианты для раздачи «плюсов и минусов» через общие линии питания (смотрите статью на нашем сайте).
  • Использовать специальные платы расширения Sensor Shield, у которых для каждого пина отдельно выводятся пины с питанием и землей.

Точно так же вы сможете подключить и следующие светодиоды, приступив к проектам светофор или светодиодная лента.

Принцип работы транзистора для плавного управления светодиодной лентой

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

Подключив транзистор к аналоговому порту Ардуино, присваиваем ему значение от 0 до 255, изменяем напряжение, подаваемое на коллектор либо сток от 0 до 5В. Через цепочку коллектор-эмиттер будет проходить от 0 до 100% опорного напряжения нагрузки.

Для управления светодиодной лентой arduino необходимо подобрать транзистор подходящей мощности. Рабочий ток для питания метра светодиодов 300-500мА, для этих целей подойдет силовой биполярный транзистор. Для большей длины потребуется полевой транзистор.

Схема подключения LED ленты к ардуино:

Переключение режимов с помощью кнопки

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

Факт нажатия мы определяем с помощью функции digitalRead(). В результате мы получим HIGH (1, TRUE) или LOW(0, FALSE), в зависимости от того, как подключили кнопку. Если мы подключаем кнопку с помощью внутреннего подтягивающего резистора, то нажатие кнопки приведет к появлению на входе уровня 0 (FALSE).

Для хранения информации о нажатии на кнопку можно использовать переменную типа boolean:

boolean keyPressed = digitalRead(PIN_BUTTON)==LOW;

Почему мы используем такую конструкцию, а не сделали так:

boolean keyPressed = digitalRead(PIN_BUTTON);

Все дело в том, что digitalRead() может вернуть HIGH, но оно не будет означать нажатие кнопки. В случае использования схемы с подтягивающим резистором HIGH будет означать, что кнопка, наоборот, не нажата. В первом варианте (digitalRead(PIN_BUTTON)==LOW ) мы сразу сравнили вход с нужным нам значением и определили, что кнопка нажата, хотя и на входе сейчас низкий уровень сигнала. И сохранили в переменную статус кнопки. Старайтесь явно указывать все выполняемые вами логические операции, чтобы делать свой код более прозрачным и избежать лишних глупых ошибок.

Как переключать режимы работы после нажатия кнопки?

Часто возникает ситуация, когда мы с помощью кнопок должны учитывать факт не только нажатия, но и отпускания кнопки. Например, нажав и отпустив кнопку, мы можем включить свет или переключить режим работы схемы.  Другими словами, нам нужно как-то зафиксировать в коде факт нажатия на кнопку и использовать информацию в дальнейшем, даже если кнопка уже не нажата.  Давайте посмотрим, как это можно сделать.

Логика работы программы очень проста:

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

Как определить нажатие нескольких кнопок?

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

Танцующие огни

Для безопасного программирования нашей платы отключите VIN линия от линии электропередач. Вы прикрепите его позже.

Подключите Arduino к компьютеру и откройте IDE Arduino. Проверьте, правильно ли выбрана плата и номер порта в Инструменты> Доска а также Инструменты> Порт меню.

Мы будем использовать FastLED библиотека для проверки нашей установки. Вы можете добавить библиотеку, нажав на Эскиз> Включить библиотеку> Управление библиотеками и поиск FastLED. Нажмите «Установить», и библиотека будет добавлена ​​в IDE.

Под Файл> Примеры> FastLED выберите DemoReel100 эскиз. Этот набросок циклически повторяет различные вещи, которые можно сделать с WS2812 Светодиодные полосы, и это невероятно легко установить.

Все, что вам нужно изменить, это DATA_PIN переменная, чтобы она соответствовала контакт 13, и NUM_LEDS переменная, чтобы определить, сколько светодиодов в полосе, которую вы используете. В этом случае я использую только небольшую линию из 10 светодиодов, вырезанных из более длинной полосы. Используйте больше для большего светового шоу!

Это оно! Загрузите эскиз на свою плату, отсоедините кабель USB и включите питание 5 В. Наконец, снова подключите VIN Arduino к линии электропередачи и посмотрите шоу!

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

Как подключить кнопку и светодиод к Ардуино

Для этого занятия потребуется:

  • Arduino Uno / Arduino Nano / Arduino Mega;
  • макетная плата;
  • светодиод;
  • 2 резистора 220 Ом;
  • 2 тактовых кнопки;
  • провода «папа-папа».


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

Для переключения светодиода кнопкой Ардуино соберите схему, как на изображении выше

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

Скетч. Управление светодиодом Ардуино через кнопку

boolean buttonWasUp = true;
boolean ledEnabled = false;

void setup() {
  pinMode(10, OUTPUT);
  pinMode(2, INPUT_PULLUP);
}
 
void loop() {
   // узнаем, отпущена ли кнопка сейчас
   boolean buttonIsUp = digitalRead(2);
 
   // если кнопка была отпущена и не отпущена сейчас
   if (buttonWasUp && !buttonIsUp) {

      // исключаем дребезг контактов тактовой кнопки
      delay(10);

    // и считываем сигнал с кнопки снова
    buttonIsUp = digitalRead(2);

      // если кнопка нажата, то переворачиваем сигнал светодиода
      if (!buttonIsUp) {
         ledEnabled = !ledEnabled;
         digitalWrite(10, ledEnabled);
      }
   }
 
   // запоминаем состояние кнопки для новой итерации
   buttonWasUp = buttonIsUp;
}

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

  1. — это глобальная переменная Ардуино, которая может принимать всего два значения – true (истина) и false (ложь);
  2. задержка в программе позволяет избежать «дребезг контактов» кнопки и исключить ложное срабатывание.


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

Скетч. Управление двумя кнопками одним светодиодом

boolean button1WasUp = true;
boolean button2WasUp = true;

void setup() {
   pinMode(10, OUTPUT);
   digitalWrite(10, LOW);

   pinMode(2, INPUT_PULLUP);
   pinMode(4, INPUT_PULLUP);
}

void loop() {
   // узнаем, отпущены ли две кнопки сейчас
   boolean button1IsUp = digitalRead(2);
   boolean button2IsUp = digitalRead(4);

   // если кнопка 1 была отпущена и не отпущена
   if (button1WasUp && !button1IsUp) {
      delay(10);
      // повторно считываем сигнал с кнопки 1
      button1IsUp = digitalRead(2);
      if (!button1IsUp) { digitalWrite(10, LOW); }
   }

   // если кнопка 2 была отпущена и не отпущена
   if (button2WasUp && !button2IsUp) {
      delay(10);
      // повторно считываем сигнал с кнопки 2
      button2IsUp = digitalRead(4);
      if (!button2IsUp) { digitalWrite(10, HIGH); }
   }

   // запоминаем состояние двух кнопок ардуино
   button1WasUp = button1IsUp;
   button2WasUp = button2IsUp;
}

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

  1. данный пример программы позволяет включать светодиод нажатием одной кнопки и выключать светодиод нажатием второй кнопки;
  2. задержка Ардуино позволяет избежать «дребезг контактов» кнопки и исключить возможность ложного срабатывания.

Следующий пример тоже потребует для подключения к Ардуино две кнопки, два светодиода, как на предыдущей схеме. Но вместо простого включения/выключения диода, мы будем увеличивать и уменьшать яркость светодиода с помощью ШИМ сигнала микроконтроллера. Загрузите пример программы для «Светодиод и кнопка Ардуино ШИМ», чтобы получить понятие о принципе работы кнопки с Arduino Uno.

Скетч. Управление яркостью светодиода кнопкой Ардуино

#define PLUS_BUTTON   2
#define MINUS_BUTTON  4

int brightness = 100;
boolean plusUp = true;
boolean minusUp = true;
 
void setup() {
   pinMode(10, OUTPUT);
   pinMode(PLUS_BUTTON, INPUT_PULLUP);
   pinMode(MINUS_BUTTON, INPUT_PULLUP);
}
 
void loop() {
   analogWrite(10, brightness);
  
   // реагируем на нажатия кнопки с помощью функции handleClick
   plusUp = handleClick(PLUS_BUTTON, plusUp, +20);
   minusUp = handleClick(MINUS_BUTTON, minusUp, -20);
}

boolean handleClick(int buttonPin, boolean wasUp, int delta) {
   boolean isUp = digitalRead(buttonPin);
   if (wasUp && !isUp) {
      delay(10);
      isUp = digitalRead(buttonPin);
      // если был клик кнопки, меняем яркость в пределах от 0 до 255
      if (!isUp)
         brightness = constrain(brightness + delta, 0, 255);
   }
   return isUp;
}

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

  1. для подключения светодиода следует использовать пин с ШИМ модуляцией;
  2. начальное значение яркости равен ста, в программе прирост и уменьшение яркости (20) можно поменять по своему усмотрению.

Заключение. Мы рассмотрели сразу несколько примеров для управления светодиодом Ардуино с помощью кнопки. Вы узнали, что светодиодом можно управлять с помощью одной кнопки, или производить включение/выключение двумя кнопками. Кроме того, можно менять яркость с помощью кнопки и ШИМ сигнала. Все рассмотренные примеры можно использовать в различных проектах на Arduino для начинающих.

Управление RGB лентой с помощью Andurino

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

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

Аналогично построено и управление RGB лентой Arduino:

Аrduino RGB контроллер лучше собирать на полевых транзисторах.

Для плавного управления яркостью можно использовать две кнопки. Одна будет увеличивать яркость свечения, другая уменьшать.

Скетч управления яркостью светодиодной ленты Arduino

int led = 120; устанавливаем средний уровень яркости

void setup() {pinMode(4, OUTPUT);  устанавливаем 4й аналоговый порт на выводpinMode(2, INPUT);

pinMode(4, INPUT);  устанавливаем 2й и 4й цифровой порт на ввод для опроса кнопок} void loop(){

button1 = digitalRead(2);

button2 = digitalRead(4); if (button1 == HIGH)  нажатие на первую кнопку увеличит яркость{ led = led + 5;

analogWrite(4, led); } if (button2 == HIGH)  нажатие на вторую кнопку уменьшит яркость{ led = led — 5;

analogWrite(4, led); }

При удержании первой или второй кнопки плавно изменяется напряжение, подаваемое на управляющий контакт электронного ключа. Тогда и произойдет плавное изменение яркости.

3 Некорректное подключение кнопки

Чтобы подключить нормально разомкнутую тактовую кнопку к Arduino, можно поступить самым простым способом: один свободный проводник кнопки соединить с питанием или землёй, другой – с цифровым выводом Arduino. Но, вообще говоря, это неправильно. Дело в том, что в моменты, когда кнопка не замкнута, на цифровом выводе Ардуино будут появляться электромагнитные наводки, и из-за этого возможны ложные срабатывания.

Неправильное подключение кнопки к Arduino

Чтобы избежать наводок, цифровой вывод обычно подключают через достаточно большой резистор (10 кОм) либо к земле, либо к питанию. В первом случае это называется «схема с подтягивающим резистором», во втором – «схема со стягивающим резистором». Давайте рассмотрим каждую из них.

Поделитесь в социальных сетях:FacebookTwitterВКонтакте
Напишите комментарий