В данной статье я опишу процесс создания умного кухонного крана. Я инженер по инновационным продуктам и методология создания инновационных продуктов была в полной мере применена в этом изделии.

Введение

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

В настоящем мире существует огромное число различных технологий, необходимо включить наше воображение и создать в своём воображении вещь, которую мы хотим. Это конечно может быть какая-либо корпоративная система, управляющая процессами надёжности или сроками проведения работ, но я опишу кухонный кран, поскольку он понятен большинству инженеров, а методика и основные этапы создания едины для проектов в различных сферах деятельности. Кроме того, умный кухонный кран будет желаем в каждом умном доме.

Составление требований

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

Посмотрим на операции, производимые в кухонной мойке. Мытьё продуктов, мытьё посуды, мытьё рук, наполнение резервуаров. При этом мы используем как питьевую воду, прошедшую сквозь дополнительный фильтр, так и обычную (горячую и холодную).

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

При работе мельницы необходимо пропускать через неё воду, а так же воду необходимо пропускать в течение 20 секунд после её остановки.

Как правило температура воды при мытье рук и посуды примерно одинаковая, конечно необходима её регулировка и термостатирование, но вот продукты мы почти всегда моем холодной водой. Следовательно, необходимо быстрое переключение между холодной и некоторой регулируемой температурой воды.

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

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

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

И конечно при включении мельницы, для пролива через неё воды, желательно использовать отдельный канал, поскольку кран может, например, быть направлен в соседнюю раковину мойки!

Теперь перейдём к крану питьевой воды. Там всё немного проще, но есть отличия.

Когда мы хотим налить полстакана воды одной рукой удобно поднести стакан к крану и указательным пальцем просто коснуться его кончика для включения воды, а потом убрать руку, оторвав палец от крана, что приведёт к выключению потока воды.

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

В качестве дополнительных требований, в данном проекте, необходимо отметить наличие внешнего управляемого источника питания 12вольт. Питание от этого источника поступает только при обнаружении движения в районе мойки. Ели покинуть зону мойки более чем на 2 минуты – питание пропадёт.

Итак, требования сформированы. Далее необходимо разработать план реализации проекта и ему следовать.

План реализации проекта

1.      Мы разрабатываем сенсорный кран, если не удастся подобрать (создать) схемы, надёжно детектирующие касание кранов, то придётся пересматривать требования. Поэтому, первым пунктом идёт обзор рынка, подбор готового модуля или прототипа схемы и тестирование детектора касания.

2.      Создание гидравлической части:

a.      создание схемы,

b.      подбор компонентов,

c.       сборка компонентов согласно схеме,

d.      испытание и включение по временной схеме.

3.      Подбор и размещение дополнительных органов управления (кнопок со светодиодами и пневмо-кнопки управления мельницей) на поверхности мойки.

4.      Электрическая часть.

a.      Подбор модулей и разъёмов (разъёмов необходимо двойное количество).

b.      Создание схемы соединений.

c.       Подбор корпуса для модулей. Монтаж модулей в корпусе и размещение корпуса на мойке. Создание эмуляторов (или заглушек) для каждого разъёма модуля, позволяющих проводить отладку программы в удобном для этого месте, а не рядом с мойкой

d.      Монтаж соединений исполнительных механизмов и датчиков до разъёмов. Прозвон смонтированных соединений.

e.      Создание программы, отладка на эмуляторе.

f.        Монтаж системы с заглушками вместо датчиков касания и отладка работы. Система в опытной эксплуатации без датчиков касания.

g.      Монтаж датчиков касания проверка, отладка.

h.      Опытная эксплуатация доработка алгоритма.

5.      Изготовление лицевой панели для мойки из искусственного камня.

Небольшая часть пунктов этого плана может выполняться параллельно, так пункт 4a может стартовать после 2b. Но пункт 4d будет ждать завершения 3. Начать писать код модуля можно после выполнения пункта 1, но отладка может начаться после 4d.

Можно приступать к работе.

Общие правила инновации.

Сформулируем три приоритета, которых стоит придерживаться при работе над любым инновационным продуктом.

