Pull to refresh

Comments 31

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

Если нужно просто переключать клавиатуру/мышь/порты/дисплей, то лучше взять готовый KVM. Что-то паять имеет смысл, когда надо, как у автора, какой-то нестандартный режим, чтобы разные устройства управлялись независимо.
Совершенно верно. У меня стояла задача поделить два монитора и 4 USB усройства (мышь, клавиатура, вебка и приёмник для гарнитуры) между двумя девайсами (домашний комп и рабочий ноут). Купил у китайцев два KVM по $18 за штуку. Каждый KVM коммутирует 2 HDMI и 2 USB. Самая большая сложность вышла с мониторами — пришлось продумать кабели, т.к. возник разнобой с Display Port на ПК и Display Port на одном из мониторов, но в итоге всё получилось.
У KVM есть проводные пульты с кнопкой и индикацией текущего режима. Сами KVM спрятаны под столом, пульты вынесены на стол.
Работает просто превосходно, и по цене вполне демократично. Пытался найти вариант с одним большим KVM, но такие девайсы и дороже, и по описанию не слишком понятно смогут ли они работать в нужном мне режиме коммутации. Да и наличие двух переключателей даёт дополнительную гибкость — при необходимости я могу отдать ноутбуку только один монитор и клаву с мышью.
У меня был тот же кейс — домашний комп, рабочий ноут. Долго мучался перетыканием разъемов и кабелей, в итоге купил у китайцев на али вот такую штуку. Более чем хватает, цена демократичная.
Я две вот таких взял.
Примерно то же самое, но в комплекте ещё проводной пульт — очень удобно. Вся паутина проводов под столом, а на столе только маленький кругляшок пульта на тоненьком проводе.

Для вас подойдёт обычный kvm, и ничего паять не надо. Например на ali: kvm от ugreen. У самого таких 2 на работе и дома

Если «познаний в схемотехнике не так много» и у нет цели их углубить, то ИМХО проще купить готовый KVM переключатель. Тем более сейчас они продаются во многих магазинах и стоят сравнительно недорого.
я для такой же конфигурации, как и у вас, проблему решил купив usb kvm switch от одного китайского бренда. Теперь переключение периферии между рабочим и домашним компьютером делается одной кнопкой
Удалённое управление рассматривали?
Ай спасибо за FST3125 c 4 Омами, i2c у меня конечно и 74HC406x исправно переключали, но сотни Ом в канале мне не очень нравится, хотя и в три раза дешевле
Рад, что пригодилось. Сам был очень доволен, когда нашёл такой вариант.
Я для I2C использовал одиночный переключатель 74LVC1G3157 — он компактнее.
Cпасибо!
На 74LVC только перехожу с 74HC к которой привык с TTL ещё.

ps LVC ужё требует другой «культуры», использовал недавно одиночный D-триггер LVC в место HC и… не совсем внимательно развел питание с небольшой петлёй в 15-20мм до керамики и оно у меня ловило каждый чих пока не поправил и RC не навесил
Не до конца понял чем это лучше чем переключение обычными малогабаритными on-off-on тумблерами.
Хотя формально 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
и кучу коробочек с езернетом+юсб(всяких арм зеро плат) как розетки по дому
но это уже совсем другая история

А сколько стоило заказать плату в Китае? Думаю тоже замутить не большой проектик.

Примерно 600 рублей за 5 штук, и столько же за доставку почтой.
Позволю себе небольшую критику. Чтобы не было танцев с кабелями типа «так работает, а так нет», сигнальные линии USB нужно разводить как дифференциальную пару, с контролем импеданса, а для коммутации использовать специально заточенные под это микросхемы типа FSUSB42MUX. Кроме того, земляной провод должен иметь максимальную площадь, во избежание ненужных индуктивных выбросов.
Большое спасибо за отсылку к «правильной» микросхеме. В следующий раз обязательно воспользуюсь. Про способ разводки читаю — совершенно новая для меня информация.

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

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

Правильно сначала включать питание, а потом линии данных. Именно так устроен usb разъем - контакты данных там короче и подключаются в последнюю очередь, а отключаются первыми.

Стоит расковырять какой-нибудь китайский kvm и посмотреть схему питания.

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

Одно не пойму а зачем нужны там реле?

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

Sign up to leave a comment.

Articles