Пульт управления кондиционером на основе Arduino и смартфона


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

Внешний вид пульта управления кондиционером на основе Arduino и смартфона

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

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

  1. Плата Arduino Mega 2560 (купить на AliExpress).
  2. Инфракрасный приемник TSOP1738 (HS0038) (купить на AliExpress).
  3. Инфракрасный светодиод (IR Led) (купить на AliExpress).
  4. Светодиод любого цвета (опционально) (купить на AliExpress).
  5. Резистор 1 кОм (опционально) (купить на AliExpress).
  6. Bluetooth модуль HC-06 (купить на AliExpress).
  7. Макетная плата.
  8. Соединительные провода.

Убедитесь в том, что у вас есть плата Arduino Mega потому что код программы достаточно объемный. Также установите в вашу Arduino IDE библиотеку (если она у вас еще не установлена) IR Remote Library для работы с TSOP и инфракрасным светодиодом (передатчиком).

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

Все пульты дистанционного управления (ДУ), которые есть у нас дома, обязательно содержат в своем составе инфракрасный передатчик (IR Blasters) – по своей сути это просто инфракрасный светодиод, который может передавать полезный сигнал с помощью последовательности импульсов, которая считывается приемником радиоэлектронного устройства, которым вы хотите управлять. Каждая кнопка на пульте ДУ приводит к формированию своей уникальной последовательности импульсов, которая приемником используется для выполнения заранее определенной задачи. Если вы можете принять этот инфракрасный сигнал, то вы можете его и повторить (скопировать) с помощью инфракрасного светодиода, чтобы заставить устройство выполнить нужную вам задачу. Аналогичный проект мы уже рассматривали на нашем сайте – это универсальный пульт ДУ для всех домашних устройств на основе Arduino. Также можно посмотреть во многом похожий на этот проект автоматического управления температурой кондиционера с помощью Arduino и датчика DHT11.

Внешний вид инфракрасного передатчика (светодиода)

TSOP представляет собой инфракрасный приемник, который может быть использован для декодирования сигналов, поступающих от пультов ДУ. С помощью него и Arduino можно принять и декодировать сигнал, формирующийся при нажатии любой кнопки на пульте ДУ, а затем этот сигнал мы можем скопировать (повторить) с помощью инфракрасного диода. Таким образом, мы можем управлять любой функцией кондиционера.

Внешний вид инфракрасного приемника TSOP1738

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

Прежде чем переходить к работе нашего проекта давайте немного остановимся на принципах работы пульта ДУ кондиционера. Он работает немного по другому чем пульты ДУ для телевизора, DVD проигрывателя и т.д. На пульте ДУ кондиционера может быть всего 10-12 кнопок, однако с их помощью пульт ДУ кондиционера может передавать огромное множество сигналов. То есть при нажатии одной и той же кнопки в разных ситуациях могут формироваться разные сигналы. К примеру, когда вы нажимаете кнопку уменьшения температуру чтобы снизить температуру в кондиционере до 24°C, вы формируете определенный набор данных. Но когда вы нажимаете ее же чтобы снизить температуру до 25°C, вы получите уже другой набор данных поскольку в данном случае будет уже 25°C, а не 24°C. Не будем тратить время на все возможные опции кондиционера (будем считать их неизменными), а сконцентрируемся только на управлении температурой.

Другой проблемой при работе с пультом ДУ кондиционера является большой объем передаваемых данных. Если для обычных пультов ДУ объем данных передаваемых при нажатии одной кнопки обычно составляет 24 или 48 бит, то для пульта ДУ этот объем данных может доходить до 228 бит поскольку в нем закодированы данные о температуре, скорости вентилятора, времени засыпания, режиме работы и т.д. По этой причине мы и используем в нашем проекте именно плату Arduino Mega – чтобы можно было хранить большие объемы данных.

Работа схемы

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

Схема пульта управления кондиционером на основе Arduino и смартфонаНеобходимые соединения в схеме представлены в следующей таблице.