1.      Необходимо особое внимание уделять надёжности, отказоустойчивости и ремонтопригодности. Надёжность должна быть первостепенной уже на этапе прототипирования компонентов. Если есть сомнения в надёжности (безотказности) некоторого технического решения необходимо от него отказаться.

2.      Необходимо уделять внимание сокращению сроков реализации проекта, в ущерб оптимизации стоимости компонентов или оптимизации производительности системы, а также ресурсоёмкости.

3.      Оптимизация необходима, только после построения работающего прототипа, при острой необходимости, и лишь в тех местах, где это угрожает потребительским свойствам

Этап 1. Выбор схемы датчика

Первый пункт оказался самым длительным. На рынке присутствуют модули для сенсорных кранов, но все они как оказалось детектируют не факт касания, а единый факт касания – отпускания, при этом модули залиты эпоксой в кирпич и не позволяют их изучить и (или) модернизировать. Пришлось закупить три клавиатурных модуля касания (приближения). Один из которых показал хорошую масштабируемость по параметру размера сенсорной пластины. Цена модуля – восемьсот рублей.

Этап 2. Создание гидравлической части

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

У нас есть три источника: Холодная вода, горячая вода, а также питьевая вода.

У нас есть три потребителя: кран питьевой воды, кухонный кран и отдельный выход на гибкий шланг, идущий к специальному патрубку на мельнице.

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

Вот итоговая схема.(рис.1.)

Рисунок 1.
Рисунок 1.

На схеме мы имеем три механических крана (Rm, Rc и Rd), шесть электромагнитных нормально закрытых клапанов (V_x) и один терморегулятор (Rt).

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

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

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

В нашем кране мы используем от одной до трёх букв латинского алфавита и необязательно цифры в качестве суффикса. Данная кодировка используется как при описании работы изделия, так и при разработке конструкции. И далее при проектировании электрической части и программировании микроконтроллера.

Мы используем кодирование Rd, Rc и Rm вместо R1, R2, и R3 поскольку мнемоническое запоминание уменьшит количество ошибок проектирования. D(drink) питьевая, С(crane) кран мойки

Мы получили спецификацию, выбираем оборудование. Здесь мы не касаемся выбора внешнего вида самого кухонного крана и крана питьевой воды поскольку это определяется на этапе разработки дизайна кухни.

1.      Выбираем надёжный и широко распространённый китайский терморегулятор. (стоимость примерно 3500 рублей)

2.      Выбираем малогабаритные краны для ручного регулирования (стоимость примерно 600 рублей за одну штуку).

3.      Мы не будем экономить ток срабатывания, поэтому выбираем электромагнитные клапаны прямого действия. Клапаны, использующие для переключения давление магистрали, менее надёжны и в них есть необходимость лишь в случае ограничений по электропитанию, например, при питании от батареек (500 рублей за один клапан).

Два электро-клапана покупаем в пластиковом исполнении, имея в виду необходимость электрической изоляции крана от окружающих его металлических элементов водопровода и мойки. Если этого не обеспечить, то электроника не будет в состоянии отличить касание одного крана от другого или касание крана от мойки.

Этап 2.c — это проектирование, комплектация и сборка водопроводной системы согласно гидравлической схеме.

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


Раковина мойки, краны, гидравлическая и электрическая части смонтированы по разные стороны сантехнического люка. Фотография внутренней части конструкции приведена ниже  (фото 1)

Фото 1
Фото 1

На иллюстрации ниже, приведен фрагмент гидравлической части с идентификаторами элементов. (фото 2)

Фото 2
Фото 2

Клапаны, управляющие подачей питьевой воды, выполнены из металла, поскольку отделены от сенсора пластиковой трубкой. Клапаны, управляющие подачей воды в кран мойки, выполнены из пластика (см. Фото 3))

 Клапан V_Cr также металлический, поскольку расположен между двух пластиковых и отделён от терморегулятора пластиковой трубкой.

Фото 3
Фото 3

Этап 3. Подбор и размещение кнопок

Переходим к третьему пункту нашего плана.

Почему необходимо размещать кнопки после монтажа гидравлической части? Чтобы не думать о положении кнопок при выполнении пункта 2! Сместить кнопку намного проще чем обойти её положение трубой.

