Опрос


Что для Вас Умный Дом?


Результаты

Управление водоочисткой на базе ключа DS2406P

04/04/2009 22:59:58

В тихом омуте черти водятся...

В нашем селе водоснабжение централизованное. Вода артезианская. Качество воды, учитывая небольшую глубину скважин, оставляет желать лучшего. Но самое неприятное - перебои в снабжении. Перебои случаются довольно часто, особенно летом. Учитывая это, было решено установить накопительный бак на 750 литров фирмы Aquatech.

Безнапорная накопительная емкость в системах водоочистки выполняет не только функцию хранения резерва воды, но и ее, собственно, очистки. Дело в том, что в процессе отстаивания, из воды уходят некоторые "летучие" примеси, а, поскольку вода в некоторой степени контактирует с воздухом, происходит процесс окисления растворенного в воде (двухвалентного) железа. Что же вышло на практике? Во-первых, отстаивание воды превратилось в застаивание. Несмотря на приличный расход (около 450 литров в сутки), вода в баке пахла болотом, мутнела. Во-вторых, такое пассивное удаление железа было малоэффективным. Вода после механического и угольного фильтра имела привкус железа. В-третьих, железо, которое все-таки окислялось в баке оседало на его стенках, образуя густой рыжий налет. Бак требовал периодической ручной чистки. Стало очевидным, что нужен процесс активной аэрации воды и, может быть, обеззараживание.

С этой проблемой я обратился в компанию "Эколайн", которая вообще-то занимается очисткой сточных вод, но общие принципы водоочистки везде одинаковые. Сделав расчет (ориентируясь на максимальное потребление в районе 1,5 м3/ч) компания предоставила мне высоконадежный японский компрессор Hiblow HP-20 и изготовила аэратор, показанный на фотографии.

То, что напоминает полиэтиленовую пленку на самом деле аэрационный рукав.

Бактерицидные лампы Philips для обеззараживанияДалее был изготовлен короб из подручных материалов (плиты ДСП от старых шкафов), в который помещены две бактерицидные лампы Philips TUV 8W FAM мощностью 8Вт каждая. Короб одевался на бак, с которого была предварительно снята крышка. Короб нужен был не только для крепления бактерицидной лампы, но и для того, чтобы немного приподнять ее в целях защиты от брызг, неизбежных в процессе аэрации. Таким образом компрессор нагнетал воздух в аэратор, который создавал мелкопузырчатую аэрацию. Вода в баке бурлила, активно перемешивалась. А тем временем бактерицидные лампы обрабатывали всю воду УФ излучением с длиной волны 253,7 нм. По поводу бактерицидных ламп хочется отдельно сказать пару слов. Во-первых, купленные лампы была действительно бактерицидными, так как первое время я ощущал запах озона (несмотря на заверения производителя, которые гласят, что стекло фильтрует озонообразующую длину волны). Во-вторых, где-то через месяц запах озона при работающей лампе постепенно исчез. О чем это говорит? Сказать сложно... В третьих, у любых бактерицидных ламп есть ограниченный ресурс. Производитель заявляет, что через 8000 часов работы лампу нужно менять, ибо она может и светит, но уже не "греет"... В моем случае отследить сколько лампа проработала несложно, так как в данный момент все включения-выключения процесса аэрациюю журналируются сервером. Важно! При использовании бактерицидных ламп нельзя одевать стандартные плафоны светильников, так как они задерживают УФ-излучение, а это практически сведет на нет работу ламп.
Активная аэрация позволила полностью окислить двухвалентное (растворенное в воде) железо, которое в виде густой ржавой массы оседало уже на механическом 5 мк полипропиленовом фильтре в корпусе Big Blue. При расходе воды в 14-18 м3 в месяц, такой фильтр следует менять не реже чем раз в 3-4 месяца.

Но вернемся к описанию событий. Результат меня впечатлил. Спустя некоторое время вода перестала иметь запах железа, вода в баке больше не отдавала болотом, а стенки бака полностью очистились от налета. При наполнении больших емкостей стало заметно, что вода более-менее прозрачная, а не мутновато-желтая, как раньше. А ведь аэрация включалась вручную всего на 1 час в сутки.

