¿Alguna vez notaste cómo, en el loco mundo de la tecnología, siempre hay ese pequeño proyecto peculiar que intenta resolver un problema tan nicho que sus únicos competidores podrían ser un destornillador zurdo y un despertador de homenaje?
Utilizo dos computadoras diferentes en mi flujo de trabajo diario y comparto un solo teclado/par de mouse entre ellas. Probar varias cajas de conmutación USB que se encuentran en Amazon me hicieron darme cuenta de que todos sufren problemas similares: lleva un tiempo cambiar, el proceso es bastante torpe cuando se trata de encontrar el botón y, francamente, simplemente no mejora con el tiempo.
Todo lo que quería era una forma de usar un atajo de teclado para cambiar rápidamente las salidas, emparejadas con la capacidad de hacer lo mismo moviendo mágicamente el puntero del mouse entre los monitores. ¡Este proyecto le permite hacer ambas cosas, incluso si sus computadoras ejecutan diferentes sistemas operativos!
El dispositivo actúa como intermediario entre su teclado/mouse y la computadora, estableciendo y manteniendo conexiones con ambas computadoras a la vez. Luego elige dónde reenviar el mouse y las teclas, dependiendo de su selección. El teclado sigue el mouse y viceversa, por lo que simplemente arrastrar el mouse al otro escritorio cambiará ambos.
Para que el cursor del mouse salte mágicamente, el descriptor del informe HID del mouse se cambió para usar coordenadas absolutas y luego los informes del mouse (que aún vienen en movimientos relativos) se acumulan internamente, manteniendo la cuenta precisa en la posición.
Cuando intenta salir del área del monitor en la dirección del otro monitor, mantiene la coordenada Y y cambia el máximo x por una x mínima, luego voltea las salidas. Esto asegura que el cursor aparezca sin problemas a la misma altura en el otro monitor, mejorando la percepción de una transición suave.

Arrastrando el mouse de Mac a Linux cambia automáticamente las salidas.
El interruptor real ocurre en el mismo momento en que una flecha deja de moverse y el otro comienza.
Actuando como un host USB y consultando su teclado periódicamente, busca una tecla de acceso rápido preconfigurada en el informe HID (generalmente bloqueo CTRL + Caps para mí). Cuando se encuentra, reenviará todos los caracteres posteriores a la otra salida.
Para tener una indicación visual qué salida está utilizando en cualquier momento dado, puede reutilizar los LED de teclado y hacer que proporcionen los comentarios necesarios.
También recuerda el estado LED para cada computadora, por lo que puede obtener exactamente cómo lo dejó.

