Comments 31
Вот не поверите. Ходил и обдумывал эту идею недели две назад. У меня два компа, один раблчий друглй домашний и пеоеулючать устройства между ними затруднительно. И я пришел к приблтзительно такой же концепции. Только вот познаний в схемотехнике не так много. Ваша реализация очень интересная
У KVM есть проводные пульты с кнопкой и индикацией текущего режима. Сами KVM спрятаны под столом, пульты вынесены на стол.
Работает просто превосходно, и по цене вполне демократично. Пытался найти вариант с одним большим KVM, но такие девайсы и дороже, и по описанию не слишком понятно смогут ли они работать в нужном мне режиме коммутации. Да и наличие двух переключателей даёт дополнительную гибкость — при необходимости я могу отдать ноутбуку только один монитор и клаву с мышью.
Примерно то же самое, но в комплекте ещё проводной пульт — очень удобно. Вся паутина проводов под столом, а на столе только маленький кругляшок пульта на тоненьком проводе.
Для вас подойдёт обычный kvm, и ничего паять не надо. Например на ali: kvm от ugreen. У самого таких 2 на работе и дома
На 74LVC только перехожу с 74HC к которой привык с TTL ещё.
ps LVC ужё требует другой «культуры», использовал недавно одиночный D-триггер LVC в место HC и… не совсем внимательно развел питание с небольшой петлёй в 15-20мм до керамики и оно у меня ловило каждый чих пока не поправил и RC не навесил
Хотя формально USB так подключать нельзя, в действительности это может работать если переключатели миниатюрные, хотя я не знаю, может ли это работать с Hi-Speed (USB2.0) устройствами.
Переключатели трёх и более групп on-off-on найти не так просто, или они стоят дорого, но можно подобрать такие с которыми несложно физически объединить два-три выключателя в один так чтобы они надёжно синхронно переключались.
Полупроводниковые диоды всегда просаживают напряжение через них, обычно на 0.4-0.6В в зависимости от тока и типа диода. Это может привести к нестабильной работе, а также к тому что мощные устройства вроде внешних жёстких дисков не запустятся. Чтобы уменьшить потери, можно использовать диоды Шоттки или транзисторы, но электромагнитные реле обычно справляются с задачей надёжнее.
Обмотку реле нужно не забывать шунтировать диодом в обратном направлении — иначе то что им управляет может выйти из строя в момент отключения из-за энергии накопленной в магнитном поле обмотки.
Чтобы быстрее сбросить устройство, можно попытаться в отключённом состоянии замкнуть контакты питания и землю (отключённые в этот момент от блока питания, конечно) — это быстрее разрядит конденсаторы. Если боитесь повредить конденсаторы частыми замыканиями, можно замкнуть через резистор около 10 ом, например — но как правило собственное сопротивление (ESR) не даст им повредить себя таким образом.
Многие мониторы с поддержкой нескольких входов, даже старые, поддерживают управление ими. Чтобы проверить можно использовать программу ControlMyMonitor (windows) или ddccontrol / ddcutil / ddcci-tool (linux).
Эти утилиты послают I2C команду через входной порт дисплея, но можно сделать это и с arduino — т.е. разрезать HDMI кабель, найти DDC-контакты, подключить к arduino через реле (чтобы не работать повторителем при пересылке EDID-блоков), записывать соответствующее значение по адресу, кажется, 0x37.
К сожалению, большинство мониторов принимают команды только от активного источника сигнала поэтому это придётся проделать с обоими входами.
Зато это даёт удобство переключать ввод и экран одной кнопкой — главным образом для того чтобы не возникала ситуация: экран переключился а ввод — нет, в результате можно сделать что-то нежелательное прежде чем ошибка станет очевидной
Другой способ автоматического переключения экрана — завести контакт переключателя/реле на вход компьютера и переключать программно. Это работает медленнее и требует программы с обоих сторон зато проще реализовать, но не уверен, можно ли управлять монитором с телефона. Также можно переключаться по событию подключения/отключения клавиатуры/мыши.
При нехватке выводов рекомендуется использовать I2C расширители вроде PCF8574. Стоят они относительно дёшево, продаются почти везде где есть adruino, есть в виде готовых модулей, библиотеки для них несложно найти, и работают просто и стабильно в большинстве случаев.
Чтение клавиш с аналогового входа обычно работает но может приводить к сложнодиагностируемым ложным срабатываниям из-за всевозможных помех, особенно если провод от кнопки до контроллера достаточно длинный, а резисторы делителя напряжений — в районе десятков-сотен кОм. (В этом случае рекомендуется уменьшинть номинал резисторов)
т.к. светодиоды в результате всё равно похоже не связаны с реле напрямую, мне кажется более целесообразным использовать для них ещё один расширитель, а точнее — два расширителя (или один 16-битный) на 3 кнопки и 15 светодиодов
Если нужно запретить подачу питания одновременно на два реле, можно просто запитать обмотку одного через нормально-замкнутые контакты другого. Это вместе с предыдущим позволит избавиться от (почти?) всей дискретной логики (что упрощает отладку). Правда, всё равно потребуется драйвер вроде ULN2003 т.к. у самой ардуины мощности на питание такого количества реле не хватит.
Не до конца понял чем это лучше чем переключение обычными малогабаритными on-off-on тумблерами.Функционально — примерно то же самое, сам думал о таком варианте. С другой стороны, блок тумблеров (а тут нужно минимум три контактных группы на каждый канал — два провода данных и питание) будет заведомо больше, чем мой пульт. Плюс, нужно будет вручную выдерживать паузу между отключением от одного источника и подключением к другому (иначе при быстром щелчке переключение может не произойти). Ну, и не будет автоматики — у меня контроллер понимает, что, если подключен только телефон, нужно отдать ему звуковую карту, а остальные устройства вырубить.
Чтобы уменьшить потери, можно использовать диоды Шоттки или транзисторы, но электромагнитные реле обычно справляются с задачей надёжнее.Спасибо за информацию.
Обмотку реле нужно не забывать шунтировать диодом в обратном направлении — иначе то что им управляет может выйти из строя в момент отключения из-за энергии накопленной в магнитном поле обмотки.Не знал, спасибо. Если возникнут проблемы — добавлю в следующей версии платы.
Чтобы быстрее сбросить устройство, можно попытаться в отключённом состоянии замкнуть контакты питания и землюДа, можно будет попробовать в будущем. Не пришло в голову — пытался эмулировать то, что происходит при переключении разъёмов.
Многие мониторы с поддержкой нескольких входов, даже старые, поддерживают управление ими.Не знал, спасибо. Надо будет про это почитать. В моём случае это не требуется (бывает, что главный монитор отдан телефону, а на боковых в это время что-то делаю на компьютере мышью), но приятно иметь возможности.
При нехватке выводов рекомендуется использовать I2C расширители вроде PCF8574.Ещё раз спасибо.
В этом случае рекомендуется уменьшинть номинал резисторов
Записал. Пока ничего такого не замечал, но мало ли.
у самой ардуины мощности на питание такого количества реле не хватитУ меня получилось четыре реле, подключенных к ножкам контроллера, и два светодиода. До 200 мА всё вместе не дотягивает.
Спасибо большое. Сам не так давно озадачился этой идеи но пока дальше раздумий дело не дошло. Кыс судя по комментариям очень актуальная тема.
одной южнокорейской компании
А почему тогда Arduino, а не «одна известная отладочная плата»?
для ленивых с хорошей сеткой можно использовать usb-ip
и кучу коробочек с езернетом+юсб(всяких арм зеро плат) как розетки по дому
но это уже совсем другая история
А сколько стоило заказать плату в Китае? Думаю тоже замутить не большой проектик.
А питание сбрасывать у устройства во время переключения обязательно? Все usb демультиплексоры коммутируют только линии данных, получается для питания нужно отдельно городить?
В моём случае переключение только линий данных приводило к тому, что хост, к которому был подключен новый slave (клавиатура, мышь), не замечал факта подключения - или, по крайней мере, замечал нестабильно/не сразу. С обрывом питания на пару секунд - замечал сразу. Не исследовал, что там происходит на физическом уровне, но предполагаю, что при получении питания подчинённое устройство по шине данных посылает какой-то специальный сигнал "я подключилось, инициализируй связь со мной". При переключении подчинённому, видимо, кажется, что ведущий просто перестал слать пакеты, и соответствующий сигнал "инициализируй меня" оно не посылает.
Правильно сначала включать питание, а потом линии данных. Именно так устроен usb разъем - контакты данных там короче и подключаются в последнюю очередь, а отключаются первыми.
Стоит расковырять какой-нибудь китайский kvm и посмотреть схему питания.
У меня есть такой. При переключении визуально питание не пропадает. Устройства продолжают светить диодами. При этом само переключение занимает около 8 секунд. Возможно есть какой-то таймаут в usb шине, после которого устройство сбрасывается само.
Одно не пойму а зачем нужны там реле?
Моя первая Ардуинка: переключатель USB