Стала очевидным необходимость автоматизации. Самое простое решение - реле с таймером. При известных среднем потреблении в 450-500 литров в сутки и производительности аэратора в 1,5м3/ч можно легко посчитать, что достаточно включать процесс аэрации на 10 минут каждый час. Но, во-первых, ночью вода потребляется редко, а шум, а точнее низкочастотный гул работающего компрессора (хотя он и достаточно тихий) все же слышно, а, во-вторых, крайне вероятны ситуации, когда максимальный расход воды придется между включениями аэрации.

Аргументы понятны, нужен интеллект системы Умный Дом. Но если включение-выключение аэрации было легко реализуемым на базе адресуемого ключа DS2405, то как определить факт потребления, расхода воды? В этом нам помог насос. Так как накопительная емкость была безнапорной, то для создания давления в системе водоснабжение использовался насос Grundfos MQ 3-45. Насос работает только в процессе потребления воды, а значит для решения задачи достаточно каким-то образом определять момент включения и выключения двигателя насоса. Было изготовлено небольшое устройство, которое, вешаясь параллельно питанию двигателя насоса, определяло наличие напряжение и в зависимости от этого замыкало или размыкало контакты на выходе, а значит давало сигнал управляющей программе, что насос включился или выключился.

Внешние контакты вход 220В, внутренние, на которых висит устройство-детектор (в красном кембрике) - питание двигателя насоса.

Вместо DS2405 был использован двухканальный компонент DS2406P, где один канал отвечал за включение-выключение процесса аэрации, а второй канал использовался как датчик сухого контакта и определял моменты включения насоса (эмулируя нажатие кнопки). Эта схема работала, но как обрабатывать срабатывание насоса программно? Оказывается, весьма несложно. Для этих целей лучше всего использовать свойство компонента set_alarm, установив его значение '230'. Такая установка означает, что в случае срабатывания датчика на канале B, сервер owfs сообщит об этом создав линк на файл устройства в каталоге alarm. Моей программе достаточно в цикле проверять наличие нужного файла. Для того, чтобы стало понятно, приведу исходный код программы, которая в данный управляет процессом аэрации. Принцип ее работы достаточно прост. Нет смысла включать аэрацию параллельно с работой насоса, иначе мы бы слишком часто включали-выключали ее, что, наверное, не очень хорошо скажется на ресурсе компрессора и лампы. Программа как бы накапливает время работы насоса и если оно достигает 5 минут, включает аэрацию. Если в процессе работы аэрации возобновится потребление воды, это время добавится к времени работы компрессора. Если же насос не работал более 3 часов, для предотвращения застаивания воды, процесс аэрации включается на 5 минут.

 <?

# Здесь описана функция управление ключами (подробнее смотрите в стаье "Управление освещением")
include("key.php");

$loop = 1;
$pio_state = 0;
$dir = opendir("/mnt/1wire/bus.0/alarm/");

$keys = array ( 
		0 => array (
			'key_address' => '12.7AD769000000',
			'key_label' => 'water_pump',
			'alarm' => 0, 'key_pio' => 0
		)
	);

$down_time = time();

while ( $loop == 1 )
{
	# Минимальная задержка нужна для того, чтобы не загружать сервер постоянным опросом содержимого каталога alarm
	usleep(500000);	

	for ( $i = 0; $i < count($keys); $i++ )
	$keys[$i]['alarm'] = 0;

	rewinddir($dir);
	while (false !== ($file = readdir($dir)))
	{
		for ( $i = 0; $i < count($keys); $i++ )
		{
			if ( $file == $keys[$i]['key_address'] )
			$keys[$i]['alarm'] = 1;
		}
	}


	for ( $i = 0; $i < count($keys); $i++ )
	{
		# Обработка событий для насоса водоснабжения
		if ( $keys[$i]['key_label'] == "water_pump" )
		{
			# Насос включен
			if ( $keys[$i]['alarm'] == 1 && $keys[$i]['key_pio'] == 0 )
			$keys[$i]['key_pio'] = 1;
			# Насос выключен
			elseif ( $keys[$i]['alarm'] == 0 && $keys[$i]['key_pio'] == 1 )
			{
				$keys[$i]['key_pio'] = 0;
				$temp_time = 0;
			}
			# Отслеживаем время работы насоса
			if ( $keys[$i]['alarm'] == 1 && $keys[$i]['key_pio'] == 1 )
			{
				if ( empty($temp_time) )
				$temp_time = time();
				else
				{
					$work_time = $work_time + (time() - $temp_time);
					$temp_time = time();
				}

			}
			# Если совокупная наработка насоса больше 5 минут, включаем аэрацию
			if ( $work_time >= 300 && $wc_flag == 0 )
			{
				key_sw("water_clean", 1, 'A');

				$wc_flag = 1;
				$wc_time = time();
			}
			# Выключаем аэрацию
			elseif ( $work_time == 0 && $wc_flag == 1 )
			{
				key_sw("water_clean", 0, 'A');

				$wc_flag = 0;
				$wc_time = 0;
				$down_time = time();
			}
			# Ведем учет времени работы аэрации
			if ( $wc_time > 0 && $work_time > 0 )
			{
				$work_time = $work_time - (time() - $wc_time);
				$wc_time = time();
				if ( $work_time < 0 )
				$work_time = 0;
			}

			# Если аэрация не включалась 3 часа, включаем на 5 минут.
			if ( time() - $down_time >= 10800 && $wc_flag == 0 )
			{
				$work_time = 300;
				$down_time = time();
			}
		}
	}
}

