Site Loader

Содержание

arduino плавное включение светодиода — ComputerMaker.info

Автор admin На чтение 5 мин.

Рассмотрим на этом занятии плавное включение светодиода на Arduino с помощью ШИМ (PWM). Также подробно рассмотрим цикл for в языке программирования C++.

Рассмотрим на этом занятии плавное включение светодиода с помощью ШИМ (PWM) на Arduino. Вспомним на занятии, как подключить светодиод и, что такое ШИМ (Широтно-Импульсная Модуляция). Также мы подробно рассмотрим цикл for в языке программирования C++, который служит для повторения операторов, заключенных в конструкцию (операторы, находящиеся внутри фигурных скобок в скетче).

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

Чтобы вспомнить, что такое Ардуино, используем простой скетч плавного включения светодиода. Для этого можно использовать цикл for. Заголовок данной конструкции состоит из трех частей: for (initialization; condition; increment) — initialization выполняется один раз, далее проверяется условие

condition, если условие верно, то выполняется приращение increment и цикл повторяется пока верно условие (condition).

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

Плавное мигание светодиодом с помощью ШИМ

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

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

Схема. Плавное мигание светодиодом на Ардуино

Рассмотрим на этом занятии плавное включение светодиода на Arduino с помощью ШИМ (PWM). Также подробно рассмотрим цикл for в языке программирования C++.

Рассмотрим на этом занятии плавное включение светодиода с помощью ШИМ (PWM) на Arduino. Вспомним на занятии, как подключить светодиод и, что такое ШИМ (Широтно-Импульсная Модуляция). Также мы подробно рассмотрим цикл for в языке программирования C++, который служит для повторения операторов, заключенных в конструкцию (операторы, находящиеся внутри фигурных скобок в скетче).

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

Чтобы вспомнить, что такое Ардуино, используем простой скетч плавного включения светодиода. Для этого можно использовать цикл for. Заголовок данной конструкции состоит из трех частей: for (initialization; condition; increment) —

initialization выполняется один раз, далее проверяется условие condition, если условие верно, то выполняется приращение increment и цикл повторяется пока верно условие (condition).

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

Плавное мигание светодиодом с помощью ШИМ

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

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

Схема. Плавное мигание светодиодом на Ардуино

Держатель провода и радиодетали

Светильник напечатанный на 3D принтере.

Радиоуправляемая машина на arduino nrf24l01

В первом уроке Мигаемвстроенным на плату Arduino светодиодом мы рассмотрели как можно мигать встроенным светодиодом. Но кроме мигания можно плавно включать и выключать светодиод с подошью

ШИМ или в английском PWM (Pulse-Width Modulation) широтно-импульсная модуляция . Что такое ШИМ рассказывать не буду. В интернете очень много информации по данной теме.

Для урока нам понадобиться:

Подключение будет аналогично второму уроку: Мигаем светодиодом на Arduino. Только Переключим на пин на котором есть ШИМ. Их иногда обозначают волнистой чертой «

» или обводят кружочками или ещё как-то выделяют среди прочих. На Arduino Uno это «

Подключим к з пину, у нас получится следующая схема подключения.

Так как ШИМ в Arduino 8 bit соответственно в программе мы можем использовать любое значение от

0 до 225.

int — означать что у нас переменные целочисленные от -32 768 до 32 767.

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

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

Для работы с ШИМ инициализируем выход как аналоговый analogWrite().

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

Для того чтобы переменная brightness не выходила за границы ШИМ (от 0 до 255 ) сделаем проверку:

Оператор If означает логическое ЕСЛИ. || логическое ИЛИ. == — это символ равенства двух значений. В нашем случае двух целочисленных значений.

Прочитаем строчку: ЕСЛИ переменная brightness равная 0 ИЛИ равны 255 то выполняем действия в .

В у нас вырождение fadeAmount = -fadeAmount ; Данное вырождение меняет знак на противоположный.

И так что же у нас происходит в цикле :

brightness увеличивается до тех пор пока не станет равным 255. После чего переменная fadeAmount меняет знак на минус а brightness начинает уменьшаться. После того как brightness становиться равным 0. fadeAmount снова меняет знак на положительный. И так все повторяется пока мы не отключим питание.

Arduino nano и RGB-светодиод с общим анодом

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

На фото выше представлены два светодиода, один обычный, второй rgb. Как видим, у ргб 4 ноги, это обусловлено тем, что, по сути, RGB-светодиод — это три светодиода в одном корпусе: красный, зеленый и синий (Red, Gren, Blue). Общий анод и по одному катоду на три цвета. Давайте подключим наш светодиод к ардуино нано и для начала мигнем по очереди тремя цветами. Посмотрим как подключить RGB светодиод с общим анодом к ардуино.

На схеме я изобразил наш RGB-светодиод в виде трех отдельных светодиодов, соединенных вместе анодами. Этот совместный анод подсоединяем на плюс питания, через катоды будем управлять свечением, их подключаем к выводам ардуино.

На схеме я не указал резисторы, их можно подключить как на каждый анод отдельно, так и один резистор на катод. Я подключил три резистора по 240 Ом между каждым катодом и выводом ардуины. Собрал все на макетной плате, получилось как-то вот так.

Электрическая часть схемы закончилась, переходим к программной. Вся суть нашей электрической части в общем аноде — на катоды нам нужно подавать минус. То есть, конфигурируем вывод ардуины в качестве выхода, устанавливаем на нем низкое состояние (логический ноль) — светодиод светится. При высоком состоянии (логическая единица) светодиод не светится. Поскольку мы управляем яркостью свечения с помощью ШИМа, то все расчеты для высчитывания яркости придется оборачивать обратно пропорционально. ШИМ может принять одно из 256 значений — от 0 до 255 (потому как регистр восьмибитный). Для того, чтоб зажечь светодиод — нужен 0. Для того, чтоб потушить — 255. Напишем скетч для поочередного мигания тремя цветами нашего RGB-светодиода.

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

Итак, у нас теперь есть схема подключения RGB-светодиода к Arduino nano, понимание как это всё устроено и как работает. Аналогичным образом можно управлять и RGB лентой. В дальнейшем рассмотрим алгоритм переливания всеми цветами радуги.

Поморгаем светодиодом. 6 вариантов | PublicatorBar.ru

Предлагаю 5 вариантов поморгать светодиодом.

НАМ ПОНАДОБИТСЯ

  • Плата Arduino Uno
  • Один светодиод
  • Один резистор сопротивлением 220-270 Ом.
  • Провода
  • Макетная плата

СХЕМА ПОДКЛЮЧЕНИЯ

 

СКЕТЧ

1
2
3
4
5
6
7
8
9
void setup() {
pinMode(13, OUTPUT);       // Инициализируем цифровой pin 13 как выход
}
void loop() {              // бесконечный цикл
digitalWrite(13, HIGH);    // Включаем светодиод (HIGH выставляет высокий уровень)
delay(1000);               // Задержка 1 секунда
digitalWrite(13, LOW);     // Выключаем светодиод (LOW выставляет низкий уровень)
delay(1000);               // Задержка 1 секунда
}

Чтобы не переписывать в коде программы номер пина, при смене цифрового выхода, удобно присвоить в начале программы данному пину какое-нибудь имя.

например:

int led = 13;

и тогда в коде нужно заменить «13» на «led».

1
2
3
4
5
6
7
8
9
10
int led = 13;            // Присваиваем имя цифровому выводу 13
void setup() {
pinMode(led, OUTPUT);    // Инициализируем цифровой pin 13 как выход
}
void loop() {            // бесконечный цикл
digitalWrite(led, HIGH); // Включаем светодиод (HIGH выставляет высокий уровень)
delay(1000);             // Задержка 1 секунда
digitalWrite(led, LOW);  // Выключаем светодиод (LOW выставляет низкий уровень)
delay(1000);             // Задержка 1 секунда
}

 

Также можно моргать светодиодом используя команду инвертирования:

1
2
3
4
5
6
7
8
9
10
11
int led = 13;                       // Подключаем светодиод к пину 13, присваиваем имя "led"
int state = LOW;                    // Устанавливаем начальное состояние светодиода LOW
void setup()
{
pinMode(led, OUTPUT);               // Инициализируем цифровой порт "led" как выход
}
void loop()
{
digitalWrite(led, state = !state);  // меняем значение порта "led" на противоположное
delay(1000);                        // Пауза 1 секунда
}

Код с использованием millis() и без задержек delay(), позволяет освободить процессор для выполнения других задач:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
const int ledPin =  13;          // Присваиваем имя цифровому выводу 13  
int ledState = LOW;              // Устанавливаем начальное состояние светодиода LOW
 
unsigned long previousMillis = 0;// Используем переменную типа unsigned long, для хранения предыдущих обновлений светодиода
const long interval = 1000;      // Не изменяемая константа, задает интервал мигания светодиода в милисекундах
 
