Нагреватель воды
Описание
Не секрет что каждое лето происходит отключение горячего водоснабжения. Каждому приходится что-то придумывать, чтобы помыться. Самый простой способ, вскипятить воду в чайнике или кастрюле, разбавить её в большой ёмкости и помыться. Однако, мы лёгких путей не ищем, и подумали что можно сделать нечто более удобное. Например, купить кипятильник и нагревать воду в большой ёмкости до нужной температуры. Далее можно помыться из ковша или приобрести садовый душ, который будет насосом забирать воду из ёмкости и лейкой мыть своего владельца.
Итак, для этого нам понадобится термометр, а так как мы его будем опускать в воду, нужно чтобы он был герметичным. Далее, хотелось бы вывести температуру на дисплей, чтобы видеть какая текущая температура воды. Скорее всего сразу определить комфортную температуру будет сложно, да и погода разная за окном. В жару хочется воду немного похолоднее, а когда холодно - потеплее. Поэтому регулировать уровень нагрева воды будем с помощью потенциометра. Ну и наконец, добавим зуммер ко всему, он будет в качестве сигнального устройства, показывать что уже пора выключать кипятильник - вода достигла нужной температуры.
Шаг 1. Что понадобится
Что нужно | Количество |
---|---|
Контроллер | 1 |
Sensor shield | 1 |
Герметичный датчик 2м | 1 |
Модуль для удобного подключения датчика | 1 |
Модуль потенциометра | 1 |
Модуль зуммера | 1 |
LED-Дисплей | 1 |
Шлейф х4 | 1 |
Шлейф х3 | 3 |
Шаг 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. Готовое устройство
После того как скетч загружен, проведите несколько тестов, не погружая датчик в воду, а нагревая его руками. После успешных тестов, устройство можно поместить в корпус. Можно оставить как макет и собирать его только на время отключения воды.