Para evitar el desajuste de la versión y los problemas de ruta informados al construir, así como para evitar que tenga que descargar un SDK grande, el proyecto ahora envuelve mínimo Pico SDK y TinyusB.
En un sistema Debian/Ubuntu, asegúrese de instalarlos:
sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential
Deberías poder construir ejecutando:
cmake -S . -B build
cmake --build build
Además, para reconstruir la interfaz de usuario web WebConfig/ y ejecutar ./render.py , necesitará instalado Jinja2.
Para reconstruir el disco, verifique el disco/ carpeta y ejecute ./create.sh , ajuste a su sistema si es necesario. Necesitará dosfstools (para proporcionar mkdosfs),
Alternativamente, puede usar las imágenes preconstruidas. Desde la versión 0.6 solo hay una sola imagen universal. Necesita el archivo .uf2 que simplemente copie al dispositivo de una de las siguientes maneras:
Opción 1 - (firmware 0.6 y posterior) Coloque el dispositivo en "modo de configuración" presionando simultáneamente Ctrl izquierdo + desplazamiento derecho + C + O. Dispositivo en el que su teclado está conectado se reiniciará y se convertirá en una unidad USB llamada "Deskhop". Todo lo que necesita hacer es copiarle el archivo .uf2. Una vez que se verifica la imagen, el dispositivo flasheará y reiniciará, luego proceda a actualizar la otra placa. Durante esta operación, el LED parpadeará. Una vez terminado, escribirá flash y reiniciará, completando la operación.
Nota : esta no es una unidad USB genérica real, no puede usarla para copiar archivos.
Opción 2 : con el gestor de arranque ROM: mantenga presionado el botón In -Board mientras conecta cada PICO y copie el UF2 a la unidad flash que aparece. Las imágenes más tarde de 0.6 admiten manteniendo el botón sin tener que jugar alrededor de la fuente de alimentación, pero el "botón de mantenimiento mientras se conecta" siempre debe funcionar, independientemente del estado del dispositivo.
¿Alguna vez intentó mover ese control deslizante de video a una posición específica, pero su mouse se mueve demasiado nervioso y de repente está moviendo su mano de manera muy cuidada como si estuvieras 5 y jugando "operación" de nuevo?
Presione Ctrl + Right ALT derecha para alternar un modo de ratón lento. El puntero del mouse disminuirá considerablemente, lo que le permitirá realizar el trabajo de precisión más fino y aún así hacer que su mouse se mueva normalmente presionando rápidamente las mismas teclas nuevamente.
Si desea bloquearse en una pantalla, use RIGHT CTRL + K . Esto asegurará que no salga accidentalmente su pantalla actual. Para apagar, presione el mismo combo de tecla nuevamente.
Puede bloquear ambas computadoras a la vez usando RIGHT CTRL + L . Para utilizar esta función, primero configure el sistema operativo para cada salida en config (ya que los atajos son diferentes).
Si estás jugando, existe la posibilidad de que tu juego no funcione correctamente con el modo de mouse absoluto. Para abordar ese problema, se introduce un modo de juego , alternado por LEFT CTRL + RIGHT SHIFT + G . Cuando está en modo de juego, está bloqueado en la pantalla actual y su mouse se comporta como un mouse relativo estándar. Esto también debe solucionar varios problemas de máquina virtual, actualmente sistemas operativos no compatibles, etc.
Supuestamente integrado para evitar que la computadora ingrese en espera, pero la verdad es decir: es divertido verlo. Off Fause , hará que el puntero del mouse se rebote alrededor de la pantalla como una bola de pong. Cuando está habilitado, se activa después de un período de inactividad definido en el encabezado de configuración del usuario y se apaga automáticamente tan pronto como envíe cualquier salida hacia esa pantalla.
Ejemplo de uso potencial: tengo un muelle USB con buggy que no reanudará el video de Standby, por lo que no permitir que duerma puede ser una solución útil.
El circuito se basa en dos tableros Pico Raspberry Pi, elegidos porque son baratos (4.10 € / pc), se pueden soldar a mano y la mayoría de los proveedores los tienen en stock.
Los PICO están conectados usando UART y separados por un aislador digital de doble canal ADUM1201 ADUM1201 (~ 3 €) o una TI ISO7721DR de TI mucho más barata, más rápida y compatible con PIN (~ 1.5 €), que es la opción preferida.
Si bien normalmente no tienen soporte para el USB dual, gracias a un proyecto increíble donde USB se implementa utilizando la magia IO programable que se encuentra en RP2040, hay soporte para que actúe tanto como un host como un dispositivo.
Para mantener las cosas lo más simples posible para las construcciones de bricolaje, los rastros se mantuvieron en un lado y la cantidad de piezas mantenidas al mínimo.

Las líneas diferenciales USB D+/D- deben tener una longitud idéntica, pero son ligeramente asimétricas a propósito para contrarrestar la diferencia de longitud en el GPIO de GPIO Pico PCB en sí, por lo que las longitudes generales deben coincidir.
ZD (impedancia diferencial) se dirige a 90 ohmios (logró obtener ~ 107, lo suficientemente cerca :)).
El grosor está diseñado para ser de 1,6 mm para que el ajuste de ajuste Snap funcione como se esperaba.
Hay 2 versiones de la PCB (no hay diferencias importantes para el usuario). Original (V1.0) es más fácil de soldar y ensamblar, mientras que V1.1 ofrece algunas actualizaciones como:
Esta versión es un poco más difícil de soldar a mano debido a las pequeñas resistencias de supresores de voltaje transitorio y 0805, pero es totalmente factible. En teoría, se pueden omitir los televisores (no recomendados) y seguirá funcionando.
Próximamente: el tablero con rp2040 desnudos que no necesita PICOS, es más pequeño y más conveniente.
Como no soy muy bueno con 3D, el caso es simple y básico, pero hace el trabajo. Debería ser fácil de imprimir, usa ~ 33 g de filamento y toma un par de horas.
Los movimientos horizontales de PCB son contrarrestados por clavijas deslizadas a través de agujeros y movimientos verticales mediante orquestas ajustadas en los lados, no se requieren tornillos. El caso recibió un ligero rediseño para presentar el logotipo y dos orejetas adicionales de ajuste a presión, por lo que proporciona un mejor sello.
Los conectores micro USB en ambas placas se compensan desde el lado de la caja, por lo que los agujeros ligeramente más grandes deberían permitir que los cables alcancen.
La tapa es de un diseño de ajuste instantáneo, con una ranura de destornillador para abrir. Las marcas en la parte superior están empotradas y se pueden terminar con p. Ej.