Номер п/п Контакт компонента Контакт Arduino
1 TSOP – Vcc 5V
2 TSOP – Gnd Gnd
3 TSOP - Signal 8
4 IR Led – Cathode Gnd
5 IR Led – Anode 9
6 HC-05 - Vcc 5V
7 HC05 – Gnd Ground
8 HC05 – Tx 10
9 HC05 – Rx 11

После соединения всех элементов у вас должна получиться примерно следующая картина:

Внешний вид пульта управления кондиционером на основе Arduino и смартфона

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

Первое, что нам необходимо сделать в нашем проекте – это декодировать сигналы с пульта ДУ кондиционера. Убедитесь в том, что все соединения в схеме сделаны и все необходимые библиотеки в Arduino IDE установлены. Теперь откройте пример программы под названием “IRrecvDumpV2”, который можно найти по адресу File -> Examples -> IRremote -> IRrecvDumpV2.

Найдите в этом примере строки вида:

int recvPin = 8;
IRrecv irrecv(recvPin);

Поскольку у нас инфракрасный приемник TSOP подключен к контакту 8 платы Arduino, то измените 9-ю строку примера на int recvPin=8 как показано в представленном участке кода. После этого загрузите этот пример в Arduino Mega и откройте окно монитора последовательной связи (Serial Monitor).

После этого направьте ваш пульт ДУ кондиционера в сторону TSOP и нажмите любую кнопку, для каждой нажатой кнопки соответствующий сигнал будет считан TSOP, декодирован Arduino и отображен в окне монитора последовательной связи. Для каждого изменения температуры ваш пульт ДУ будет генерировать различный набор данных. Сохраните эти данные для последующего использования в нашей основной программе. Ваше окно монитора последовательной связи при этом должно выглядеть примерно так, как показано на следующем рисунке. Также на рисунке мы отобразили снимок файла в Word, в который мы копировали данные для их последующего сохранения.

Данные, которые необходимо сохранить

Скриншот показывает формируемый код для установки температуры 26°C для используемого нами пульта ДУ кондиционера. Для вашего пульта ДУ вы получите другой набор кодов. Аналогичным образом скопируйте эти коды для различных уровней температуры. Также вы можете посмотреть все инфракрасные коды для удаленного управления кондиционером, которые приведены в конце данной статьи (они для нашего пульта).

Основная программа для Arduino

Полный код программы для Arduino приведен в конце данной статьи, но вам нельзя просто так копировать ее и загружать в свою плату Arduino – скорее всего у вас она не заработает. Чтобы она заработала, вы должны заменить в ней коды управления кондиционером на свои, которые вы получили и сохранили в предыдущем разделе этой статьи (в ходе работы демонстрационного примера). Откройте программу в Arduino IDE и найдите в ней то место, где записаны массивы кодов, полученных от используемого пульта ДУ кондиционером. Замените в ней эти массивы на массивы своих кодов, для вашего пульта ДУ.

Массивы с кодами, которые необходимо заменить в программе для Arduino

Заметьте, что мы использовали всего 10 массивов кодов, 2 из которых используются для включения и выключения кондиционера, а остальные 8 – для установки различных значений температуры. К примеру, массив Temp23 используется для установки температуры 23°C. Поэтому когда нам нужно установить на кондиционере температуру 23°C, мы должны использовать коды именно из этого массива. Когда вы все это сделаете (замените массивы кодов на свои), можете загружать программу в плату Arduino.

Также нам в программе необходимо подключить две библиотеки – одна для управления нашими инфракрасными устройствами (ссылка на ее скачивание приведена выше в статье), а вторая – это встроенная в Arduino IDE библиотека последовательной связи (Software Serial Library), которая поможет нам при взаимодействии с Bluetooth модулем.

Далее мы должны инициализировать Bluetooth модуль для работы через контакты 10 и 11 платы Arduino и создать объект с именем irsend для реализации функций библиотеки инфракрасной связи.

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

