Регулятор яркости системы освещения на трех светодиодных лентах (Arduino UNO)


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

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

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

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

Для управления используется пульт дистанционного управления марки TOSHIBA SE-R0301 от неисправного DVD-плеера. Но, в принципе, можно использовать любой другой пульт, соответственно внеся изменения в программу.

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

Принципиальная схема

Первой лентой (HL1) управляет ряд кнопок «Open», «1», «4», «7», «+10». Второй лентой (HL2) управляет ряд кнопок «Display», «2», «5», «8», «О». Третьей лентой (HL3) управляет ряд кнопок «On/Off», «3», «6», «9», «Search».

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

Соответственно, верхние кнопки («Open», «Display», «Оп/Off») отвечают за выключенное состояние соответствующих светодиодных лент (яркость нулевая), а нижние кнопки («+10», «О», «Search») отвечают за включение соответствующих светодиодных лент на максимальную яркость).

Принципиальная схема регулятора яркости системы освещения на Arduino UNO и трех светодиодных лентах

Рис. 1. Принципиальная схема регулятора яркости системы освещения на Arduino UNO и трех светодиодных лентах.

Промежуточные кнопки, отвечают за промежуточные величины яркости, которые, можно при программировании выбрать произвольно. В данном случае, это уровни 50, 100 и 170 (максимальный уровень 255). Как уже сказано, можно использовать и любые другие этого или другого пульта, или сделать больше ступеней изменения яркости, использовав больше кнопок пульта.

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

Использование недорогой готовой платы ARDUINO UNO интересно тем, что это готовый модуль, - небольшая печатная плата, на которой расположен микроконтроллер ATMEGA328. а так же вся его «обвязка», необходимая для его работы, включая USB-программатор и стабилизатор напряжения питания.

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

У платы ARDUINO UNO имеется 14 цифровых портов, от D0 до D13. При этом шесть из них (D3, D5. D6. D9, D10, D11) могут работать как бы в аналоговом режиме, в котором на них присутствует не ноль или единица, а импульсы, широту которых можно задавать от 255-ю ступенями.

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

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

Импульсы с них подаются на затворы полевых транзисторов VT1, VT2, VT3 в стоковых цепях которых включены светодиодные ленты HL1, HL2, HL3, яркость которых и нужно регулировать.

Программа

Программа для ARDUINO UNO на языке C++ приводится в таблице 1, применительно для пульта TOSHIBA SE-R0301. Данная программа требует загрузки библиотеки IRremote.h которая нужна для распознавания команд пульта ДУ. Эта библиотека есть в стандартном наборе программного обеспечения для ARDUINO. у меня версия Arduino 1.6.11.

Далее идет назначение портов В строке:

IRrecv irrecv(2);

входным назначен порт D2. На него подается сигнал с выхода интегрального фотоприемника А в строках:

pinMode(5, OUTPUT);

pinMode(9, OUTPUT);

pinMode(10, OUTPUT);

выходными назначены порты D5. D9, D10.

В программе после «case Ох» записаны коды команд, которые формируется при нажатии соответствующей кнопки пульта дистанционного управления. Эти коды соответствуют пульту TOSHIBA SE-R0301 от неисправного DVD-плеера. Можно использовать и другой пульт, но тогда и коды будут другие.

После поступления соответствующего кода указывается уровень скважности импульсов на соответствующем выходе, например, при нажатии кнопки «1» устанавливается на D5 порту 50-й уровень широты импульсов:

case OxA25D807F:

analogWrite(5, 50);

break;

Соответственно, другим кнопкам присвоены другие уровни широты импульсов для управления соответствующими светодиодными лентами (НL1, HL2, HL3).

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

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

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

Таблица 1. Исходный код программы управления тремя светодиодными лентами (часть 1).

Исходный код программы управления тремя светодиодными лентами (часть 1)

/*

регулятор трех лент */

((include

IRrecv irrecv(2); // фотоприемник на порту D2

decode_results results;

void setup() {

pinMode(5, OUTPUT); // задание порта D5 как выходного

pinMode(9, OUTPUT); // задание порта D9 как выходного

pinMode(10, OUTPUT); // задание порта D10 как выходного

irrecv.enableIRIn(); // запуск приема команд

}

void loop () (

if (irrecv.decode(Sresults)) {

switch) results.value ) {

case 0xA25DAF50:

analogWrite( 5, 0); // кнопкой OPEN выключено HL1

break;

case OxA25D807F:

analogWrite( 5, 50); // кнопкой 1 включено HL1 на 50

break;

case 0xA25D20DF:

analogWrite( 5, 100); // кнопкой 4 включено HL1 на 100

break;

case 0xA25DE01F:

analogWrite( 5, 170); // кнопкой 7 включено HL1 на 170

break;

case 0xA25DA45B:

analogWrite( 5, 255); // кнопкой +10 включено HL1 на все

break;

case 0xA25D6897:

analogWrite( 9, 0); // кнопкой DISPLAY выключено HL2

break;

case OxA25D40BF:

analogWrite( 9, 50); // кнопкой 2 включено HL2 на 50

break;

case 0xA25DA05F:

analogHrite( 9, 100); // кнопкой 5 включено HL2 на 100

break;

case 0xA25D10EF:

analogWrite( 9, 170); // кнопкой 8 включено HL2 на 170

break;

case 0xA25D50AF:

analogWrite( 9, 255); // кнопкой 0 включено HL2 на все

break;

case 0xA25D48B7:

analogWrite( 10, 0); // кнопкой ON\OFF выключено HL3

break;

case 0xA25DC03F:

Таблица 1 (продолжение). Исходный код программы управления тремя светодиодными лентами (часть 2).

Исходный код программы управления тремя светодиодными лентами (часть 2)

analogWrite( 10, 50); // кнопкой 3 включено HL3 на 50

break;

case 0xA25D609F:

analogWrite( 10, 100); // кнопкой 6 включено HL3 на 100

break;

case 0xA25D906F:

analogWrite( 10, 170); // кнопкой 9 включено HL3 на 170

break;

case 0xA25D04FB:

analogWrite( 10, 255); // кнопкой SEARCH включено HL3 на все

break;

}

irrecv.resume();

}

}

Таблица 2. Исходные коды для определения команд пульта.

Исходные коды для определения команд пульта

/*

определение кодов команд пульта */

#include

IRrecv irrecv(2); // фотоприеиник на порту D2

decode_results results;

void setup () {

Serial.begin(9600); // задание скорости порта COM

irrecv.enableIRIn(); // запуск приема команды

}

void loop () {

if (irrecv.decode(iresults)) {

Serial.println(results.value, HEX); // вывод данных в COM

irrecv.resume(); // прием следующей команды

}

}

После загрузки данной программы в микроконтроллер платы ARDUINO UNO, нужно открыть монитор COM-порта, для этого в окне программы Arduino 1.6.11 выбираем «Инструменты» и из выпадающего меню «Монитор порта».

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

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

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

Для нашего случая это несущественно, - важен только код самой команды. А вот с пультами типа RC-5 (для старых телевизоров «Горизонт», «Витязь» и др ) вообще, каждой кнопке будет присваиваться по два кода, которые будут поочередно меняться при каждом нажатии кнопки.

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

Каравкин В. РК-01-2020.


1 1154 На микроконтроллерах
микроконтроллер arduino освещение регулятор яркости светодиод LED
Оставить комментарий:

cashback