Espruino:Примеры/Терморегулятор: различия между версиями
Myagkij (обсуждение | вклад) (Новая страница: «{{Espruino/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} =<ref>[ www.espruino.com - ]</ref>= <syntaxhighlig...») |
Myagkij (обсуждение | вклад) Нет описания правки |
||
Строка 3: | Строка 3: | ||
{{Myagkij-редактор}} | {{Myagkij-редактор}} | ||
=<ref>[ www.espruino.com - ]</ref>= | =Терморегулятор<ref>[https://www.espruino.com/Heater+Controller www.espruino.com - Heater Controller]</ref>= | ||
Есть множество ситуаций, в которых может понадобиться возможность изменять температуру. Например: | |||
* Самодельное производство алкоголя | |||
* Выращивание растений | |||
* Готовка еды в стиле sous-vide («под вакуумом») | |||
* Обогрев дома и так далее | |||
В этом руководстве мы сделаем проект, благодаря которому вам будет очень просто настраивать температуру чего-либо. Конечно, это можно сделать и другими методами (особенно, если управление нагревателем осуществляется не только по принципу «Вкл/Выкл»), но данный метод – хорошая отправная точка в создании подобных проектов. | |||
== Нам понадобятся == | |||
* [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 Реле-модуль] (для включения и выключения нагревателя) | |||
== Подсоединение == | |||
[Картинка] | |||
Нам надо будет подсоединить друг к другу три компонента: | |||
=== Температурный датчик === | |||
Инструкции по подключению температурного датчика можно найти [https://www.espruino.com/DS18B20 тут], но в принципе можно воспользоваться и этой таблицей: | |||
Провод датчика | |||
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 [https://www.espruino.com/Original Original] (в отличие от Espruino [https://www.espruino.com/Pico Pico]) не устойчив к 5-вольтовому напряжению. Поэтому просто снимаем перемычку, и в итоге реле будет питаться от 5 вольт, а входной контакт реле будет управляться 3.3 вольтами. | |||
== Код == | |||
Код для этого проекта очень простой. Просто скопируйте и вставьте его в правую часть IDE, а затем кликните на кнопку загрузки кода в центре IDE. | |||
<syntaxhighlight lang="javascript" enclose="div"> | <syntaxhighlight lang="javascript" enclose="div"> | ||
// В этой функции мы включаем и выключаем нагреватель | |||
// (в зависимости от значения в «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, лампочка снова включится. | |||
Примечание: Если температурный датчик и лампочка не будут находиться близко друг к другу или в закрытом корпусе, температурный порог не будет превышен никогда. Попробуйте поместить лампочку и датчик в маленькую картонную коробку или прилепите их друг к другу скотчем. | |||
Возможно, вы заметили, что в коде используются конструкции targetTemp-1 и targetTemp+1 – это нужно для создания такого эффекта как [https://ru.wikipedia.org/wiki/Гистерезис «гистерезис»]. Он используется во всех термостатах (включая холодильники и системы центрального домашнего отопления) и нужен для того, чтобы избежать ситуации, когда лампочка будет ежесекундно включаться и выключаться. | |||
Когда код будет запущен, вы можете вписать в левой части IDE функцию sensor.getTemp() – это прочтёт текущую температуру. Вы даже можете добавить после строчки var temp = sensor.getTemp(); строчку console.log(temp); (но не забудьте после этого снова загрузить код), в результате чего Espruino начнёт автоматически показывать температуру, и вы сможете наблюдать её падения и взлёты в режиме реального времени. | |||
=См.также= | =См.также= |
Версия от 23:48, 30 июня 2021
Терморегулятор[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 начнёт автоматически показывать температуру, и вы сможете наблюдать её падения и взлёты в режиме реального времени.
См.также
Внешние ссылки