void setup()
 {
    pinMode(ledPin, OUTPUT);     //Инициализируем цифровой pin 13 как выход
 }
 
void loop()
{
  unsigned long currentMillis = millis(); //переменная текущего времени
 
  if(currentMillis - previousMillis >= interval) { // разница между текущим и последним зажиганием светодиода больше заданного интервала
        previousMillis = currentMillis;   // сохраняем последнее время, зажигания светодиода
 
       if (ledState == LOW) //если светодиод не горит, то включаем и наоборот
      ledState = HIGH;
    else
      ledState = LOW;
 
      digitalWrite(ledPin, ledState); //записываем в порт светодиода состояние ledState (HIGH или LOW)
  }
}

Еще вариант с использованием millis():

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int led = 13;             // Подключаем светодиод к пину 13, присваиваем имя "led"
int state = LOW;          // Устанавливаем начальное состояние светодиода LOW
 
void setup()
{
  pinMode(led, OUTPUT);   // Инициализируем цифровой порт "led" как выход
}  
 
 
int ms, ms1 = 0;        //назначаем переменные и приравниваем их к 0.(можно использовать uint32_t)
boolean stat    = true; //Переменные типа boolean могут принимать одно из двух значений: true или false.
 
void loop() {
   ms = millis();
 
   if( ( ms - ms1 ) > 1000 || ms < ms1 ) // Событие срабатывает каждые 1000 мс   
   {
    ms1 = ms;  
    digitalWrite(led, stat); 
    stat = !stat;  // Инвертируем порт "led"  
   }
}

И последний вариант с использованием функции random(), которая генерирует псевдо-случайные числа:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int led = 13;             // Подключаем светодиод к пину 13, присваиваем имя "led"
int state = LOW;          // Устанавливаем начальное состояние светодиода LOW
long randTime;            // Переменная для хранения сгенерированного значения времени
 
void setup()
{
  pinMode(led, OUTPUT);   // Инициализируем порт "led" как выход
}  
 
void loop()
{
  randTime = random(100, 1000);  // генерируем случайное значение времени в диапазоне от 100 до 1000
  delay(randTime);               // Пауза со случайным временем  
  digitalWrite(led, state = !state); // меняем значение порта "led" на противоположное
}

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

Алкопрост отзывы смотрите на http://www.alcoblocker.top .

Инструкция подключения светодиодов к Ардуино: настраиваем, мигаем | Лампа Эксперт

Как и обещали мы будем публиковать статьи посвященные изучению Arduino, используя купленный нами стартовый набор https://zen.yandex.ru/media/lampexpert/fotoobzor-arduino-starter-kit—nabora-dlia-nachinaiuscih-5daebbba7cccba00adeae6bf . Сегодня мы разберемся с тем, как подключить ардуино к компьютеру и начать на ней что-то программировать.

Для этого сегодня нам нужны:

  • Плата Arduino.
  • USB-шнур для подключения к компьютеру.
  • Светодиоды одноцветные и RGB-светодиод.
  • Резисторы для светодиодов.
  • Макетная плата, перемычки, источник питания для макетной платы, крона (можно обойтись и без всего этого, но желательно это иметь).

Подключение и настройка

Есть несколько вариантов плат Arduino, они отличаются не только стоимостью, но и USB-TTL конвертером, он нужен, чтобы программировать главный микроконтроллер платы (ATMEGA328) прямо через USB-порт вашего компьютера без дополнительных программаторов. Например, в моей плате используется для связи с компьютером микроконтроллер типа AT16U2 и драйвера на него установились автоматически. Но часто попадаются дешевые платы, где в этих же целях используется микросхема Ch440 (Ch441). В этом случае нужно скачать под неё драйвер, он легко находится в сети по запросу «Ch440 драйвер windows 7/10»

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

Ссылка на скачивание Arduino IDE с официального сайта

Ссылка на скачивание Arduino IDE с официального сайта

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

Процесс установки Arduino IDE

Процесс установки Arduino IDE

Ближе к концу нам предложат установить дополнительные драйвера и ПО, также соглашаемся. Я не стал делать скриншоты всех всплывающих окон (их было 3), а просто нажал «Установить» в каждом из них. В конце нажимаем на Close. Подключаем плату Arduino к компьютеру, если нужно — устанавливаем драйвера, о которых говорилось выше, если нет — ждем пока всё установится само. В конечном итоге, в диспетчере устройств должна появится ваша ардуина.

В диспетчере задач должно появится новое устройство

В диспетчере задач должно появится новое устройство

Далее запускаем программу. В меню «Инструменты» должно быть «Порт: «название порта название платы», и в подменю стоять галочка, как на скриншоте ниже, у меня там было пусто, и я поставил. Если у вас не UNO, а nano например — выбирайте соответствующий пункт меню.

Настройки программы Arduino IDE

Настройки программы Arduino IDE

При подключении ардуино к компьютеру она начинает мигать желтым светодиодом, он с завода припаян к 13-му пину, а для проверки работоспособности с завода в платы предустанавливается прошивка с мигалкой по 13-му пину, в наборе базовых примеров кода Arduino IDE он есть под названием Blink.

Стандартная программа для проверки Arduino — это своего рода «Hello World» в мире микроконтроллеров

Стандартная программа для проверки Arduino — это своего рода «Hello World» в мире микроконтроллеров

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

Эта часть кода повторяется постоянно в процессе работы микроконтроллера

Эта часть кода повторяется постоянно в процессе работы микроконтроллера

Разберем эти команды. digitalWrite – это запись цифрового состояния на указанный пин (здесь это LED_BUILTIN — это и есть 13-й пин платы Ардуино), HIGH – значение, которое записывается, т.е. логическая единица. Результатом выполнения этой команды будет появление на 13-м пине высокого логического уровня, напряжения питания микроконтроллера, в нашем случае это 5 вольт.

Далее идёт функция delay(1000) это задержка, а в скобках её аргумент — время в миллисекундах.

После нее вновь digitalWrite, но уже со значением LOW — это низкий логический уровень, т.е. 0 вольт. После чего опять задержка.

В конце каждой команды должна стоять точка с запятой — это важно.
Светодиод мигает с периодом в 2 секунды, как и написано в программном коде

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

Таким образом, светодиод включается и выключается с задержкой в 1 секунду, если мы поставим вместо 1000, в аргумент delay, например, 200 и 1000 (в первом и втором случае), то у нас светодиод будет вспыхивать на 1/5 секунды, а потом выключаться и вновь вспыхивать через 1 секунду.

Изменяем порядок мигания

Изменяем порядок мигания

Чтобы прошить наш код в Arduino нужно нажать на вот эту кнопку

Чтобы прошить наш код в Arduino нужно нажать на вот эту кнопку

Но что, если нам нужно подключить несколько светодиодов к разным пинам? Всё просто, по подобию пишем вот такой код:

Первое из изменений, на которые следует обратить внимание, это часть кода в функции void setup(). Она выполняется 1 раз при включении микроконтроллеры и в ней задаются какие-либо параметры, в нашем случае, указываются номера пинов платы и их функция (работать как вход или как выход), синтаксис здесь следующий pinMode (номер порта, назначение). Номера пинов также нанесены на печатной плате всех ардуино, это очень удобно. Дальше просто по очереди микаем каждым из светодиодов, подключенных к 12, 11, 10. 9 пинам.

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

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

Резисторы для светодиодов нужно рассчитывать по формуле R=Uпит-Uпад/Iном, где Uпит — напряжение питания, Uпад – падение напряжения на светодиоде (у каждого цвета разное). Я не рассчитывал, просто взял заведомо больше чем нужное сопротивление — каждый по 220Ом.

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

Распиновка Arduino UNO

Распиновка Arduino UNO

Результат выполнения этого кода — светодиоды загораются каждый по очереди, подобно светофору

Результат выполнения этого кода — светодиоды загораются каждый по очереди, подобно светофору

С обычными светодиодами разобрались, теперь же давайте перейдем к RGB-светодиодам. Что это вообще такое? Фактически это 3 обычных одноцветных кристалла соединены между собой в одном корпусе, существуют две схемы соединения RGB-светодиодов или чего-нибудь подобного (например, семисегментных индикаторов), их вы видите на рисунке ниже.

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

Какой из выводов общий видно через прозрачную колбу он соединен с самым крупным элементом внутри

Какой из выводов общий видно через прозрачную колбу он соединен с самым крупным элементом внутри

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

Код для перебора трёх цветов RGB-светодиода

Код для перебора трёх цветов RGB-светодиода

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

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

Пример работы RGB-светодиода с ардуино

Пример работы RGB-светодиода с ардуино

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

Код для перебора 7 цветов RGB-светодиода

Код для перебора 7 цветов RGB-светодиода

Перебор цветов RGB-светодиода

Перебор цветов RGB-светодиода

