Рубрики
Схемы на PIC

Автоматизация дома на микроконтроллере PIC с управлением по инфракрасной связи

В данной статье мы рассмотрим проект автоматизации управления несколькими потребителями переменного тока с помощью микроконтроллера PIC по инфракрасной связи (IR remote) с пульта ДУ. Подобные проекты также называют системами умного дома. Ранее аналогичный проект на нашем сайте мы рассматривали на основе платы Arduino.

Чтобы сделать данный проект более интересным, мы добавили в него возможность управления с пульта инфракрасной связи скоростью вращения вентилятора с помощью симистора (Triac). Для проекта подойдет практически любой пульт дистанционного управления (ДУ) от ваших домашних устройств: телевизора, DVD проигрывателя и т.д. Инфракрасные сигналы с пульта ДУ будет приниматься и обрабатываться нашим микроконтроллером PIC, которые будет подавать команды на включение/выключение соответствующих реле в нашем проекте.

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

Общие принципы работы проекта

Принцип работы нашего проекта автоматизации дома достаточно прост. Когда вы будете нажимать какую либо кнопку на пульте ДУ, то его инфракрасный передатчик будет передавать последовательность импульсов, промодулированную частотой 38 кГц. Эта последовательность импульсов будет приниматься инфракрасным приемником TSOP1738 (который имеет возможность принимать сигналы частотой 38 кГц) и передаваться на микроконтроллер PIC. Микроконтроллер будет преобразовывать их в шестнадцатеричное значение (hex value) и сравнивать его с заранее определенными в нашей программе шестнадцатеричными значениями.

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

Мы будем использовать клавишу 1 на пульте ДУ для переключения (включения/выключения) 1-го реле, клавишу 2 – для переключения 2-го реле и т.д. Клавиша Vol+ будет использоваться для увеличения скорости вращения вентилятора, а клавиша Vol- – для уменьшения скорости вращения вентилятора.

Примечание: вместо вентилятора в нашем проекте мы будем использовать 100-ваттную лампочку.

Наш микроконтроллер PIC работает от напряжения +5V, а реле – от напряжения +12V. Поэтому в нашем проекте мы будем использовать понижающий трансформатор на 220V, напряжение с выхода которого будет выпрямляться с помощью мостовой схемы. Далее это напряжение будет стабилизироваться к значениям +12V и +5V с помощью регуляторов напряжения 7812 и 7805 соответственно.

Для управления переключениями реле мы будем использовать транзисторы BC547. Для управления скоростью вращения вентилятора мы будем использовать симистор (TRIAC). Более подробно про использование симистора для управления скоростью вращения вентилятора вы можете прочитать в данной статье.

Также мы будем использовать схему управления симистором (Triac Driver) чтобы управлять им с помощью микроконтроллера. Эта схему будет обеспечивать углы отсечки для симистора. У нас будет 6 уровней скорости вращения вентилятора. При скорости 0 вентилятор будет выключен. При скорости 1 вентилятор будет вращаться со скоростью 1/5 от максимальной, при скорости 2 – со скоростью 2/5 от максимальной и т.д. Текущий уровень скорости вращения вентилятора можно будет контролировать с помощью семисегментного индикатора.

Структурная схема работы проекта показана на следующем рисунке.

