=====Зал=====
{{ :wiki:praktika:zal:zal01_300.jpg?nolink|}}Общий зал - это место в доме, где можно уединиться для комфортного просмотра интересного фильма или собраться большой семьей и отпраздновать какое-нибудь торжество.
[[https://bugaga.ru/interesting/1146750156-top-25-neveroyatnye-predmety-mebeli.html|Интересная мебель]], приятная цветовая палитра создают уютное жизненное пространство, а "умные вещи" помогают обустроить это пространство, сделать его удобным.
Существуют [[https://docs.cntd.ru/document/1200095053|межгосударственные стандарты]], регулирующие параметры микроклимата в жилых помещениях. Так, например, средняя температура в гостинной должна быть от +19°C до +21°C, а относительная влажность от 30% до 60% в зависимости от периода года.
Учитывая параметры температуры и влажности, рассчитывают [[https://en.wikipedia.org/wiki/Heat_index|"тепловой индекс"]] (или "индекс комфортности"), на основании которого удобнее автоматически управлять отопительными приборами, кондиционерами и вентиляторами.
----
====Климатические датчики====
===а) Температуры===
В качестве недорогих измерителей температуры с помощью электрического тока можно использовать датчик [[https://amperka.ru/product/temperature-sensor-ds18b20|DS18B20+]] или такой же, но [[https://amperka.ru/product/sealed-temperature-sensor-ds18b20|в герметическом корпусе]].
Параметры датчика DS18B20:
*Диапазон измеряемых температур: −55…+125 °C
*Точность: ±0,5°C (в пределах −10…+85 °C)
*Время получения данных: 750 мс при 12-битном разрешении; 94 мс при 9-битном разрешении
*Напряжение питания: 3–5,5 В
*Потребляемый ток при бездействии: 750 нА
*Потребляемый ток при опросе: 1 мА
===б) Влажности===
Наличие и количество жидкости можно определить:
*в воздухе с помощью датчика [[https://wikihandbk.com/wiki/Arduino:Примеры/Гайд_по_использованию_датчика_дождя_FC-37_или_YL-83|"дождя" (или водяных брызг)]]
*в почве [[https://amperka.ru/product/sensor-soil-moisture-capacitive|ёмкостным]] или [[https://amperka.ru/product/soil-moisture-sensor|резистивным]] датчиком
*уровень жидкости датчиком [[https://3d-diy.ru/wiki/arduino-datchiki/arduino-datchik-urovnya-vody/|уровня жидкости]].
===в) Температуры и влажности===
В реальных проектах управления климатом удобно использовать цифровые датчики [[http://edurobots.ru/2015/02/arduino-dlya-nachinayushhix-urok-9-podklyuchenie-datchika-temperatury-i-vlazhnosti-dht11-i-dht22/|DHT-11 или DHT-22]], отличающиеся точностью, скоростью измерений и, соответственно, ценой.
С помощью [[https://github.com/adafruit/DHT-sensor-library|библиотеки]], созданной специально для датчиков DHT можно считывать сразу температуру и влажность.
^ Параметры датчиков ^ DHT-11 ^ DHT-22 ^
| определение влажности в диапазоне | 20-80% | 0-100% |
| определение температуры | от 0°C до +50°C | от -40°C до +125°C |
| частота опроса | 1 раз в секунду | 1 раз в 2 секунды |
----
====Датчик температуры в TinkerCAD (TMP36)====
В TinkerCAD для измерения температуры используется интегральный датчик TMP36 с аналоговым выходом. Напряжение на выходе датчиков линейно пропорционально температуре в градусах по шкале Цельсия. Дополнительной калибровки не требуется. При этом датчики обеспечивают точность измерения ±1°C при температуре +25°C и точность ±2°C в диапазоне -40°C … +125°C.
{{ :wiki:praktika:zal:tmp36.jpg}}
Выходной диапазон напряжения TMP36 составляет от 0.1В (-40°C) до 2.0В (150°C), но после 125°C точность измерения уменьшается. Подаваемое напряжение от 2.7В до 5.5В, потребление тока 0.05 мА.
Датчик имеет три контакта для подключения к контроллеру arduino:
*2.7-5.5V (питание) - подключается к контакту «5V» arduino
*Земля (общий) - подключается к любому контакту «GND» arduino
*Аналоговый выход (сигнальный) - подключается к любому аналоговому пину (A0-A5) arduino.
Использовать TMP36 для измерения температуры достаточно просто, нужно соединить его левый контакт с напряжением 2.7-5.5В, а правый с землей. Тогда на среднем выводе будет присутствовать напряжение, линейно пропорциональное температуре.
Для перевода выходного напряжения в температуру используют формулу (Vout измеряется в милливольтах):
Температура в °C = [Vout - 500] / 10
Например, выходное напряжение составляет 1 В, это значит, что температура равна ((1000 мВ - 500) / 10) = 50 °C.
----
===Схема подключения===
Для тестирования датчика TMP36, подключенного к порту A0, будем использовать светодиод, анод которого соединен с цифровым портом D3. Этот порт поддерживает широтно-импульсную модуляцию (ШИМ) и может выдавать значение от 0 до 255 для плавного изменения яркости свечения светодиода.
В примере для упрощения схемы светодиод подключается без **токоограничивающего резистора**! Для устойчивой работы светодиода необходимо последовательно с анодом или катодом подключить резистор номиналом от 180 до 220 Ом.
{{ :wiki:praktika:zal:zal02.jpg }}
----
===Программный код===
Программный код, представленный на рисунке ниже, выводит во встроенный "Монитор последовательного интерфейса" два параметра: "данные температурного датчика на выводе" и данные "с аналогового вывода".
{{ :wiki:praktika:zal:zal03.jpg }}
Запустив моделирование схемы и установив регулятор датчика TMP36 в разные положения мы увидим, что:
*"данные температурного датчика на выводе" изменяются в диапазоне от -40 до +125
*данные "с аналогового вывода" изменяются в диапазоне от 20 до 358.
Так как ШИМ-порт поддерживает значения от 0 до 255, то выходные данные от датчика TMP36 надо преобразовать в диапазон от 0 до 255. Обычно в "больших" языках программирования для этого используют команду **''map()''**.
map(value, fromLow, fromHigh, toLow, toHigh)
Преобразует значение переменной из одного диапазона в другой. Например, значение переменной value, равное fromLow, будет преобразовано в число toLow, а значение fromHigh - в toHigh. Все промежуточные значения value масштабируются относительного нового диапазона [toLow; toHigh].
В блочном языке программирования TinkerCAD есть команда: {{ :wiki:praktika:zal:map_.png}}
Если использовать эту команду для преобразования "данных с аналогового вывода", то на выходе получаются значения:
* при диапазоне от 0 до 255 - от 4 до 89
* при диапазоне от 0 до 512 - от 10 до 179
* при диапазоне от 0 до 1024 - от 20 до 358
Опытным путем можно подобрать рабочий диапазон для команды: от -700 до 4550. В этом случае на цифровой пин (к которому подключен светодиод) при температуре 20°C подается небольшое значение (примерно 33), то есть светодиод еле засветится, а при температуре 40°C подается максимальное значение 255, то есть светодиод будет светиться максимально ярко.
Мы выбрали диапазон температур исходя из того, что в дальнейшем arduino будет управлять не светодиодом, а двигателем (вентилятора, кондиционера и т.п.). Хотелось, чтобы реальный вентилятор начинал работать при небольшом превышении нормальной температуры и достигал своей максимальной производительности при жаре в 40°C.
Дополненный функцией **''map()''** - "**''СОПОСТАВИТЬ...''**" программный код управления светодиодом:
{{ :wiki:praktika:zal:zal04.png }}
----
----
====Управление мощной нагрузкой====
Контроллер Arduino обычно выступает в роли логического (командного) устройства. Контроллер выдает команды, а другие, более сильные, более мощные устройства выполняют полезные действия. Представьте, как вы поворачиваете маленький кран рукомойника, а мощный насос продавливает по трубе под напором воду. И, чем больше вы поворачиваете кран, тем мощней струя воды.
===Транзисторный усилитель===
{{ :wiki:praktika:zal:zal05.png}}В электронных устройствах постоянного тока слабый управляющий (логический) сигнал превращают в сильный "усилители", которые строятся на основе [[https://ru.wikipedia.org/wiki/Транзистор|транзисторов]].
**Транзистор** (от английских слов transfer — переносить и resistor — сопротивление) электронный полупроводниковый прибор, предназначенный для усиления, генерирования и преобразования электрических колебаний различных частот.
**Изобретен в 1948 г. американцами У.Шокли, У.Браттейном и Дж.Бардином**
----
===Схема подключения===
На схеме к аналоговому порту A0 подключен датчик температуры TMP36, который определяет температуру окружающей среды. При достижении температуры выше 20°C, контроллер arduino начинает выдавать на цифровой порт D3 ШИМ-сигнал определенной величины.
К порту D3 через резистор 100 Ом подключен контакт Gate (Затвор) полевого N-канального транзистора. К контакту транзистора Drain (Сток) подключен двигатель (вентилятора, кондиционера и т.п.). К другому контакту двигателя подключен мощный источник питания (в нашем случае на 5 вольт). Контакт Gate (Затвор) соединен с контактом arduino GND (Земля) через резистор 10 кОм.
//"Резистор на 100 Ом (можно ставить в диапазоне 100-500 Ом, мощность любая) выполняет защитную функцию: затвор полевика представляет собой конденсатор, в момент открытия затвора конденсатор начнёт заряжаться и в цепи пойдёт большой ток (практически короткое замыкание), который может повредить пин Ардуино. Резистор просто ограничивает ток в цепи пин-затвор и спасает пин от скачков тока"// (источник [[https://alexgyver.ru|AlexGyver]])
//"Резистор на 10 кОм (можно ставить в диапазоне 5-50 кОм, мощность любая) выполняет подтягивающую функцию для затвора. Если случится так, что плата Ардуино выключена или сигнальный провод от неё отвалился – на затвор будут приходить случайные наводки и он может случайно открыться. Если в этот момент будет подключен источник питания – нагрузка тоже включится! Восстание машин начнётся именно с этого момента. Подтягивающий к GND резистор позволяет “прижать” затвор, чтобы он не открылся сам по себе"// (источник [[https://alexgyver.ru|AlexGyver]])
{{ :wiki:praktika:zal:zal06.png }}
Обязательным условием устойчивой работы схемы является соединение контактов GND (земля) всех элементов вместе
----
===Программный код===
На рисунке выше температура датчика TMP36 25°C. При этом обороты двигателя 2846 rpm (обороты в минуты). С помощью программного кода сделаем так, чтобы двигатель начинал вращаться только при температуре выше 20°C и максимальные обороты набирал при температуре окружающей среды 40°C. При дальнейшем росте температуры, на пин D3 выдается значение 255 - максимальные обороты двигателя.
**"TMP36_T"** и **"TMP36_A0"** - переменные для сохранения параметров, выдаваемых датчиком температуры TMP36. Заметьте так же, что, в соответствии с задачей, изменены параметры команды **''[СОПОСТАВИТЬ ... С ДИАПАЗОНОМ ... ОТ ... ДО ...]''**
{{ :wiki:praktika:zal:zal07.png }}
----
==== Задание для самостоятельной работы ====
=== Уровень 1 ===
Если на arduino порты A0 и D3 заняты другим оборудованием. Что необходимо сделать для решения нашей задачи? Выполните необходимые действия и сохраните изменения в виде скриншотов.
----
[ [[start|На главную страницу]] ]. . . .[ [[спальня|Далее]] ]