Ниже приведена схема расположения кнопок. (Рис. 2)

Рисунок 2
Рисунок 2

Уникальный идентификатор светодиода кнопки приведён в скобках после идентификатора кнопки. На рисунке цвет кнопки определяет цвет её светодиода. Голубой цвет – питьевая вода и переключение технической воды в холодный режим. Белый цвет – техническая вода. Красный – стоп. Размер кнопки так же определяет управляемый напор воды.

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

Этап 4. Электрическая часть и программа

Полностью схемы и программа выложены по ссылке: https://github.com/niikars/Kitchen-Crane .

Ниже приведены описания особенностей и приёмы создания продукта.

В качестве управляющего процессора был выбран Arduino Mega. Он самый мощный в линейке Arduino и его стоимость (примерно полторы тысячи рублей) в любом случае не определяет стоимость проекта. Для управления подачей воды в мельницу был выбран индукционных модуль, измеряющий ток питания мельницы и срабатывающий от некоторого тока, превышающего настраиваемое пороговое значение (800 рублей). Тока выходов микропроцессора заведомо не хватит для срабатывания электроклапана, поэтому необходимо ещё два блока реле (на 4 и 2 реле)

Нам так же необходимо два дополнительных источника питания: один на 12 и второй на 5 вольт. Управляемый внешним домом источник питания подойдёт для питания всех клапанов, кроме клапана мельницы. Необходимо в любом случае подавать воду на мельницу при её работе, а также в течение 20 секунд после остановки. Электромагниты клапанов производят достаточно много помех при работе, поэтому питание процессора осуществляем от отдельного блока.


На иллюстрации ниже приведён вид электронного блока.(Фото 4)

Фото 4
Фото 4

Подбираем корпус, имеющий большие размеры, чем подобранные электронные модули. Модули можно расположить в несколько слоёв, но в нашем случае такой необходимости нет. На дно нашего корпуса закрепляем монтажную плату, выпиленную по его размеру. Наше устройство должно прослужить лет 10, а то и более, но должно при этом быть ремонтно-пригодно (в первый год эксплуатации возможны отказы электронных компонентов из-за дефектов изготовления). Распаиваем разъёмы на монтажную плату, кроме разъёма привода клапанов, его провода закрепляются непосредственно на клеммах реле. Рядом с каждым распаянным разъёмом распаиваем линейку одноштырьковых разъёмов. Закрепляем модули на монтажной плате на стойках. Монтаж электрических соединений модулей с разъёмами и между собой производим стандартными проводами с одноштырьковыми разъёмами. Провода для монтажа берём тех же цветов, что и провода разъёмов. Это ускорит отладку программы – уменьшит вероятность ошибки. Для множественного соединения организовываем островки одноштырьковых разъёмов на монтажной плате. В процессе монтажа обязательно заносим на схему цвета проводов.

Монтаж электрических соединений вне блока производим при помощи опрессовки, с последующий изоляцией термоусадочной трубкой с клеевым слоем.

Для наращивания длины проводов используем цвет провода разъёма процессорного блока, а не цвет провода от разъёма электронного компонента.

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

После сборки обязательно прозваниваем каждый разъём.

Обращаем особое внимание на качество заземления всех деталей мойки и минусовых выходов всех источников питания!

Переходим к программированию

Чтобы избежать ошибок нам необходимо использовать имена устройств вместо номеров ножек микропроцессора. Это делается при помощи механизма макроподстановки.

В некоторых случаях желательно заменить логические о общепринятые константы на свои мнемоники – это сильно сократит количество опечаток и время отладки программы

Программа для микропроцессора делится на четыре части:

1.      Общий блок констант и общих переменны.

2.      Функция инициализации. Определение режимов работы ввода вывода и начальных значений

3.      Функции прерываний по событиям.

4.      Функция основной петли приложения.

Полезно добавить отдельную секцию диагностической печати. По мере написания программы мы прописываем в эту секцию значения состояний и сигналов. При отладке изделия лог сильно нам поможет!

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

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

Как и предполагалось некоторые приключения начались на этапе ввода в эксплуатацию сенсорных датчиков.