Необходимые компоненты

  1. Микроконтроллер PIC18f2520 (купить на AliExpress).
  2. Программатор PICkit 3 (купить на AliExpress).
  3. Кварцевый генератор 20 МГц (купить на AliExpress).
  4. Инфракрасный приемник TSOP1738 (купить на AliExpress).
  5. Пульт ДУ (TV/DVD).
  6. Транзистор BC547 – 4 шт. (купить на AliExpress).
  7. Реле на 12 В – 4 шт.
  8. Лампочки с держателями – 5 шт.
  9. Источник питания 12v.
  10. 2-х пиновый коннектор – 8 шт.
  11. Трехпиновый коннектор.
  12. Трансформатор 12-0-12.
  13. Регулятор напряжения 7805 (купить на AliExpress).
  14. Регулятор напряжения 7812 (купить на AliExpress).
  15. Конденсаторы 10 и 1000 мкФ (купить на AliExpress).
  16. Конденсатор 0,1 мкФ (купить на AliExpress).
  17. Конденсатор 0,01 мкФ 400 В (купить на AliExpress).
  18. Конденсатор 33 пФ – 2 шт. (купить на AliExpress).
  19. Резисторы 10 кОм (5 шт.), 1 кОм (5 шт.), 100 Ом (7 шт.) (купить на AliExpress).
  20. Семисегментный индикатор с общим катодом (купить на AliExpress).
  21. Диод 1n4007 – 10 шт. (купить на AliExpress).
  22. Симистор BT136 (купить на AliExpress).
  23. Светодиод – 6 шт. (купить на AliExpress).
  24. Оптопара moc3021 (купить на AliExpress).
  25. Оптопара mtc2e или 4n35 (купить на AliExpress).
  26. Диод Зенера (стабилитрон) – 2 шт. (купить на AliExpress).
  27. Резистор 27 Ом 2 Вт.

Декодирование сигналов с пульта ДУ

В нашем проекте мы можем использовать практически любой инфракрасный пульт ДУ, но для используемого нами пульта ДУ необходимо будет знать, какие шестнадцатеричные значения будут соответствовать его кнопкам. Зная эти шестнадцатеричные значения мы сможем с помощью микроконтроллера различать какая кнопка была нажата. Авторы проекта (ссылка на оригинал приведена в конце статьи) использовали пульт NEC. Шестнадцатеричные значения для кнопок данного пульта приведены на следующем рисунке.

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

Схема проекта

Схема проекта автоматизации дома на микроконтроллере PIC с управлением по инфракрасной связи представлена на следующем рисунке.

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

Внешний вид собранной конструкции проекта приведен на следующем рисунке.

Объяснение программы для микроконтроллера PIC

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

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

После этого мы запрограммируем функцию задержки в программе с помощью цикла “for”.

Затем запрограммируем функцию инициализации таймера. Более подробно про использование таймеров в микроконтроллерах PIC вы можете прочитать в данной статье.

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

Мы не будем использовать каких либо прерываний для обнаружения инфракрасного сигнала. Для этого мы будем использовать обычный цифровой контакт, также, как если бы мы считывали состояние обычной кнопки. Всегда когда сигнал будет становиться high или low мы после задержки для устранения дребезга контактов (debouncing method) будем запускать таймер. Всегда когда контакт будет изменять свое состояние на противоположное значение времени будет сохраняться в массив.

Инфракрасный пульт ДУ передает логический 0 сигналом длительностью 562.5us, а логическую 1 – сигналом длительностью 2250us. Всегда когда с помощью таймера мы будем считывать 562.5us мы будем считать что это 0, а когда будем считывать 2250us – мы будем считать что это 1. Затем мы будем конвертировать это значение в шестнадцатеричный формат.

Сигнал с пульта ДУ содержит 34 бита. Мы будем сохранять все принятые байты от пульта ДУ в массив и затем декодировать для использования последние 2 бита.

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

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

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

Разработка печатной платы для проекта

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

На следующих рисунках показаны скриншоты спроектированной в EasyEDA печатной платы для нашего проекта автоматизации дома на основе микроконтроллера PIC.

Заказ изготовления печатной платы

После завершения разработки дизайна печатной платы в редакторе EasyEDA вы можете заказать ее изготовление, нажав на иконку Fabrication output. После этого откроется страница, на который вы можете загрузить Gerber файлы для изготовления вашей печатной платы, также эти Gerber файлы вы можете использовать для изготовления печатной платы у любого другого производителя (не обязательно у того, которого вам предлагает EasyEDA).

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

Скачать Gerber файлы печатной платы для нашего проекта автоматизации дома вы можете скачать по этой ссылке.

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

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

Исходный код программы

Видео, демонстрирующее работу проекта

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

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

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