Diseño de un disco cicloidal con OpenSCAD

Se llama "cicloide" a la curva descrita por un punto de la circunferencia cuando ésta rueda sin resbalar sobre una recta. Si el punto que traza la línea no está en la periferia sino dentro, hablamos de una "cicloide reducida".

Pero a nosotros nos interesa que el círculo que dibuja la línea vaya girando sobre otro círculo en vez de hacerlo sobre una recta. La figura resultante es útil para el diseño de reductores cicolidales, que son maravillosos por su simplicidad, fiabilidad, rendimiento y suavidad de funcionamiento. A la derecha tienes una foto de un reductor de este tipo.

En la red encontré un análisis geométrico de estos discos que parece muy bueno: Diseño parametrizado de serie de reductores cicloidales. También se pueden encontrar video-tutoriales sobre cómo diseñar discos cicloidales con diversos programas, pero hay que tener cuidado porque alguno explica cómo hacer una cosa que parece un disco cicloidal pero no lo es realmente,

La página http://www.otvinta.com/cycloid.html genera las ecuaciones para una preforma del disco, y tiene tutoriales para terminar de diseñarlo. También tiene muchos enlaces relacionados con reductores y transmisiones mecánicas.

Finalmente, este vídeo explica una idea de cómo dibujarlo casi a mano: propone ir situando una colección de puntitos que al unirlos dan como resultado el disco.

Con OpenSCAD no sé cómo dibujar algo a partir de fórmulas, pero siempre se puede generar una secuencia de puntos con una hoja de cálculo y pedirle al programa que los dibuje con la primitiva polygon(). Pero en cada prueba hay que cambiar los parámetros en la hoja de cálculo, generar los puntos, llevarlos a OpenSCAD y ver los resultados. Con la de cambios que hago yo resultaría tedioso.

No obstante hay una forma más directa de abordar el problema: cogemos un círculo mayor de lo que nos interesa, y borramos lo que le sobra. En la foto del reductor de arriba hay un disco de 11 lóbulos que es el disco cicloidal, movido por un eje excéntrico que le hace dar vueltas en el centro de un hueco que tiene 12 rodillos alrededor, formando una jaula. En cada vuelta del eje excéntrico, el disco cicloidal habrá girado 360º/11 obligado por los rodillos de la periferia que van empujando los lóbulos.

Dejando aparte la mecánica, geométricamente da igual mover el disco dentro de la jaula de rodillos, que mover éstos alrededor de un disco fijo, y es lo que propongo hacer con OpenSCAD: dibujo un círculo del diámetro de la jaula de rodillos, y le voy restando el conjunto de todos los rodillos de la jaula. Cada uno de esos rodillos describe un círculo cuyo radio es la excentricidad que hemos decidido en nuestro diseño. A su vez, el conjunto de los rodillos va girando de manera que al completar una vuelta completa del eje habrá avanzado en este caso 360º/11.

Para terminar, aquí tienes el código que genera el disco de la ilustración que aparece sobre estas líneas:

$fs = 1; // tamaño de las facetas: con 0.1 queda precioso, pero tarda mucho

$fa = 1;


linear_extrude(10) // 10mm de espesor

difference() {

// disco para una reducción 11:1 con una jaula de rodillos de 72mm de diámetro

// 2mm de excentricidad, rodillos de 8mm y 0.1mm de holgura

disco_cicloide(11, 72, 2, 8, 0.1);


// agujeros de servicio: primero uno de 15mm para el eje excéntrico

circle(d = 15);

// y 8 agujeros de 10mm para los bujes, a 20mm del centro

for ( angulo = [ 0 : 360/8 : 360 -1e-6 ] )

rotate(angulo)

translate([20, 0])

circle(d = 10);

}


module disco_cicloide(reduccion, diametro, excentricidad, rodillos, holgura=0) {

difference() {

// partimos de un círculo del tamaño de la jaula de rodillos

circle(d = diametro);

// y le vamos restando los rodillos con 200 iteraciones

// (cuantas más, mayor calidad y tiempo de proceso)

for ( i = [0 : 1/200 : 1-1e-6 ] )

// el disco se mueve 360º/reducción en cada vuelta del eje

// pero aquí el disco está quieto y gira la jaula de rodillos

rotate(i*360/reduccion)

// traslación debida al movimiento excéntrico del disco

// pero el disco sigue quieto y se mueven los rodillos

translate(excentricidad * [cos(i*360), sin(i*360)])

// esto es la jaula de rodillos

for ( paso = [0 : 360/(reduccion+1) : 360 -1e-6 ] )

rotate(paso)

translate([diametro/2, 0])

circle(d = rodillos + 2 * holgura);

}

}