Нагреватель воды

Описание

Не секрет что каждое лето происходит отключение горячего водоснабжения. Каждому приходится что-то придумывать, чтобы помыться. Самый простой способ, вскипятить воду в чайнике или кастрюле, разбавить её в большой ёмкости и помыться. Однако, мы лёгких путей не ищем, и подумали что можно сделать нечто более удобное. Например, купить кипятильник и нагревать воду в большой ёмкости до нужной температуры. Далее можно помыться из ковша или приобрести садовый душ, который будет насосом забирать воду из ёмкости и лейкой мыть своего владельца.

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

Шаг 1. Что понадобится

Шаг 2. Схема сборки

Шаг 3. Скетч

Загрузите скетч на контроллер:

#include <OLED_I2C.h> //подключение библиотеки для работы с дисплеем
 
#include <OneWire.h> //подключение библиотеки OneWire
#include <DallasTemperature.h> //подключение библиотеки для работы с датчиком
 
#define ONE_WIRE_BUS 10 //шина передачи данных
 
const int PIN_POT = A0; //пин подключения модуля потенциометра
const int PIN_BUZ = 9; //пин подключения зуммера
int temperature = 0; //переменная для хранения требуемой температуры
boolean inverter = false; //переменная для сигнализации о температуре
 
OneWire oneWire(ONE_WIRE_BUS); //создание объекта oneWire для передачи данных по технологии OneWire
 
DallasTemperature sensors(&oneWire); //создание объектов типа DallasTemperature дял измерения температуры
 
OLED  myOLED(SDA, SCL, 8); //инициализация дисплея
 
extern uint8_t RusFont[]; //русский шрифт
extern uint8_t BigNumbers[]; //средние цифры
 
void setup()
{
  sensors.begin(); //инициализация датчика(ков)
  myOLED.begin(); //запуск дисплея
  pinMode(PIN_BUZ, OUTPUT);     //установка вывода зуммера как выходной
}
 
void loop()
{
  temperature = map(analogRead(PIN_POT), 0, 1024, 15, 50); //определить требуемую температуру
 
  sensors.requestTemperatures(); //запрос температуры устройств
  float currentTemp = sensors.getTempCByIndex(0); //получить температуру с первого датчика
 
  if (currentTemp > temperature) { //если температура датчика больше ожидаемой
    myOLED.invert(inverter); //поморгать дисплеем
    if (inverter) { //если сейчас нужно посигналить
      tone(PIN_BUZ, 294, 400); //подать сигнал
    }
    inverter = !inverter; //инвертировать переменную
  }
 
  myOLED.clrScr(); //очистка дисплея
 
  myOLED.setFont(RusFont); //установить шрифт
  myOLED.print("NTR NTVGTHFNEHF", CENTER, 0); //вывести надпись "ТЕМПЕРАТУРА"
 
  myOLED.setFont(BigNumbers); //установить шрифт
  myOLED.print(String(currentTemp), CENTER, 9); //вывести текущую температуру
 
  myOLED.setFont(RusFont); //установить шрифт
  myOLED.print("uhflecjd Wtkmcbz", CENTER, 40); //вывести надпись "градусов Цельсия"
 
  myOLED.setFont(RusFont); //установить шрифт
  String waitingTemp = "j;blftv " + String(temperature); //сформировать надпись "ожидаем Х"
  myOLED.print(waitingTemp, CENTER, 55); //вывести надпись
 
  myOLED.update(); //обновить дисплей установленными настройками и надписями 
}

Шаг 4. Готовое устройство

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