Reciclaje de un hub usb en un hub de alimentación


Cuando tenemos un número limitado de puertos USB, nos acordamos del fabricante y de quién tomo la decisión de poner tan pocos ( sobre todo si tenemos en cuenta que un hub USB cuesta apenas unos pocos euros y obviamente integrarlo en el equipo aun podria ser mucho menor su coste).

Realmente el funcionamiento de estos dispositivos es muy sencillo, y nos puede salvar de problemas si tenemos conectados muchos dispositivos a nuestro PC, como teclado, ratón, impresora, auriculares, etc.

Los hub normalmente suelen tener entre cuatro u ocho puertos, y suele haber de dos tipos: los que necesitan corriente externa ( por cierto no tan habituales ) y los que son autoalimentados desde el host. Desgraciadamente los autoalimentados suelen están limitados a los 900mA, corriente que es capaz de ofrecer un puerto USB 3.0 ( 500mA en el caso de USB 2.0 ), aunque con los nuevos estándares, la potencia puede ser aún mayor con un cable USB 4 que  puede llegar a gestionar hasta 100W.

La manera en la que estos HUB funcionan es bastante parecida a la que encontramos en el estándar WiFi 4 pues el controlador es el que se encarga de dar permiso a cada dispositivo para poder transmitir la señal hasta el puerto USB, asignando una dirección a cada uno de estos dispositivos conectados al hub. Este controlador va «interrogando» de manera secuencial a cada dispositivo si tiene algo de información que transmitir, donde cada dispositivo recibe todas las señales, pero solo responde a los intercambios que van dirigidos a él. Por ejemplo, primero pregunta al ratón para ver si se ha pulsado algún click. En segundo lugar, pregunta al teclado, y en tercer lugar a la memoria USB que tengamos conectada, y vuelve a iniciar el ciclo.

Actualmente podemos encontrar todo tipo de hub USB en el mercado y con todo tipo de precios, ahora bien, cuando nos disponemos a elegir uno, lo mejor es que nos decidamos siempre por uno de calidad. Podemos encontrar hubs USB desde los 4 o 5 euros y hasta los 100 euros, por lo que hay grandes diferencias entre unos y otros, desde la calidad de los materiales, hasta la controladora que utilizan, el número de conexiones que ofrecen o si cuentan con ciertas características como la tensión adicional.

Por desgracia la vida útil de un hub usb ( especialmente los de calidad media o baja), por lo que tarde o temprano terminaran fallando dejando inservible el dispositivo básicamente porque el controlador USB ( o los controladores en caso de controlar mas de 4 puertos) deja de funcionar quedando inservible el hub .

Pensando precisamente en ofrecerle una segunda a un hub usb averiado que no es reconocido por el host o fallan los dispositivos que se conectan a este, dado que la reparación normalmente será inabordable, una idea interesante, antes de desecharlo, es reusarlo esta vez como hub de alimentación USB , lo cual nos servirá para que en lugar de usar múltiples cargadores para cada dispositivo a cargar o alimentar, usar sólo un único alimentador de 5v usando para ello los conectores disponibles precisamente en un hub USB averiado, dado que físicamente estos seguirán operativos aunque el controlador se haya averiado.

Un conector USB está compuesto por 4 cables:

  1. El que lleva la tensión [+5V]
  2. El negativo del que lleva los datos [D-]
  3. El que lleva los datos [D+]
  4. El negativo de +5V, conectado a chasis o tierra [GND]

Es evidente entender que los cables mas importantes para nuestro cometido son la masa común o GND y los +5V– pues nuestro hub pasara a ser un hub de alimentación , y será por tanto ahí donde pondremos nuestro foco

Para empezar la tarea comenzaremos desmontando la carcasa de hub averiado ( normalmente de aluminio) para lo que utilizaremos para ese cometido alguna herramienta con filo para conseguir desprender el chasis.

Una vez hayamos conseguido desmontar el chasis , quedará expuesto la placa de circuito impreso, donde como se puede apreciar en la imagen ,quedaran claramente visibles los puntos de soldadura de los conectores USB de salida .El de entrada suele ser microUSB o minUSB, por lo solo quedan vsisbles solo los dos puntos de soldadura de la carcasa.

Ahora con un polímetro en modo resistencia debemos localizar la masa común o GND, para lo cual no una buena referencia podría ser los punto de soldadura del conector micro-usb de entrada al hub ( en la foto en la parte derecha los dos puntos blancos a que hay cerca del chasis blanco). Una vez localizada la masa comprobaremos la continuidad de esta con los puntos de soldadura de los conectores USB para localizar el punto – de cada conector USB ( en la foto GND es de los cuatro puntos el de mas de la izquierda y por tanto el de alimentación de +5V seria el la derecha).

