Как управлять светодиодом ардуино
Подключение светодиода к Arduino
Для начала разберемся что такое светодиод и как он работает. Светодиод — это полупроводниковый элемент, который, при прохождении через него электрического тока излучает свет. Светодиод пропускает ток только в одном направлении от анода к катоду. Подробнее на вики. Это значит что при подключении необходимо соблюдать полярность. Также нужно учитывать, что для каждого светодиода существует допустимая сила тока. Узнать параметры светодиода можно у производителя или продавца.
Узнать полярность светодиода можно по нескольким признакам:
Теперь поговорим о подключении светодиода к плате Ардуино. Цифровые пины Ардуино способны выдавать ток до 40 мА, но для большинства светодиодов это слишком много. Самые простые и дешевые светодиоды обычно имеют значение предельно допустимого тока в 20 мА. Это значит, что подключив светодиод напрямую к пину Ардуинки, он быстро выйдет из строя. Что бы этого не произошло необходимо использовать токоограничивающий резистор. Можете почитать статью о резисторах, где я рассказывал про токоограничивающие резисторы и расчет необходимого номинала. Так же вам может пригодиться онлайн калькулятор маркировки резисторов для того, что бы найти или купить постоянные резисторы нужного номинала.
Подключение светодиода к Arduino Nano
Мы будем подключать светодиод к цифровому пину с поддержкой ШИМ, для того что бы мы могли управлять не только включением и отключением но еще и яркостью светодиода. Советую почитать про характеристики, возможности и распиновку Ардуино нано. Код скетча будет одинаковым для Arduino Nano и Arduino Uno. Его я тоже объясню чуть позже. В качестве токоограничивающего сопротивления я буду использовать постоянный резистор на 150 Ом. Можно использовать резисторы и схожих номиналов, но при меньшем сопротивлении светодиод будет сильнее греться, а при большем будет светить тусклее. Я рекомендую использовать резисторы сопротивлением от 120 Ом и до 250 Ом для самых простых 5 мм светодиодов. Вот наглядная схема подключения светодиода к ардуино нано:
Схема подключения светодиода к Arduino Nano V3
Подключение светодиода к Arduino Uno
Здесь все точно так же как и в прошлом примере, только я решил не использовать макетную плату. Резистор точно такой же на 150 Ом.
Схема подключения светодиода к Arduino Uno R3
Скетч для управления светодиодом с помощью Arduino
Мы подключили светодиод к Arduino как показано на схемах выше. Теперь нам нужно написать программу для управления этим светодиодом. Для написания и загрузки прошивок в микроконтроллер обычно используется Arduino IDE. Мы рассмотрим самый простейший пример. Просто будем мигать светодиодом. Вот сам код скетча:
Думаю тут все понятно. Если же нет то можете ознакомиться с разделами сайта «Аrduino для начинающих» и «Программирование«.
Урок 02. Управление светодиодами
Подключение внешнего светодиода с использованием токоограничивающего резистора
Для ограничения тока через светодиод необходим резистор
Примечание 1: последовательность подключения светодиода и резистора в схеме не имеет значения, можно подключить и так: +5 В, резистор 300 Ом, светодиод, 0 В
Примечание 2: +5 В в схеме подается с одного из цифровых пинов (D0…D13), а 0 В – пин земли Gnd
Макетная плата
Используемый для курса стенд содержит макетную плату, все верхние контакты которой подключены к пину +5 В (верхние на рисунке), нижние контакты – к пину Gnd (0 В, нижние на рисунке) Arduino. Эти контакты используются в схемах и для питания внешних датчиков и модулей.
Остальные отверстия соединены вместе по 5 контактов (некоторые выделены полосками в качестве примеров, таким же образом соединены и все остальные) и могут использоваться для реализации различных схем путем втыкания в отверстия макетной платы элементов и проводных соединителей типа штырек/штырек.
Практическое занятие 1. Простой светофор
Нужные компоненты:
Сборка:
Шаг 1: подключите светодиоды к макетной плате в соответствии с приведенным рисунком
Примечание: к цифровым выходам контроллера подключается контакт светодиода + (который с резистором)
Шаг 2: проводным соединителем штырек-штырек соедините контакт макетной платы с цифровым пином Arduino: красного светодиода – с пином 2, желтого – с пином 9, зеленого – с пином 12. Используйте провода тех же цветов, что и цвета светодиодов
Шаг 3: подключите второй контакт светодиодов (минус, без резистора, прямой на картинке) к земле. Соедините отверстие под этим контактом с нижним рядом отверстий. Для соединения с землей используйте провода синего или черного цвета
Шаг 4: Напишем программу для управления светофором. Для начала – просто включение светодиодов по очереди. Алгоритм работы:
Шаг 5: Напишите в среде Arduino IDE программу, написанную по данному алгоритму (выделенный жирным текст, комментарии писать не обязательно)
int led_red = 2; // красный светодиод подключен к пину 2
int led_yellow = 9; // желтый светодиод подключен к пину 9
int led_green = 12; // зеленый светодиод подключен к пину 12
// прописываем пины, к которым подключены светодиоды, как выходные
pinMode(led_red, OUTPUT);
pinMode(led_yellow, OUTPUT);
pinMode(led_green, OUTPUT);
digitalWrite(led_red, HIGH); // включить красный светодиод
delay(1000); // подождать одну секунду
digitalWrite(led_red, LOW); // выключить красный светодиод
digitalWrite(led_yellow, HIGH); // включить желтый светодиод
delay(1000); // подождать одну секунду
digitalWrite(led_yellow, LOW); // выключить желтый светодиод
digitalWrite(led_green, HIGH); // включить зеленый светодиод
delay(1000); // подождать одну секунду
digitalWrite(led_green, LOW); // выключить зеленый светодиод
> // начать цикл loop снова
Шаг 6: Загрузите написанную программу в контроллер и убедитесь, что светодиоды зажигаются в соответствии с написанным алгоритмом
Шаг 7: Сохраните написанную программу в папку Мои документы / Arduino / Learning / Ваша фамилия латинскими буквами под именем Svetofor_Simple
Примечание 1: сохранение выполняется командой Файл / Сохранить как. Открывается папка Arduino, в ней надо открыть папку Learning, в ней создать папку вида Ivanov, открыть ее, ввести имя файла (Svetofor_Simple) и нажать Сохранить
Примечание 2: так как тексты программ будут использоваться в дальнейших занятиях и для обеспечения возможности вновь просмотреть написанные программы обязательно сохраняйте написанные программы в папку Learning / Ваша фамилия
Практическое занятие 2. Светофор с миганием
Напишем более сложный алгоритм работы и изменим программу таким образом, чтобы поведение светодиодов было похоже на настоящий светофор
В этом случае задачу «помигать красным светодиодом 4 раза» можно решить «в лоб» таким способом:
digitalWrite(led_ red, HIGH); // включить светодиод
delay(500); // подождать полсекунды
digitalWrite(led_ red, LOW); // выключить светодиод
delay(500); // подождать полсекунды
digitalWrite(led_ red, HIGH); // включить светодиод
delay(500); // подождать полсекунды
digitalWrite(led_ red, LOW); // выключить светодиод
delay(500); // подождать полсекунды
digitalWrite(led_ red, HIGH); // включить светодиод
delay(500); // подождать полсекунды
digitalWrite(led_ red, LOW); // выключить светодиод
delay(500); // подождать полсекунды
digitalWrite(led_ red, HIGH); // включить светодиод
delay(500); // подождать полсекунды
digitalWrite(led_ red, LOW); // выключить светодиод
delay(500); // подождать полсекунды
Но такой вариант трудоемок, приводит к большому объему написанного кода и вследствие этого к трудности чтения программы и последующего изменения. Для многократных повторений одной и той же части кода можно использовать цикл for:
for (начальное значение переменной счетчика, конечное значение переменной счетчика, прибавление счетчика)<
код, который нужно повторить несколько раз
С использованием цикла for код, выполняющий задачу «помигать красным светодиодом 4 раза» будет выглядеть так:
for(int i = 1 ; i
С использованием цикла for программа, реализующая написанный для светофора алгоритм, будет выглядеть так:
int led_red = 11; // красный светодиод подключен к пину 11
int led_yellow = 7; // желтый светодиод подключен к пину 7
int led_green = 2; // зеленый светодиод подключен к пину 2
// прописываем пины, к которым подключены светодиоды, как выходные
pinMode(led_red, OUTPUT);
pinMode(led_yellow, OUTPUT);
pinMode(led_green, OUTPUT);
digitalWrite(led_red, HIGH); // включить красный светодиод
delay(3000); // подождать три секунды
Управление уровнем напряжения. Аналоговый выход – команда analogWrite
Команда analogWrite (номер пина, уровень) позволяет подать на определенный пин Arduino (поддерживающих данную функцию – 3, 5, 6, 9, 10, 11 – на Arduino Uno отмечены штрихом) значение от 0 до 255, что соответствует напряжению от 0 В до +5 В на контакте. Примеры:
Таким образом, постепенно увеличивая/уменьшая переданное в analogWrite значение можно добиться плавного роста/падения напряжения на выходе. Подключенный к одному из PWM-портов Arduino (3, 5, 6, 9, 10, 11) светодиод будет плавно загораться и затухать (fading).
Примечание: используя данную команду, можно плавно регулировать скорость вращения моторов, яркость освещения, уровень температуры, скорость подачи воды при поливе и т.д.
Практическое занятие 3. Изменение яркости светодиода
Нужные компоненты:
Сборка:
int ledPin = 9; // светодиод подключен к цифровому пину 3
void setup() <
// Нет необходимости вызвать функцию pinMode для команды analogWrite
void loop() <
// меняем значение fadeValue от 0 до 255 с шагом 5
// посылаем значение от 255 до 0 на пин со
analogWrite(ledPin, fadeValue);
// светодиодом, напряжение на нем меняется от 5 до 0 В и соответственно меняется яркость
delay(30); // ждем 30 миллисекунд
Примечание: используемые светодиоды достигают максимальной яркости при напряжении, меньшем 5 В. Для большей наглядности изменения яркости можно изменить в коде программы 255 на 100, а также поставить больший шаг времени в delay.
Практическое занятие 4. Изменение яркости пяти светодиодов
Нужные компоненты:
Сборка:
Попробуем управление яркостью одновременно пяти светодиодов пяти разных цветов. Для начала будем устанавливать всем одинаковый уровень яркости.
Шаг 1: подключите контакт с резистором (+ светодиода) каждого светодиода к одному из пинов, поддерживающих управление уровнем напряжения (3, 6, 9, 10, 11)
Шаг 2: откройте программу Файл / При меры / Analog / Fading и модифицируйте ее для одновременного управления яркостью пяти светодиодов:
// создадим переменные для хранения номеров контактов светодиодов
int led_1 = 3;
int led_2 = 6;
int led_3 = 9;
int led_4 = 10;
int led_5 = 11;
// Нет необходимости использовать функцию pinMode для команды analogWrite
// меняем значение fadeValue от 0 до 255 с шагом 5
// посылаем значение fadeValue на каждый пин со светодиодом
analogWrite(led_1, fadeValue);
analogWrite(led_2, fadeValue);
analogWrite(led_3, fadeValue);
analogWrite(led_4, fadeValue);
analogWrite(led_5, fadeValue);
delay(30); // ждем 30 миллисекунд
Шаг 3: Загрузите данную программу в контроллер и испытайте
Шаг 4: Разбирать схему не надо, она понадобится в следующем занятии
Команда для получения случайных чисел random
Если для выполнения задачи требуется случайное число, используется
random (минимальное значение, максимальное значение). Она выдает случайное число от минимального (включая его) до максимального (не включая его). В случае, если минимальное число отсутствует, а в скобках только одно число, оно считается максимальным, а минимальным – 0
random (300) – выдает случайное число от 0 до 299
random (100, 256) – выдает случайное число от 100 до 255
Практическое занятие 5. Случайная яркость пяти светодиодов
Компоненты и схема – те же, что и в предыдущем занятии
Используем функцию random для случайного уровня яркости для каждого из пяти светодиодов. Минимальный уровень яркости 0, максимальный – 255. Напишите и загрузите в контроллер следующую программу:
// создадим переменные для хранения номеров контактов светодиодов
int led_1 = 3;
int led_2 = 5;
int led_3 = 9;
int led_4 = 10;
int led_5 = 11;
// создадим переменные для хранения уровней яркости светодиодов
int light_1 = 0;
int light_2 = 0;
int light_3 = 0;
int light_4 = 0;
int light_5 = 0;
// Нет необходимости вызвать функцию pinMode для команды analogWrite
light_1 = random(0, 256);
light_2 = random(0, 256);
light_3 = random(0, 256);
light_4 = random(0, 256);
light_5 = random(0, 256);
// посылаем полученные случайные значения на светодиоды
analogWrite(led_1, light_1);
analogWrite(led_2, light_2);
analogWrite(led_3, light_3);
analogWrite(led_4, light_4);
analogWrite(led_5, light_5);
Домашнее задание
Используются три светодиода с токоограничивающими резисторами – красный (К), желтый (Ж) и зеленый (З). В конце цикла все светодиоды должны выключаться.
Светодиоды и ленты
Обычные светодиоды
Светодиод – простейший индикатор, который можно использовать для отладки кода: его можно включить при срабатывании условия или просто подмигнуть. Но для начала его нужно подключить.
Подключение светодиода
Светодиод – это устройство, которое питается током, а не напряжением. Как это понимать? Яркость светодиода зависит от тока, который через него проходит. Казалось бы, достаточно знания закона Ома из первого урока в разделе, но это не так!
2.5 вольта, у синих, зелёных и белых
3.5 вольта. Более точную информацию можно узнать из документации на конкретный светодиод. Если документации нет – можно пользоваться вот этой табличкой, тут даны минимальные значения:
Мигаем
Мигать светодиодом с Ардуино очень просто: подключаем катод к GND, а анод – к пину GPIO. Очень многие уверены в том, что “аналоговые” пины являются именно аналоговыми, но это не так: это обычные цифровые пины с возможностью оцифровки аналогового сигнала. На плате Nano пины A0-A5 являются цифровыми и аналоговыми одновременно, а вот A6 и A7 – именно аналоговыми, то есть могут только читать аналоговый сигнал. Так что подключимся к A1, настраиваем пин как выход и мигаем!
Как избавиться от delay() в любом коде я рассказывал вот в этом уроке. https://www.youtube.com/watch?v=uaiLcCd9Tnk
Мигаем плавно
Как насчёт плавного управления яркостью? Вспомним урок про ШИМ сигнал и подключим светодиод к одному из ШИМ пинов (на Nano это D3, D5, D6, D9, D10, D11). Сделаем пин как выход и сможем управлять яркостью при помощи ШИМ сигнала! Читай урок про ШИМ сигнал. Простой пример с несколькими уровнями яркости:
Подключим потенциометр на A0 и попробуем регулировать яркость с его помощью:
Как вы можете видеть, все очень просто. Сделаем ещё одну интересную вещь: попробуем плавно включать и выключать светодиод, для чего нам понадобится цикл из урока про циклы.
Плохой пример! Алгоритм плавного изменения яркости блокирует выполнение кода. Давайте сделаем его на таймере аптайма.
Теперь изменение яркости не блокирует выполнение основного цикла, но и остальной код должен быть написан таким же образом, чтобы не блокировать вызовы функции изменения яркости! Ещё одним вариантом может быть работа по прерыванию таймера, см. урок.
Ещё один момент: если подключить светодиод наоборот, к VCC, то яркость его будет инвертирована: 255 выключит светодиод, а 0 – включит, потому что ток потечет в другую сторону:
Светодиодные ленты
Светодиодная лента представляет собой цепь соединённых светодиодов. Соединены они не просто так, например обычная 12V лента состоит из сегментов по 3 светодиода в каждом. Сегменты соединены между собой параллельно, то есть на каждый приходят общие 12 Вольт. Внутри сегмента светодиоды соединены последовательно, а ток на них ограничивается общим резистором (могут стоять два для более эффективного теплоотвода): Таким образом достаточно просто подать 12V от источника напряжения на ленту и она будет светиться. За простоту и удобство приходится платить эффективностью. Простая математика: три белых светодиода, каждому нужно по
3.2V, суммарно это 9.6V. Подключаем ленту к 12V и понимаем, что 2.5V у нас просто уходят в тепло на резисторах. И это в лучшем случае, если резистор подобран так, чтобы светодиод горел на полную яркость.
Подключаем к Arduino
Здесь всё очень просто: смотрите предыдущий урок по управлению нагрузкой постоянного тока. Управлять можно через реле, транзистор или твердотельное реле. Нас больше всего интересует плавное управление яркостью, поэтому продублирую схему с полевым транзистором: Конечно же, можно воспользоваться китайским мосфет-модулем! Пин VCC кстати можно не подключать, он никуда не подведён на плате.
Управление
Подключенная через транзистор лента управляется точно так же, как светодиод в предыдущей главе, то есть все примеры кода с миганием, плавным миганием и управление потенциометром подходят к этой схеме. Про RGB и адресные светодиодные ленты мы поговорим в отдельных уроках.
Питание и мощность
Светодиодная лента потребляет немаленький ток, поэтому нужно убедиться в том, что выбранный блок питания, модуль или аккумулятор справится с задачей. Но сначала обязательно прочитайте урок по закону Ома! Потребляемая мощность светодиодной ленты зависит от нескольких факторов:
Лента всегда имеет характеристику мощности на погонный метр (Ватт/м), указывается именно максимальная мощность ленты при питании от номинального напряжения. Китайские ленты в основном имеют чуть меньшую фактическую мощность (в районе 80%, бывает лучше, бывает хуже). Блок питания нужно подбирать так, чтобы его мощность была больше мощности ленты, т.е. с запасом как минимум на 20%.
Важные моменты по току и подключению: