Pull to refresh

Comments 40

У вас получилась схема с приоритетом — при одновременном нажатии нескольких кнопок приоритет отдаётся кнопке которая ближе всех к источнику питания.
Да и в подобных решениях нет главного — гибкости решения и возможности решения вероятных косяков в алгоритме работы без перепаивания.
Насколько одновременно должны произойти нажатия, чтобы такая неидеальность схемы имела значение? Например, в сравнении со средним временем реакции человека.
И да, перепаять такую штуку вполне может быть быстрее и проще, чем копаться в коде.
В приведенной схеме длину проводников от общей точки подключения питания до кнопок можно сделать одинаковой. В таком случае приоритета, практически, не будет.
так, немного подумал — и нарисовал схему с более симметричным приоритетом
image
теперь те что левее отрубаются сразу, те что правее — после полусрабатывания релюхи.
заодно она высвободила второй контакт в каждом канале для вообще произвольной нагрузки.
но эту схему вживую не делал — подвохи не проверял

с прочим согласен
(эххх пришлось поставить более современный браузер, печаль)
круто, если самая левая кнопка например уже нажата до замыкания контакта, малейшее прикосновение к кнопкам правее в период до полного срабатывания реле приведет к отмене срабатывания
Нужно, чтобы нажатие кнопок отслеживала Raspberry Pi с помощью программы на Java и через 4G-модем передавала в облако XML-запрос к скрипту на питоне, являющемуся прокладкой для обращения к базе данных в другом облаке, где на PLSQL и была бы реализована вся логика.

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

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

еще возможна ситуация когда одно из реле перейдет в режим генерации, или даже несколько одновременно

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

насколько быстрее? нужно проводить эксперимент
Разница может быть разве что в скорости срабатывания реле. Скорость распространения электрического поля в проводниках равна скорости света. Если сечение достаточное, то даже с длинами проводников не нужно особо мудрить. Главное чтобы напряжение до релюхи вовремя дошло.

«Практически одновременно» — это не одновременно. Типичная скорость срабатывания реле быстрее реакции человека.
Быстродействие такое «примитивной» аналоговой схемы будет в любом случае выше, чем программная обработка: задержки на прерывания от кнопок и из обработка или циклический опрос кнопок плюс реакция на это (зажечь светодиод или лампу и т.п.) И это без обработки дребезга контактов (в данном случае оно не нужно, но если вдруг нужно, то задержка еще больше увеличивается.). При этом использование цифровой схемы вопрос обработки «практически одновременного нажатия» не решает никак: в случае работы по прерываниям — смотря от какой кнопки прерывание пройдет быстрее, если с циклическим опросом кнопок — приоритет у той, которая находится в списке обхода выше — больше.
не минусовал, но отвечу: скорость срабатывания реле зависит от напряжения, напряжение в свою очередь от сопротивления линии до обмотки реле и тока потребления
Я не зря написал «если сечение достаточное» — если не коммутировать самыми дешевыми и тонкими в сечении проводами то сопротивление там мизерное. К примеру ШВВП 0.75мм при 20 градусах С имеет номинальное сопротивление не более 26 Ом на _километр_, или 0,026 Ом/м. Витая пара cat 5e — не больше 19 Ом на 100м. Сопротивление обмотки катушки реле в десятки и сотни (если не тысячи) раз больше.
У реле тоже есть минимальное напряжение срабатывания. Например 12В — это номинальное напряжение обмотки, а «подхват» срабатывания может начинаться с 7-8 В, нужно сомтреть даташиты.
Понятно, что и б/п тоже стоит взять с запасом по току и на напряжение по номиналу обмоток реле. Можно еще один большой конденсатор параллельно б/п поставить, который будет давать достаточный импульс для срабатывания схемы обеспечивая достаточный «стартовый ток» (актуально для слаботочных источников). А после запирания одного реле остальные обесточиваются и на потребляемый схемой ток не влияют.

Хотя на самом деле суть статьи не в этом.
Просто нужно чаще пользоваться «бритвой Оккама».
Какой обход? они все фиксируются разом. Можно даже с частотой в 10кГц.
Тогда можно момент нажатия зафиксировать с точностью в 0.1мс
но не в этом проблема, а в том что кнопки МОГУТ быть нажаты практически одновременно и в схеме непременно возникает race condition и чем медленней быстродействие схемы тем сложнее последствия таких гонок.
Это мы не берём в расчёт вероятный дребезг контактов.
Попробуйте проанализировать схему в микросекундном масштабе времени — ход кнопки от верхнего контакта до нижнего ощутимо долог, а срабатывание реле — практически вечность!
На предоставленной схеме, реле зашунтированы электролитами и коммутируются через светодиод — такой набор элементов с огромным технологическим разбросом параметров ещё поискать… в итоге, у какой-то кнопки всё же будет преимущество!
>Какой обход? они все фиксируются разом. Можно даже с частотой в 10кГц.
Я про цифровую схему в плане масштабирования. Либо нужно цеплять на отдельные ноги и делать через прерывания контроллеров либо циклический «обход» через сдвиговые регистры. С прерываниями временами тоже может быть не все просто, зависит от схемы и МК.

>Тогда можно момент нажатия зафиксировать с точностью в 0.1мс
Ну так с этого в первую очередь нужно и начинать — с какой точностью и быстродействием нужно фиксировать нажатие кнопки. И надо ли. Электромагнитные реле да, срабатывание до 5-6 мс. Но можно взять твердотельные — там спокойно до 0.5мс можно получить.

>но не в этом проблема, а в том что кнопки МОГУТ быть нажаты практически одновременно и в схеме непременно возникает race condition и чем медленней быстродействие схемы тем сложнее последствия таких гонок.
Могут. И что? Опять же — смотря какое быстродействие нужно. Если брать пределы наносекунд так цифровая схема тоже не всегда вариант или нужно делать навороченную схемотехнику, оптимизировать выполнение кода, задержки, следить за стеком и прерываниями и т.д. (ваш код будет готов к дребезгу контактов, или что шутники-команды нажмут несколько раз вподряд кнопку, вызвав множественные прерывания?) Что, тем не менее, не избавляет от просчета и электрической части. Причем для цифровых схем там даже «наворотов» больше — нужно учитывать гальваническую развязку, если хотим посветить чем-то мощнее светодиода, к примеру (впрочем, «гальванику» лучше в любом случае делать и развязывать цифровую и исполнительную аналоговую часть), в любом случае нужна исполнительная схема, так как включать светодиод напрямую от ноги МК просто опасно для самого МК, и т.д.

>Это мы не берём в расчёт вероятный дребезг контактов.
А программная обработка дребезга быстродействия не добавляет. Ибо самое типичное решение — двойное измерение состояния с задержкой. Вопрос в выборе задержки, когда кнопка таки будет считаться однозначно нажатой.

>Попробуйте проанализировать схему в микросекундном масштабе времени — ход кнопки от верхнего контакта до нижнего ощутимо долог, а срабатывание реле — практически вечность!
Ход кнопки никуда не девается и в цифровой схеме. Срабатывание исполнительного механизма — нужно сравнивать РЕАЛЬНОЕ быстродействие цифровой схемы и аналоговой. Ну и в конце концов — у нужны ли «брейн-рингу» микросекунды?

>На предоставленной схеме, реле зашунтированы электролитами и коммутируются через светодиод — такой набор элементов с огромным технологическим разбросом параметров ещё поискать… в итоге, у какой-то кнопки всё же будет преимущество!

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

Еще раз — статья на самом деле не об этом. В аналоговой схеме тоже могут есть нюансы, но они есть и в цифровой. Так же как есть и пути их решения. Штука в том, что для достаточно простой задачи — зажечь индикатор по нажатию кнопки — городить ардуину или «малинку» часто излишество.
Там где в аналоговой схеме размышления на полчаса плюс еще столько же или час на пайку с минимальным количеством деталей, в цифровой схеме:
— развязка цифровой и аналоговой, исполнительной части (электрическую часть с кнопками и лампочками никто не отменял, да)
— нужно знать программирование
— написать код, отладить его
— для написания и отладки нужен компьютер, IDE, программатор; если это не готовая какая-то отладочная плата то еще и плату развести под все это, тогда как релюхи можно спокойно распаять навесным монтажом они заработает «сходу».
и т.д.