?>

 

Автор: Andrey_B
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.



Добавить комментарий:



Сортировка комментариев: Последние сверху | Первые сверху

2017-08-15 15:56:03 | Andrey_B
Алексей, в момент покупки (а это 2008 год) доверился мнению экспертов, которые порекомендовали именно эту модуль. За все это время, а это уже 9 лет, к насосу у меня нет абсолютно никаких претензий. Причем качает он "грязную" воду до фильтров. Работает сравнительно тихо. К сожалению традиционные насосные станции в работе не слышал, поэтому объективно сравнить не могу. Много раз мой насос в аварийных ситуациях работал в режиме "сухого хода". В нем встроена защита, поэтому он своевременно отключался. Если сломается (а это еще не факт), куплю такой же. ;)


2017-08-15 13:31:05 | Алексей
Андрей, интересует насос автомат типа Grundfos MQ 3-45. Почему именно такой насос-автомат, а не обычная насосная станция с расширительным баком. На сколько он громкий?


2016-06-15 11:27:25 | Andrey_B
Сергей, в накопительной емкости установлен гидравлический регулятор уровня (клапан) QuickStop Advance.


2016-06-15 07:10:32 | Сергей
Вопрос по схеме водоснабжения. Вы пишите: "Накопительная емкость на 750 литров. Напор в центральном трубопроводе зимой до 4 атм, летом 0,5-1,5 атм. Наполняется давлением в основном трубопроводе." Каким образом управляется процесс заполнения этой безнапорной емкости, т.е. начало и окончание его? Вручную? Каким-то образом определяете, что пора заполнять емкость, вручную открываете вентиль на входе, контролируете визуально заполнение емкости и закрываете вентиль в нужный момент?


2014-05-26 12:13:00 | Николай
В принципе вода мне нужна чтобы помыться и постирать. Питьевую воду привозим отдельно.
Буду изучать вопрос по фильтрам с инертной загрузкой.
Спасибо огромное.


2014-05-26 11:38:48 | Andrey_B
В идеале необходимо сделать анализ воды и обратиться к квалифицированным специалистам. Без подробного анализа трудно определить что и как фильтровать.
Возможно в вашем случае потребуется установка баллона с какой-нибудь инертной загрузкой (Сорбент-АС, Filter-AG) для осветления, а затем баллон с активированным углем. Можно тоже самое попробовать реализовать и на картриджных Big Blue, только в зависимости от степени загрязненности воды, картриджи придется часто менять. Угольный картридж для BB 20" стоит 1200 руб, а при грязной воде хватит его не надолго. В результате эксплуатация таких фильтров может стоить дороже засыпных.


2014-05-26 10:46:20 | Николай
Всем привет.
Может быть кто-нибудь сталкивался с проблемой очистки торфяной воды. Цвет, запах?
Дорогой фильтр (порядка 40-0 тыс) покупать не хочется. А проблему решать нужно.
Заранее спасибо.


2013-03-29 10:42:13 | Andrey_B
Дмитрий, детектор напряжения сделан на базе AOT166A. Посмотрите на сайте Бенукса. Там есть схема.


2013-03-27 23:50:47 | Дмитрий
Добрый день,
только недавно впечатлился данной темой, пытаюсь достич нормального уровня понимая,
отсюда совсем детский вопрос:

"Было изготовлено небольшое устройство, которое, вешаясь параллельно питанию двигателя насоса, определяло наличие напряжение и в зависимости от этого замыкало или размыкало контакты на выходе" - идея понятна в общих чертах, можно в 2 словах про основные составляющие подвешенного устройства и принцип работы относительно 1-wire?