Чувствительность датчиков регулируется, согласно техническому описанию микросхемы, шунтируя площадку сенсора на землю небольшим конденсатором емкостью в несколько пикофорад. После регулировок кран был переведён в тестовую эксплуатацию.

Ниже на фото 5, датчик в процессе подбора шунтирующего
конденсатора.

Фото 5
Фото 5

Опытная эксплуатация выявила отсутствие устойчивости к помехам. Причём помеха не только приводила к ложному срабатыванию датчика, но и заклинивала его в состоянии «касания».

После изучения вопроса в сети стало ясно, что необходимо понизить напряжение питание датчика. На подводящие кабели были добавлены делители. Согласно техническому описанию микропроцессора логической единицей считается напряжение более 2,7 вольта, так что всё должно было заработать.

Но испытания показали следующую картину. Светодиод, включаемый и выключаемый в процедуре прерывания по касанию уверенно отрабатывал касания, но больше ничего не работало! После подключения USB картина прояснилась окончательно. Диагностические сообщения отсутствовали – процессор зависал на обработке прерываний. Напряжение выхода сигнала датчика хватает для надёжного и правильного выполнения инструкции «DigitalRead», но находиться в диапазоне обнаружения события «Change». Компаратор события постоянно его обнаруживает и выполняет закреплённые за этими событиями функции.

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

Для чего необходимо пересоединить жгут от электронного блока к сенсорам.

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

Минимальные переделки кода приведены ниже.

Переменные «Old_SDr» и «Old_SCr» были добавлены в общий блок.

Касание или отпускание кранов приводят к неравенству Old_SD(C)r и SD(С)r. А это в свою очередь запускает процедуры SensorD(C)r, которые раньше запускались по прерыванию.

Заключение

Проект почти завершён, осталось одеть мойку и краны в искусственный камень!

Общие трудозатраты составили примерно 100 часов, но растянулись на год из-за работы над другими проектами.

Приведу примерные затраты на комплектующие по этапам.

Этапы

Материалы

Стоимость (руб)

1 этап

Закупка образцов

10 000

 

2 этап

терморегулятор

3 500

 

Клапаны

3 000

 

Краны регуляторы

1 800

 

Прочие элементы

6 000

 

Итого 2-ой этап

14 300

3 этап

Кнопки и разъёмы

6 000

4 этап

Arduino

1 500

 

Модуль детектора

800

 

Разъёмы

2 000

 

Корпус

1 800

 

Прочее

4 000

 

Итого 4-ый этап

10 100

5 этап

Запланировано

100 000

 

ИТОГО

130 400

