Espruino:Примеры/Терморегулятор: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
(Новая страница: «{{Espruino/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} =<ref>[ www.espruino.com - ]</ref>= <syntaxhighlig...»)
 
Нет описания правки
 
(не показано 7 промежуточных версий 2 участников)
Строка 3: Строка 3:
{{Myagkij-редактор}}
{{Myagkij-редактор}}


=<ref>[ www.espruino.com - ]</ref>=
=Терморегулятор<ref>[https://www.espruino.com/Heater+Controller www.espruino.com - Heater Controller]</ref>=


Есть множество ситуаций, в которых может понадобиться возможность изменять температуру. Например:
* Самодельное производство алкоголя
* Выращивание растений
* Готовка еды в стиле sous-vide («под вакуумом»)
* Обогрев дома и так далее


В этом руководстве мы сделаем проект, благодаря которому вам будет очень просто настраивать температуру чего-либо. Конечно, это можно сделать и другими методами (особенно, если управление нагревателем осуществляется не только по принципу «Вкл/Выкл»), но данный метод – хорошая отправная точка в создании подобных проектов.


<syntaxhighlight lang="javascript" enclose="div">
== Нам понадобятся ==


* [https://www.espruino.com/Original Плата Espruino]
* [https://www.espruino.com/DS18B20 Температурный датчик DS18B20]
* Резистор на 4.7 кОм (для температурного датчика)
* Что-то типа нагревателя. Я воспользовался автомобильной индикаторной лампочкой [https://www.ebay.com/sch/i.html?_nkw=P21W+12V+21W+-led&mkcid=1&mkrid=711-53200-19255-0&siteid=0&campid=5337979701&customid=&toolid=10001&mkevt=1 P21W] и 5-вольтовым источником питания, генерирующим как минимум 1 ампер
* [https://www.espruino.com/Relays Реле-модуль] (для включения и выключения нагревателя)
== Подсоединение ==
[[File:Heater_Controller_setup.jpg|center]]
Нам надо будет подсоединить друг к другу три компонента:
=== Температурный датчик ===
Инструкции по подключению температурного датчика можно найти [https://www.espruino.com/DS18B20 тут], но в принципе можно воспользоваться и этой таблицей:
{| class="wikitable"
|-
! Провод датчика !! Espruino !! Резистор на 4.7 кОм
|-
| Чёрный || GND ||
|-
| Красный || 3.3v || 1-ый провод
|-
| Белый || A1 || 2-ой провод
|}
=== Подключение нагревателя к реле-модулю ===
Здесь нам надо создать простую цепь «лампочка + батарея», где вместо переключателя будет использоваться реле. Выполните следующее:
{| class="wikitable"
|-
! Провод от !! Провод к
|-
| Металлического корпуса лампочки || Контакту GND на источнике питания
|-
| Нижнего конца лампочки || 2-ому контакту реле (он помечен как K1)
|-
| 5V на источнике питания || 3-ему контакту реле
|}
=== Подключение реле-модуля к Espruino ===
'''Снимите с реле-модуля перемычку, соединяющую контакты JD-VCC и VCC.'''
{| class="wikitable"
|-
! Реле-модуль !! Espruino
|-
| GND || GND
|-
| JD-VCC || Bat (5V)
|-
| VCC || 3.3v
|-
| IN1 || A0
|}
{{Примечание1|На фото выше у реле-модуля перемычка не снята, и он запитан исключительно от 5-вольтового напряжения. Это рабочий вариант, но у некоторых реле-модулей могут возникнуть проблемы с выключением. На контактах, устойчивых к 5 вольтам, эти проблемы можно исправить функцией pinMode(A0, "opendrain"), но контакт A0 на Espruino [https://www.espruino.com/Original Original] (в отличие от Espruino [https://www.espruino.com/Pico Pico]) не устойчив к 5-вольтовому напряжению. Поэтому просто снимаем перемычку, и в итоге реле будет питаться от 5 вольт, а входной контакт реле будет управляться 3.3 вольтами.}}
== Код ==
Код для этого проекта очень простой. Просто скопируйте и вставьте его в правую часть IDE, а затем кликните на кнопку загрузки кода в центре IDE.
<syntaxhighlight lang="javascript">
// В этой функции мы включаем и выключаем нагреватель
// (в зависимости от значения в «isOn»).
// Кроме того, здесь также будет включаться/выключаться
// служащий индикатором красный светодиод.
function setHeater(isOn) {
  digitalWrite(LED1, isOn);
  digitalWrite(A0, !isOn); // «0» включает реле, «1» – выключает
}
var ow = new OneWire(A1);
var sensor = require("DS18B20").connect(ow);
// Пороговая температура:
var targetTemp = 30;
// Каждую секунду...
setInterval(function() {
  // Считываем температуру:
  var temp = sensor.getTemp();
  // Если температура слишком низкая, включаем нагреватель:
  if (temp < targetTemp-1)
    setHeater(true);
  // Если температура слишком высокая,
  // выключаем нагреватель и даём ему остыть:
  if (temp > targetTemp+1)
    setHeater(false);
}, 1000);
</syntaxhighlight>
</syntaxhighlight>
Теперь, если температура будет ниже 30 °C (значение в targetTemp), лампочка включится и начнёт вырабатывать тепло. Если температурный порог будет немного превышен, лампочка выключится. Если температура упадёт чуть ниже 30 °C, лампочка снова включится.
{{Примечание1|Если температурный датчик и лампочка не будут находиться близко друг к другу или в закрытом корпусе, температурный порог не будет превышен никогда. Попробуйте поместить лампочку и датчик в маленькую картонную коробку или прилепите их друг к другу скотчем.}}
Возможно, вы заметили, что в коде используются конструкции targetTemp-1 и targetTemp+1 – это нужно для создания такого эффекта как [https://ru.wikipedia.org/wiki/Гистерезис «гистерезис»]. Он используется во всех термостатах (включая холодильники и системы центрального домашнего отопления) и нужен для того, чтобы избежать ситуации, когда лампочка будет ежесекундно включаться и выключаться.
Когда код будет запущен, вы можете вписать в левой части IDE функцию sensor.getTemp() – это прочтёт текущую температуру. Вы даже можете добавить после строчки var temp = sensor.getTemp(); строчку console.log(temp); (но не забудьте после этого снова загрузить код), в результате чего Espruino начнёт автоматически показывать температуру, и вы сможете наблюдать её падения и взлёты в режиме реального времени.


=См.также=
=См.также=
{{ads}}


=Внешние ссылки=
=Внешние ссылки=
Строка 19: Строка 123:
<references />
<references />


{{Навигационная таблица/Espruino}}
{{Навигационная таблица/Портал/Espruino}}
{{Навигационная таблица/Телепорт}}

Текущая версия от 15:12, 28 мая 2023

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Терморегулятор[1]

Есть множество ситуаций, в которых может понадобиться возможность изменять температуру. Например:

  • Самодельное производство алкоголя
  • Выращивание растений
  • Готовка еды в стиле sous-vide («под вакуумом»)
  • Обогрев дома и так далее

В этом руководстве мы сделаем проект, благодаря которому вам будет очень просто настраивать температуру чего-либо. Конечно, это можно сделать и другими методами (особенно, если управление нагревателем осуществляется не только по принципу «Вкл/Выкл»), но данный метод – хорошая отправная точка в создании подобных проектов.

Нам понадобятся

  • Плата Espruino
  • Температурный датчик DS18B20
  • Резистор на 4.7 кОм (для температурного датчика)
  • Что-то типа нагревателя. Я воспользовался автомобильной индикаторной лампочкой P21W и 5-вольтовым источником питания, генерирующим как минимум 1 ампер
  • Реле-модуль (для включения и выключения нагревателя)

Подсоединение

Нам надо будет подсоединить друг к другу три компонента:

Температурный датчик

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

Провод датчика Espruino Резистор на 4.7 кОм
Чёрный GND
Красный 3.3v 1-ый провод
Белый A1 2-ой провод

Подключение нагревателя к реле-модулю

Здесь нам надо создать простую цепь «лампочка + батарея», где вместо переключателя будет использоваться реле. Выполните следующее:

Провод от Провод к
Металлического корпуса лампочки Контакту GND на источнике питания
Нижнего конца лампочки 2-ому контакту реле (он помечен как K1)
5V на источнике питания 3-ему контакту реле

Подключение реле-модуля к Espruino

Снимите с реле-модуля перемычку, соединяющую контакты JD-VCC и VCC.

Реле-модуль Espruino
GND GND
JD-VCC Bat (5V)
VCC 3.3v
IN1 A0
Примечание

На фото выше у реле-модуля перемычка не снята, и он запитан исключительно от 5-вольтового напряжения. Это рабочий вариант, но у некоторых реле-модулей могут возникнуть проблемы с выключением. На контактах, устойчивых к 5 вольтам, эти проблемы можно исправить функцией pinMode(A0, "opendrain"), но контакт A0 на Espruino Original (в отличие от Espruino Pico) не устойчив к 5-вольтовому напряжению. Поэтому просто снимаем перемычку, и в итоге реле будет питаться от 5 вольт, а входной контакт реле будет управляться 3.3 вольтами.

Код

Код для этого проекта очень простой. Просто скопируйте и вставьте его в правую часть IDE, а затем кликните на кнопку загрузки кода в центре IDE.

// В этой функции мы включаем и выключаем нагреватель
// (в зависимости от значения в «isOn»).
// Кроме того, здесь также будет включаться/выключаться
// служащий индикатором красный светодиод.
function setHeater(isOn) {
  digitalWrite(LED1, isOn);
  digitalWrite(A0, !isOn); // «0» включает реле, «1» – выключает
}

var ow = new OneWire(A1);
var sensor = require("DS18B20").connect(ow);
// Пороговая температура:
var targetTemp = 30;

// Каждую секунду...
setInterval(function() {
  // Считываем температуру:
  var temp = sensor.getTemp();
  // Если температура слишком низкая, включаем нагреватель:
  if (temp < targetTemp-1)
    setHeater(true);
  // Если температура слишком высокая, 
  // выключаем нагреватель и даём ему остыть:
  if (temp > targetTemp+1)
    setHeater(false);
}, 1000);

Теперь, если температура будет ниже 30 °C (значение в targetTemp), лампочка включится и начнёт вырабатывать тепло. Если температурный порог будет немного превышен, лампочка выключится. Если температура упадёт чуть ниже 30 °C, лампочка снова включится.

Примечание

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

Возможно, вы заметили, что в коде используются конструкции targetTemp-1 и targetTemp+1 – это нужно для создания такого эффекта как «гистерезис». Он используется во всех термостатах (включая холодильники и системы центрального домашнего отопления) и нужен для того, чтобы избежать ситуации, когда лампочка будет ежесекундно включаться и выключаться.

Когда код будет запущен, вы можете вписать в левой части IDE функцию sensor.getTemp() – это прочтёт текущую температуру. Вы даже можете добавить после строчки var temp = sensor.getTemp(); строчку console.log(temp); (но не забудьте после этого снова загрузить код), в результате чего Espruino начнёт автоматически показывать температуру, и вы сможете наблюдать её падения и взлёты в режиме реального времени.

См.также

Внешние ссылки