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