Lo normal es que todas las masas (GND) y los +5V de los conectores USB ( incluido el de entrada ) estén interconectados TODOS entre si, lo cual podemos comprobar con el polímetro en modo continuidad, de modo que bastara conectar los 5vDC (y por supuesto GND ) en uno de los conectores para que estén todo los conectores USB alimentados por la alimentación exterior. Una vez nos aseguremos cuales son los pines correctos soldaremos los dos cables procedentes de un cargador de 5V externo cuidando una vez mas que los hilos son los correctos( puede ser cualquier fuente de 5DC reciclada de cualquier dispositivo que no vayamos a usar)

En este punto es crucial no equivocarnos con la polaridad porque podríamos estropear lo que conectemos , así que debemos asegurarnos antes de conectar lo que sea el hub, por lo que antes de conectar algo delicado a este ,conectaremos algo que no temamos perder como por ejemplo un pendrive averiado o un foco usb.

Una vez probado el funcionamiento del «nuevo» HUB con una fuente externa, ya podemos proceder a cerrar el hub, pero antes debemos aislar con cinta aislante la cara de soldaduras donde hemos conectado los cables procedentes de la fuente exterior

Como hemos conectado un cable exterior para encajar la carcasa deberemos practicar un orificio para conducir el cable por ahí.

Otra opción util es usar pegamento para fijar bien el cable y que no se mueva dentro de la carcasa.

Ya solo nos queda introducir la carcasa sobre la base.

Y una vez hayamos terminado de introducir el cuerpo sobre el chasis lo tendremos listo para usarlo

Bajo la opinión del que suscribe esta líneas puede ser útil este nuevo uso del mini-USB incluso mas útil que su uso como un convencional ( dado la gran cantidad de dispositivos existentes actualmente que se alimentan por USB) , pues además ahora ya no tendremos limitaciones a la hora de suministrar alimentación de corriente a todo lo vayamos conectando a el

Diseño en 3D de un contenedor para proyectos electrónicos


Para el modelado 3D, Tinkercad debería ayudarnos ante cualquier diseño inicial de una manera  más sencilla con el proceso de modelado 3D, tanto es así, que incluso los modeladores experimentados lo hacen  explorando las formas de Tinkercad,  pues curiosamente, una herramienta “simple” como Tinkercad puede conducir a formas complejas. Lógicamente detrás de Tinkercad y de cualquier otro programa de modelado 3D está el código, de modo que a medida que arrastra y suelta formas, los algoritmos complejos están trabajando para calcular cómo aparecerán los gráficos en la pantalla, asi que  también debería ser posible crear figuras geométricas directamente mediante código.

Para aquellos que tienen curiosidad sobre el código, OpenSCAD es una herramienta gratuita de software para explorar el modelado 3d desde esa perspectiva,  resultando  mucho mas eficiente   y concisa   en el  proceso de diseño que cualquier otra herramienta gráfica como por ejemplo Tinkercad.