На эту же тему недавно на ГТ была замечательная статья о подогреве ручек велосипеда: http://geektimes.ru/post/268802/
«Это самая идиотская дискуссия, которую я когда-либо читал… ну точнее за последние несколько дней, перед которыми вы обсуждали архитектуру UND компонента.
Причина, по которой «система подогрева рук» еще никем не разработана, заключается в том, что большинство нормальных людей просто купили себе пару перчаток. Перчатки весьма эффективно сохраняют тепло рук.»

В наиболее общем случае решение задачи о «кнопке для брейн-ринга» на аналоговых компонентах будет проще, быстрее и дешевле. Причем вариантов масса:
— не нравятся электромагнитные реле — возьмите герконовые; не люите «аналог» совсем — ну возьмите твердотельные
— не нравится релейная логика — можно на транзисторах в ключевых режимах собрать
— или на базовой логике малой интеграции — на каких-нибудь D- или T-триггерах.
Правда если захочется скоммутировать лампочку побольше, чем маломощный светодиод все равно придется задействовать… та-дам! РЕЛЕ. Либо опять же наворачивать схему — транзисторы (полевики) которые будут либо сами управлять лампочкой либо тем же реле. Или оптрон. Или твердотельное реле.
Преимущества «тупой» релейно логики: достаточная дешевизна, простота разработки и отладки (в случае если что-то не заработает достаточно обычным тестером цепи прозвонить), изначально как плюс имеется возможность коммутации достаточно мощных исполнительных нагрузок (при использовании релюх с двумя группами контактов одна будет работать как триггер-защелка, на вторую можно поставить коммутацию хоть прожектора с ревуном, если по коммутируемому току запаса хватит.

РЕШЕНИЕ задачи должно исходить из ПОСТАВЛЕННОГО ТЗ.
В самом общем случае релейная схема абсолютно спокойно решает поставленную задачу. И быстродействия в несколько миллисекунд в сравнении с реакцией человека вполне достаточно.

Вот когда начинаются навороты в ТЗ — вести статистику нажатий командами, плюс (зачем-то) измерять скорость реакции и нажатий и т.п., то есть там где потребуется интеграция с некой компьютерной системой и БД, разработка изначально цифровой схемы таки имеет смысл.
Если же речь будет идти не о брейн-ринге, а о чем-то вроде фиксации пересечения финиша бегунов в профессиональном спорте где таки микросекунды могут играть роль, то просто цифровой схемой все равно не обойтись, так как нужно получить величину гарантированного быстродействия. В таких задачах все равно, как правило, используются разного рода аналоговые датчики, которые через ADC поступают на обработку в цифровые схемы.

«Сделайте глубокий вдох-выход и скажите „Перчатки“
Вы совершенно напрасно связали фиксацию факта нажатия кнопки и раздачу команд светодиодам в одно событие. Микроконтроллер может зафиксировать сам факт нажатия с точностью до микросекунды, ведь важно кто первый нажал. А уже потом на общих основаниях раздавать команды хоть на аналоговые реле.

Что же до сложности, то, как мне кажется, это проекция вашего опыта. Вариант с Ардуино проще по исполнению в силу своей очевидности и меньшего количества компонентов. Но главное его преимущество — расширяемость. Например, чуть-чуть поменяв скетч можно добавить режим с лимитом времени на нажатие кнопки и сигналами о том, что прошла половина времени, 3/4, и на каждую секунду последние 10 сек. А можно записывать все результаты нажатий на SD-карточку, чтобы потом, долгими зимними вечерами строить бессмысленные но захватывающие таблицы со статистикой по игрокам.
Я опять возвращаюсь к ТЗ.
Если таки нужен таймер и его нужно увязать с кнопками, собирать статистику и т.д. — это одно дело. Если нужно просто зафиксировать факт нажатия — релейной логики более чем достаточно. (Кстати сделать в будущем релейную схему исполнительной частью цифровой будет весьма просто).
Мало 5-6 мс срабатывания электромагнитного реле? Возьмите герконовое — 1 мс. Тоже мало? Твердотельные до 0,5 мс.

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

И зачем этот упор в микросекунды? Да, релюхи сработают в пределах миллисекунд, но и не нужно плодить сущности более необходимых. Для фиксации факта нажатия кнопки этого хватит. Мы ж не за атомными реакциями следим. Иначе можно и до наносекунд допроектироваться.
Кстати возвращаясь к обработке дребезга контактов — среднестатистически дребезг контактов программно обрабатывается путем введения задержки в 25-50 мс что уже больше быстродействия даже электромагнитного реле.

>Вариант с Ардуино проще по исполнению в силу своей очевидности и меньшего количества компонентов.

Чем проще? Реализовать цифровую часть без аналоговой (кнопок и индикаторов) — никак. Релейный или триггерный (на низкоуровневой логике и/или транзисторах) вариант при этом выходит самодостаточным и без МК (естественно без таймеров и наворотов, но это опять вопрос к ТЗ). А Ардуиной или AVR-кой можно потом просто считывать состояние аналоговой части и управлять ее активностью (включать/отключать питание аналоговой исполнительной схемы).
И деталей меньше не будет. Будет «аналоговая часть „+ “ардуина».
Тут нам как раз дребезг отрабатывать не нужно, мы ведь ловим любое ПЕРВОЕ нажатие.
Проблема схемы на реле в том что пока контакты реле в полёте от одного положения до другого возникает неопределённое состояние, за время которого несколько других каналов тоже могут начать процесс срабатывания в итоге могут возникать такие моменты когда схема нам выдаст несколько сигналов вместо одного самого первого.

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

Я вот так и не понял, что же произойдёт в схеме если нажать одновременно(с разницей не более времени срабатывания реле) две кнопки? Да… эти цепи обе сработают и зафиксируются.
>Да… эти цепи обе сработают и зафиксируются.

Каждый из каналов при срабатывании разрывает цепь питания остальных. Одновременно включеных не будет.
При одновременном нажатии оба реле будут в одинаковых условиях, и даже если цепь питания будет разорвана — инерция доделает своё дело и контакты замкнутся зафиксировав реле. Ведь когда реле разомкнёт свои контакты это будет означать что порог срабатывания пройден и замыкание второго контакта это лишь дело времени — этому поможет ёмкость включенная параллельно реле.
Реле при активации разрывает цепи питания ОСТАЛЬНЫХ. Если сработают два одновременно они ОДНОВРЕМЕННО обесточат и соседей-конкурентов, то есть произойдет «взаимная аннигиляция». И емкость параллельная катушке только заставить сработать отключению наверняка.
Когда процесс уже пошёл, остановить его трудно.
реле — прибор инерционный, и если хватило напряжения чтобы оторвать контакт от верхней части, то до нижней он уж точно дойдёт — напряжение отпускания реле ниже напряжения срабатывания, конденсатор за время переключения обеспечит реле достаточным количеством энергии чтобы перекинуться, а там уже и полноценное напряжение подоспеет.
Откуда? Релюха замыкает общую шину питания на себя, отключая конкурентов. Если в миллисекунды переключения сработает сосед он отрубил и эту релюху от общей шины. Так что питание катушка будет получать ровно столько времени сколько шунтирующий конденсатор смог энергии запасти и самозащелкивания не произойдет, так как не будет постоянной подпитки от общей шины (кто-то из соседей постарался).
А зачем ей подпитка? Порог срабатывания пройден, реле дойдет до конца пока напряжение на нём будет больше напряжения удержания, конденсатор будет этому способствовать. Еще сам якорь не может размагнитится мгновенно, он тоже будет работать на продолжение процесса.
Про дребезг уже написали.

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

Ну и лично я бы чуть шире использовал возможности Ардуины, поскольку ужасно не люблю возиться с паутиной проводов. Например, прицепил бы на кнопки разное сопротивление и подключил к одному аналоговому входу, а на выход прицепил какую-нибудь 74HC595 или вообще готовый блок реле на основе той же 74HC595.
Ситуация, когда кнопки нажаты при включении системы, является нештатной.
А вот ситуация, когда кнопки нажаты почти одновременно в процессе работы — и есть основное применение, и прежде чем ставить любую систему, что такую, что на микроконтроллере, нужно убедиться, что ее погрешность как минимум на порядок меньше времени реакции человека, иначе вся затея теряет смысл. Но при этом также надо понимать, что идеальной точности добиться тоже в принципе нельзя. Разумеется, надо моделировать, а потом измерять, но опыт подсказывает мне, что у такой системы время обработки сигнала и разброс между каналами будут вполне достаточными для того, чтобы не влиять на ход игры.
время реакции это не главное о чем нужно думать в данном случае, человек с временем реакции в два раза большим чем у другого человека может нажать кнопку в тот же момент времени или даже раньше, зависит от расстояния от руки до кнопки техники нажатия и тд, при этом чем больше людей тем больше вероятность практически одновременного нажатия на кнопки
Определите «тот же момент времени». Какая точность вам нужна? Одна миллисекунда? Одна наносекунда? Одна ыемтосекунда? Какими критериями вы будете руководствоваться, задавая нужную точность?
для данной схемы тот же момент времени это 5-6мс время срабатывания реле
Обработка дребезга контактов сколько задержки даст? Так чтобы наверняка зафиксировать нажатие кнопки, а не дребезг?
Здесь вообще не нужна обработка дребезга, нужно регистрировать самый первый фронт, а дальше хоть трава не расти
Посмотрел даташит — реле серии IM Axicom — 1мс размыкание, 3 мс включение. Считаю такую одновременность недостижимой живыми людьми, и _достаточной_ для наколенной домашней поделки.

Всем спасибо, мне сама эта тема не очень интересна, я лишь «добавил вариант в библиотеку (готовых) решений», пусть лежит.
Было время — я был весь из себя спортсмен — пловец. Там в правилах явно постулировано:
«если результат отличается менее чем на одну сотую секунды — результаты считаются одинаковыми»
(соотв. на вершине пьедестала теоретически могут оказаться все восемь финалистов.)
с тех пор мне все состязания, где играют роль меньшие цифры — кажутся несколько завуалированной лотереей.
Если игроки сознательно на неё идут — можно всегда решить вопрос организационно — напр регулярно меняться местами/пультами.

в поправленной схеме (см. ответ выше ) — мигнёт светодиод «фальстарт» (опять же — если он мигнул незаметно для глаз — считаем что фальстарта не было)

принципиально что именно по нажатию срабатывает — бить ладошкой наотмашь, а далее — хоть наступи на неё.
Насколько я понимаю, в плавании речь идёт о минутных интервалах, и на этом фоне одна сотая секунды кажется исчезающе малой величиной.
Реакция же человека — это сотня миллисекунд, если говорить об аналогичной точности то разрешающая способность должна быть порядка 100мкс чтобы говорить об одновременности.
Я давно уже заметил, что у лучших спортсменов результаты отличаются не так уж сильно — речь идёт буквально о десятых долях секунд на интервалах в несколько минут. Поэтому, система регистрации времени должна иметь хотябы на порядок больше возможности — т.е. до сотых долей секунд. Что бы вы сказали на счет секундомера, измеряющего время с точностью порядка 1%? Да это будет просто генератор случайных чисел.
Та же ситуация у нас возникает с реле — измеряем время реакции порядка 100мс с точностью 5мс… да это погрешность в 5% просто никуда не годится! В итоге победа между тренированными игроками будет распределяться как случайные числа.
Может, я чего и не понимаю… Но на мой взгляд, самое то для подобных поделок — логические микросхемы малой степени интеграции. 155 серия, если не ошибаюсь. Во всяком случае, реле здесь — явный перебор. Достаточно ключей на тех же полевиках.

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

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

Автору респект! В копилку ценных статей ;)
не-не, я это всё не холиваров ради и не про эту конкретную «свою игру» —
а про расширения пространства решений —
типа: «если у вас всё равно в схеме будут кнопки и реле — то, может быть, вариант <<вообще обойтись без всего остального>> (это не столь сложно) стоит хоть чуть рассмотреть, прежде, чем отбросить?»

Особенно если коммутируемый выходной сигнал не лампочки, а какой-нибудь сигнал, (звук например) или высокие вольты.

Кроме того в таких схемах полегче с помехами, статикой, плохим питанием, перегревом, поиском-заменой деталей и т.п.

Большой минус — «в готовой собранной схеме найти косяк — вилы, поэтому надо проверять по мере сборки поканально.»
Да Вы изобрели логику на электромагнитных реле. Вам должно быть понравится вот это.
Особенно картинка оттуда.
image

Правильное решение без излишков — реализовать это на транзисторах или на логических микросхемах. Что уже было сказано выше.
А потом посмотреть на получившееся количество корпусов и заменить их все на один МК.
Sign up to leave a comment.

Articles