Коды, подлежащие замене в вашей программе

Далее в функции void setup нам необходимо инициализировать два вида последовательной связи. Одна будет использоваться для обмена данными с Bluetooth модулем на скорости 9600 бод/с, а вторая – для передачи информации в окно монитора последовательной связи (Serial monitor) со скоростью 57600 бод/с.

Внутри функции void loop (бесконечный цикл) мы будем непрерывно проверять не поступила ли какая либо информация от Bluetooth модуля. Если поступила, то сохраняем ее в переменной BluetoothData.

Информация, которая будет поступать от Bluetooth модуля, будет определяться тем, какую клавишу мы будем нажимать в приложении на Android (рассмотрено далее в статье). Далее в зависимости от принятой по Bluetooth информации мы должны выполнить какие-нибудь заранее определенные действия, например:

То есть если мы приняли ‘2’, мы должны установить температуру на кондиционере 23°C. Аналогично и для всех других кодов от 0 до 9 – см. полный код программы в конце статьи.

Установка приложения на Android

Данное приложение было создано с помощью Processing Android Mode. Программная среда Processing является отличным инструментом для создания исполнимых (.EXE) файлов или APK файлов для различных проектов со встраиваемой электроникой (Embedded projects). Это абсолютно бесплатная система, которую можно скачать и установить на свой компьютер.

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

Экран приложения на смартфоне

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

В принципе, Processing очень похожа на Arduino. Программа на Processing также имеет в своем составе функции void setup и void loop. Внутри функции void setup мы задаем настройки для Bluetooth смартфона чтобы он соединился с Bluetooth модулем, подключенным к плате Arduino. Имя использованного нами устройства “HC-05”, что видно из приведенной строчки программы.

Далее внутри функции load_buttons() вы можете нарисовать так много кнопок, сколько вы захотите. Мы нарисовали 10 кнопок. Далее в функции read_buttons() мы проверяем какая кнопка была нажата. Каждая кнопка имеет свой определенный цвет, поэтому когда пользователь прикасается к экрану мы определяем цвет экрана в точке его прикосновения и, таким образом, распознаем нажатую кнопку. Фрагмент кода, в котором мы создаем кнопку определенного цвета и затем определяем какой символ передавать при нажатии этой кнопки, выглядит следующим образом:

Строка кода “byte[] data = {'0'};” является очень важной строкой. С ее помощью мы определяем какой код передать Arduino по Bluetooth. Здесь если эта кнопка нажата, то будет передаваться символ “0” по Bluetooth в Arduino. Аналогичным способом мы можем сформировать коды для всех остальных кнопок. В программе для Arduino эти коды (символы) будут распознаваться и на основе этого будут выполняться определенные действия.

Работа проекта

Когда вся аппаратная часть проекта будет готова загрузите приведенный ниже код программы в плату Arduino и разместите устройство напротив вашего кондиционера. Запустите наше android-приложение на своем мобильном телефоне. Если все нормально, то вы увидите на экране смартфона надпись “Connected to: device_name (some code)” как показано на следующем рисунке.

Статус соединения приложения с Bluetooth модулем

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

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

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

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

(Проголосуй первым!)
Загрузка...
4 142 просмотров

Комментарии

Пульт управления кондиционером на основе Arduino и смартфона — 6 комментариев

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

  1. Здравствуйте, не подскажете, я давно это освоил, но у меня забивается SRAM, в зависимости от колличества таких переменных. Не знаете, можно ли это "переместить" на карту памяти, или память ардуино для скетчей? У меня не получилось.

    • Добрый вечер. Не подскажите каких именно переменных? И кнопка сброса разве не решает проблему очистки памяти?

  2. У кондиционеров на пульте нет кнопок с конкретной температурой. У них есть кнопка + и -. Плюс как минимум при установке температуры может быть 2 варианта: обогрев или охлаждение.

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

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

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