A diferencia de Tinkercad, OpenSCAD no es una aplicación basada en la web de  modo que si esta interesado  en la herramienta   tendrá que descargarla ( OpenSCAD se puede descargar gartis en http://www.openscad.org y está disponible para Windows, Mac OS X y Linux)   e instalarla en su PC para usarla.

La interfaz OpenSCAD es sencilla  en comparación con Tinkercad ,constando  de sólo tres ventanas, siendo la ventana de la izquierda un editor de texto utilizado para ingresar el código.

panel

Con OpenSCAD está diseñando código,pero no se preocupe: escribir código con Open SCAD es similar al uso de HTML en una página web, siendo el código para crear objetos  autoexplicativo  (por ejemplo, el comando del cubo crea cubos, el comando de esfera crea esferas y el comando del cilindro crea cilindros, etc).

Probablemente haya alrededor de 60 comandos en OpenSCAD, muchos de los cuales  permitirán manipular la geometría ,  como por ejemplo mover, rotar, escalar y usar operaciones booleanas para combinar objetos, pero no se preocupe porque  para modelar  la mayoría de la piezas solo necesitaran  unos pocos comandos como  son union , difference, translate, cylinder o  cube.

Las secuencias de comandos en el lenguaje de OpenSCAD se utilizan para crear modelos en 2D o 3D, veamos a continuacion un ejemplo del diseño de una caja para albergar proyectos electronicos completamente personliazable, para lo cual usaremos el poderoso comando hull () de OpenSCAD y el simple offset () para crear el cuadro de proyecto más fácil de todos.

 Es de destacar que conseguiremos esquinas redondeadas fáciles (sin restas complicadas), aunque en términos de concepto, esto puede no ser «fácil», es fácil en el sentido de que es conciso y demuestra algunos conceptos eficientes.

Conceptos utilizados:

  • Subsistema 2d
    • cuadrado : sqare()
    • compensar: offset()
  • Sistema 3d
    • cáscara: hull()
    • extrusión_lineal:lineal_extrude ()
    • rotate_extrude: rotate_extrude ()
    • escala: scale()
    • redimensionar : resize()
  • Módulos
  • Comprensión de listas

Empiece con las paredes

Comenzamos haciendo las paredes usando el subsistema 2d. Pero antes de hacer esto, agreguemos algunas variables globales que usaremos a lo largo del tutorial. Añádalos a su ide de OpenSCAD. (Los comentarios son para el personalizador)

BOX_W = 80; // Ancho de caja
BOX_L = 120; // Longitud de la caja
BOX_H = 12; // Altura de la caja
SCREW_SIZE = 3; // Tamaño de tornillo en mm
CORNER_RADIUS = 3; // Radio de las esquinas
WALL_THICKNESS = 2; // Espesor de la pared

Luego agregue un cuadrado () después de las variables usando el Ancho y Largo

sqare ([BOX_W, BOX_L]);

Redondearemos las esquinas con el comando offset (), colocaremos este offset () antes del cuadrado ().

offset (r = CORNER_RADIUS) sqare ([BOX_W, BOX_L]);

A continuación, eliminaremos la parte interior, con diferencia () y otro cuadrado (). Restaremos el grosor de la pared para eliminar todo menos la pared.

difference(){
    offset (r = CORNER_RADIUS) sqare ([BOX_W, BOX_L]);
    square ([BOX_W-WALL_THICKNESS, BOX_L-WALL_THICKNESS]);
}

Hay dos cosas que tendremos que ajustar. Primero, la pared interior no está bien posicionada, así que centremos ambos cuadrados

difference(){
    offset(r=CORNER_RADIUS) square( [BOX_W, BOX_L] );
    square( [BOX_W-WALL_THICKNESS, BOX_L-WALL_THICKNESS] );
}

Ahora usemos offset () para agregar un radio interno. Para calcular el radio interior restaremos el espesor de la pared del radio de la esquina.

difference(){
    offset(r=CORNER_RADIUS) 
        square( [BOX_W, BOX_L], center=true );
    offset( r= CORNER_RADIUS - WALL_THICKNESS )
        square( [BOX_W-WALL_THICKNESS, BOX_L-WALL_THICKNESS], center=true );
}

Por último, para la pared, solo necesitamos darle altura. Podemos usar lienar_extrude para dar la altura de la caja. Agregue un linear_extrude () usando BOX_H para el parámetro, en la línea arriba de la diferencia.

linear_extrude( BOX_H )

Añadiendo la parte inferior.

Queremos un fondo que tenga bordes redondeados. Aquí es donde entra hull () podemos usar hull () con cuatro esferas () para crear un rectángulo con bordes redondeados. Queremos agregar cuatro, usamos la comprensión de listas para no tener interminables traducciones ().

Primero crearemos una lista de coordenadas.

coordinates = [[0,0], [0,120], [80,120], [80,0]];

Luego usaremos la variable de coordenadas en un bucle for para iterar usando un bucle for.

for (i = coordinates)

Cada vez que pasemos por el bucle agregaremos una esfera y la trasladaremos por las coordenadas. Aquí está el código completo para agregar:

coordinates = [ [0,0],[0,BOX_L],[BOX_W,BOX_L],[BOX_W,0] ];
for (i = coordinates)
    translate(i) sphere(CORNER_RADIUS);

Ahora pongamos todo el objeto en un casco () Observe cómo no necesita agregar corchetes {} ya que el bucle for es el hijo directo del casco (). Como resultado, el casco funciona con los resultados de for ()

coordinates = [ [0,0],[0,BOX_L],[BOX_W,BOX_L],[BOX_W,0] ];
hull()
   for (i = coordinates)
      translate(i) sphere(CORNER_RADIUS);

Necesitaremos trasladar el casco resultante para que quede debajo de la pared. Agregue una traducción sobre el casco () usando la mitad del ancho de la caja y la mitad de la longitud de la caja. Anotemos también $ fn = 25; en la parte superior de nuestro código para que podamos ver las cosas un poco mejor.

translate ([-BOX_W / 2, -BOX_L / 2])

Podemos agregar cilindros para tornillos de la misma manera que hicimos las cuatro esferas. Ya tenemos las coordenadas de la parte inferior, así que podemos usarlas. pero necesitamos moverlos en algunos.

for (i = coordinates)
   translate(i) 
      difference(){
          cylinder(h=BOX_H,r=CORNER_RADIUS);
          cylinder(h=BOX_H,r=CORNER_RADIUS - SCREW_SIZE);       
}

Usé rend (f6) para que podamos ver los agujeros.

A continuación, debemos mover las publicaciones para que coincidan con el cuadro. coloque un translate () delante del bucle for (). Esto moverá todo el «conjunto» a su posición.

traslate ([-BOX_W / 2, -BOX_L / 2])

Eso nos da cilindros, pero están demasiado cerca del borde, podríamos crear un segundo conjunto de coordenadas para el segundo bucle, pero se vuelve bastante complicado. Se vería así:

coordinates = [[0 + 10,0 + 10], [0 + 10, BOX_L = -10], [BOX_W-10, BOX_L-10], [BOX_W-10,0 + 10]];

En su lugar, usemos resize () y scale () para hacer lo mismo.

Primero use un resize () para establecer las cuatro publicaciones en su posición final. Los valores serán el ancho y el largo entre el centro de las publicaciones. Agregue resize () delante del bucle for () para los cilindros. Para empezar, usaremos valores fijos.

resize ([75,110,0])

Puede notar que las publicaciones se mueven pero se hacen más pequeñas (es un pequeño cambio). Podemos usar la escala para restablecer las publicaciones a su tamaño original. Agregue el comando de escala justo antes de la diferencia para los cilindros.

scale ([BOX_W / 75, BOX_L / 110])

Ahora las publicaciones tienen el tamaño original.

Aquí hay un antes y un después. Realmente es difícil ver la diferencia, pero está ahí.

Creemos una variable y veamos el bloque de código completo. Agregar POST_OFFSET = 10; al principio de su código. Tendremos que restar eso en resize () y scale () del ancho y alto del cuadro, usaremos intermediarios para que sea más fácil de entender. También necesitamos dividir SCREW_SiZE por 2 para que represente un radio, no el diámetro dado. Veamos el código:

POST_OFFSET=10;

... otro código ...

p_w = BOX_W - POST_OFFSET;
p_l = BOX_L - POST_OFFSET;

resize([p_w,p_l,0]) // Mueve las publicaciones desde el borde
    translate([-BOX_W/2,-BOX_L/2,0])
       for (i = coordinates)
           translate(i)
           scale([BOX_W/p_w,BOX_L/p_l])
               difference(){
                 cylinder(h=BOX_H,r=CORNER_RADIUS);
                 cylinder(h=BOX_H,r=SCREW_SIZE/2);
               }POST_OFFSET = 10;



¡Eso es todo lo que hay! Hay algunas mejoras que podemos hacer, pero esto funcionará bastante bien por ahora. Aquí está el código final completo para jugar. Algunos cambios importantes que necesitaríamos son:

  • Establecer el suelo (inferior) en WALL_THICKNESS
  • Usando un valor o cálculo separado para el cilindro exterior del poste

Pero tendremos que tener una parte dos para eso ya que esta publicación se está alargando.

Super_Project_Box$fn=25;
BOX_W = 80; // Box Width
BOX_L = 120;// Box Length
BOX_H = 12; // Box Height

SCREW_SIZE = 1.5; // Screw size radius.

CORNER_RADIUS = 3; // Radius of corners
WALL_THICKNESS = 2;// Wall Thickness

POST_OFFSET=10;

linear_extrude( BOX_H )
    difference(){
        offset(r=CORNER_RADIUS) 
            square( [BOX_W, BOX_L], center=true );
        
        offset( r= CORNER_RADIUS - WALL_THICKNESS )
            square( [BOX_W-WALL_THICKNESS, BOX_L-WALL_THICKNESS], center=true );
    }


coordinates = [ [0,0],[0,BOX_L],[BOX_W,BOX_L],[BOX_W,0] ];

translate ( [-BOX_W/2, -BOX_L/2] )
    hull()
    for (i = coordinates)
        translate(i) sphere(CORNER_RADIUS);

p_w = BOX_W - POST_OFFSET;
p_l = BOX_L - POST_OFFSET;

resize([p_w,p_l,0]) // Move the posts in from the edge
    translate([-BOX_W/2,-BOX_L/2,0])
       for (i = coordinates)
           translate(i)
           scale([BOX_W/p_w,BOX_L/p_l])
               difference(){
                 cylinder(h=BOX_H,r=CORNER_RADIUS);
                 cylinder(h=BOX_H,r=SCREW_SIZE/2);
               }

Mas información en en http://www.openscad.info