У пинов № 9, 10, 11, есть возможность выдавать ШИМ-сигнал, что это такое и как это работает мы разберем в следующих статьях, а пока я покажу, как это можно применить с RGB-светодиодом. Чтобы цвета не резко менялись, а плавно переходили из одного в другой, нужно использовать команду analogWrite, таким образом, на предназначенных для этого пинах формируется ШИМ-сигнал, с помощью которого можно регулировать яркость светодиодов. Я решил для реализации этого эффекта использовать цикл for, возможно можно его проще реализовать, но я думаю, что для демонстрации подойдет. Скорость перелива задаётся командой задержки (delay), после того как достигается максимум одного цвета, начинает нарастать следующий цвет, после чего первый цвет начинает угасать. За основу я выбрал код плавного мигания светодиодом из набора примеров (fade). Вы можете сами проанализировать приведенный ниже код, там, где написано brightness + fadeamount — там происходит повышение интенсивности свечения цвета, а где цикл с brightness – fadeamount — снижение.

Код плавной смены цветов RGB-светодиода

Код плавной смены цветов RGB-светодиода

Видео инструкция

Вместо заключения

На этом закончим разговор о подключении светодиодов к ардуино и управлении ими. Целью этой статьи было показать, как можно подключать светодиоды и управлять ими, а также был приведен пример плавной регулировки яркости светодиодов с помощью ШИМ. В следующих статьях мы подробнее рассмотрим вопросы ввода каких-либо данных и взаимодействия с Arduino, вопросы, связанные с ШИМ-регулированием, чтением аналоговых сигналов и прочее. Если вам интересно развитие этого проекта — подписывайтесь, ставьте лайки и оставляйте комментарии. Также хотелось бы увидеть какие-либо практические советы по реализации чего-либо.

Источник: https://lampaexpert.ru/obzory/master-klassy/urok-po-arduino-1-podklyuchaem-nastraivaem-migaem-odnotsvetnymi-i-rgb-svetodiodami

L1: Включение светодиода

Содержание

  1. Материалы
  2. Подключите светодиод к контакту питания 5 В на Arduino
    1. Шаг 1: Оберните резистор вокруг ножки светодиода
    2. Шаг 2: Подключите компоненты к Arduino
    3. Шаг 3: Подключите Arduino к источнику питания
    4. Давайте проанализируем нашу схему
      1. Шаг 1: Определите узлы и то, что мы знаем
      2. Шаг 2: Найдите падение напряжения на резисторе
      3. Шаг 3: Рассчитайте ток
    5. Максимальное потребление тока
      1. Максимальное количество светодиодов в серии
      2. Максимальное количество светодиодов, подключенных параллельно
  3. Понижение напряжения питания
  4. Как сделать светодиод менее ярким?
    1. Подключение светодиода к 3.Вывод питания 3 В
    2. Полное видео-пошаговое руководство
    3. Использование резисторов большего номинала
  5. Следующий урок

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

Рисунок Движение тока в цепи показано анимированными желтыми кружками.Эта визуализация представляет собой грубую абстракцию, предназначенную для подчеркивания направления текущего потока. Более точная визуализация показала бы, что электроны уже распределены по проводу до того, как будет приложено напряжение. См. Нашу серию статей «Введение в электронику», в частности урок по напряжению, току и сопротивлению.

Материалы

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

Arduino LED Резистор
Arduino Uno, Leonardo или аналогичный Красный светодиод 220 Ом резистор

Мы будем использование Arduino Leonardo для этих вводных уроков по работе с микроконтроллерами, но подойдет любая плата 5 В, включая Arduino Uno, METRO 328 от Adafruit, RedBoard от Sparkfun, и т. д. Каждая из этих плат имеет одинаковое расположение выводов и общие характеристики.

Подключите светодиод к контакту питания 5 В Arduino

Шаг 1. Оберните резистор вокруг ножки светодиода

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

Чтобы обмотать компоненты проволокой, просто скрутите ножки вместе следующим образом:

Видео. Пример обмотки провода резистора 220 Ом непосредственно вокруг анода светодиода

Шаг 2: Подключите компоненты к Arduino

Вставьте светодиод + резистор в Arduino: катод светодиода (короткая ножка) к GND и анод светодиода (длинная ножка) + резистор к источнику напряжения Arduino, к которому вы можете получить доступ через вывод 5V.

Шаг 3: Подключите Arduino к источнику питания

Теперь подключите Arduino к источнику питания, и светодиод должен загореться.Ты сделал это!

Вот фотография сделанной мной версии. Мне было проще протянуть проводку через Arduino от порта 5V до GND на противоположной стороне.

Для питания вы можете использовать USB-кабель (на который подается 5 В) или аккумулятор на 9 В (на 9 В). В любом случае Arduino подает 5V через вывод 5V. Как? С помощью регулятора напряжения. См. «Подробнее» ниже.

Питание от USB Питание 9 В
При питании от USB вывод 5 В обеспечивает 5 В Используя цилиндрический разъем Arduino, мы можем подключить внешний источник питания, например 7 -12 В настенный адаптер или аккумулятор на 9 В.Внутренний стабилизатор напряжения Arduino снижает эти более высокие напряжения для вывода чистого 5 В

Давайте проанализируем нашу схему

Как и в нашем уроке по светодиодам, давайте проанализируем, сколько тока проходит через эту простую схему на основе светодиодов. Для этого нам сначала нужно определить падение напряжения на резисторе \ (V_R \), а затем использовать закон Ома, чтобы вычислить ток (\ (I = \ frac {V_R} {R} \)).

Шаг 1. Определите узлы и то, что мы знаем

Мы всегда начинаем с идентификации узлов и того, что мы знаем.Мы знаем, что пока выполняется \ (V_f \), на нашем резисторе будет падение напряжения \ (V_R \) и падение напряжения \ (V_D \) на светодиоде.

Согласно законам Кирхгофа, мы знаем, что полное падение напряжения на резисторе и светодиоде (\ (V_R + V_D \)) должно равняться нашему напряжению питания \ (V_S = 5V \). Из нашего урока светодиодов мы знаем, что наша цепь отключена до тех пор, пока не будет достигнуто «включено» или «прямое» напряжение нашего светодиода, которое для красного светодиода составляет ~ 2В. Таким образом, мы можем установить \ (V_D = 2V \) и найти \ (V_R \).

Шаг 2: Найдите падение напряжения на резисторе

Решение для \ (V_R \):

\ [V_S = V_R + V_D \\ V_R = V_S — V_D \\ V_R = 5V — 2V = 3V \]

Шаг 3: Найдите значение тока

Из закона Ома мы знаем, что полный ток в нашей цепи равен падению напряжения на резисторе \ (V_R \), деленному на значение сопротивления \ (R \). То есть \ (I = \ frac {V_R} {R} \). И мы знаем, что \ (V_R = 3V \) и \ (R = 220Ω \). Таким образом, ток в нашей цепи равен:

\ [I = \ frac {V_R} {R} \\ I = \ frac {3V} {220Ω} = 0.014A = 13,6 мА \]

Итак, с выводом питания 5 В наша схема потребляет ток 13,6 мА. Это много или мало? Давайте рассмотрим это в контексте ниже.

Максимальное потребление тока

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

  • Выводы ввода / вывода : Максимальный ток, потребляемый любым одиночным выводом ввода / вывода , который мы еще не использовали, но мы будем использовать в следующем уроке, составляет 40 мА (более безопасный, непрерывный диапазон ~ 20 мА).Суммарный ток на всех выводах ввода / вывода вместе составляет 200 мА . Если мы превысим эти значения, мы можем повредить нашу плату Arduino или базовый микроконтроллер (ATmega328 для Uno или ATmega32u4 для Leonardo)

  • Контакты источника питания : Выходной контакт 5V может подавать ~ 400- 500 мА при питании от USB и ~ 900-1000 мА при использовании внешнего адаптера питания. Выходной контакт 3,3 В может выдавать ~ 150 мА; однако, если у вас есть оба 3.Выходные контакты 3 В и 5 В подключены, любой ток, потребляемый с контакта 3,3 В, будет засчитан в общий ток 5 В.

Единственный предохранитель — это сбрасываемый предохранитель на USB-порту, который ограничивает ток до 500 мА на выходном контакте 5 В (но только при питании от USB).

В Интернете ведется множество дискуссий о максимальном потреблении тока Arduino Uno и Леонардо. Лучший ресурс, который я нашел, — это сообщения StackExchange, которые также содержат ссылки на таблицы данных (post1, post2).

Максимальное количество светодиодов в серии

Тогда возникает интересный вопрос: с Arduino, питаемым через USB (максимальный ток 500 мА), сколько красных светодиодов вы могли бы последовательно подключить к контакту питания 5 В? Как насчет параллельно? Какой ограничивающий фактор для каждого?