2011-03-15 23:04:41 | Andrey_B
Гарик, я не разработчик owfs и не исследовал подробно код, но, полагаю, дело обстоит так или почти так. Это подтверждают логи, если запустить owswerver с ключем --error-level=5 и попытаться сделать обращения к папке alarm.


2011-03-15 20:25:21 | Гарик
Андрей, большое спасибо за быстрый и обстоятельный ответ.

Относительно DS2408. Перед тем, как написать Вам, я несколько дней гуглил данный вопрос, и мне не удалось найти свидетельства беспроблемного использования DS2408 при поддержке owfs. В переписке с разработчиками owfs я нашел вопрос о том, решена ли уже проблема корректной инициализации DS2408, датированный февралем 2011, из чего делаю вывод, что связываться с 2408 пока не стоит (кстати, переписку, которую в свое время вели с ними Вы, я тоже проштудировал). Буду следовать Вашим рекомендациям относительно применения DS2406P.

Если я правильно представляю себе ситуацию и понимаю Ваш ответ, в сети 1wire производится условный поиск, а содержимое каталога alarm актуализируется в момент подачи команд rewinddir или readdir. И если сухой контакт на канале В DS2406P в момент выдачи любой из этих команд замкнут, соответствующий файл в каталоге alarm «появляется». А для того, чтобы он «пропал», следует выдать команды rewinddir или readdir тогда, когда этот же сухой контакт будет разомкнут. – Эти рассуждения действительности соответствуют?


2011-03-14 22:53:54 | Andrey_B
Гарик, попытаюсь ответить на некоторые вопросы.
1. Файл в каталоге alarm создается и удаляется программой owfs. Пока компонент отвечает на команду Conditional Search ROM согласно запрограммированному пользователем условию, файл будет в этой папке. Собственно этот файл - понятие весьма виртуальное. Если мы не берем в расчет кеширование сети средствами owfs, то файла в папке как бы нет, даже когда на самом деле компонент в режиме Alarm. Но считывая содержимое папки мы тем самым посылаем в сеть команду условного поиска и файлы эти по результатам выполнения этой команды создаются. Нам же или программе кажется, что файлы там уже лежат. Соответственно, чем чаще мы сканируем этот каталог, тем больше запросов Conditional Search ROM отправляется в сеть. Насколько я понимаю, сеть это грузит не очень сильно, так как компонент в ответ дает только свой адрес, а не свойства. Иногда, как в моем случае, этого достаточно, чтобы судить о том, что датчик сработал. Set Alarm особенно удобно использовать с 2-х канальными компонентами, где один канал датчик, а другой исполнитель. Тогда настраивая set alarm мы настраиваем его только на датчик. В случае с DS2408, где мы можем реализовать несколько датчиков, нам потребуется дополнительно узнать какой именно канал сработал, прочитав свойства, а это в свою очередь будет означать, что owfs пошлет в сеть команду, чтобы попросить DS2408 передать состояние своей памяти, а это уже относительно медленные запросы, так как объем передаваемых данных больше.

2. Ну, Ваша ссылка датирована октябрем 2010 года. С тех пор вышло много новых версий owfs. Возможно, где-то проблему исправили. DS2408 я у себя нигде не использую. Не потому что не хочу, а просто не сложилось. А что касается set alarm в DS2406P, то все работает так, как указано в документации. В частности у меня датчик висит на канале B. Устанавливаю для set_alarm значение 230. Только когда датчик срабатывает, устройство "появляется" в папке alarm.

3. Между PIO и SENSED существенная разница! Свойство SENSED - это реальный логический уровень входа. 1 - высокий, 0 - низкий, тогда как PIO - состояние ключа (транзистора). 1 - проводит, 0 - не проводит. Когда мы используем компонент в качестве электронного ключа, изменяя PIO, мы, тем самым, меняем и SENSED. Но в режиме датчика мы наблюдаем изменение ТОЛЬКО свойства SENSED. PIO при этом НЕ МЕНЯЕТСЯ! С точки зрения чтения содержимого они ничем не отличаются, но интерпретировать их значения стоит по-разному.

