Датчик протечки воды - Часть 0 - Начало

Задача:
Устройство для автоматического оповещения о затоплении в квартире. Локально - путем подачи звукового сигнала, и глобально - путем отправки сообщения на почту.

Пожелание:
Оставить возможность для расширения функционала, скажем, чтобы этот же датчик легко можно было переделать под другое событие срабатывания. Например отрытие/закрытие окна или двери, окончание стирки стиральной машины, срабатывание пожарного датчика и т.д.

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

Бывают и ситуация когда, не мы затапливаем, а нас, для этого тоже устройство может быть полезным ;)

1 - Поиск информации и выбор подходящего варианта в качестве сенсора воды

1.1 - Использовать готовый сенсор воды

В начале была идея использовать сенсор воды который можно купить в Китае, однако оказалось, что его потребление для батарейного питания не подходит. Ток с удаленным POWER светодиодом в режиме ожидания около 1ma, это уже многовато. Ток в режиме сработки не сильно большой, это допустимо так как устройство большую часть своей жизни должно быть в режиме ожидания.

замеры тока в соответствующем разделе

Расчет на сервисе показывает время работы от батареи 73 дня, и это при идеальных условия, учитывая, что батарея будет разряжена до минимального уровня т.е вся ее емкость будет задействована. Если взять промышленные датчики, то заявленный срок в режиме ожидания обещают 1-2 года.

Ссылка на сервис для расчета
http://www.of-things.de/battery-life-calculator.php


Этот датчик использует микросхему LM393, которая по даташиту потребляет тот самый 1 ma.

Тут можно почитать как работает эта микросхема в режиме компаратора

LM393 DIP Cдвоенный компаратор
https://alielectronics.net/lm393

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

1.2 - Готовый сенсор воды + микроконтроллер с периодическим пробуждением

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

1.3 - Микроконтроллер в спящем режиме в качестве сенсора воды

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

Нюанс 1.3.1 - Для atmega328p нужно прошивать загрузчик optibut

Есть отличная библиотека Low-Power для работы со сном
https://github.com/rocketscream/Low-Power

https://github.com/rocketscream/Low-Power/blob/master/LowPower.h

Если мы будем использовать микроконтроллер atmega328p, то нужно будет прошить другой загрузчик, чтобы работал вотчдог. Без него пример не заработает.

Доступные временные отрезки для сна

1
2
3
4
5
6
7
8
9
10
11
12
13
14
enum period_t 
{
SLEEP_15MS,
SLEEP_30MS,
SLEEP_60MS,
SLEEP_120MS,
SLEEP_250MS,
SLEEP_500MS,
SLEEP_1S,
SLEEP_2S,
SLEEP_4S,
SLEEP_8S,
SLEEP_FOREVER
};

Нюанс 1.3.2 - Дополнительно можно понизить частоту микроконтроллера

В функции setup() можно установить требуемую частоту. Также частоту можно поменять в ходе выполнения программы, помня о том, что функции которые работают с таймером могут работать непредсказуемо.

1
2
3
4
5
6
7
clock_prescale_set(clock_div_2); // 8MHz
clock_prescale_set(clock_div_4); // 4MHz
clock_prescale_set(clock_div_8); // 2MHz
clock_prescale_set(clock_div_16); // 1MHz
clock_prescale_set(clock_div_32); // 500kHz
clock_prescale_set(clock_div_64); // 250kHz
clock_prescale_set(clock_div_128); // 125kHz

Дополнительно можно прочитать на форуме
http://dspview.com/viewtopic.php?f=24&t=201

http://gammon.com.au/power

https://tsibrov.blogspot.com/2018/02/PowerConsumption.html

AVR Урок 54. Режимы пониженного энергопотребления. Часть 1
http://narodstream.ru/avr-urok-54-rezhimy-ponizhennogo-energopotrebleniya-chast-1/

attachInterrupt(interrupt, function, mode)
http://arduino.ru/Reference/AttachInterrupt

Low-Power/Examples/powerDownWakeExternalInterrupt/
https://github.com/rocketscream/Low-Power/blob/master/Examples/powerDownWakeExternalInterrupt/powerDownWakeExternalInterrupt.ino

http://ww1.microchip.com/downloads/en/DeviceDoc/8126_105.pdf
http://ww1.microchip.com/downloads/en/DeviceDoc/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061A.pdf

1.3 - Транзистор как сенсор воды

Можно использовать составной транзистор с большим коэф. усиления, либо полевой транзистор.

http://www.radiochipi.ru/signalizator-zatopleniya-na-tranzistore/

2 - Поиск информации и выбор устройства для оповещения и удаленного контроля

2.1 - ESP12e (ESP8266)

О esp12e пишут разное, есть недостатки у данного вай-фай модуля такие как:

  1. без небольших хитростей его не отправить в сон больше чем на 1 час
  2. потребление без вайфая 15ma, с включенным вайфаем 70 ma
  3. не очень удобно делать запрос по https, модуль можно сказать не поддерживает это, приходиться хитрить
  4. минимальный уровень напряжения питания у моего модуля было 3.2 вольта, выходит, что мы не всю емкость литий-ионной батарее можем использовать

Плюсы цена и простота, уже изучен и есть много работающих библиотек.

Share