Ну, для простой последовательной конфигурации общее количество последовательных светодиодов ограничено напряжением питания, которое составляет 5В. С резистором 200 Ом и красным светодиодом с «прямым» напряжением \ (V_f = 2V \) мы ограничены максимум двумя светодиодами: \ (2 * 2V = 4V \).Однако на практике мне удалось подключить три светодиода последовательно (потому что светодиод начинает немного включаться при ~ 1,7–1,8 В), хотя они были довольно тусклыми. См. Таблицу и изображение ниже для моих измерений.

Резистор Количество красных светодиодов в серии Падение напряжения на каждом светодиоде Падение напряжения на резисторе Ток
200 Ом 1 2,02 В 2,95 14.9 мА
200 Ом 2 1,92 В 1,21 В 6,1 мА
200 Ом 3 1,71 В 0,021 В 0,1 мА
200 Ом 4 1,01 В ~ 0 В ~ 0 мА

Таблица . Для этого эмпирического измерения я использовал КРАСНЫЕ светодиоды Sparkfun 5 мм с рассеянным светом.

Вот изображение испытательной установки и схем для измерений выше:

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

Наконец, мы также можем исследовать эту схему в симуляторе, который отражает наши эмпирические измерения:

Видео. A CircuitJS моделирование различных серий светодиодов с питанием 5 В.

Максимальное количество светодиодов, подключенных параллельно

Для параллельной конфигурации ограничивающим фактором является общий ток, который мы можем получить, который с выводом 5V, запитанным от USB, составляет 500 мА. Сколько нужно красных светодиодов, чтобы превысить 500 мА при использовании резисторов 200 Ом?

Ну, в параллельной конфигурации каждая ветвь резистор + светодиод получает ~ \ (I = \ frac {V_R} {R} = \ frac {3V} {200} = 15 мА \). Таким образом, максимальное количество параллельно включенных светодиодов равно \ (\ frac {500mA} {15mA} = 33,3 \), округленное до 34.

Рис. 34 параллельно включенных светодиода потребляют ток 514,1 мА, что превышает максимальное значение выходного вывода 5 В на Arduino (при питании от USB). Вот ссылка CircuitJS.

Я попытался немного «нагружать» максимальные значения, используя порт USB на старом MacBook Pro (не делайте этого!). Несмотря на то, что я превысил как предел 500 мА с выходным контактом 5 В (563 мА), так и предел 150 мА с контактом 3,3 В (314 мА), я не сработал предохранитель. Однако я оставил плату подключенной только на короткое время.

Рисунок. Я «нагрузил» выходной контакт 5 В, используя USB для питания. Не пытайтесь! Несмотря на превышение номинальных максимумов, мне не удалось сработать внутренний предохранитель Arduino на источниках питания 5 В или 3,3 В. Обратите внимание, что контакты ввода / вывода не имеют такой защиты, поэтому вы можете повредить плату, если перегрузите ток.

Понижение напряжения источника питания

Если мы подключим сетевой адаптер 7–12 В или батарею на 9 В к гнезду Arduino, как тогда Arduino преобразует эти более высокие напряжения в 5 В? Использование компонента, называемого стабилизатором напряжения, который может принимать различные значения постоянного напряжения и понижать (но не повышать) до стабильного постоянного напряжения.Вы можете купить и использовать регуляторы напряжения в собственных проектах. Если вы хотите узнать больше о подсистеме питания Arduino Uno, прочтите этот пост в блоге Technobyte.

Как сделать светодиод менее ярким?

Яркость светодиода контролируется током . Итак, чтобы уменьшить яркость светодиода, нам нужно уменьшить ток. Но как? Вспомните закон Ома: \ (V = I * R \) или \ (I = \ frac {V} {R} \). Таким образом, мы можем уменьшить ток:

  1. Уменьшить напряжение
  2. Увеличить сопротивление

В будущих уроках мы покажем, как управлять выходным напряжением программно , написав код для микроконтроллера Arduino.Но пока давайте уменьшим яркость светодиода, сначала уменьшив напряжение, используя вывод 3,3 В Arduino (а не вывод 5 В), а затем используя резисторы большего номинала. Это похоже на действия в наших уроках светодиодов, но теперь мы используем выводы Arduino в качестве источника напряжения.

Подключение светодиода к контакту питания 3,3 В

Arduino Uno обеспечивает как источник питания 5 В (который мы только что использовали), так и источник питания 3,3 В.

Давайте переместим анод светодиода (длинная ножка) с вывода 5V на вывод 3.Вывод 3V, но оставьте резистор 220 Ом. Что вы наблюдаете? Светодиод должен быть менее ярким! Это связано с тем, что в цепи 3,3 В. протекает меньший ток.

Напомним, что для 5 В мы имеем \ (I = \ frac {V_R} {R} = \ frac {3V} {220Ω} = 13,6 мА \). С выходным контактом 3,3 В это значение падает до \ (I = \ frac {V_R} {R} = \ frac {1V} {220Ω} = 4,5 мА \)

Вот фотография рабочего стола светодиода, подключенного к Порт 3,3 В. Светодиод заметно менее яркий:

Полное видео-пошаговое руководство

Вот полное видео-пошаговое руководство по намотке резистора вокруг анодной ножки светодиода, подключению цепи к 5 В и заземлению, а затем переключению с 5 В на 3.Питание 3 В.

Использование резисторов большего номинала

Мы только что показали, как уменьшение напряжения питания (\ (V_s \)) пропорционально снижает ток и, следовательно, яркость светодиода. Теперь давайте поиграем с резисторами более высокого номинала, такими как 680 Ом, 2,2 кОм или 10 кОм, и посмотрим, как они действуют. Что происходит?

Вы должны заметить, что яркость светодиода уменьшается на , когда сопротивление увеличивается , поскольку яркость светодиода зависит от тока (\ (I = \ frac {V_R} {R} \)).

Мы можем проверить эти теоретические предсказания, используя мультиметр для измерения (\ (V_s \)), фактических значений резисторов и тока \ (I \). Мы провели эти измерения с помощью мультиметра Fluke 115 True RMS.

Несколько важных замечаний:

  • Каждый электронный компонент, который мы используем, от светодиода до резисторов до напряжения питания (\ (V_s \)), будет немного отличаться от идеального. Например, наши углеродные пленочные резисторы имеют допуск 5% (обозначен золотой полосой), и я измерил напряжение питания на Arduino Uno, как (\ (V_s \) = 4.902V), а не 5V.
  • Fluke 115 обеспечивает точность до трех знаков. Итак, мультиметр показывает 0,013 А, 0,004 А, и т. Д. Таким образом, невозможно сравнить наши теоретические прогнозы с 4-м знаком точности (что влияет на наши сравнения с низким током — миллиампер).

Опять же, мы предполагаем \ (V_f = 2V \) для нашего красного светодиода (мы также можем измерить это непосредственно в каждой цепи):

Если вы хотите узнать больше о том, как использовать мультиметр, вот несколько Руководства по началу работы:

У них есть мультиметры в Tinkercad Circuits, так что вы также можете использовать их и играть с ними там (если у вас их нет дома).

Следующий урок

В следующем уроке мы узнаем, как программно управлять выходным напряжением цифрового входа / выхода для переключения между LOW (0 В) или HIGH (5 В) с помощью digitalWrite (int pin , значение int) .

Далее: мигание светодиода с помощью Arduino


Все содержимое является открытым исходным кодом и производится лабораторией Makeability Lab и профессором Джоном Э. Фрелихом. Нашли ошибку? Отправьте сообщение о проблеме на GitHub.

Действительно ли мне нужны резисторы при управлении светодиодами с помощью Arduino?

40 участок,

Я должен сказать, что управление светодиодом без резистора НЕ РЕКОМЕНДУЕТСЯ, если вы не знаете, что делаете.Однако, если вы понимаете, как ведет себя светодиод, вы можете безопасно управлять им без резистора. На самом деле, часто лучше управлять светодиодом без токоограничивающего резистора.

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

Следует ли управлять светодиодом с ШИМ, установленным на постоянный рабочий цикл (т.е. 5 В ШИМ при рабочем цикле 34% для достижения среднего напряжения 1,7 В)?

