Кондиционеры (Air Conditioner, сокращенно AC) стали привычным атрибутом жизни для многих современных людей. Некоторые из них озабочены проблемой снижения энергопотребления кондиционеров. Поэтому в данной статье мы рассмотрим схему автоматического регулятора температуры кондиционера в зависимости от температуры в комнате, что позволяет значительно снизить потребление им энергии.
В течение дня температура окружающего воздуха постоянно меняется, что приводит к тому, что мы постоянно вынуждены регулировать параметры работы кондиционера чтобы создать для себя комфортные условия в комнате. Чтобы автоматизировать этот процесс мы в нашем проекте использовали датчик температуры DHT11, который измеряет текущую температуру в комнате и на основании измеренного значения температуры передает команды кондиционеру с помощью инфракрасного передатчика (IR blaster), который в данном случае выступает пультом дистанционного управления кондиционером. Когда температура в комнате изменяется, наше устройство регулирует параметры работы кондиционера таким образом, чтобы температура в комнате оставалась такой, какой вы ее хотите видеть.
Необходимые компоненты
- Плата Arduino Mega 2560 (купить на AliExpress) (Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158).
- Инфракрасный приемник TSOP1738 (HS0038) (купить на AliExpress).
- IR Led (инфракрасный светодиод, передатчик) (купить на AliExpress).
- Датчик температуры и влажности DHT11 (купить на AliExpress).
- Светодиод любого цвета (опционально) (купить на AliExpress).
- Резистор 1 кОм (опционально) (купить на AliExpress).
- Макетная плата.
- Соединительные провода.
- OLED дисплей (купить на AliExpress).
Общие принципы работы проекта
Все пульты дистанционного управления (ДУ), которые есть у нас дома, обязательно содержат в своем составе инфракрасный передатчик (IR Blasters) – по своей сути это просто инфракрасный светодиод, который может передавать полезный сигнал с помощью последовательности импульсов, которая считывается приемником радиоэлектронного устройства, которым вы хотите управлять. Каждая кнопка на пульте ДУ приводит к формированию своей уникальной последовательности импульсов, которая приемником используется для выполнения заранее определенной задачи. Если вы можете принять этот инфракрасный сигнал, то вы можете его и повторить (скопировать) с помощью инфракрасного светодиода, чтобы заставить устройство выполнить нужную вам задачу. Аналогичный проект мы уже рассматривали на нашем сайте – это универсальный пульт ДУ для всех домашних устройств на основе Arduino.
TSOP1738 представляет собой инфракрасный приемник, который может быть использован для декодирования сигналов, поступающих от пультов ДУ. С помощью него и Arduino можно принять и декодировать сигнал, формирующийся при нажатии любой кнопки на пульте ДУ, а затем этот сигнал мы можем скопировать (повторить) с помощью инфракрасного диода. Таким образом, мы можем управлять любой функцией кондиционера.
Теперь все, что нам остается сделать, это измерить температуру с помощью датчика DHT11 и на основании нее передать соответствующие команды кондиционеру с помощью инфракрасного светодиода. Чтобы сделать проект более привлекательным, мы еще добавили в него OLED дисплей, на котором мы будем показывать температуру и влажность в комнате, а также установленную на кондиционере температуру.
Необходимые знания для реализации этого проекта
Для начинающих радиолюбителей этот проект автоматического управления температурой кондиционера может быть немного сложноват, но если вы изучите некоторые предыдущие статьи на нашем сайте, я думаю, вы сможете его реализовать. Если вы неуверенно чувствуете себя в работе с датчиками температуры, OLED дисплеями и инфракрасными передатчиками, то мы рекомендуем вам изучить следующие статьи на нашем сайте:
- Подключение датчика DHT11 к Arduino.
- Подключение OLED дисплея к Arduino.
- Универсальный инфракрасный пульт ДУ на основе Arduino и приложения на Android.
Убедитесь в том, что у вас есть плата Arduino Mega потому что код программы достаточно объемный. Также установите в вашу Arduino IDE следующие библиотеки (если они у вас еще не установлены):
- IR Remote Library для TSOP и инфракрасного передатчика.
- Adafruit Library для работы с OLED дисплеем.
- GFX Graphics Library для работы с OLED дисплеем.
- DHT11 Sensor Library для работы с датчиком температуры.
Работа проекта
Прежде чем переходить к работе нашего проекта давайте немного остановимся на принципах работы пульта ДУ кондиционера. Он работает немного по другому чем пульты ДУ для телевизора, DVD проигрывателя и т.д. На пульте ДУ кондиционера может быть всего 10-12 кнопок, однако с их помощью пульт ДУ кондиционера может передавать огромное множество сигналов. То есть при нажатии одной и той же кнопки в разных ситуациях могут формироваться разные сигналы. К примеру, когда вы нажимаете кнопку уменьшения температуру чтобы снизить температуру в кондиционере до 24°C, вы формируете определенный набор данных. Но когда вы нажимаете ее же чтобы снизить температуру до 25°C, вы получите уже другой набор данных поскольку в данном случае будет уже 25°C, а не 24°C. Не будем тратить время на все возможные опции кондиционера (будем считать их неизменными), а сконцентрируемся только на управлении температурой.
Другой проблемой при работе с пультом ДУ кондиционера является большой объем передаваемых данных. Если для обычных пультов ДУ объем данных передаваемых при нажатии одной кнопки обычно составляет 24 или 48 бит, то для пульта ДУ этот объем данных может доходить до 228 бит поскольку в нем закодированы данные о температуре, скорости вентилятора, времени засыпания, режиме работы и т.д. По этой причине мы и используем в нашем проекте именно плату Arduino Mega – чтобы можно было хранить большие объемы данных.
Работа схемы
Схема устройства представлена на следующем рисунке.
Как видите, схема достаточно проста и вы легко можете собрать ее на макетной плате. Необходимые соединения в схеме перечислены в следующей таблице.
Номер п/п | Контакт компонента | Контакт Arduino |
1 | OLED – Vcc | 5V |
2 | OLED – Gnd | Gnd |
3 | OLED- SCK, D0,SCL,CLK | 4 |
4 | OLED- SDA, D1,MOSI, Data | 3 |
5 | OLED- RES, RST,RESET | 7 |
6 | OLED- DC, A0 | 5 |
7 | OLED- CS, Chip Select | 6 |
8 | DHT11 – Vcc | 5V |
9 | DHT11 – Gnd | Gnd |
10 | DHT11 – Signal | 13 |
11 | TSOP – Vcc | 5V |
12 | TSOP – Gnd | Gnd |
13 | IR Led – Anode | 9 |
14 | IR Led – Cathode | Gnd |
После того как вы соберете всю конструкцию проекта на макетной плате, она должна выглядеть примерно следующим образом:
Декодирование сигналов от пульта ДУ кондиционера
Первое, что нам необходимо сделать в нашем проекте – это декодировать сигналы с пульта ДУ кондиционера. Убедитесь в том, что все соединения в схеме сделаны и все необходимые библиотеки в Arduino IDE установлены. Теперь откройте пример программы под названием “IRrecvDumpV2”, который можно найти по адресу File -> Examples -> IRremote -> IRrecvDumpV2. Загрузите эту программу в Arduino Mega и откройте окно монитора последовательной связи (Serial Monitor).
После этого направьте ваш пульт ДУ в сторону TSOP и нажмите любую кнопку, для каждой нажатой кнопки соответствующий сигнал будет считан TSOP1738, декодирован Arduino и отображен в окне монитора последовательной связи. Для каждого изменения температуры ваш пульт ДУ будет генерировать различный набор данных. Сохраните эти данные для последующего использования в нашей основной программе. Ваше окно монитора последовательной связи при этом должно выглядеть примерно так, как показано на следующем рисунке. Также на рисунке мы отобразили снимок файла в Word, в который мы копировали данные для их последующего сохранения.
Скриншот показывает формируемый код для установки температуры 26°C для используемого нами пульта ДУ кондиционера. Для вашего пульта ДУ вы получите другой набор кодов. Аналогичным образом скопируйте эти коды для различных уровней температуры. Также вы можете посмотреть все инфракрасные коды для удаленного управления кондиционером, которые приведены в конце данной статьи (они для нашего пульта).
Основная программа для Arduino
Полный код программы для Arduino приведен в конце данной статьи, но вам нельзя просто так копировать ее и загружать в свою плату Arduino – скорее всего у вас она не заработает. Чтобы она заработала, вы должны заменить в ней коды управления кондиционером на свои, которые вы получили и сохранили в предыдущем разделе этой статьи (в ходе работы демонстрационного примера). Откройте программу в Arduino IDE и найдите в ней то место, где записаны массивы кодов, полученных от используемого пульта ДУ кондиционером. Замените в ней эти массивы на массивы своих кодов, для вашего пульта ДУ.
Заметьте, что мы использовали всего 10 массивов кодов, 2 из которых используются для включения и выключения кондиционера, а остальные 8 – для установки различных значений температуры. К примеру, массив Temp23 используется для установки температуры 23°C. Поэтому когда нам нужно установить на кондиционере температуру 23°C, мы должны использовать коды именно из этого массива. Когда вы все это сделаете (замените массивы кодов на свои), можете загружать программу в плату Arduino и затем наслаждаться освежающей прохладой )).
Также рассмотрим принцип работы наиболее важных фрагментов кода программы. Первым делом мы должны считать значения температуры и влажности с датчика DHT11 и отобразить их на OLED дисплее. Сделать это можно с помощью следующего фрагмента кода.
1 2 3 4 5 6 7 8 9 10 11 |
DHT.read11(DHT11_PIN); //считываем температуру и влажность Measured_temp = DHT.temperature + temp_error; Measured_Humi = DHT.humidity; // text display tests display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0,0); display.print("Temperature: "); display.print(Measured_temp);display.println("C"); display.setCursor(0,10); display.print("Humidity: "); display.print(Measured_Humi);display.println("%"); |
Когда измерим температуру в комнате мы можем сравнить ее с желаемым значением температуры. Желаемая температура в комнате у нас в программе установлена с помощью константы и составляет 27°C. Исходя из результатов сравнения мы можем установить соответствующую температуру на кондиционере с помощью следующего фрагмента кода.
1 2 3 4 5 |
if (Measured_temp == Desired_temperature+3) //если измеренная температура значительно больше чем желаемая (на 3 градуса) { irsend.sendRaw(Temp24, sizeof(Temp24) / sizeof(Temp24[0]), khz); delay(2000);// передаем сигнал на установку на кондиционере температуры 24*C AC_Temp = 24; } |
То есть температура кондиционера будет установлена 24°C когда измеренное значение температуры составляет 30°C (поскольку желаемое значение температуры равно 27°C). Аналогичным образом мы можем создать много подобных блоков для установки необходимого значения температуры.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
if (Measured_temp == Desired_temperature-1) //если измеренная температура ниже желаемой температуры { irsend.sendRaw(Temp28, sizeof(Temp28) / sizeof(Temp28[0]), khz); delay(2000);//передаем сигнал на установку температуры 28*C AC_Temp = 28; } if (Measured_temp == Desired_temperature-2 ) // если измеренная температура значительно ниже желаемой температуры { irsend.sendRaw(Temp29, sizeof(Temp29) / sizeof(Temp29[0]), khz); delay(2000);// передаем сигнал на установку температуры 29*C AC_Temp = 29; } if (Measured_temp == Desired_temperature-3 ) // если измеренная температура экстремально ниже желаемой температуры { irsend.sendRaw(Temp30, sizeof(Temp30) / sizeof(Temp30[0]), khz); delay(2000);// передаем сигнал на установку температуры 30*C AC_Temp = 30; } |
Тестирование работы проекта
Когда вы соберете всю аппаратную часть проекта, загрузите программу в Arduino и подадите питание вы должны наблюдать на экране OLED дисплея примерно следующую картину.
Теперь поместите конструкцию напротив вашего кондиционера и вы должны заметить как температура на кондиционере будет изменяться в зависимости от температуры в вашей комнате. Вы можете искусственно повысить температуру рядом с датчиком DHT11 чтобы наблюдать как изменится работа проекта.
Исходный код программы
Код программы писал не я, но я в нем постарался детально разобраться, поэтому если у вас возникнут вопросы, можете задать их в комментариях к статье – я постараюсь вам помочь насколько это возможно.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
/* * Automatic AC Temperature control using Arduino and TSOP * Code by: Aswinth Raj B * Dated: 25-10-2017 * Website: http://www.circuitdigest.com/ * S.No: Component Pin Arduino Pin 1 OLED – Vcc 5V 2 OLED – Gnd Gnd 3 OLED- SCK, D0,SCL,CLK 4 4 OLED- SDA, D1,MOSI, Data 3 5 OLED- RES, RST,RESET 7 6 OLED- DC, A0 5 7 OLED- CS, Chip Select 6 8 DHT11 – Vcc 5V 9 DHT11 – Gnd Gnd 10 DHT11 – Signal 13 11 TSOP – Vcc 5V 12 TSOP – Gnd Gnd 13 IR Led – Anode 9 14 IR Led – Cathode Gnd */ #include <IRremote.h> //библиотека для инфракрасного передатчика и TSOP #include <SPI.h> // Inbuilt Lib #include <Wire.h> //Inbuilt Lib #include <Adafruit_GFX.h> //библиотека для OLED дисплея #include <Adafruit_SSD1306.h> // библиотека для OLED дисплея #include <dht.h> //библиотека для работы с датчиком температуры и влажности dht11 (ссылка на ее скачивание есть в статье) // назначаем контакты для OLED (Software config.) #define OLED_MOSI 3 #define OLED_CLK 4 #define OLED_DC 5 #define OLED_CS 6 #define OLED_RESET 7 Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS); #define SSD1306_LCDHEIGHT 64 //измените если вы используете другой OLED дисплей #define DHT11_PIN 13 //контакт, к которому подключен датчик dht11 dht DHT; //Sensor object named as DHT #define Desired_temperature 27 //желаемая температура у нас все время равна 27*C //Decoded Remote Signals For my AC ##измените эти коды для вашего пульта ДУ unsigned int ACoff[] = {2950,1750, 400,1100, 450,1050, 450,400, 400,400, 400,400, 450,1100, 400,400, 400,400, 450,1100, 400,1100, 450,350, 450,1100, 400,400, 400,400, 450,1100, 400,1100, 450,400, 400,1100, 400,1100, 450,400, 400,400, 400,1100, 450,350, 450,400, 400,1100, 450,400, 400,400, 400,400, 450,350, 450,350, 450,400, 400,400, 450,350, 450,400, 400,400, 400,400, 450,350, 450,400, 400,400, 400,400, 450,400, 400,400, 400,400, 450,350, 450,350, 450,1100, 400,400, 450,400, 400,1100, 450,1050, 450,400, 400,400, 400,400, 450,350, 450,400, 400,400, 450,350, 450,400, 400,400, 400,1100, 450,350, 450,400, 400,400, 400,400, 450,400, 400,1100, 450,350, 450,400, 400,400, 400,400, 400,1100, 450,400, 400,400, 450,350, 450,400, 400,400, 400,400, 450,350, 450,350, 450,400, 400,400, 450,350, 450,400, 400,400, 400,400, 450,350, 450,400, 400,400, 450,350, 450,400, 400,400, 400,400, 450,350, 450,350, 450,400, 450,350, 450,350, 450,400, 450,350, 450,350, 450,350, 450,400, 450,350, 450,350, 450,400, 400,1100, 450,350, 450,350, 450,400, 450,350, 450,350, 450,1100, 450}; unsigned int ACon[] = {2950,1700, 450,1100, 400,1100, 450,350, 450,350, 450,400, 450,1050, 450,350, 450,400, 450,1050, 450,1100, 400,400, 450,1050, 450,350, 450,400, 400,1100, 450,1100, 450,350, 450,1050, 450,1100, 450,350, 450,350, 450,1100, 450,350, 400,400, 450,1100, 450,350, 450,350, 450,400, 400,400, 450,350, 450,350, 450,400, 400,400, 450,350, 450,350, 450,400, 400,400, 450,350, 450,350, 450,400, 450,350, 450,350, 450,1100, 400,400, 450,350, 450,1100, 400,400, 450,350, 450,1100, 400,1100, 450,350, 450,400, 400,400, 450,350, 500,300, 450,400, 450,350, 400,400, 450,1100, 400,400, 450,350, 450,350, 450,400, 400,400, 450,350, 450,1100, 450,350, 400,400, 450,350, 450,400, 450,350, 400,400, 450,400, 450,350, 450,350, 450,350, 450,400, 400,400, 450,350, 450,400, 400,400, 400,400, 400,400, 450,350, 450,400, 450,350, 450,350, 450,400, 450,350, 450,350, 450,350, 450,400, 400,400, 400,400, 450,350, 450,400, 450,350, 400,400, 450,350, 450,400, 450,350, 450,350, 450,350, 450,400, 450,350, 450,1100, 400,400, 400,400, 450,350, 450,350, 450,1100, 400,400, 450}; unsigned int Temp23[] = {3000,1650, 550,950, 550,1000, 500,300, 550,250, 550,250, 550,1000, 500,300, 550,300, 500,1000, 550,950, 550,300, 550,950, 550,250, 550,300, 500,1000, 500,1050, 500,300, 500,1000, 550,1000, 500,300, 500,300, 550,1000, 450,350, 500,300, 500,1050, 450,350, 450,350, 450,350, 450,400, 450,350, 450,350, 450,400, 400,400, 450,350, 450,350, 450,350, 450,400, 400,400, 400,400, 450,400, 400,400, 400,400, 450,1100, 400,400, 400,400, 450,1050, 450,400, 400,400, 450,1100, 400,1100, 400,400, 450,350, 450,400, 400,400, 400,400, 450,400, 400,400, 400,400, 450,350, 450,1100, 400,400, 400,400, 450,350, 450,400, 400,400, 450,1100, 400,400, 400,1100, 450,1100, 400,1100, 450,350, 450,400, 400,400, 450,350, 450,350, 450,400, 400,400, 400,400, 450,350, 450,400, 400,400, 450,350, 450,400, 400,400, 400,400, 450,350, 450,400, 400,400, 450,350, 450,350, 450,400, 450,350, 400,400, 450,350, 450,400, 450,350, 450,350, 450,400, 450,350, 450,350, 450,350, 450,400, 400,400, 400,400, 450,350, 450,1100, 400,1100, 450,1100, 400,1100, 450,1100, 400,1100, 400,400, 450}; unsigned int Temp24[] = {3000,1650, 500,1050, 500,1000, 500,300, 500,300, 500,350, 500,1000, 500,300, 500,350, 500,1000, 500,1050, 500,300, 500,1000, 500,300, 500,350, 500,1000, 500,1050, 500,300, 500,1000, 500,1050, 500,300, 500,300, 500,1050, 500,300, 500,300, 500,1050, 500,300, 500,300, 500,350, 500,300, 500,300, 500,300, 500,350, 500,300, 500,300, 500,300, 500,350, 500,300, 500,300, 500,300, 500,350, 500,300, 500,300, 500,1050, 500,300, 500,300, 500,1050, 500,300, 500,300, 500,1050, 500,1000, 500,300, 500,350, 500,300, 500,300, 500,300, 500,350, 500,1000, 500,1050, 500,1000, 500,300, 500,350, 450,350, 500,300, 500,300, 500,350, 500,1000, 500,300, 500,1050, 500,1000, 500,1050, 500,300, 500,300, 500,350, 500,300, 500,300, 500,300, 500,300, 500,350, 500,300, 450,350, 500,350, 450,350, 450,350, 450,350, 450,400, 400,400, 400,400, 450,400, 400,400, 400,400, 400,400, 450,350, 450,400, 400,400, 450,350, 450,400, 450,350, 450,350, 450,350, 450,400, 450,350, 450,350, 450,350, 500,350, 450,1050, 500,300, 500,1050, 500,1000, 500,1050, 500,1000, 500,1000, 500,350, 550}; unsigned int Temp25[] = {3050,1650, 500,1000, 550,950, 550,300, 500,300, 500,300, 550,1000, 500,300, 500,300, 550,1000, 550,950, 550,250, 550,1000, 500,300, 550,250, 550,1000, 500,1000, 550,300, 550,950, 550,950, 550,300, 500,300, 500,1000, 550,250, 550,300, 550,950, 550,300, 500,300, 500,300, 550,250, 550,300, 500,300, 550,250, 550,250, 600,250, 500,300, 550,250, 550,250, 550,300, 550,250, 500,300, 550,300, 500,300, 500,1000, 550,250, 550,300, 500,1000, 550,250, 550,300, 500,1000, 550,1000, 500,300, 500,300, 550,250, 550,300, 500,300, 500,300, 550,300, 500,1000, 550,950, 550,300, 500,300, 500,300, 550,250, 550,300, 500,300, 550,950, 550,300, 500,1000, 550,1000, 500,1000, 500,300, 550,300, 500,300, 500,300, 550,250, 550,300, 500,300, 500,300, 550,250, 550,300, 500,300, 550,250, 550,250, 550,300, 500,300, 500,300, 550,250, 550,300, 500,300, 550,250, 550,300, 500,300, 500,300, 550,250, 550,250, 550,300, 550,250, 550,250, 550,300, 500,300, 500,300, 550,250, 550,300, 500,300, 500,300, 500,350, 500,1000, 500,1000, 500,1050, 500,1000, 500,1050, 500,300, 550}; unsigned int Temp26[] = {3000,1650, 500,1000, 500,1050, 500,300, 500,300, 500,350, 500,1000, 500,300, 500,350, 500,1000, 500,1050, 450,350, 500,1000, 500,300, 500,350, 500,1000, 500,1050, 500,300, 500,1000, 500,1050, 500,300, 500,300, 500,1050, 500,300, 500,300, 500,1050, 500,300, 500,300, 500,300, 500,350, 500,300, 500,300, 500,350, 500,300, 500,300, 500,300, 500,350, 500,300, 500,300, 500,300, 500,350, 500,300, 500,300, 500,1050, 500,300, 500,300, 500,1050, 450,350, 500,300, 500,1050, 500,1000, 500,300, 500,350, 500,300, 500,300, 500,300, 500,350, 500,1000, 500,300, 500,1050, 500,300, 500,300, 500,300, 500,350, 500,300, 500,300, 500,1050, 500,300, 500,1050, 450,1050, 500,1000, 500,350, 500,300, 500,300, 500,350, 450,350, 500,300, 500,300, 500,300, 500,350, 500,300, 500,300, 500,350, 500,300, 500,300, 500,300, 500,350, 450,350, 500,300, 500,350, 450,350, 500,300, 500,300, 500,300, 500,350, 500,300, 500,300, 500,350, 500,300, 500,300, 500,300, 500,350, 500,300, 500,300, 500,350, 450,1050, 500,1000, 500,350, 500,1000, 500,1000, 500,1050, 500,1000, 500,350, 500}; unsigned int Temp27[] = {3050,1600, 550,1000, 500,1000, 550,300, 500,300, 550,250, 550,1000, 500,300, 550,300, 500,1000, 550,1000, 500,300, 550,1000, 550,250, 500,300, 550,1000, 500,1050, 500,300, 500,1000, 550,1000, 500,300, 550,250, 550,1000, 550,250, 550,300, 500,1000, 550,300, 500,300, 550,250, 550,300, 500,300, 500,300, 550,300, 500,300, 550,250, 550,300, 500,300, 500,300, 550,300, 500,300, 500,300, 550,300, 500,300, 500,1000, 550,300, 500,300, 550,1000, 500,300, 500,300, 550,1000, 550,1000, 500,300, 500,300, 550,250, 550,300, 500,300, 550,300, 500,300, 500,300, 550,1000, 500,300, 550,250, 550,300, 500,300, 500,300, 500,350, 500,300, 550,250, 550,1000, 500,1000, 550,1000, 500,300, 550,300, 500,300, 550,250, 550,300, 500,300, 500,300, 550,300, 500,300, 500,300, 550,300, 500,300, 550,250, 550,300, 500,300, 500,300, 500,300, 550,300, 550,250, 550,300, 500,300, 500,300, 550,300, 500,300, 500,300, 550,300, 500,300, 500,300, 550,300, 500,300, 500,300, 500,300, 500,350, 500,300, 500,350, 500,300, 500,300, 500,1050, 500,1000, 500,1050, 500,1000, 500,350, 500}; // PANASONIC C4D3:64800024 unsigned int Temp28[] = {3100,1600, 550,950, 550,1000, 550,250, 550,250, 550,250, 550,1000, 500,300, 500,300, 550,1000, 500,1000, 550,250, 550,1000, 500,300, 550,250, 550,1000, 550,950, 550,300, 500,1000, 550,950, 550,300, 550,250, 500,1000, 550,300, 500,300, 550,950, 550,300, 500,300, 500,300, 550,250, 550,300, 550,250, 500,300, 550,300, 500,300, 500,300, 550,250, 550,250, 600,250, 500,300, 500,300, 550,300, 500,300, 500,1000, 550,300, 500,300, 500,1000, 550,250, 550,300, 500,1000, 550,1000, 550,250, 550,250, 550,250, 550,300, 500,300, 550,250, 550,1000, 500,1000, 550,250, 550,300, 500,300, 500,300, 550,250, 550,300, 500,300, 550,1000, 500,300, 500,1000, 550,1000, 500,1000, 550,250, 550,300, 500,300, 550,250, 550,250, 550,300, 500,300, 500,300, 550,250, 550,300, 500,300, 550,250, 550,300, 550,250, 500,300, 550,250, 550,250, 550,300, 550,250, 550,250, 550,300, 500,300, 500,300, 550,250, 550,300, 500,300, 550,250, 550,300, 500,300, 500,300, 550,250, 550,250, 550,300, 500,300, 550,1000, 500,300, 500,300, 550,950, 550,1000, 500,1000, 550,1000, 500,300, 550}; unsigned int Temp29[] = {3100,1550, 600,950, 500,1000, 550,300, 500,300, 500,300, 550,950, 550,300, 550,250, 550,1000, 500,1000, 550,250, 550,1000, 500,300, 550,250, 550,950, 600,950, 550,250, 550,1000, 500,1000, 550,250, 600,250, 550,950, 550,250, 550,300, 550,950, 550,250, 550,300, 550,250, 550,250, 550,250, 550,300, 550,250, 550,250, 550,300, 500,300, 550,250, 550,250, 550,300, 500,300, 550,250, 550,250, 600,250, 550,950, 550,250, 550,300, 500,1000, 550,250, 550,300, 550,950, 550,1000, 500,300, 500,300, 550,250, 550,250, 550,300, 500,300, 550,250, 550,1000, 500,300, 550,250, 550,300, 500,300, 550,250, 550,250, 550,300, 500,1000, 550,250, 550,1000, 500,1000, 550,1000, 500,300, 500,300, 550,300, 500,300, 500,300, 550,250, 550,250, 550,300, 500,300, 500,300, 550,300, 500,300, 500,300, 550,250, 550,300, 500,300, 500,300, 550,300, 500,300, 500,300, 550,250, 550,250, 550,300, 500,300, 500,300, 550,300, 500,300, 500,300, 550,250, 550,300, 500,300, 500,300, 550,250, 550,300, 500,300, 550,250, 550,250, 550,1000, 500,1000, 550,1000, 500,1000, 550,300, 500}; unsigned int Temp30[] = {3000,1650, 500,1000, 550,1000, 500,300, 500,300, 550,250, 550,1000, 500,300, 500,300, 550,1000, 550,950, 550,250, 550,1000, 550,250, 550,250, 550,1000, 550,950, 550,300, 500,1000, 550,950, 550,300, 500,300, 550,950, 550,300, 550,250, 550,1000, 500,300, 500,300, 550,250, 550,250, 550,300, 500,300, 550,250, 550,300, 500,300, 500,300, 550,250, 550,300, 500,300, 500,300, 550,300, 500,300, 500,300, 550,950, 550,300, 500,300, 500,1000, 550,250, 550,300, 550,950, 550,1000, 500,300, 550,250, 550,250, 600,250, 500,300, 550,250, 550,1000, 500,300, 550,250, 550,300, 500,300, 500,300, 550,250, 550,300, 500,300, 550,950, 550,300, 500,1000, 550,950, 550,1000, 500,300, 550,300, 500,300, 500,300, 550,250, 550,300, 500,300, 500,300, 550,250, 550,300, 500,300, 500,300, 550,250, 550,300, 500,300, 500,300, 550,250, 550,300, 500,300, 550,250, 550,300, 500,300, 500,300, 550,250, 550,250, 550,300, 500,300, 550,250, 550,300, 500,300, 500,300, 550,250, 550,300, 500,300, 550,950, 500,1050, 500,1000, 500,350, 500,1000, 500,1000, 500,1050, 500,300, 500}; //Change it for your remote IRsend irsend; int Measured_temp; int Measured_Humi; int AC_Temp; char temp_error = 2; int Pev_value; boolean AC = false; int khz = 38; // несущая частота 38kHz для протокола NEC void setup() { Serial.begin(9600); display.begin(SSD1306_SWITCHCAPVCC); display.clearDisplay(); } void loop() { DHT.read11(DHT11_PIN); // считываем значения температуры и влажности Measured_temp = DHT.temperature + temp_error; Measured_Humi = DHT.humidity; // text display tests display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0,0); display.print("Temperature: "); display.print(Measured_temp);display.println("C"); display.setCursor(0,10); display.print("Humidity: "); display.print(Measured_Humi);display.println("%"); display.setCursor(0,20); display.print("AC Temp: "); display.print(AC_Temp);display.println("C"); display.display(); delay(500); display.clearDisplay(); if ((Measured_temp <= (Desired_temperature-3)) && AC == true) //если кондиционер включен и измеренная температура на 3 градуса ниже чем желаемая { irsend.sendRaw(ACoff, sizeof(ACoff) / sizeof(ACoff[0]), khz); delay(2000);//передаем сигнал на выключение кондиционера AC_Temp = 0; AC=false; } if ((Measured_temp >= Desired_temperature+4) && AC == false) //если кондиционер выключен и измеренная температура значительно выше чем желаемая { irsend.sendRaw(ACon, sizeof(ACon) / sizeof(ACon[0]), khz); delay(2000); //передаем сигнал на включение кондиционера delay(2000); irsend.sendRaw(Temp27, sizeof(Temp27) / sizeof(Temp27[0]), khz); // передаем сигнал на установку температуры 27*C AC_Temp = 27; AC=true; } if ( Measured_temp != Pev_value) //изменяем температуру только если измеренное значение температуры изменилось { if (Measured_temp == Desired_temperature+3) //если кондиционер включен и измеренная температура экстремально выше желаемой { irsend.sendRaw(Temp24, sizeof(Temp24) / sizeof(Temp24[0]), khz); delay(2000);// передаем сигнал на установку температуры 24*C AC_Temp = 24; } if (Measured_temp == Desired_temperature+2) // если кондиционер включен и измеренная температура значительно выше желаемой { irsend.sendRaw(Temp25, sizeof(Temp25) / sizeof(Temp25[0]), khz); delay(2000);// передаем сигнал на установку температуры 25*C AC_Temp = 25; } if (Measured_temp == Desired_temperature+1) // если кондиционер включен и измеренная температура выше желаемой { irsend.sendRaw(Temp26, sizeof(Temp26) / sizeof(Temp26[0]), khz); delay(2000);// передаем сигнал на установку температуры 26*C AC_Temp = 26; } if (Measured_temp == 27 ) // если кондиционер включен и измеренная температура равна желаемой { irsend.sendRaw(Temp27, sizeof(Temp27) / sizeof(Temp27[0]), khz); // передаем сигнал на установку температуры 27*C AC_Temp = 27; } if (Measured_temp == Desired_temperature-1) // если кондиционер включен и измеренная температура ниже желаемой { irsend.sendRaw(Temp28, sizeof(Temp28) / sizeof(Temp28[0]), khz); delay(2000);// передаем сигнал на установку температуры 28*C AC_Temp = 28; } if (Measured_temp == Desired_temperature-2 ) // если кондиционер включен и измеренная температура значительно ниже желаемой { irsend.sendRaw(Temp29, sizeof(Temp29) / sizeof(Temp29[0]), khz); delay(2000);// передаем сигнал на установку температуры 29*C AC_Temp = 29; } if (Measured_temp == Desired_temperature-3 ) // если кондиционер включен и измеренная температура экстремально ниже желаемой { irsend.sendRaw(Temp30, sizeof(Temp30) / sizeof(Temp30[0]), khz); delay(2000);// передаем сигнал на установку температуры 30*C AC_Temp = 30; } } Pev_value = Measured_temp; } |
Не та библиотека dht,коды не совпадают..
Попробуйте ее название в том месте, где она подключается в программу, написать большими буквами, как в этой статье.