4. Я не берусь говорить с полной уверенностью, но, насколько я понимаю принцип работы 1-wire, owfs считывает содержимое памяти компонента (со всеми его свойствами) за один сеанс связи. В этом смысле, пока мы находимся, так сказать, в кадре кеша owfs, мы, считывая одно из свойств, фактически считываем все и если мы тут же считает другое свойство, то это будет значение, актуальное на момент считывания первого свойства. Но так как получение значений программой/скриптом происходит очень быстро (учитывая, что данные то на самом деле уже в памяти компьютера), этим мизерным промежутком времени между обращений к файлам можно пренебречь. Да и в своей программе лучше использовать API, нежели функции файлового представления сети. Это будет быстрее, так как мы обращаемся к owserver напрямую, минуя петлю owfs. Но если уж нам так важно знать всю правду как есть, нужно пользоваться uncached веткой. Тогда любые действия будут генерировать команды в сеть.


2011-03-14 19:22:15 | Гарик
Здравствуйте!
Ваш сайт - находка для людей, "обдумывающих житье".
"Сказку делать былью" гораздо проще, следуя Вашим рекомендациям, нежели набивая шишки исключительно на своем лбу.
Несколько вопросов, если позволите.

1 При срабатывании состояния Alarm в одноименной папке появляется ссылка на устройство. Что Вы с ней делаете после считывания и обработки? Удаляете сами или ссылка удаляется каким-либо иным образом?

2 Приходилось ли работать с DS2408 в режиме датчиков сухого контакта? Дело в том, что я наткнулся на следующий отрывок из переписки с разработчиками owfs
www.mail-archive.com/owfs-developers@lists.sourceforge.net/msg06574.html
из которого следует, что в owfs есть ошибки (особенности?) в части инициализации режима Alarm в DS2408 (кстати, есть подозрение, что в примере Set_alarm owfs.org/index.php?page=ds2408 тоже есть ошибки)
Если приходилось, то как именно Вы выставляли параметры для Alarm?

3 Из описания DS2408 owfs.org/index.php?page=ds2408 не совсем понял практическую разницу между чтением флагов PIO.0 - PIO.7 и SENSED.0 - SENSED.7 Полностью ли они идентичны в режиме чтения?

4 По описанию DS2408 owfs.org/index.php?page=ds2408 флаг Alarm устанавливается на результат выполнения логических операций And или Or над PIO или Latch. Как правильнее реализовать обработчик состояния Alarm - одновременно со сканированием каталога Alarm читать PIO / SENSED / Latch, чтобы обрабатывать каждую линию независимо (Теоретически, есть вероятность искажения информации из-за сдвига по времени между моментами считывания флага Alarm и значений PIO/Latch)? Может быть, существует какой-нибудь более изящный способ?


2011-01-24 09:12:34 | Andrey_B
Владимир, в нашем массиве централизованное водоснабжение. Но скважины неглубокие, а потому вода очень грязная. Без фильтров совсем жить в принципе невозможно.
А схема такая.
1. На входе стоит 20" BB с полипропиленовым фильтром на 20мкм. От него можно отказаться. Вся грязь в воде в растворенном виде. На этом фильтре ничего не оседает. В крайнем случае можно заменить на сетчатый механический типа Honeywell с автопромывкой.
2. Накопительная емкость на 750 литров. Напор в центральном трубопроводе зимой до 4 атм, летом 0,5-1,5 атм. Наполняется давлением в основном трубопроводе.
3. Насос Grundfos MQ 3-45 (дорого, но оно того стоит)
4. Фильтр 20" BB с полипропиленовым фильтром на 5мкм. Хватает максимум на 60м3.
5. Фильтр Аквафор Викинг-Мини (не более 30 м3)

Фильтры должны быть после насоса. Если их перенести до насоса и после емкости, то работать не будет.
Все это пока выполнено по временной схеме. Процесс замены фильтров грязный и мокрый. Поэтому я обязательно буду менять все Аквафоры и прочие BigBlue на колонны/баллоны с автоматической промывкой. Во-первых, все будет происходить без участия человека, во-вторых, намного больше площадь фильтрации и потери напора. Все, что мне нужно - это 2 баллона. а) Механическая очистка (так как железо выпадает в процессе аэрации) с кварцевым песком или другой эффективной засыпкой и умягчение с катионообменной смолой, так как в воде присутствуют соли жесткости.


2011-01-24 06:32:04 | Владимир
А можно узнать как у вас построена система водоснабжения в целом?

Насос в скважине - накопительная емкость - насосная станция - фильтр BigBlue.
Что я упустил, где какие фильтры еще стоят?