Да и нет. Использование ШИМ может работать так же хорошо, как и приложение определенного напряжения (если вы будете осторожны), но есть способы получше.О чем следует беспокоиться при использовании подхода ШИМ.

  1. Важна частота ШИМ. При использовании ШИМ в этом сценарии вы полагаетесь на способность компонентов вашей схемы временно обрабатывать большие токи. Больше всего вас беспокоит то, как светодиод справляется с временным высоким током и как выходная цепь вашего чипа может справиться с временным высоким током. Если эта информация не указана в даташите, значит, авторы даташита были ленивы. НО!!! Если эта информация указана в таблице данных, вы можете безопасно воспользоваться ею.Например, светодиод, который у меня рядом, имеет максимальный ток 40 мА. Тем не менее, он также имеет рейтинг «пикового прямого тока» 200 мА с примечанием, что ток не может оставаться на уровне 200 мА дольше 10 мкс. Тааааааааааааааааааааааач … Я могу управлять светодиодом с напряжением 1,7В (типичное прямое напряжение для светодиодов из таблицы). При рабочем цикле 34% и источнике питания 5 В (34% от 5 В = 1,7 В) среднее напряжение составляет 1,7 В, мне просто нужно убедиться, что время включения ШИМ составляет 10 мкс или меньше. Во время работы ток через светодиод, вероятно, вырастет примерно до 58 мА (58 мА = типичное потребление тока при 1.7В моего диода делят на 34%). 58 мА превышают максимальный постоянный ток моих светодиодов 40 мА на 18 мА. Наконец … мне понадобится частота ШИМ 33,3 кГц или выше, чтобы безопасно управлять моим светодиодом (33,3 кГц = обратная величина [10 мкс времени включения, деленная на 34%, чтобы получить период ШИМ]). В РЕАЛЬНОСТИ я мог безопасно использовать ШИМ для питания моего светодиода с более медленной частотой ШИМ. Причина в следующем: в таблицах данных обычно не указываются все допустимые сценарии работы компонента. Они не описывают эти сценарии, потому что поставщик не хочет тратить время на определение и поддержку использования своего компонента для угловых вариантов использования.Например, с моим светодиодом, если я могу постоянно работать со светодиодом при 40 мА (40 мА — это максимальный номинальный постоянный ток), и я могу работать со светодиодом при 200 мА в течение 10 мкс. Тогда я могу быть на 99,99999% уверен, что могу безопасно управлять светодиодом при 100 мА в течение некоторого периода, превышающего 10 мкс, возможно, близкого к 20 мкс.

ПРИМЕЧАНИЕ. Все компоненты могут безопасно справляться с временными всплесками тока, превышающими их максимальные значения, при условии, что продолжительность всплесков тока составляет МАЛЕНЬКАЯ ДОСТАТОЧНОСТЬ . Некоторые компоненты будут более снисходительными, чем другие, и, если вам повезет, в таблице данных компонента будет указано, насколько хорошо он может справляться с всплесками тока.

  1. Напряжение вашего ШИМ важно. Я продемонстрирую свою точку зрения на примере, а не через объяснение. Если мы используем светодиод, о котором я говорил ранее, мы знаем, что рабочий цикл 34% при 33,3 кГц и 5 В является безопасным. Однако, если бы у нас было напряжение 12 В, нам пришлось бы переработать наши расчеты, чтобы сохранить то же количество тока, протекающего через светодиод. Наш рабочий цикл должен упасть до 14,167% (1,7 В, разделенные на 12 В), а минимальная частота ШИМ должна снизиться до 14,285 кГц (обратное значение [10 мкс, разделенное на 14.167%]). ОДНАКО! , это повод для беспокойства. В сценарии 5 В мы применяем 5 В для 10 мкс, а в сценарии 12 В мы применяем 12 В для 10 мкс. Мы увеличили напряжение более чем вдвое за эти 10 мкс, должны быть некоторые последствия. И да, есть! В моем техническом описании светодиодов нет данных, необходимых для того, чтобы знать, какое напряжение я могу использовать в течение 10 мкс, прежде чем я поврежу свой светодиод. Наверняка 1000V на 10us поджарит мой светодиод. Но как мне узнать, поджарит ли мой светодиод 5 В при 10 мкс? или 12 В на 10 мкс? Если для него нет спецификации, вы рискуете.Итак … 5 В на 10 мкс — это рискованно, но, скорее всего, безопасно.

ПРИМЕЧАНИЕ. Вы можете добавить в схему конденсатор, чтобы усреднить ШИМ и устранить эту проблему.

  1. Вы должны знать возможности выходного контакта, к которому вы также подключили свой светодиод. Самым важным параметром будет максимальный выходной ток. Я считаю, что для Arduino Uno это 40 мА. Вы должны выбрать рабочий цикл ШИМ, при котором среднее напряжение поддерживает ток, проходящий через светодиод, ниже 40 мА.Чтобы узнать, какие напряжения будут производить такой большой ток, вам нужно взглянуть на кривую ВАХ светодиодов (график зависимости тока от напряжения). Для типичного светодиода напряжение от 0,7 В (типичное минимальное напряжение, необходимое для излучения светодиода) до 1,25 В почти наверняка будет безопасным. Почему 1,25 В, вероятно, безопасно? Что ж, большинство светодиодов не превышает 40 мА при 1,25 В даже без токоограничивающего резистора. Еще одна вещь, помогающая защитить кого-то в случае, если они прикладывают слишком большое напряжение, заключается в том, что цифровая выходная цепь Arduino будет иметь собственное выходное сопротивление, это выходное сопротивление будет низким, но даже выходное сопротивление 20 Ом обеспечит значительную количество защиты.Arduino uno имеет импеданс цифрового выхода около 250 Ом. Короче говоря, если вы управляете светодиодом, используя ШИМ при 1,0 В на высокой частоте, для обычного светодиода нет никаких шансов, что вы повредите свой цифровой выход на Arduino Uno.

  2. ШИМ-подход управляет светодиодом по разомкнутому контуру (как и при использовании источника питания 1,7 В без ШИМ). Вы прикладываете к светодиоду среднее напряжение, как раз подходящее значение для включения светодиода, но недостаточно высокое, чтобы повредить светодиод.К сожалению, диапазон напряжения от включенного (и достаточно яркого, чтобы видеть) до поврежденного светодиода очень мал (этот диапазон на моем светодиоде составляет около 0,7 В). Есть несколько причин, по которым 1,7 В, которые вы думаете, что вы применяете, не всегда будет 1,7 В …

а. Изменения температуры окружающей среды. Что делать, если у вас есть драйвер двигателя, регулятор напряжения и т. Д. В закрытой коробке, в которой также находится светодиод. Эти другие компоненты нередко повышают температуру внутри корпуса с 25 ° C до 50 ° C.Это повышение температуры БУДЕТ изменить поведение вашего светодиода, вашего регулятора напряжения и т. Д. Когда-то безопасное 1,7 В больше не будет 1,7 В, а светодиод, который раньше жарил при 2,5 В, теперь будет жарить 2,2 В.

г. Изменения напряжения питания. Что, если бы вашим источником питания был аккумулятор. По мере разряда батареи напряжение значительно падает. Что, если вы спроектировали свою схему так, чтобы она хорошо работала со слегка использованной батареей 9 В, но затем вы добавили новую батарею на 9 В. Новые свинцово-кислотные батареи на 9 В обычно имеют фактическое напряжение 9 В.5В. В зависимости от схемы, которая обеспечивает 5 В, используемое для ШИМ, эти дополнительные 0,5 В могут повысить ваши 5 В ШИМ до 5,3 В. Что, если бы вы использовали аккумуляторную батарею? У них есть еще больший диапазон напряжений на протяжении всего цикла разряда.

г. Есть и другие сценарии, например, индуцированный ток от EMI (двигатели будут делать это).

Наличие токоограничивающего резистора избавляет вас от многих из этих проблем.

Использование ШИМ для управления светодиодом — не очень хорошее решение. Есть ли лучший способ, при котором не требуется резистор ограничения тока?

Да! Делайте то, что они делают со светодиодными лампами для вашего дома.Управляйте светодиодом с помощью регулятора тока. Установите регулятор тока на управление током, на который рассчитан ваш светодиод.

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

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

Конечно, как и во всех электронных схемах, вы всегда можете сделать больше вещей, чтобы улучшить вашу схему. Ознакомьтесь с рисунком 3 в следующем PDF-файле, чтобы увидеть, насколько сложной в наши дни может быть даже бытовая светодиодная лампа…

http://www.littelfuse.com/~/media/electronics/design_guides/led_protectors/littelfuse_led_lighting_design_guide.pdf.pdf

Итого: Вы должны решить для себя, на какой риск вы готовы пойти со своей схемой. Использование 5V PWM для управления вашим светодиодом, вероятно, будет работать нормально (особенно если вы добавите конденсатор для сглаживания прямоугольной волны PWM и максимальной частоты PWM). Не бойтесь выводить свою электронику за пределы их обычных условий эксплуатации, просто будьте в курсе, когда вы это делаете, знайте, на какие риски вы идете.

Наслаждайтесь!

FYI: Меня удивляет, как много людей сразу же переходят к ответу: «ВЫ ДОЛЖНЫ ИСПОЛЬЗОВАТЬ ОГРАНИЧИТЕЛЬНЫЙ РЕЗИСТОР ТОКА». Это благие намерения, но слишком безопасный совет.

Орт

Сколько светодиодов может контролировать Arduino? — Siytek

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

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

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