Комментарии (37)


  1. CitizenOfDreams
    26.06.2024 10:52
    +20

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

    У меня на кухне кран управляется единственным рычагом. Общение с краном осуществляется простейшими жестами: на себя - увеличить поток, от себя - уменьшить поток, влево - увеличить температуру, вправо - уменьшить температуру.


    1. DvoiNic
      26.06.2024 10:52

      Есть т.н. "хирургические", или "локтевые" (т.е. для управления локтем) краны - там так регулируется поток, температура, и переключается режим "струя/душ"


  1. iliasam
    26.06.2024 10:52
    +3

    Жаль, нет фото получившейся конструкции, включая пульт с кнопками.
    Возникают сомнения по поводу надежности одноштырьковых разъемов - защелок у них нет.


    1. safari2012
      26.06.2024 10:52

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

      надежна там только мега, особенно, если автор активировал аппаратный wdt


      1. randomsimplenumber
        26.06.2024 10:52
        +1

        надежна там только мега

        процессор зависал на обработке прерываний.

        есть сомнения в надежности кода в этой штуке.


        1. safari2012
          26.06.2024 10:52
          +1

          зависает не процессор, а программа :)

          чтобы насмерть не зависал, рекомендую освоить таки wdt

          проблемы, описанные в статье, давно пофикшены, аппаратный wdt, работает из коробки.


          1. randomsimplenumber
            26.06.2024 10:52
            +1

            Я все же рекомендую писать программы так чтобы они не зависали ;) С прерываниями поаккуратнее, что ли. А wdt использовать для всяких rtos и deep sleep.


      1. shadrap
        26.06.2024 10:52

        сами релюхи нормальные, а вот платы бывает дохнут,у меня за 6 лет штуки 4 или 5 сдохло, причём дохнет сам текстолит,не оптрон ,не транзистор,а именно плата и особенно расположенные в "условно сырых" зонах


        1. safari2012
          26.06.2024 10:52

          у меня насмерть залипали именно релюшки. одна в аквариумном сетапе, другая в выключателе света. понимаю, что зависит от конкретной партии и производственной фабрики, но осадочек всё равно остался...


  1. spesso
    26.06.2024 10:52

    Управление электроклапанами при помощи реле? Броски тока и напряжения пагубно скажутся и на реле и на всём остальном.


    1. SanSeich_78
      26.06.2024 10:52

      на то они теоретики-блогеры ))


    1. CitizenOfDreams
      26.06.2024 10:52

      А как, по-вашему, управляют электроклапанами в промышленных станках? Типично - именно реле, причем гораздо более мелкие.

      Hidden text


      1. spesso
        26.06.2024 10:52

        Лучше использовать специализированные драйверы типа DRV103 и.т.д. и.т.п. или реализовать подобный алгоритм управления на рассыпухе. Ну и не забыть использовать гасящие цепочки не дающие разгуляться ЭДС самоиндукции.

        з.ы. Минусаторам отдельный привет.


    1. safari2012
      26.06.2024 10:52

      там на входе оптопара обычно.


  1. dumbaq
    26.06.2024 10:52
    +2

    Не совсем понял, что именно умного в таком кране...


    1. SanSeich_78
      26.06.2024 10:52

      А что умного в 90% статей в теме Сделал сам? )))


  1. ZekaVasch
    26.06.2024 10:52
    +6

    Когда свет выключат , воды не будет ?


  1. nafikovr
    26.06.2024 10:52
    +2

    Мне кажется или вы забыли вывести на пульт ручное управление на случай обесточки?


  1. SanSeich_78
    26.06.2024 10:52
    +1

    Наверное, у меня проф.деформация, но дома у меня никакой электроники и автоматики для управления освещением, отоплением и вентиляцией нет. Выключатель - наше всё ))


    Во-первых, да - зависимость от электричества, а мудрить с аккумуляторами- отдельная задача.
    Во-вторых, обслуживание: нет меня и что-то сломалось - всё, амба. Мудрить с ручным управлением - в чем смысл тогда делать автоматическое?
    Можно еще добавить безопасность и защиту извне, но это точно я делать не хочу )


    1. FilimoniC
      26.06.2024 10:52

      Пример из собственной практики: лампочка, которой нужно управлять с трёх выключателей. Свет в общем коридоре.
      * 2 переключателя + 1 двухлинейный переключатель + куча проводов между ними
      * импульсное реле + 3 кнопки
      * "умное реле" с tasmota + 3 кнопки

      Первый вариант дорог, сложен, не всегда возможен (в нужной линейке производителя часто нет нужных выключателей). Второй и третий варианты - ощутимо проще, но пахнут "умными устройствами"

      Третий вариант от второго отличается возможностью подключить устройство к провайдеру умного дома



      1. vbifkol
        26.06.2024 10:52

        Третий вариант от второго отличается возможностью подключить устройство к провайдеру умного дома

        Есть еще вариант - импульсное реле + 3 кнопки + умное реле на тасмота. В этом варианте кнопки работают без вопросов к УД, но УД тоже может рулить светом.


    1. Borz
      26.06.2024 10:52

      Во-первых, да - зависимость от электричества

      Простите, но зачем вам и обычный выключатель, если в доме не будет электричества?


      1. SanSeich_78
        26.06.2024 10:52

        тема - про водоснабжение.
        и в своём сообщении я упоминаю не только освещение ;)


  1. fio
    26.06.2024 10:52
    +2

    Вашу "мельница" обычно называют измельчитель отходов.


  1. trikot
    26.06.2024 10:52
    +1

    Захотел помыть руки, а все... электричества нету, ну или контроллер погорел. Нельзя везде стараться впихнуть что-то умное. Надо проще жить. Это не упрощает, а усложняет жизнь, да еще и удорожает. Уж кран то я в состоянии открыть.


  1. saege5b
    26.06.2024 10:52
    +1

    Что будет, если помыть панель с кнопками губкой с мылом и потом смыть?

    Тест с мокрыми перчатками проводился?


  1. n3tmaniac
    26.06.2024 10:52

    При смывании загрязнений с рук или с продукта, нам необходима небольшая, мягкая струя, в то же время при наполнении мойки водой или наполнении водой какой-либо ёмкости, необходим полный напор, который может обеспечить данная система крана

    На первый взгляд кажется, что тут подойдёт не сенсорное управление, а педаль с двумя позициями. Изготовители кухонной фурнитуры делают педали для открывания ящика под мойкой - так что это не такое уж странное решение.


  1. Dolios
    26.06.2024 10:52
    +3

    Итак, требования сформированы.

    У вас требования перепутаны с техническими решениями. Вот это не требования, например:

    Когда мы хотим налить полстакана воды одной рукой удобно поднести стакан к крану и указательным пальцем просто коснуться его кончика для включения воды, а потом убрать руку, оторвав палец от крана, что приведёт к выключению потока воды.

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

    Требования тут могли бы быть: удобно набирать как стакан воды, так и кастрюлю.

    И, нет, у вас не удобно. Удобно иметь однорычажный кран для этого, который легко можно открыть и закрыть одним пальцем. Он решает обе ваши задачи, прост как пробка, удобен и не требует электричества. Кстати, раз уж речь о питьевой воде, я не очень понял, как вы собрались регулировать напор после системы обратного осмоса?

    С остальным примерно то же самое. Когда коту делать нечего, он овалы вылизывает, а инженер, "умный", но крайне дорогой и непрактичный смеситель изобретает.


  1. Prohard
    26.06.2024 10:52
    +2

    Для наращивания длины проводов используем цвет провода разъёма процессорного блока, а не цвет провода от разъёма электронного компонента.

    Загадочное решение


    1. CitizenOfDreams
      26.06.2024 10:52
      +2

      Ага, встречал я такие решения, когда провод где-нибудь под потолком незаметно меняет цвет. На одном конце кабеля входит сигнал по синему проводу, а на другом конце выходит по зеленому. Очень хотелось найти решателя и постучать ему в решальник.


  1. Cubus
    26.06.2024 10:52
    +2

    У вас внутри обработчиков прерывания delay(). Так делать нельзя, delay в прерывании работать нормально точно не будет.


    1. CitizenOfDreams
      26.06.2024 10:52
      +2

      Если гарантируется интервал между прерываниями не меньший, чем максимальное время работы обработчика - то теоретически можно. Но это, конечно, будет антипаттерн, он же г-код.

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


      1. Cubus
        26.06.2024 10:52
        +1

        delay() под капотом использует micros(). Внутри micros() делается cli(), то есть тут в обработчике прерываний запрещаются прерывания! Как это должно работать - совершенно непонятно.


        1. randomsimplenumber
          26.06.2024 10:52
          +1

          Главное, что понятно чего хотелось ;) Можно взять реализацию на nop и циклах. Другое интересно: есть ли в С++ механизм отлавливать такие вещи на этапе компиляции? Помечать некоторые функции pragma, или define, и хотя бы warning выдавать если что то не так.


          1. CitizenOfDreams
            26.06.2024 10:52

            Другое интересно: есть ли в С++ механизм отлавливать такие вещи на этапе компиляции?

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


            1. randomsimplenumber
              26.06.2024 10:52

              Arduino framework достаточно абстрагирован от железа. В принципе, выдавать warning при попытке вызвать delay или Serial.print из прерывания было бы неплохо. Или рекурсию.


        1. CitizenOfDreams
          26.06.2024 10:52

          В обработчике прерываний прерывания и так запрещены, так что дополнительный cli ничему не помешает.

          И заметьте, что после чтения таймера micros() не разрешает прерывания с помощью sei() - вот это действительно привело бы к хаосу, если вызвать delay внутри прерывания - а восстанавливает заранее сохраненный SREG.