Таймер с дистанционным ИК управлением на микроконтроллере Arduino UNO
Это таймер, позволяющий установить фиксированное время выдержки включенной нагрузки, от 1 минуты до 10 минут. Задание времени производится с шагом в одну минуту. Плюс, режим неограниченного по времени включенного состояния нагрузки.
Управление при помощи стандартного пульта дистанционного управления бытовой аппаратурой.
В этом случае для управления используется пульт дистанционного управления марки TOSHIBA SE-R0301 от неисправного DVD-плеера. Но, в принципе, можно использовать любой другой пульт, соответственно внеся изменения в программу.
У выше указанного пульта есть кнопки с номерами от 0 до 9 и еще кнопка +10. Кнопка 0 служит для постоянного включения нагрузки (без таймера).
Кнопки от 1 до +10, соответственно, для включения нагрузки на время от 1 минуты до 10 минут (кнопка 1 - 1 минута, кнопка 2 - 2 минуты... кнопка +10 - 10 минут). Красная кнопка служит для выключения нагрузки в любой момент.
В данном случае, для задания таймера используются 10 кнопок, но можно и больше сделать больше фиксированных выдержек времени. Всего у данного пульта 42 кнопки, если есть желание и необходимость, можно сделать 40 фиксированных временных интервалов, соответственно внеся изменения в программу.
Причем, в любом случае, интервалы не обязательно должны быть с шагом в минуту, - можно задать любые интервалы, внеся соответствующие изменения в программу.
Использование недорогой готовой платы ARDUINO UNO интересно тем. что это готовый модуль. - небольшая печатная плата, на которой расположен микроконтроллер ATMEGA328, а так же вся его «обвязка», необходимая для его работы, включая USB-программатор и стабилизатор напряжения питания.
Принципиальная схема
Принципиальная схема показана на рисунке. Для приема команд пульта дистанционного управления используется фотоприемник F1 типа TSOP4838, но можно применить и любой другой аналогичный. Сигнал от него поступает на цифровой порт D2, который используется для работы на прием.
Рис. 1. Принципиальная схема таймера с дистанционным ИК управлением на микроконтроллере Arduino UNO.
Как выход используется порт D4 Впрочем, можно использовать любой из 14 цифровых портов, от D0 до D13.
Логический уровень с порта D4 поступает на затвор полевого транзистора VT1. который управляет питанием обмотки реле К1, а оно. в свою очередь, управляет нагрузкой, питающейся от сети 220V.
Программа для МК
Программа для ARDUINO UNO на языке C++ приводится далее, применительно для пульта TOSHIBA SE-R0301.
Программа:
Рис. Исходный код программы таймера с ДУ для микроконотроллера Arduino UNO (часть 1).
Рис. Исходный код программы таймера с ДУ для микроконотроллера Arduino UNO (часть 2).
Данная программа начинается с загрузки библиотеки IRremote.h которая нужна для распознавания команд пульта ДУ. Эта библиотека есть в стандартном наборе программного обеспечения для ARDUINO, у меня версия Arduino 1.6.11.
Далее идет назначение портов В строке:
IRrecv irrecv(2);
входным назначен порт D2. На него подается сигнал с выхода интегрального фотоприемника. А в строке:
pinMode(4, OUTPUT);
выходным назначен порт D4.
В программе после «case Ох» записаны коды команд, которые формируется при нажатии соответствующей кнопки пульта дистанционного управления. Эти коды соответствуют пульту TOSHIBA SE-R0301 от неисправного DVD-плеера. Можно использовать и другой пульт, но тогда и коды будут другие Справа, за знаком // помещены комментарии, обозначающие о том. какая кнопка в данном шаге программы используется.
Например, в строках:
case 0xA25D50AF:
digitalWrite(4, HIGH); // 0
указывается, что при нажатии кнопки «0» на выходе 4 будет установлена логическая единица, постоянно, без таймера.
А вот в строках:
case 0XA25D807F:
digitalWrite( 4, HIGH); // 1
dalay(60000);
digitalWrite( 4, LOW);
указано, что при нажатии кнопки «1» пульта на выходе 4 установится логическая единица, и через 60 секунд, она сменится логическим нулем. То есть, здесь задается таймер на 1 минуту. Время записывается в миллисекундах, поэтому, 1 минута = 60000.
Впрочем, здесь можно записать любое другое число, если нужно чтобы задавалась не одна минута, а другое время.
Аналогично и по другим кнопкам от «1» до «+10».
Ну и последний пункт:
case 0xA25D48В7:
digitalWrite(4, LOW); // OFF
это значит, что при нажатии красной кнопки (OFF) на выходе 4 будет установлен логический ноль.
Как уже сказано, можно управлять и другим пультом, другими кнопками, можно использовать больше кнопок, задав больше фиксированных значений времени.
Но нужно будет предварительно разобраться, какие коды соответствуют выбранным кнопкам этого или другого пульта. Для этого нужно сначала загрузить в ARDUINO UNO программу, которая предназначена для определения кодов кнопок пульта.
После загрузки данной программы в микроконтроллер платы ARDUINO UNO, нужно открыть монитор COM-порта, для этого в окне программы Arduino 1.6.11 выбираем «Инструменты» и из выпадающего меню «Монитор порта».
После того как откроется окошко Монитора порта, берем пульт ДУ и нажимаем интересные нам кнопки. В окне Монитора порта будет отображаться код, соответствующий каждой кнопке. Следует заметить, что может быть такое, что при нажатии каждой кнопки приходит две команды, - сначала код команды, а затем код FFFFFFF.
Или даже несколько строк кода FFFFFFF. Так вот, первое это код команды, который нужно занести в программу в основную программу после «case 0х», а вторая строка или строки букв «F» это просто указатель на то, как долго кнопка удержана нажатой, в одном случае. В другом случае может показывать, что кнопку отпустили.
Для нашего случая это несущественно, - важен только код самой команды.
Программа для определения кодов команд пульта:
/* определение кодов команд пульта
*/
#include
IRrecv irrecv(2);
decode_results results;
void setup () {
Serial.begin(9600);
irrecv.enablelRIn() ;
}
void loop() {
if (irrecv.decode(Sresults)){
Serial.printin(results.value, HEX);
irrecv.resume();
}
}
В схеме интегральный фотоприемник TSOP4838 можно заменить практически любым аналогичным фотоприемником. На месте К1 можно применить любое электромагнитное реле с обмоткой на напряжение 12V.
Каравкин В. РК-05-20.