Предварительные требования

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

Я бы также посоветовал вам ознакомиться с моим руководством по затемнению светодиодов, если вы новичок в концепции ШИМ.Там вы найдете полезную информацию и подробное объяснение некоторых важных фундаментальных принципов.

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

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

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

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

  1. Использование цифровых выводов — самый простой метод, требующий только резистор для каждого светодиода, но ограниченный количеством цифровых выводов.
  2. Мультиплексирование — вводит ограничение яркости, но позволяет управлять большим количеством светодиодов с меньшим количеством внешних резисторов.
  3. Последовательный регистр сдвига — может управлять практически неограниченным количеством светодиодов, ограниченным только максимальным током источника питания, но требует наибольшего количества внешних компонентов.

Только цифровые выводы

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

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

Источник и сток тока

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

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

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

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

Здесь мы видим, что максимальный ток, который мы можем передавать или потреблять на любом выводе ввода-вывода, составляет 40 мА. Этого достаточно для стандартного светодиода, который обычно работает от 5 мА до 20 мА.

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

Абсолютный максимальный рейтинг

Более важный параметр, который мы также должны учитывать, — это максимальный постоянный ток между Vcc и GND .Это полный ток, который микроконтроллер потребляет от источника питания.

Это значение также указано в таблице абсолютных максимальных номинальных значений, приведенной в техническом описании. В случае нашего ATMega328 это 200 мА.

Это означает, что текущая сумма всех портов не должна превышать 200 мА. Если мы разместим светодиод на каждом из 13 цифровых контактов Arduino Uno и подадим каждому из них 20 мА, мы получим или потребляем в общей сложности 260 мА с контактов ввода-вывода и превысим это максимальное значение! Наш Arduino был бы тостом!

Общее количество светодиодов

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

В случае нашей платы Arduino Uno с 13 цифровыми выводами ввода-вывода мы можем разделить общий максимальный ток на 13, чтобы увидеть, какой максимальный ток будет для каждого светодиода, если мы используем все 13 контактов.

 300/13 = 15,3 мА 

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

Поэтому было бы разумно округлить это число до 10–12 мА для каждого светодиода, чтобы не выходить за пределы установленного лимита.

Итак, наш окончательный ответ заключается в том, что при использовании только цифровых контактов на плате Arduino Uno мы можем индивидуально управлять 13 светодиодами, при условии, что ток ограничен примерно 10–12 мА для каждого светодиода.

Самый простой способ ограничить ток на каждом цифровом выводе — использовать резистор. Вы можете узнать о том, как выбрать номинал резистора, в моем руководстве по светодиодам и резисторам.

Мультиплексирование

Что, если бы я сказал вам, что можно управлять еще светодиодами , используя только ваши цифровые выводы, в то время как уменьшит количество требуемых внешних резисторов ?!

Это не волшебство какое-то! Это вполне возможно с использованием метода, называемого мультиплексированием.Однако, как и во многих других областях техники, существует компромисс в пользу увеличения количества светодиодов, использующих эту технику. К сожалению, в инженерии нет ничего бесплатного!

Что такое мультиплексирование?

Мультиплексирование по определению — это процесс объединения нескольких сигналов в один сигнал. Хорошим примером являются телефонные сети, в которых мультиплексирование используется, чтобы позволить нескольким телефонным звонкам проходить по одному проводу.

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

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

Как работают светодиоды мультиплексирования?

Мультиплексирование работает за счет организации светодиодов внутри матрицы. Нет, не , а матрица , Neo!

Мы должны расположить наши светодиоды в строк, и столбцов , чтобы мы могли адресовать .Представим, что у нас есть 9 светодиодов, расположенных в 3 столбца и 3 строки.

Нам нужно подключить каждый ряд светодиодов к контакту микроконтроллера, а каждый столбец — к контакту микроконтроллера. Здесь я представил цифровые выводы ввода-вывода с переключателями.

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

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

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

Выгода здесь также возводится в квадрат, поскольку вы увеличиваете количество контактов, предполагая, что вы используете одинаковое количество контактов для управления светодиодами. Например, 5 строк и 5 столбцов требуют 10 контактов, но могут управлять 25 светодиодами!

Что вы также можете заметить, так это то, что вам нужны только токоограничивающие резисторы в строках или столбцах! Это означает, что нам нужно всего 3 резистора на 9 светодиодов и 5 резисторов на 25 светодиодов!

Объяснение схемы

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

Сначала мы включаем столбец 1 в нашей матрице, затем мы включаем строки 1, 2 и / или 3 в зависимости от того, какие светодиоды мы хотели бы зажечь. Скажем, например, мы хотим зажечь два верхних светодиода.

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

Наконец, мы повторяем это для третьего столбца, на этот раз включив только средний светодиод.

Как видно из этого примера, можно управлять каждым светодиодом индивидуально, используя меньше контактов и резисторов!

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

Недостатки мультиплексирования

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

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

Кроме того, проблема усугубляется по мере увеличения количества столбцов. Если мы управляем 25 светодиодами с 10 цифровыми выводами, состоящими из 5 строк и 5 столбцов, наш максимальный рабочий цикл для каждого светодиода будет 20%. Поэтому светодиоды станут еще тусклее.

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

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

Регистры сдвига

Третий и последний метод в этом руководстве для управления несколькими светодиодами, вероятно, самый мощный, и это метод, используемый для адресной светодиодной ленты.

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

Что такое регистр сдвига

Регистр сдвига — это, по сути, микросхема с набором цифровых выходных контактов, которые принимают свое состояние из блока памяти, называемого регистром .

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

Например, если бит 8 равен «1», то выходной контакт будет иметь высокий , обычно равный напряжению питания. Если бит 8 равен «0», тогда на выводе будет низкий уровень , обычно заземленный на 0 вольт.

Состояние набора из 8 выходных контактов, следовательно, может быть представлено 8 битами или одним байтом данных.Можно иметь регистр сдвига большего размера, но чаще всего используется 1 байт.

Последовательные данные в

Самое интересное в регистре сдвига заключается в том, что 8 бит данных могут быть помещены в регистр один за другим, используя всего 3 контакта на микроконтроллере. Никаких дополнительных выводов для увеличения количества светодиодов не требуется.

Есть три основных контакта, которыми микроконтроллер должен управлять в регистре сдвига.

  • Данные — это вывод, который сообщает регистру сдвига, является ли следующий бит, который будет помещен в регистр, высоким или низким.
  • Clock — синхронизирующий вывод чередуется между высоким и низким. Для каждого цикла двоичные числа сдвигаются на одну позицию в регистре, и в регистр вводится новое число. Его значение будет равно выводу данных.
  • защелка — этот вывод передает данные из сдвигового регистра на выходные выводы. Это позволяет сдвинуть 8 бит в нужное место до обновления состояния выходных контактов.

Когда данные сдвигаются в регистре, новый бит входит в начало регистра в зависимости от состояния вывода данных.Бит в конце регистра отбрасывается.

Защелка данных

Существует также дополнительный вывод, называемый защелкой , вывод , который перемещает данные из регистра на выход.

Это означает, что мы можем синхронизировать все наши данные, не влияя на состояние выходов. Затем, как только все правильные данные будут сдвинуты в регистр, выходы могут быть обновлены новыми данными.

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

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

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

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

Вывод последовательных данных

Регистры сдвига обычно имеют выходной вывод, при этом состояние вывода устанавливается битом, который сбрасывается с конца регистра.

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

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

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

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

Драйверы светодиодов регистра сдвига

Еще одним преимуществом регистров сдвига является то, что существуют специальные варианты, предназначенные для управления светодиодами.

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

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

Texas Instruments TLC591X — отличный чип для начала, если вы новичок в использовании регистров сдвига.

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

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

Недостатки

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

Во-первых, самый очевидный недостаток — необходимость использования микросхемы драйвера на каждые 8 ​​светодиодов. Хотя требуется меньше резисторов, это по-прежнему самый сложный и дорогостоящий из рассмотренных нами методов добавления светодиодов в микроконтроллер.

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

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

Заключение

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

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

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

Изучите Arduino! Урок 1.- HandsOn Tech

Обзор

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

Детали

Ардуино Уно R3

Светодиод «L»

Arduino имеет ряды разъемов по обеим сторонам, которые используются для подключения к электронным устройствам, и подключаемые «экраны», которые позволяют Arduino делать больше. Однако у Arduino также есть один светодиод, которым вы можете управлять с помощью своих эскизов.Этот светодиод встроен в плату Arduino и часто называется светодиодом «L», так как именно так он обозначен на плате.

Положение этого светодиода обведено красным на изображениях Arduino Uno и Leonardo ниже.

Загрузка примера «Blink»