| Componente | Cantidad | Precio unitario / € | Precio / € |
|---|---|---|---|
| Raspberry pi pico | 2 | 4.10 | 8.20 |
| ADUM1201BRZ | 1 | 2.59 | 2.59 |
| Cap 1206 SMD 100NF | 2 | 0.09 | 0.18 |
| USB-A PCB Conn. | 2 | 0.20 | 0.40 |
| Encabezados 2.54 1x03 | 2 | 0.08 | 0.16 |
| Total | 11.53 |
Se puede usar TI ISO7721DR en lugar del ADUM: es compatible con PIN, mucho más barato y con mejores especificaciones.
| Componente | Parte | Cantidad | Precio unitario / € | Precio / € |
|---|---|---|---|---|
| U1, U2 | Raspberry pi pico | 2 | 4.10 | 8.20 |
| J1, J4 | USB-A PCB Conn. | 2 | 0.20 | 0.40 |
| U4 | Ti ISO7721DR | 1 | 1.40 | 1.40 |
| ( O ADUM1201BRZ) | ||||
| C1, C2 | Cap 0805 SMD 100NF | 2 | 0.09 | 0.18 |
| R1, R2, R3, R4 | Res 0805 SMD 27OHM | 4 | 0.03 | 0.12 |
| U3, U5 | Tpd4e1u06dbvr | 2 | 0.31 | 0.62 |
| C3, C4 | CAP 4.7UF SMD 0805 | 2 | 0.07 | 0.14 |
| J2, J3 | Encabezados 2.54 1x03 | 2 | 0.08 | 0.16 |
| Total | 11.22 |
El conector USB-A puede ser MOLEX MX-67643-0910 o uno más barato/presupuesto que comparta las mismas dimensiones.
Pasos adicionales:
Si tiene algo de experiencia con la electrónica, no necesita esto. Sin embargo, algunos de ustedes no, y en ese caso este video podría ayudarlo a guiarlo a través del proceso. Tenga en cuenta que, después de soldar, debe limpiar el flujo de la PCB para evitar la corrosión.
El proceso estándar para hacerlo es usar alcohol isopropílico y un cepillo de dientes viejo. ¿Pero adivina qué? No estoy poniendo mi viejo cepillo de dientes en línea, por lo que solo tendrás que improvisar esa parte :)

[Nota] La guía de ensamblaje de video cubre PCB V1.0. La versión revisada es muy similar y el procedimiento es básicamente el mismo.
Configuración
Left ShiftLeft Ctrl + Right Shift + C + O - Ingrese el modo de configuraciónRight Shift + F12 + D - eliminar la configuración flashRight Shift + F12 + Y - Guardar desplazamiento del interruptor de pantallaUso
Right CTRL + Right ALT - Alternar el modo del mouse más lentoRight CTRL + K - bloquear/desbloquear la conmutación de escritorio del mouseRight CTRL + L - Bloquear ambas salidas a la vez (establecer el sistema operativo de salida antes, ver accesos directos a continuación)Left ShiftLeft CTRL + Right Shift + G - Modo de juego de alternación (bloquear en la pantalla, actuar como mouse estándar)Left CTRL + Right Shift + S - Habilitar ScreensaverLeft CTRL + Right Shift + X - Deshabilitar ScreensaverLeft CTRL + Caps Lock - Cambio entre salidasNota: Algunos teclados no envían ambos turnos al mismo tiempo correctamente, por eso se cambió el atajo: trabajar para todos. Disculpas por la confusión.
No es necesario este paso, pero puede ser útil si sus pantallas no están perfectamente alineadas o difieren de tamaño. El objetivo es que el puntero del mouse salga exactamente a la misma altura.

Simplemente estacione el mouse en la pantalla más grande a la altura de la pantalla más pequeña/inferior (ilustrada) y presione Right Shift + F12 + Y . Su LED (y el bloqueo de CAPS) debe parpadear en confirmación.
Repita para el borde inferior (si está por encima del borde de la pantalla más grande). Esto se guardará para flashear y debe mantener este valor de calibración a partir de ahora.
Windows y Mac tienen problemas con múltiples pantallas y posicionamiento absoluto, por lo que se necesitan soluciones (aún experimentales). Hay una mejor solución en construcción, pero por ahora debe establecer el sistema operativo para cada salida y número de pantallas.
Sus pantallas principales deben estar en la (s) pantalla (s) secundaria y secundaria en los bordes. Para configurar las opciones reales, abra la página de configuración web para su dispositivo.

Comenzando con FW 0.6, se introduce un modo de configuración mejorado. Para configurar su dispositivo, siga estas instrucciones:


