Прошу под кат, там интересней ;)
Я как бы разобрался и у меня даже получилось отрегулировать, но на это я затратил время и нервы. Тогда то я и понял, что цифровое реле было бы здорово, просто нажал на кнопки и выставил нужное. Конечно меня могут многие осудить по нескольким статьям:
— ты дурак, что не можешь разобраться с простейшим реле давления и двумя пружинками.
— механика рулит, она будет работать вечно.
— зачем там что то регулировать: один раз выставил сантехник за XX*(курс страны) рублей и все
Без проблем, можно список продолжать долго, но по натуре своей инженерской, хотелось бы развиваться и улучшать все вокруг себя, а не крутить пружинки и думать, когда там подгорят контакты механического реле и начнет срабатывать тепловое реле защиты насоса, когда вы весь в мыле :D, а ещё лучше Ваша жена :)
Надо отдать должное, механическое реле у меня работает уже 4-ый год и с ним (тьфу тьфу тьфу) Серьёзного пока ничего не случалось, только приходилось перестраивать, очищать контакты, начало искрить и эти “ЩЕЛК!” в гараже немного напрягали и… пугали моего мышонка, так, что ему пришлось убежать.
Так как я увлекаюсь автоматизацией и прошел путь от 1-wire до arduino через esp, могу и делаю разные поделки в доме, точнее устройства, для облегчения быта. Круг друзей знает о списке проектов, которые я стараюсь завершить и реализовать, но времени на то совсем нет. То стройка баня подвернется на целое лето (750 часов), то снег навалит :), а тут уже и Новый Год на носу!
Меня так же многие “любят” потролить, особенно из ИТ сферы. Но это только веселит, жизнь штука интересная и без этого никак. Так же огромное спасибо всем тем, кто меня поддерживает — без Ваших добрых слов, драйв был бы не тот. Спасибо жене за понимание любви к моим платам )
Из лирики, прыгаем в реальность. Я обратился в поиски цифрового реле и понял, что весьма сложно в этом направлении, либо забугорное под 100$ и совсем не так, как хотелось бы… либо механика за 15$. Привожу в $, так как давно известно, если бы мы перешли на $ — то даже бабушки не парились, как с монетами. А я ж такой негодяй — дом подключил к интернету, а реле давления нет — сумасшедший!
Тема для тролей: Я начал работать с Arduino китайского происхождения, не оригинальные, а китайские, работают так же, где то есть мелкие погрешности, но они меня не задевают так, чтобы извергать лаву негатива и трясти esp8266, которая от статики умирает быстрее, чем вы воткнете её в Ваш компьютер, да ещё с питанием 3.3, которое надо пойти и найти), если это только не NodeMCU, которые я обожаю.
Я люблю и esp8266 и Arduino и людей, но чтобы вот так сесть быстро собрать рабочее и СТАБИЛЬНОЕ устройство для автоматизации — arduino незаменимая штука + Wiring C-шный язык очень помогает быстро реализовать то, что требуется. (тут никто и не упрекнет, что ты написал на тормозном Lua скриптовом языке). esp8266 (моё мнение) — хороша там, где не надо АЦП мерять и интернет нужен. Хотя её “сгорание\сырость” очень разочаровывает.
Возвращаемся к нашим баранам, то-есть реле :)
По итогу нашел в Китае датчик за 5$, с АЦП 0-5V и решил попробовать. Даже не так, я тупо загорелся его применить и собрать устройство. Сразу пошли бурные эротические фантазии, как будут мигать светодиодики ) и нажиматься кнопки для регулировки, а на китайском иконическом синем экране будут гореть заветные циферки и все это будет работать с реальным давлением в нашей гребенке.
Обдумал, обрисовал, начертил, спланировал, заказал и начал код писать, пока эротика не прошла с мыслей.
Когда прилетел датчик, я понял — что датчик очень качественно выполнен.
Далее, я понял что он начинает показывать данные не с нуля, а с 0.5В и до 4.5В. от 0 до 12Bar. Я очень обрадовался, так как мне было приятно осознавать сингулярность данного девайса, можно отслеживать, когда датчик умрет и не будет показывать заветные 0.5 на выходе.
Врезка датчика в текущую систему с оставлением механики “на всякий случай”.
Одно печально, не было никаких данных по датчику, как обсчитывать его показания, но так как была линейная прямая на графике, пришлось (стыдно, но я признаюсь) — открывать учебник АЛГЕБРА и учиться заново, вспоминать, как же там строят прямую линейную зависимость в уравнении :) по двум точкам и о чуда, я быстренько получил (можете постыдить меня) заветную простую формулу, в которой после преобразования АЦП сигнала в ВОЛЬТЫ, я понимал, сколько у меня давление в Bar. Так как датчик сам выдавал от 0 до 1.2Mpa — то не сложно перевести в Bar — зная что:
1 Pa = 1.0E-5 bar
тоесть 1200000Pa = 12Bar
Так как у нас давление от насоса не превышает и 4Bar — этого датчика хватит за глаза!
Дальше я взял Arduino Uno — она у меня лишняя валялась, я обычно её использую для быстрого навесного проектирования, проверки, а потом применяю Arduino Nano, так как она лишена левого обвеса и её размеры в 3 раза меньше! И да простят меня ардуинщики китайского происхождения, мне жалко было смотреть, как она валяется без дела, надо пустить её в девайс! Подумал я и купил пластиковую IP55 коробку небольших размеров, выпили отверстие под экран, который я купил 4 года назад! Карл! И тогда не догадывался, что этот LCD 16*2 пойдет в такое полезно дело. Взял на авторынке 2 авто кнопки, спаял провода, даже плату не проектировал отдельно, как я делаю для Nano — так как Uno тупо большая и совсем не для таких целей.
Алгоритм достаточно простой и ещё проходит полевые испытания, код проекта для более тесного ознакомления расположен тут.
Мне не стыдно его выложить, если будет конструктивная критика, я готов внести изменения, так как open для любых обсуждений.
В алгоритм я постарался заложить следующие принципы:
— Инициализация данных: при старте, проверяются и инициируются все переменные для работы
— Первичный опрос датчика: проверяется, если датчик не вышел из строя (в случае выхода, на всякий случай вырубается насос-реле) данные рассчитываются и переводятся в текущее давление в гребенке (распределительная гребенка, к которой подключены соседи+приход от насоса+гидроаккумулятор), если все в пределах нижнего и верхнего установленного давления, тогда продолжаем слушать и рассчитывать данные
— Данные выводятся визуально на экран ввиде:
нижнее давление — текущее давление — высокое давление
индекс падения давления — [ блоки, показывают давление в системе ]
Это позволяет быстро оценить ситуёвину, что происходит.
— Если текущее давление ниже НИЖНЕГО: врубается твердотельное реле на 15A(проверенное годами) и насос тихо, быстро, без искр и щелчков, включается и подает воду. ВЕРХНЕЕ давление отключает реле. Насос никогда не включится и обязательно выключится, если что то с показаниями датчика, которые выходят за пределы разумного. Это безопасность.
— Индекс падения давления я рассчитываю тогда, когда в гребенке остается половина давления и каждые 10 секунд проверяется предыдущее и текущее, если разница составит меньше установленного по дефолту 0.05 — тогда меняется текущий индекс и включается насос на ОПЕРЕЖЕНИЕ, тоесть по логике идет быстрое водопотребление и что бы предугадать включение насоса, я такой логикой и пользуюсь. Логика не срабатывает пока на 100%, так как я ещё тестирую этот момент, есть огрехи связанные с millis() таймингом самой ардуины, тут меня это немного напрягает, но я найду решение по четкому подсчету. Логика срабатывает в начале, а потом индекс падает в 0.01 и логика больше не работает, но это никак не влияет на вкл и выкл насоса. Тут можно холиварить на тему “насос должен включаться определенное количество раз в час и не больше” — у Вас есть на это право ), спорить не буду — данная тема анализируется.
— есть кнопки боковые, которые позволяют устанавливать НИЗКИЙ и ВЫСОКИЙ порог включения и выключения насоса ДИНАМИЧЕСКИ, без перезагрузки, просто тупо на лету — смотрите на экран и нажимаете кнопочки боковые…. удобно-на! данные сразу пишутся в EEPPROM и при включении блока загружаются оттуда (это такая постоянная память на запись чисел от 0 до 255 byte type, мало но хватает на мелкие прихоти). При этом есть момент, заключается в том, что числа с плавающей точкой записать настолько трудно и геморно, что просто было решено с моей стороны так: зная, что число x.x0 это давление float типа, его можно легко конвертировать в byte если умножить на 10 и записать в память, тоесть: example: 1.80 * 10 = 18 — после умножения число float отбрасывает последний ноль автоматически и мы получается число, которое укладывается в byte типа, при чтении, мы его делим на 10.0 и получаем обратную форму для работы в нашей система и типа float.
— Все добро будет доступно для «только чтение» вне дома, что позволит понимать ситуацию с давлением не только артериальным, но и в трубах!
Ну вот вроде бы и все, простите, кого напрягают подробности кода, дурацких ТИПОВ данных и интимных подробностей загрузки данных из памяти, пропускайте это, так как, зная, что есть люди из ИТ сферы, они будут задавать всякого рода вопросы или наоборот, посмеются с моих простых алгоритмов, которые не применяют модные ИИ \ ML и прочие мега крутые и big data алгоритмы. Надеюсь так же инженеры поймут другие части, связанные с механической часть.
Вообщем, вывод такой: можно делать все, можно делать легко, делать это в интерес и как сказал когда-то один мой любимый комментатор: можно быть взрослым и “играться с детскими игрушками”.
Ваш кэп, автоматизатор, capable guy и хорошего дня Вам!
Косяки:
— Продолжаю тестировать индекс падения давления для преждевременного включения
— Arduino uno (Китай) — выявились проблемы с таймером millis() — буду проверять на arduino nano (раньше такого не было, предполагаю кривая модель) (не оргинал, поэтому не ною ))
— Погрешность заявлена 1.5% — от 1.2Bar — это 0.18Bar — пофакту — у меня где то 0.3 относительно моего манометра, но я не знаю сколько он врет… поэтому 2% допускаю погрешость max — можно заложить в алгоритм (как я делаю) погрешность и бдет более менее похоже на правду. Не спутники же запускать — сойдет )
upd: ценник в районе 15-18$ вышел по итогу за изделие.
С наступающим Новым Годом! Пусть у Вас сбудутся все Ваши планы, будут построены БАНИ, в доме будет ТЕПЛО и вся Ваша дружная семья будет с Вами! Пусть в новом году будет только хорошие новости.
Комментарии (135)
DES3
08.12.2017 10:21А не было мысли поставить второй датчик после магистрального фильтра, чтобы этот самый фильтр менять не визуальным контролем, а по достижению порогового значения дельты показаний двух датчиков?
Alex_Bogdanovich Автор
08.12.2017 10:22меняю раз в 3-5 месяца(ев) и как то ОК — не напрягает ;)
DES3
08.12.2017 10:35У меня колодец и потребность выше — в среднем раз в месяц замена фильтра происходит. Да и хочется оперировать более объективным критерием нежели визуальное загрязнение и уже по факту ослабевший напор воды из под крана. Пока не встретил готового решения.
Alex_Bogdanovich Автор
08.12.2017 10:48если найдете решение — буду рад услышать его, возможно поделитесь статьей. спасибо
iig
08.12.2017 16:30Замена по календарю — надежно и бюджетно ;)
Можно наколхозить 2 датчика давления (на входе и на выходе фильтра), измерять разницу давлений (можно даже без ардуины, хватит и операционного усилителя) и зажигать светодиод при превышении.
В вашем случае, думаю, надо 2 фильтра — грубой очистки и тонкой очисткии 3 датчика.
dovzh
08.12.2017 10:36защита от сухого хода предусмотрена?
Alex_Bogdanovich Автор
08.12.2017 10:47пока продумываю ка интегрировать в текущий алгоритм с проверкой давления после включения реле. по факту есть тепловое реле в автоматике… но можно добавить и со своей стороны.
batman12345
08.12.2017 12:41Может уж тогда и плавный пуск вкорячить, чтобы не было бросков тока в момент включения (реализуется программно либо на U2008B). Заменить оптореле связкой MOC + симистор. Шунтировать симистор относительно слаботочным реле, чтобы уменьшить безполезный нагрев…
много чего можно добавитьiig
08.12.2017 12:45Плавный пуск асинхронного двигателя выглядит немного сложнее ;) Дешевле купить еще один насос.
batman12345
08.12.2017 12:47А вот производители электроинструмента не видят в этом ничего сложного
iig
08.12.2017 13:24Ссылку на электроинструмент с асинхронным двигателем, плавным пуском и ценой в студию ;)
kotomyava
08.12.2017 15:58В этом инструменте универсальный коллекторный двигатель, а не асинхронный двигатель. Первым можно управлять напряжением, вторым частотой. Ставить/делать частотный преобразователь в эту конструкцию, весьма не бюджетно выйдет.
batman12345
08.12.2017 16:34Вы правы, но только наполовину.
Асинхронным двигателем нужно управлять по закону U/F, т.е. с изменением частоты должно меняться и напряжение. Однако, не вижу причин по которым двигатель не мог бы стартовать с пониженного напряжения.iig
08.12.2017 17:09не вижу причин по которым двигатель не мог бы стартовать с пониженного напряжения
Стартовый ток. Ну не умеет асинхронник крутиться медленно.Vanellope
09.12.2017 01:54Тем не менее, традиционные устройства плавного пуска — это как раз тиристорные регуляторы напряжения. Поэтому и стоимость по сравнению с частоьниками меньшая.
kotomyava
09.12.2017 10:44Они традиционны для универсальных двигателей, не для асинхронных.
Vanellope
09.12.2017 11:53Ну здрасьте. Например GE Astat Plus — как раз для асинхронников и как раз симисторный.
iig
11.12.2017 12:05Загуглил.
Устройства плавного пуска General Electric серии Astat Plus — полупроводниковые устройства плавного пуска для трехфазных двигателей переменного тока
Трехфазный двигатель от однофазного (с здоровым таким фазосдвигающим конденсатором) таки отличается. Реактивная нагрузка же. И что-то мне кажется, что этот гаджет будет стоить как насос вместе со скважиной.
mazy
08.12.2017 13:03можно добавить дачик протока
ebay.to/2y7wGgc
заодно по нему можно будет считать потребление и косвенно загрязнение фильтра.
dovzh
08.12.2017 11:39я себе поставил вот такую управлялку: fiting.com.ua/p362188900-rele-davleniya-zaschitoj.html
mehos
08.12.2017 11:49За изделие и прямые руки, безусловно, плюс. Но если исключить из текста все приветствия, поздравления, хвалебные слова самому себе и прочие оправдания, то останется примерно 10 строчек. Из которых половина о том как можно умножить и разделит на 10 чтобы хранить все в памяти в человекопонятном виде вместо того, чтобы хранить значение от 0 до 255 (как на выходе с АЦП) и преобразовывать в человекопонятное при выводе на экран.
iig
08.12.2017 12:34Задача надуманная. Ладно бы плавный пуск насоса организовали… А так это замена 1 типового модуля на 4 редких (датчик-источник питания-контроллер-индикатор; куда бежать, если в пятницу вечером датчик с алиэкспресса сломается?). Механическое реле (при правильной регулировке) просто работает годами. Если напрягают щелчки — можно завернуть в шумоподавитель (хотя, раз оно осталось в системе и продолжает щелкать — думаю, это не повредит).
Гидроаккумулятор должен быть литров на 100, раз от него запитаны еще и соседи.
Давление воздуха в нем (без воды!) должно быть 1.5..1.7 атм.
Нижнее давление в в автоматике должно быть на 0.2-0.3 атм выше чем давление воздуха — тогда не будет провалов давления при пуске насоса.
Датчик давления (или реле) желательно монтировать поближе к гидроаккумулятору.Ksiw
08.12.2017 14:57Хороший коммент.
Не надо сочинять новый механизм там, где достаточно грамотно настроить имеющийся.
vvzvlad
08.12.2017 12:58+2Не буду спрашивать, нафига там вообще float, а спрошу, в чем проблема с записью его в EEPROM?
Alex_Bogdanovich Автор
08.12.2017 14:13www.arduino.cc/en/Reference/EEPROMWrite
value: the value to write, from 0 to 255 (byte)
возможно профи ардуинщики меня тыкнут куда то :) в другой мануал
float чем вам не нравится? он применяется в давлении так как цена изменения давления идет 0.01 — мне так захотелось учитывать.
аналог выдет от 0 до 1023 — тоесть от 0 до 5V
этот сенсор выдает от 0.5-4.5В
так как 0-1023 это больше чем byte (uint16_t), а выводить как вы визуально будет еданные без float?
Если есть конкретнеы предложение, буду рад выслушать, спасибо :)vvzvlad
08.12.2017 14:33byte(int/uint8_t) — это как раз и значения от 0 до 255. А uint16_t — это значения от 0 до 65к, 1024 туда поместятся. А еще проще умножать сразу на коэффициент пересчета(какой, там, 11?) и хранить значение в миллибарах каких-нибудь. Т.е. давление у вас 3бар, АЦП выдает 274, вы умножаете на 11, получаете 3014 и его храните. А если надо вывести на экран/в лог — вычисляете сначала целую часть, деля на 1000, а потом дробную, беря остаток от деления. Все сравнения внутри программы ведете в миллибарах.
Таким образом, избавляетесь от float, ускоряя операции, и экономите на памяти, храня два байта вместо 4, да еще и не теряя в точности.
А по поводу EEPROM, что вам мешает записать эти два байта, составляющие uint16_t(или 4 в случае float) в разные ячейки?Alex_Bogdanovich Автор
08.12.2017 14:46спасибо за подход, рассмотрим его в рамках оптимизации кода.
изначально я тоже хотел хранить и оперировать АЦП данными, но потом решил перейти на более простую и понятную форму (каждый делает так как ему удобно)
касательно памяти — не вижу проблем сторить большие даные разбивая на адресные пространства.
спасибо за времяvvzvlad
08.12.2017 14:52Что-то типа.#define EEPROM_OFFSET_VALUE = 0x10 #define ADC_MBAR_FACTOR = 11 typedef union u8_u16_t { uint16_t u16; uint8_t u8[2]; } u8_u16_t; uint16_t read_value() { u8_u16_t value; value.u8[0] = EEPROM.read(EEPROM_OFFSET_VALUE+0); value.u8[1] = EEPROM.read(EEPROM_OFFSET_VALUE+1); return value.u16; } void write_value(uint16_t value_u16) { u8_u16_t value; value.u16 = value_u16; EEPROM.write(EEPROM_OFFSET_VALUE+0, value.u8[0]); EEPROM.write(EEPROM_OFFSET_VALUE+1, value.u8[1]); } void measure() { uint16_t raw_value = ADC.read(1); write_value(raw_value*ADC_MBAR_FACTOR); } void print() { uint16_t valuembar = read_value(); printf("Value: %u.%u\n", valuembar / 1000, valuembar % 1000); }
juray
08.12.2017 17:59Про формат данных хочу вставить пять копеек «на гипотетически возможное будущее»:
Пока данные используются только в пределах одного устройства, вопрос формата — либо удобство разработчика, либо оптимизация использования ресурсов контроллера. Даже если надо выводить на индикатор в понятном виде — всё равно точку конвертации можно без далеко идущих последствий двигать от момента замера до момента вывода на индикатор.
А вот как только возникнет задача передачи данных на другое устройство (например, на комп для мониторинга), то лучше сразу предусмотреть в протоколе передачи некую стандартизацию формата — и хорошо бы привязать или к какому-то уже существующему стандарту, или просто заложить «человеко-понятную» форму (самый простой пример — ASCII-протокол через UART, который можно посмотреть тупо в терминале).
Другими словами, передавать в канал «сырой» замер АЦП чревато следующим сценарием: делаем мы следующую версию нашего устройства, с другой разрядностью АЦП (12 вместо 10 или наоборот), а того веселее (и вероятнее) — если меняются параметры цепи между датчиком и АЦП (делитель или усилитель), или сам датчик (с другой характеристикой) — и привет.
Можно конечно, и принимающее устройство перешить на «понимание» этого нового формата, но это годится только в случае единичной поделки для себя. А вот когда делаешь такие штуки на сторону, и устройства гуляют не комплектом, а по отдельности, тут вопросы совместимости и появляются (кстати, я на эти грабли уже наступал, почему и делюсь соображениями).
Возможный способ — в новой версии сделать перед передачей в канал конвертацию, имитирующую старый формат — по сути получается, что мы фиксируем тот первый вариант «сырого АЦП» в качестве стандарта. Но «еще один самопальный стандарт» — это всё-таки фу. Через несколько итераций может получиться "эффект лошадиной задницы".
В общем, повторюсь — всё это не актуально в случае единичных поделок «для себя». Просто хорошая привычка, могущая пригодиться при дальнейшем развитии. А оно ведь как бывает — сделал для себя, потом зашёл сосед, увидел — и попросил и ему такое сделать (за вознаграждение или просто в рамках добрососедских отношений — это уже по ситуации), потом еще знакомым рассказал — и пошла писать губерния.
AlexanderAmelkin
08.12.2017 14:07было решено с моей стороны так: зная, что число x.x0 это давление float типа, его можно легко конвертировать в byte если умножить на 10 и записать в память
Поздравляю! Вы «изобрели» формат записи с фиксированной точкой. ;)
А вообще вы молодец. Спасибо. Интересно. Люблю малую автоматизацию.Alex_Bogdanovich Автор
08.12.2017 14:08Спасибо, «изобрели» формат записил — это хорошая шутка, посмеялся ))))
Как ктото писал — «нафига переводить, и в чем трабла записи в EEPPROM float типа?» — да дело в том что EEPPROM сейвит по мануалу 0-255 byte тип или как любят писать: uint8_t тип.Alexeyslav
08.12.2017 14:46Вообще это просто минимальная порция данных для записи, никто не запрещает хоть 16 ячеек по очереди записывать! А float в контроллере представлен 4-мя такими байтами, если мне память не изменяет.
Alex_Bogdanovich Автор
08.12.2017 14:48да все верно — я хотел быстро записать в одну ячейку без разбивок.
AlexanderAmelkin
08.12.2017 16:38Там даже разбивать ничего не надо. Пишите подряд и всё. Все I2C EEPROM имеют режим последовательной страничной записи. Один раз посылаем адрес микросхемы и бит записи, потом адрес стартовой ячейки, а потом данные без стопа. Стоп — только после последнего байта. Адрес инкрементируется в микросхеме сам.
Ну и раз уж у вас Ардуина с её библиотеками, то там это делается через EEPROM.put():
www.arduino.cc/en/Tutorial/EEPROMPutjuray
08.12.2017 18:04а там точно епром именно I2C используется, а не внутренний AVR- микроконтроллера?
AlexanderAmelkin
08.12.2017 19:17Может и внутренний. Не имел дела с ардуинами, честно говоря. Но всё равно в API есть функция EEPROM.put(), которая любые переменные сохраняет.
juray
09.12.2017 20:53я к тому вёл, что если встроенный — то не в каждом AVR есть страничный режим, вот в AT90CANxxx — нет.
Впрочем, автоинкремент адреса байтов может быть реализован в API и программно. Тем более, что пользователь может указать такой начальный адрес, что попадёт на границу страниц.
AlexanderAmelkin
08.12.2017 16:28Ну и что, что он «сейвит» байты. Это как-то до сих пор никому не мешало хранить там хоть 16, хоть 32, хоть 64 бита, хоть строки любой длины (лишь бы влезло). Процедура записи 4 байт мало отличается от таковой для 1 байта.
Кстати, вот совершенно справедливое было высказано тут предложение хранить данные в EEPROM в «сыром» виде, как выдаёт АЦП. И ничего отбрасывать или округлять не надо было бы. А всей этой арифметикой заниматься уже непосредственно перед выводом на экран.Alex_Bogdanovich Автор
08.12.2017 16:30в EEPPROM не надо хранить данные АЦП, нет никакого смысла, в EEPPROM сохраняется нижнее и высокое давление, в случае если изменялись настройки от дефолтных и блок выключают и включают.
iig
08.12.2017 16:35Более того, если сдвинете на 2 разряда то, что вычитали из АЦП — можно спокойно сохранять 1 байт, разницы никто не увидит. Вряд ли у этих датчиков точность в 0.1%, а даже для 1% (что тоже вряд ли) 255 уровней достаточно.
AlexanderAmelkin
08.12.2017 16:46Ну так а сравниваете-то вы это сохранённое значение с чем? Правильно, с показаниями АЦП. В итоге, при каждом сравнении приходится переводить данные АЦП в человекочитаемый формат, сохранённый в EEPROM. А хранили бы в формате, выдаваемом АЦП, сэкономили бы на этой конверсии. В вашем случае, правда, это не критично, но в других системах может быть и важно.
Ну и верно тут ранее заметили, что эти 0-1023 легко можно поделить на 4 отбрасыванием двух младших битов и никто не заметит разницы.
allexb
08.12.2017 15:21Цифровое реле от $20
Alex_Bogdanovich Автор
08.12.2017 15:32это реле из семейства реле, которые работают с насосами напрямую и скорее всего для насосов колодцев. у меня насос со своим пускатель насоса (блок) который защищает реле давления от высоких токов…
donvictorio
09.12.2017 03:36частный случай.
в большинстве случаев этой релюхи за глаза.
можно даже пневмореле использовать, просто сделать вертикальный глухой отвод и втулить датчик вверху.
тоже цена около $20
AlexanderAmelkin
08.12.2017 16:50Помимо прочего, очень не рекомендую когда-либо писать в коде вот так:
P_c = ((11.5 * Vout + 2.25) / 4.5) + Pcorrection;
Тут сразу две проблемы:
- Через пару лет, когда полезете разбираться в коде, будете долго вспоминать, что это за циферки такие и почему они именно такие
- Если эту формулу вы используете более, чем в 1 месте, то потом есть риск поменять её в одном месте и забыть поменять в другом.
Решение состоит в том, чтобы никогда не использовать «магические числа», а заменять их макросами с понятными именами (и комментами в месте определения макросов). Ну а если формула используется в коде несколько раз, то лучше и её всю заменить на макро или инлайн функцию.Alex_Bogdanovich Автор
09.12.2017 17:55спасибо, очень полезная и правильная заметка. так получилось, я тоже за макросы.
t3hk0d3
09.12.2017 17:53Я реализовывал подобную систему у себя на даче, только с некоторыми отличиями обусловленными тем что скважина у меня низко-дебетовая.
Схема работы такова:
— Насос через фильтр грубой очистки закачивает из скважины воду в 300 литровый бак на чердаке дома.
— На выходе из бака стоит фильтр тонкой очистки воды и повышающий насос с датчиком расхода.
— При открытии крана вода сначала самотеком идет, но почти моментально срабатывает датчик расхода и начинает давить повышающий насос.
Плюс в том что при отстутствии электричества водоснабжение в доме не пропадает, потому-что вода самотеком, хоть и с небольшим напором, течет из бака к потребителям. Гравитация рулит :)
Электроника:
На выходе от насоса стоит расходомер, который подключен к ардуинке нано, которая так-же управляет насосом через твердотельное реле. Расходомер нужен чтобы точно определять и исключать сухой ход насоса.
Эта ардуинка подключена через I2C шину к stm-ке которая обслуживает пульт управления и датчик давления в баке (для измерения уровня воды через давление). Стм-ка посылает команды на включение насоса ардуинке если уровень воды опускается ниже 10%.
prostorsp
09.12.2017 17:54Было бы неплохо прикрутить импульсный счётчик воды. Для измерения расхода и как датчик сухого хода. Правда в этом случае его нужно ставить до насоса. Ещё полезная функция защита от протечек. При очень медленном снижении давления в течении определенного периода времени включается закрывающий клапан.
soul32bit
09.12.2017 17:54Разрешите поделиться опытом. Так случилось, что живу в Крыму и несколько лет занимаюсь этой темой (насосы, скважины).
Итак, реле давления бавают двух типов — механические и электронные. Есть еще электронные регуляторы давления с функцией частотного преобразования, но это редкость в наших краях да и цена кусается.
1. Механика. Простенькая конструкция с двумя пружинами и гайками, позволяющими настроить давление включения и отключения (на самом деле настраивается P и ?P но по сути это одно и то же). Обязательно наличие гидроаккумулятора. Есть версии с защитой от сухого хода, но на практике они ненадежны.
2. Электроника. Гидроаккумулятор не нужен. Как правило устройство содержит микропроцессор и 2 датчика — датчик давления и датчик протока воды. Прошу заметить — оба датчика механические а сигнал к микропроцессору обычно поступает через герконы. Присутствует защита от сухого хода, в продвинутых схемах присутствует защита мотора по току.
Наверное последовательность теория-практика кажется разумной, но я начну наоборот.
На практике я много раз наблюдал смерть насосов с электронным реле давления и ни разу (НИ РАЗУ!) с механическим. В чем проблема? Да в том, что вода в Крыму грязная. Если из скважины, то с песком, а если из магистрали, то жесткость воды удивляет — трубы «зарастают» на глазах. Что происходит с электроникой? Вечером вы приходите домой и обнаруживаете, что мотор все время включен. Почему? Да просто засорился датчик протока воды (или датчик давления) и микроконтроллер думает, что открыт кран и тупо включает мотор. Мотор работает (краны закрыты), вода нагревается до кипятка, гидравлическая часть плавится. А ее стоимость — половина нового мотора. В случае засорения механического реле все происходит наборот — мотор не включается. Улавливаете разницу?
И еще классческий недостаток электронных реле. Программа (по тем или иным причинам) частенько отключает мотор. И чтобы его включить — нужно нажать на кнопку. Это доводит до белого каления как пользователей, так и обслуживающий персонал. Да, механика тоже может погубить мотор. Например в сети пониженное напряжение и мотор никак не может развить двление для отключения реле. Или залипли контакты. Сухой ход в конце концов. Но почему-то на практике я этого не встречал ни разу.
А теперь теория. Самое слабое место в механическом реле давления — гидроаккумулятор. Именно он плохо переносит морозы, именно он требует периодической проверки давления и именно в нем обычно рвется «груша». Поэтому легко понять тех, кто предпочитает электронные реле. Но давайте рассмотрим ситуацию с научной точки зрения. Что происходит, когда, например вы решили побриться и открыли кран тоненькой струйкой?
1. Механика. Да ничего такого, штатный режим работы. При падении давления, например до 1,8 атмосфер насос включается, закачивает воду в гидроаккумулятор и при достижении 3 атмосфер отключается. (Параметры 1,8 и 3 — регулируются).
2. Электроника. Мотор все время включен. Давление в системе зависит от модели мотора и может быть как 3 атмосферы (обычно), а может быть и 4...5 атмосфер. Суть в том, что электроника видит, что вода течет и не отключает мотор.
Улавливаете? В механике мотор всегда работает в благоприятном режиме — через дюймовую трубу периодически наполняет гидроаккумулятор. В электронике мотор постоянно включен до тех пор, пока открыт кран (а это точно не дюйм и даже не пол дюйма). Пробовали дышать через тоненькую трубку под водой?
Заключение. Электронное реле — это механика + электроника, а механическое — это только механика. Как вы думаете, что надежнее? К тому-же электронное реле постоянно эксплуатирует мотор в неблагоприятном для него режиме да и статистика не в пользу электроники… Выводы делайте сами.
p.s. Состоятельным клиентам я ставлю механику и электронику в паре — получается чудесный тандем. Электроника защищает от сухого хода и повышенного тока (это то, чего не хватает механике). А механика всегда отключает мотор (и электронику) при достижении 3 атмосфер — это действительно чудесный тандем. В случае прорыва груши электроника продолжает работать и имеется возможность ремонта гидроаккумулятора без отключения водоснабжения.
p.p.s. Надежность — это дублирование. Это правило всегда используется в связи и почему-то не используется в черных ящиках самолетов, ну да бог с ними. То бишь два китайских датчика давления — это уже очень надежно, а + механическое реле — почти совершенно. Потому что микропроцессоры иногда зависают, а порты выгорают. Простите, за многословность — это мой первый комментарий на Гиктаймсе :-)iig
11.12.2017 13:09Если вместо водяной схемы нарисовать электрическую, где вместо насоса — источник тока, вместо гидроаккумулятора — конденсатор, вместо труб — провода (с сопротивлением и индуктивностью), вместо крана — резистор — все просто и понятно.
В схеме без конденсатора обязательно будут выбросы напряжения (гидроудары) при включении-выключении, избыточное давление при малом расходе воды — и без плавного пуска ничего с этим не поделаешь.
Alex_Bogdanovich Автор
10.12.2017 21:32огромное всем спасибо за разносторонние посылы и информацию, спасибо!
oppol
Для таких устройств желательно использовать автоматический RESET в случае зависания. А то если контроллер зависнет в момент включения насоса, могут возникнуть потом некоторые траты за электричество и всякое такое.
Микроконтроллеры ATmega имеют встроенный механизм WatchDog Timer. В Ардуино он не прописан, но добрые люди сделали поддержку этой функции
www.cyber-place.ru/showthread.php?t=550&page=13
lonelymyp
Там механическое реле осталось для таких случаев.
Alex_Bogdanovich Автор
механика на случай краха электроники, которая в тестовом сейчас работает. тоесть прода перекинуть всегда можно обратно
продумывал механическое вклинить паралельно\последовательно — смысла болшого нет, тупики все равно получаются в случае выхода твердотельного