Вы можете обнаружить, что светодиод «L» на вашей плате Arduino уже мигает, когда вы подключаете ее к USB-разъему. Это связано с тем, что платы Arduino обычно поставляются с предустановленным эскизом «Blink». В этом уроке мы перепрограммируем Arduino с помощью нашего собственного скетча Blink, а затем изменим частоту его мигания.В Уроке 0 вы настроили свою Arduino IDE и убедились, что можете найти правильный последовательный порт для подключения к вашей плате Arduino. Пришло время проверить это соединение и запрограммировать плату Arduino. IDE Arduino включает в себя большую коллекцию примеров эскизов, которые вы можете загрузить и использовать. Сюда входит примерный рисунок, как заставить мигать светодиод «L».

Загрузите скетч «Blink», который вы найдете в системе меню IDE, выбрав Файл → Примеры → 01.Basics

Когда откроется окно эскиза, увеличьте его, чтобы вы могли видеть весь эскиз в окне.

Сохранение копии «Blink»

Примеры эскизов, включенные в IDE Arduino, предназначены только для чтения. То есть вы можете загрузить их на плату Arduino, но если вы измените их, вы не сможете сохранить их как один и тот же файл. Мы собираемся изменить этот набросок, поэтому первое, что вам нужно сделать, это сохранить свою собственную копию, которую вы можете изменить, как хотите.
В меню «Файл» в среде Arduino IDE выберите опцию «Сохранить как …», а затем сохраните эскиз с именем «MyBlink».

Вы сохранили копию «Blink» в альбоме для рисования. Это означает, что если вы когда-нибудь захотите найти его снова, вы можете просто открыть его, используя пункт меню Файл → Sketchbook.

Загрузка Blink на плату

Подключите плату Arduino к компьютеру с помощью кабеля USB и убедитесь, что «Тип платы» и «Последовательный порт» установлены правильно. Возможно, вам придется вернуться к Уроку 0.

Arduino IDE покажет вам текущие настройки платы в нижней части окна.

Нажмите кнопку «Загрузить». Вторая кнопка слева на панели инструментов.

Если вы посмотрите на область состояния IDE, вы увидите индикатор выполнения и серию сообщений. Сначала будет написано «Компиляция эскиза …». Это преобразует эскиз в формат, подходящий для загрузки на доску.

Далее статус изменится на «Выгрузка». На этом этапе светодиоды на Arduino должны начать мигать при передаче эскиза.

Наконец, статус изменится на «Готово».

Другое сообщение сообщает нам, что скетч использует 1084 байта из имеющихся 32 256 байтов. После этапа «Компиляция эскиза …» может появиться следующее сообщение об ошибке:

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

Адресные светодиодные лампы

: Учебное пособие по матричным светодиодам Arduino

Светодиодные матричные дисплеи бывают самых разных форм и размеров и создаются с использованием множества различных технологий. Как описано здесь, Charlieplexing — одна интересная техника. А для высокопроизводительных дисплеев отлично подойдет сетка из простых светодиодных RGB-ламп. Другой метод — это расположение адресуемых светодиодов последовательно в строках и столбцах для создания сетки.

Светодиодная матрица Arduino

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

Светодиодная матрица и источник питания для светодиодной матрицы

Если вы когда-либо использовали адресуемые светодиоды, велика вероятность, что вы начали со светодиодов WS2812B, расположенных в виде полос.Входные данные отправляются на первый светодиод, который передает эту информацию (за вычетом собственных данных) второму свету в цепочке, затем третьему и так далее, пока не достигнет последнего светодиода. Если вы разместите эти полосы так, чтобы они изгибались взад и вперед, у вас была бы светодиодная матрица 2D RGB, которую можно было бы запрограммировать для отображения любого 2D-изображения.

Перед программированием светодиодной матрицы этого типа вам понадобится достаточный источник питания. Хотя сами по себе не очень энергоемкие, отдельные светодиоды RGB могут потреблять до 60 мА каждый.Для матрицы 8×8 это 64 светодиода или 3,84 ампера, а для матрицы 16×16 / 256 светодиодов это ошеломляющие 15,36 ампера. На самом деле редко когда каждый светодиод горит на полную яркость на обоих каналах: R, G и B. Согласно NeoPixel Überguide от Adafruit, если вы не планируете сверхяркую операцию, как показывает опыт, можно использовать 1/3 от этого теоретического максимума. Для этого эксперимента я выбрал блок питания Adafruit 1466 5V, 4A, который обеспечивает более чем достаточно энергии для панели 8×8, которую я использую, даже в самом ярком сценарии.

Как показано ниже, я подключил питание 5 В к системе через контакты 5V и GND рядом с контактом DOUT, запитав как панель, так и плату Arduino через контакты 5V и GND рядом с контактом DIN. Данные поступают на вывод DIN от Arduino, а вывод DOUT может передавать данные еще одной матрице. Хотя вход питания может показаться обратным по отношению к DIN и DOUT, важно добиться того, чтобы данные «текли» в правильном направлении, а не переворачивали 5V и GND.

При таком подключении после программирования кабель USB можно отсоединить.Обратите внимание, что обычно рекомендуется использовать резистор от 300 до 500 Ом между DIN и управляющим Arduino, а также использовать конденсатор 1000 мкФ или выше на входе для обеспечения стабильной мощности. Возможно, вы или не видите их на изображении, но это, вероятно, хорошая идея.

Контроллер светодиодов Arduino Pixel

Вы можете проверить это на такой матрице с помощью примера strandtest в библиотеке Adafruit_NeoPixel, которую можно установить через диспетчер библиотек в Arduino IDE.Он также доступен на GitHub. С Arduino Uno он работает в основном без изменений, вам просто нужно изменить значение LED_PIN на любой выход, который вы используете для управления матрицей, а LED_COUNT на общее количество светодиодов. Для полосы 8×8, которую я здесь использую, это означает 64 светодиода. Я решил использовать контакт 2 Arduino для управления. После загрузки вы увидите множество цветов, перемещающихся по панели — красивый дисплей — показывая, что ваша панель в порядке.

По узору светодиодные панели могут принимать самые разные формы

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

Если вы сделали что-то с нуля, вы будете знать эти ответы, и, надеюсь, такая информация задокументирована для приобретенных панелей. Вы также можете использовать модификацию «простого» примера библиотеки NeoPixel, чтобы вставить значения для определенных пикселей, чтобы помочь определить это. Как показано на изображении и фрагменте кода ниже, я установил светодиод 0 в верхнем левом углу на красный, пиксель 7 в правом верхнем углу на зеленый и пиксель 63 в правом нижнем углу на синий.

Библиотека управления светодиодами Arduino: использование специализированных библиотек

Хотя нетрудно рассчитать, какой пиксель куда идет, если вы хотите рисовать фигуры, узоры или даже текст, выполнение необходимых преобразований вскоре становится непозволительным. К счастью, это не обязательно. Adafruit также создал библиотеку NeoMatrix, которая основывается на библиотеке NeoPixel, чтобы значительно упростить использование адресуемых светодиодов, расположенных в виде двухмерного рисунка.

Его можно найти и установить с помощью диспетчера библиотек Arduino IDE, выполнив поиск Adafruit NeoMatrix.Вам также необходимо установить библиотеку NeoPixel, а также Adafruit GFX, который также используется для ЖК-дисплеев и OLED-дисплеев. Библиотека NeoMatrix использует ту же систему координат и функции рисования, что и библиотека GFX, что было бы очень удобно, если вы привыкли к этому.

Эта библиотека содержит примеры как для одной матрицы, matrixtext, так и для другого примера, называемого tiletest, который может работать с рядом плиток, уложенных бок о бок. Приведенный выше код представляет собой фрагмент из примера tiletest, который создает экземпляр объекта матрицы с использованием различных параметров, описанных в строках выше (и даже больше в фактическом коде).Строка 57 касается расположения плиток, а строка 58 фокусируется на расположении светодиодов в самих матрицах.

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

Начало «Привет»

Затем он послушно прокрутил текст «Привет» по экрану. Вы можете легко изменить текст на любой, какой захотите. Третий пример — MatrixGFXDemo, демонстрирующий многие другие возможности библиотеки.

Идем дальше: растровые светодиодные матрицы и другие проекты светодиодных матриц

Когда вы закончите создание точек и линий, вы можете перейти к работе с растровыми изображениями.Конечно, это возможно, но обычно это требует немного больше работы и потенциально более мощного оборудования, чем Arduino Uno. Еще один отличный вариант для управления светодиодами — это библиотека FastLED. И пока вы это делаете, вы также можете проверить WLED для динамического управления светодиодами с помощью ESP8266 или ESP32.

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

Arduino Мигающий светодиод в Pure C

Arduino IDE содержит упрощенный язык для разработки для платформы Arduino.Этот язык называется Wiring и является упрощенной версией диалекта языков C и C ++. Упрощены общие операции ввода и вывода. среда, идеально подходящая для создания прототипов для дизайнеров и производителей.