P: ¿Por qué no simplemente crear una buena página web en línea como VIA en lugar de lidiar con esta extraña asunto de unidad USB? R: Cargar JavaScript desde una ubicación en línea aleatoria que interactúa con sus dispositivos de entrada es un riesgo de seguridad potencial. La página web de configuración es solo local y nada se carga externamente.
P: El cromo en Linux no funciona. R: Probablemente necesite ajustar /los permisos de desarrollo o crear un archivo de reglas UDEV correspondiente y asegurarse de que su usuario esté en el grupo correcto, así:
/etc/udev/rules.d/99-deskhop.rules
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1209", ATTRS{idProduct}=="c000", GROUP="plugdev", MODE="0660"
Tenga en cuenta que la página web de configuración no es "extraña" debido a la ofuscación deliberada, es autodecompresante debido al almacenamiento muy limitado. Toda la fuente está 100% abierta y es parte de este repositorio. Se le anima a reconstruir todo usted mismo.
Cuando conecte un nuevo periférico USB, la placa flasheará el LED dos veces e instruye a la otra placa que haga lo mismo. De esta manera, puede probar si USB y la comunicación saliente funcionan para cada placa.
Haga esta prueba enchufando primero el teclado en un lado y luego en el otro. Si todo está bien, los LED parpadearán rápidamente de un lado a otro en ambos casos.
Faltan algunas características a propósito, a pesar del hecho de que el dispositivo sea más fácil de usar o más simple de configurar. Aquí hay un desglose rápido de estas decisiones:
Esto todavía no garantiza nada, pero creo que es un conjunto razonable de reglas básicas para mantenerlo a salvo y protegido.
Seguro. Se recomienda tener un aislador, pero debería funcionar sin él.
El movimiento del mouse se realiza en el espacio de coordenadas abstractas y su computadora descubre cómo eso corresponde con la pantalla física, por lo que debería funcionar.
No estoy vendiendo nada, este es solo un proyecto de pasatiempo personal y no comercial.
[ACTUALIZACIÓN] Parece que puede ordenarlo en la Cantidad de 1 (para PCB, PCB ensamblado o un dispositivo completamente ensamblado) desde Elecrow Si sigue este enlace según lo informado por los usuarios, su placa llegará en blanco y debe escribir el firmware usted mismo.
[ACTUALIZACIÓN2] - Nunca le pregunté a Elecrow por nada, pero hace un par de días se ofrecieron a patrocinar el proyecto con un pequeño presupuesto que se utilizará para futuras creaciones de prototipos de la junta. Dado que mi objetivo es crear una mejor tabla con más de 2 salidas, etc., creo que los servicios de creación de prototipos podrían ser beneficiosos para el proyecto.
Sí, la idea era hacer que se comportara como si fuera una sola computadora.
Debería funcionar. Después de una actualización reciente de FW, el soporte para los receptores combinados debería ser mucho mejor.
Debería funcionar: probé un mouse inalámbrico Anker con un receptor separado y eso funcionó bien.
Echa un vistazo a la wiki de solución de problemas que podría tener algunas respuestas.
Hay varias alternativas de software que puede usar si eso funciona en su situación particular.
Entonces, ¿cuál es el trato con todo el entusiasmo? No puedo creerlo, ¡por favor permítame agradecerles a todos! Nunca he esperado este tipo de interés en un proyecto personal simple, por lo que las características iniciales son bastante básicas (al igual que mis habilidades de cocina) y en su mayoría cubren mi propio USECase. Estén atentos para las actualizaciones de firmware que deberían traer una compatibilidad más amplia del dispositivo, más funciones y menos errores. Como este es un proyecto de pasatiempo, agradezco su comprensión de ser limitado por el tiempo y prometo hacer lo mejor que pueda.
Características planificadas:
Trabajar en una versión de Lite que proporciona funcionalidad básica con una sola placa PICO W, reduciendo aún más el costo y permitiéndole probarlo incluso sin hardware o PCB agregado.
Las encuestas del ratón ahora deberían funcionar a 1000 Hz (las salsas en el gráfico son doliendo el brazo de todo el movimiento :-)):

No estoy haciendo esto con fines de lucro ni ninguna otra razón, excepto para tratar de ayudar a las personas creando un mejor entorno de trabajo para todos. Si desea apoyar más el proyecto, considere hacer una pequeña donación hacia una organización benéfica como los médicos sin fronteras .
¡Permítame agradecer a todos los que lo ayudaron o considerarlo!
Solicito que cualquier persona que intente construir este proyecto comprenda y reconoce que no soy responsable de ninguna lesión, daños u otras consecuencias. Su seguridad es importante, y le recomiendo que aborde este proyecto cuidadosamente, tome las precauciones necesarias y asume la responsabilidad personal de su bienestar durante todo el proceso. Por favor, no sean electrocutados, quemados, estresados o enojados. ¡Diviértete y disfruta!
¡Feliz cambio!