Но иногда вы хотите программировать на «реальном» C и напрямую использовать инструментальную цепочку AVR. Например, вы могли бы хотите заглянуть за кулисы или запрограммировать библиотеку. Тогда возникает необходимость использовать набор инструментов AVR.

Как запрограммировать простой мигающий светодиод на чистом C Я хочу показать в этой статье.

Установка

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

В Ubuntu Linux это делается с помощью следующей команды:

  sudo apt-get install gcc-avr binutils-avr gdb-avr avr-libc avrdude make  

Это устанавливает все необходимые инструменты для разработки AVR C. на вашем компьютере.

Настройка оборудования Arduino

Программа на C предполагает, что у вас есть Arduino Uno с одним светодиодом, подключенным к порту 13.

На этом изображении Fritzing показана установка:

Led.c

  #include 

#define F_CPU 16000000
#define BLINK_DELAY_MS 5000

#include 

int main (пусто)
{
  
  DDRB | = 0B100000;

  в то время как (1) {
    
    PORTB | = 0B100000;
    _delay_ms (BLINK_DELAY_MS);

    
    ПОРТБ & = ~ 0B100000;
    _delay_ms (BLINK_DELAY_MS);
  }
}  

В этом примере C светодиод включается на 5000 мс (5 секунд), а затем снова выключается.Вам необходимо импортировать два файла заголовков, один для определения портов ввода-вывода, а другой для функция задержки.

Важно, что под чистым C вам нужно рассчитать точный булавка, куда вы хотите написать. В нашем случае вывод 13 светодиода находится на порту B5 (или в двоичном виде: 0B100000). Вы можете узнать о необработанном порте и контактах на схемах Arduino. доступ к нему можно получить с веб-сайта Arduino.

Компиляция и загрузка

С прикрепленным файлом Makefile можно легко скомпилировать файл C.

Только беги:

За кулисами Makefile вызывает компилятор AVR C (avr-gcc) и преобразует файл в правильном шестнадцатеричном формате, который может использовать загрузчик. Прежде чем вы сможете загрузить, вам нужно выяснить, где на вашей машине Arduino Uno подключен к. Затем путь записывается в Makefile как переменная ARDUINO_USB.

Как только это будет сделано, загрузите файл в Arduino Uno с помощью:

Программа загрузки, которую мы используем в Makefile, называется Avrdude.

Заключение

Семейство Arduino — отличное игровое поле для прототипирования аппаратного обеспечения.Но вы можете погрузиться глубже и запрограммировать Ardunio Uno без Arduino IDE напрямую с помощью AVR C. Я надеюсь, что смогу устранить первые препятствия в этом приключении.

Список литературы

Для лучшего качества смотрите его по этой ссылке здесь: https://www.youtube.com/watch?v=IP4Ikw3KtAU

Arduino Led Interface | Мигающий светодиод Arduino

Arduino UNO имеет встроенный светодиод , доступный на контакте № 13. Этот встроенный светодиод очень полезен, когда вы хотите показать какой-либо сигнал без подключения внешнего светодиода.
Если вы хотите узнать , как подключить светодиод к arduino . Мы можем подключить светодиод снаружи, используя резистор между цифровым выводом Arduino и светодиодом. При подключении светодиода к Arduino убедитесь, что вы знаете требуемое сопротивление резистора. Мы также обсудим, как рассчитать сопротивление светодиода. После нахождения резистора правильного номинала мы можем подключить светодиод к Arduino.

Для одного светодиода нам понадобится один цифровой выход от Arduino. Мы используем цифровой вывод 13 для подключения светодиода к Arduino.Подключим светодиод к прямому смещению. Означает анод светодиода к контакту № 13 и катод к GND Arduino.

Когда мы используем внешний светодиод на плате arduino, мы должны подключить резистор соответствующего номинала к светодиоду, чтобы ограничить ток, исходящий от вывода arduino uno. Для светодиода требуется около 10-20 мА тока, но вывод Arduino дает около 40 мА, поэтому из-за избыточного тока светодиод может выйти из строя. Для защиты светодиода нам понадобится токоограничивающий резистор.

Требуемое оборудование

Ардуино Уно

  • Светодиод
  • Резистор 1 кОм
  • макет

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

Используя эту формулу, мы находим значение сопротивления, используемое для светодиода.

Значение резистора светодиода

можно рассчитать по закону Ома:
R = (В с светодиод ) / I светодиод
где:

  • В с — напряжение источника, измеренное в вольтах (В),
  • V led — падение напряжения на светодиоде, измеренное в вольтах (В),
  • I led — ток через светодиод, измеряемый в амперах (Амперы / А), и
  • R — сопротивление, измеряемое в Ом (Ом).

Пример:
В с = 5 В
В светодиод = 1.8V
I led = 20 мА = 0,02A
R = 160 Ом
Из расчета получаем 160 Ом.
, но примерно мы используем резистор от 100 до 1 кОм. Будет изменяться только яркость светодиода.

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

В схеме внешний светодиод подключен к цифровому выводу 13. Это означает, что два светодиода подключены к одному выводу. Таким образом, оба светодиода будут светиться одновременно.

Мы можем использовать и другие контакты.

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

Код светодиода Arduino

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

Здесь нам нужно разобраться в функции pin pinMode (). Здесь светодиод — устройство вывода. Arduino отправит выходной сигнал на светодиод. Но как сказать Arduino, как подавать сигнал на вывод или ввод.

Чтобы отправить вывод, мы делаем вывод 13 Arduino как вывод с помощью pinMode (13, OUTPUT).Эта функция pinmode имеет два аргумента.

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

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

При использовании функции pinMode (13, OUTPUT) не выдает никаких выходных сигналов или не горит светодиод. Он просто установил контакт 13 как в режиме вывода.

Фактический выходной сигнал появится на цифровом выводе 13 функцией digitalWrite ().Эта функция может выдавать HIGH или LOW в зависимости от параметра, используемого в функции.

Здесь высокий сигнал с цифрового вывода включает светодиод. Таким образом, функция будет иметь вид digitalWrite (13, HIGH). И если вы хотите выключить светодиод, подайте низкий сигнал с помощью digitalWrite (13, LOW).

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

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

При использовании функции pinMode (13, OUTPUT) не выдает никаких выходных сигналов или не горит светодиод. Он просто установил контакт 13 как в режиме вывода.

Фактический выходной сигнал появится на цифровом выводе 13 функцией digitalWrite (). Эта функция может выдавать HIGH или LOW в зависимости от параметра, используемого в функции.

Здесь высокий сигнал с цифрового вывода включает светодиод. Таким образом, функция будет иметь вид digitalWrite (13, HIGH).И если вы хотите выключить светодиод, подайте низкий сигнал с помощью digitalWrite (13, LOW).

  void   setup  () {// функция настройки запускается один раз, когда вы нажимаете кнопку сброса или включаете плату
 pinMode (13, ВЫХОД); // инициализируем цифровой вывод 13 как выход.
 digitalWrite (13, ВЫСОКИЙ); // включаем светодиод (HIGH - уровень напряжения)
}
  пусто   петля  () {
 
}
 

Код мигающего светодиода Arduino

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

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

Мы можем изменить задержку мигания светодиода, используя функцию задержки arduino.

  void   setup  () {
 // инициализируем цифровой вывод 13 как выход.
 pinMode (13, ВЫХОД);
}
// функция цикла запускается снова и снова навсегда
  пусто   петля  () {
 digitalWrite (13, ВЫСОКИЙ); // включаем светодиод
 задержка (1000); // ждем секунду
 digitalWrite (13, LOW); // выключаем светодиод
 задержка (1000); // ждем секунду
}
 

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

Программа 1:

  void   setup  () {
 // инициализируем цифровой вывод 13 как выход.
 pinMode (13, ВЫХОД);
}
// функция цикла запускается снова и снова навсегда
  пусто   петля  () {
 digitalWrite (13, ВЫСОКИЙ); // включаем светодиод
 digitalWrite (13, LOW); // выключаем светодиод
}
 

Программа 2:

  void   setup  () {
 // инициализируем цифровой вывод 13 как выход.pinMode (13, ВЫХОД);
}
// функция цикла запускается снова и снова навсегда
  пусто   петля  () {
 digitalWrite (13, ВЫСОКИЙ); // включаем светодиод
 digitalWrite (13, LOW); // выключаем светодиод
 задержка (1000); // ждем секунду
}
 

Программа 3:

  void   setup  () {
 // инициализируем цифровой вывод 13 как выход.
 pinMode (13, ВЫХОД);
}
// функция цикла запускается снова и снова навсегда
  пусто   петля  () {
 digitalWrite (13, ВЫСОКИЙ); // включаем светодиод
 задержка (1000); // ждем секунду
 digitalWrite (13, LOW); // выключаем светодиод
}
 
.

alexxlab

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

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