discuss@lists.openscad.org

OpenSCAD general discussion Mailing-list

View all threads

BOSL2 sweep help?

BB
Bruno Boettcher
Sun, Mar 10, 2024 2:14 PM

Hello!

i am in the process of building my own pet-tennisball-launcher, and am
playing around with different shapes of friction wheels.

as with the other examples i found, i too am struggling with enough
friction between the rolls and the ball, especially when dealing with
chewed and utterly salivated tennis balls (i have a "deutsche dogge" who is
able to keep the ball in its mouth without you noticing its there, and
she's loving chewing the thing through for hours) ....
So i found one design interesting, which incurvated the wheel around the
ball shape to maximise contact surface...

and that's what i try to achieve, so i reused the last example, and instead
of just linear_extruding it,  (yes, i designed it in 2D ;) ) i begun to
stack it with increasing diameters to fit the ball shape:

// Friction Acceleration Wheel for Tennis Ball with Gripping Profile
include <BOSL2/std.scad>;

// Parameters
wheel_radius = 3.4 + 1.5; // Radius of the wheel, considering a new tennis
ball with diameter of approximately 6.8cm
wheel_thickness = 10; // Thickness of the wheel
shaft_hole_radius = 5; // Radius of the hole for the shaft
shaft_hole_distance = 15; // Distance from the center to the shaft hole
rim_width = 5; // Width of the rim
grip_depth = 1; // Depth of the gripping profile
grip_width = 2; // Width of each gripping ridge
ball_diameter = 68; // Diameter of the tennis ball

//wheel_profile();
%translate([-ball_diameter/2, 0, 0]) sphere(r=ball_diameter/2, $fa=.1);
friction_wheel(r= ball_diameter/2, h = 2/3*ball_diameter,fn = 5);

//------------------- modules and other lib stuff
// Create the wheel profile
// 2D profile of the wheel
module wheel_profile( r=ball_diameter/2, num_teeth = 36,grip_depth =
grip_depth,grip_width=grip_width, fn=80) {
  assert(num_teeth >0,"use a valid number of teeth's");
    // Main wheel body
    circle(r=r, $fn=fn);

    // Gripping profile
    step = 360/num_teeth;
    for (angle = [0:360/num_teeth:360])
    {
        rotate([0,0,angle])
           translate([(r+0.49*grip_depth ) ,0,0 ])
               square([grip_depth,grip_width ], center=true);
    }
}
// 3D friction wheel snugging to the ball
module friction_wheel(r= ball_diameter/2, h = 3/4*ball_diameter,fn = 5,
center = false)
{

  max_z = h/2;
  translate([(center)?-r:0,0,0])
    for(z = [-max_z:2*max_z/fn:max_z])
    {
      delta = r-sqrt(r^2-z^2);
      translate([r+grip_depth, 0, z])
        wheel_profile(r=ball_diameter/2+delta);
    }
}

and now looked for a sweep function....
well i found one in bosl2, but, well... that looks kinda chinese to me :(
so if someone would be kind enough to show me how to put a skin around my
stack of disks?
or tell me what i did wrong in my thought processes

thanks in advance!

--
ciao
Bruno

---==========
http://nohkumado.eu/, http://bboett.free.frhttp://aikido.nohkumado.eu/,
http://bboett.free.fr
http://aikido.zorn.free.fr

Hello! i am in the process of building my own pet-tennisball-launcher, and am playing around with different shapes of friction wheels. as with the other examples i found, i too am struggling with enough friction between the rolls and the ball, especially when dealing with chewed and utterly salivated tennis balls (i have a "deutsche dogge" who is able to keep the ball in its mouth without you noticing its there, and she's loving chewing the thing through for hours) .... So i found one design interesting, which incurvated the wheel around the ball shape to maximise contact surface... and that's what i try to achieve, so i reused the last example, and instead of just linear_extruding it, (yes, i designed it in 2D ;) ) i begun to stack it with increasing diameters to fit the ball shape: ``` // Friction Acceleration Wheel for Tennis Ball with Gripping Profile include <BOSL2/std.scad>; // Parameters wheel_radius = 3.4 + 1.5; // Radius of the wheel, considering a new tennis ball with diameter of approximately 6.8cm wheel_thickness = 10; // Thickness of the wheel shaft_hole_radius = 5; // Radius of the hole for the shaft shaft_hole_distance = 15; // Distance from the center to the shaft hole rim_width = 5; // Width of the rim grip_depth = 1; // Depth of the gripping profile grip_width = 2; // Width of each gripping ridge ball_diameter = 68; // Diameter of the tennis ball //wheel_profile(); %translate([-ball_diameter/2, 0, 0]) sphere(r=ball_diameter/2, $fa=.1); friction_wheel(r= ball_diameter/2, h = 2/3*ball_diameter,fn = 5); //------------------- modules and other lib stuff // Create the wheel profile // 2D profile of the wheel module wheel_profile( r=ball_diameter/2, num_teeth = 36,grip_depth = grip_depth,grip_width=grip_width, fn=80) { assert(num_teeth >0,"use a valid number of teeth's"); // Main wheel body circle(r=r, $fn=fn); // Gripping profile step = 360/num_teeth; for (angle = [0:360/num_teeth:360]) { rotate([0,0,angle]) translate([(r+0.49*grip_depth ) ,0,0 ]) square([grip_depth,grip_width ], center=true); } } // 3D friction wheel snugging to the ball module friction_wheel(r= ball_diameter/2, h = 3/4*ball_diameter,fn = 5, center = false) { max_z = h/2; translate([(center)?-r:0,0,0]) for(z = [-max_z:2*max_z/fn:max_z]) { delta = r-sqrt(r^2-z^2); translate([r+grip_depth, 0, z]) wheel_profile(r=ball_diameter/2+delta); } } ``` and now looked for a sweep function.... well i found one in bosl2, but, well... that looks kinda chinese to me :( so if someone would be kind enough to show me how to put a skin around my stack of disks? or tell me what i did wrong in my thought processes thanks in advance! -- ciao Bruno =========================================== http://nohkumado.eu/, <http://bboett.free.fr>http://aikido.nohkumado.eu/, <http://bboett.free.fr> http://aikido.zorn.free.fr
BB
Bruno Boettcher
Sun, Mar 10, 2024 4:20 PM

Hello again!

stupid me solved it with plain linear_extrude!

// Friction Acceleration Wheel for Tennis Ball with Gripping Profile

// Parameters
wheel_radius = 3.4 + 1.5; // Radius of the wheel, considering a new tennis
ball with diameter of approximately 6.8cm
wheel_thickness = 10; // Thickness of the wheel
shaft_hole_radius = 5; // Radius of the hole for the shaft
shaft_hole_distance = 15; // Distance from the center to the shaft hole
rim_width = 5; // Width of the rim
grip_depth = 1; // Depth of the gripping profile
grip_width = 2; // Width of each gripping ridge
ball_diameter = 68; // Diameter of the tennis ball

//wheel_profile();
%translate([-ball_diameter/2, 0, 0]) sphere(r=ball_diameter/2, $fa=.1);
friction_wheel(r= ball_diameter/2, h = 2/3*ball_diameter,fn = 20);

//------------------- modules and other lib stuff
// Create the wheel profile
// 2D profile of the wheel
module wheel_profile( r=ball_diameter/2, num_teeth = 36,grip_depth =
grip_depth,grip_width=grip_width, fn=80) {
  assert(num_teeth >0,"use a valid number of teeth's");
    // Main wheel body
    circle(r=r, $fn=fn);

    // Gripping profile
    step = 360/num_teeth;
    for (angle = [0:360/num_teeth:360])
    {
        rotate([0,0,angle])
           translate([(r+0.49*grip_depth ) ,0,0 ])
               square([grip_depth,grip_width ], center=true);
    }
}
// 3D friction wheel snugging to the ball
module friction_wheel(r= ball_diameter/2, h = 3/4*ball_diameter,fn = 5,
center = false)
{
 max_z = h/2;
step =
2*max_z/fn;  translate([(center)?-r:0,0,0])
    for(z = [-max_z:step:max_z-step])
    {
      delta = r-sqrt(r^2-z^2);
      dnext = r-sqrt(r^2-(z+step)^2);
      translate([r+grip_depth, 0, z])
      linear_extrude(height=step,
scale=(ball_diameter/2+dnext)/(ball_diameter/2+delta))
        wheel_profile(r=ball_diameter/2+delta);
    }
}

i was so fixated on a sweep function i forgot the basics.... and the result
looks ok:
[image: friction_wheel.png]
i will probably add a taper in and out....

still, a bosl2 based solution, just to learn how that stuff is supposed to
work, would be nice to know! and as usual, if i did something awkward,
please tell me!

ciao
bboett

Am So., 10. März 2024 um 15:14 Uhr schrieb Bruno Boettcher <bboett@gmail.com

:

Hello!

i am in the process of building my own pet-tennisball-launcher, and am
playing around with different shapes of friction wheels.

as with the other examples i found, i too am struggling with enough
friction between the rolls and the ball, especially when dealing with
chewed and utterly salivated tennis balls (i have a "deutsche dogge" who is
able to keep the ball in its mouth without you noticing its there, and
she's loving chewing the thing through for hours) ....
So i found one design interesting, which incurvated the wheel around the
ball shape to maximise contact surface...

and that's what i try to achieve, so i reused the last example, and
instead of just linear_extruding it,  (yes, i designed it in 2D ;) ) i
begun to stack it with increasing diameters to fit the ball shape:

// Friction Acceleration Wheel for Tennis Ball with Gripping Profile
include <BOSL2/std.scad>;

// Parameters
wheel_radius = 3.4 + 1.5; // Radius of the wheel, considering a new tennis
ball with diameter of approximately 6.8cm
wheel_thickness = 10; // Thickness of the wheel
shaft_hole_radius = 5; // Radius of the hole for the shaft
shaft_hole_distance = 15; // Distance from the center to the shaft hole
rim_width = 5; // Width of the rim
grip_depth = 1; // Depth of the gripping profile
grip_width = 2; // Width of each gripping ridge
ball_diameter = 68; // Diameter of the tennis ball

//wheel_profile();
%translate([-ball_diameter/2, 0, 0]) sphere(r=ball_diameter/2, $fa=.1);
friction_wheel(r= ball_diameter/2, h = 2/3*ball_diameter,fn = 5);

//------------------- modules and other lib stuff
// Create the wheel profile
// 2D profile of the wheel
module wheel_profile( r=ball_diameter/2, num_teeth = 36,grip_depth =
grip_depth,grip_width=grip_width, fn=80) {
  assert(num_teeth >0,"use a valid number of teeth's");
    // Main wheel body
    circle(r=r, $fn=fn);

    // Gripping profile
    step = 360/num_teeth;
    for (angle = [0:360/num_teeth:360])
    {
        rotate([0,0,angle])
           translate([(r+0.49*grip_depth ) ,0,0 ])
               square([grip_depth,grip_width ], center=true);
    }
}
// 3D friction wheel snugging to the ball
module friction_wheel(r= ball_diameter/2, h = 3/4*ball_diameter,fn = 5,
center = false)
{

  max_z = h/2;
  translate([(center)?-r:0,0,0])
    for(z = [-max_z:2*max_z/fn:max_z])
    {
      delta = r-sqrt(r^2-z^2);
      translate([r+grip_depth, 0, z])
        wheel_profile(r=ball_diameter/2+delta);
    }
}

and now looked for a sweep function....
well i found one in bosl2, but, well... that looks kinda chinese to me :(
so if someone would be kind enough to show me how to put a skin around my
stack of disks?
or tell me what i did wrong in my thought processes

thanks in advance!

--
ciao
Bruno

---==========
http://nohkumado.eu/, http://bboett.free.frhttp://aikido.nohkumado.eu/,
http://bboett.free.fr
http://aikido.zorn.free.fr

Hello again! stupid me solved it with plain linear_extrude! ``` // Friction Acceleration Wheel for Tennis Ball with Gripping Profile // Parameters wheel_radius = 3.4 + 1.5; // Radius of the wheel, considering a new tennis ball with diameter of approximately 6.8cm wheel_thickness = 10; // Thickness of the wheel shaft_hole_radius = 5; // Radius of the hole for the shaft shaft_hole_distance = 15; // Distance from the center to the shaft hole rim_width = 5; // Width of the rim grip_depth = 1; // Depth of the gripping profile grip_width = 2; // Width of each gripping ridge ball_diameter = 68; // Diameter of the tennis ball //wheel_profile(); %translate([-ball_diameter/2, 0, 0]) sphere(r=ball_diameter/2, $fa=.1); friction_wheel(r= ball_diameter/2, h = 2/3*ball_diameter,fn = 20); //------------------- modules and other lib stuff // Create the wheel profile // 2D profile of the wheel module wheel_profile( r=ball_diameter/2, num_teeth = 36,grip_depth = grip_depth,grip_width=grip_width, fn=80) { assert(num_teeth >0,"use a valid number of teeth's"); // Main wheel body circle(r=r, $fn=fn); // Gripping profile step = 360/num_teeth; for (angle = [0:360/num_teeth:360]) { rotate([0,0,angle]) translate([(r+0.49*grip_depth ) ,0,0 ]) square([grip_depth,grip_width ], center=true); } } // 3D friction wheel snugging to the ball module friction_wheel(r= ball_diameter/2, h = 3/4*ball_diameter,fn = 5, center = false) { max_z = h/2; step = 2*max_z/fn; translate([(center)?-r:0,0,0]) for(z = [-max_z:step:max_z-step]) { delta = r-sqrt(r^2-z^2); dnext = r-sqrt(r^2-(z+step)^2); translate([r+grip_depth, 0, z]) linear_extrude(height=step, scale=(ball_diameter/2+dnext)/(ball_diameter/2+delta)) wheel_profile(r=ball_diameter/2+delta); } } ``` i was so fixated on a sweep function i forgot the basics.... and the result looks ok: [image: friction_wheel.png] i will probably add a taper in and out.... still, a bosl2 based solution, just to learn how that stuff is supposed to work, would be nice to know! and as usual, if i did something awkward, please tell me! ciao bboett Am So., 10. März 2024 um 15:14 Uhr schrieb Bruno Boettcher <bboett@gmail.com >: > Hello! > > i am in the process of building my own pet-tennisball-launcher, and am > playing around with different shapes of friction wheels. > > as with the other examples i found, i too am struggling with enough > friction between the rolls and the ball, especially when dealing with > chewed and utterly salivated tennis balls (i have a "deutsche dogge" who is > able to keep the ball in its mouth without you noticing its there, and > she's loving chewing the thing through for hours) .... > So i found one design interesting, which incurvated the wheel around the > ball shape to maximise contact surface... > > and that's what i try to achieve, so i reused the last example, and > instead of just linear_extruding it, (yes, i designed it in 2D ;) ) i > begun to stack it with increasing diameters to fit the ball shape: > > ``` > // Friction Acceleration Wheel for Tennis Ball with Gripping Profile > include <BOSL2/std.scad>; > > // Parameters > wheel_radius = 3.4 + 1.5; // Radius of the wheel, considering a new tennis > ball with diameter of approximately 6.8cm > wheel_thickness = 10; // Thickness of the wheel > shaft_hole_radius = 5; // Radius of the hole for the shaft > shaft_hole_distance = 15; // Distance from the center to the shaft hole > rim_width = 5; // Width of the rim > grip_depth = 1; // Depth of the gripping profile > grip_width = 2; // Width of each gripping ridge > ball_diameter = 68; // Diameter of the tennis ball > > //wheel_profile(); > %translate([-ball_diameter/2, 0, 0]) sphere(r=ball_diameter/2, $fa=.1); > friction_wheel(r= ball_diameter/2, h = 2/3*ball_diameter,fn = 5); > > //------------------- modules and other lib stuff > // Create the wheel profile > // 2D profile of the wheel > module wheel_profile( r=ball_diameter/2, num_teeth = 36,grip_depth = > grip_depth,grip_width=grip_width, fn=80) { > assert(num_teeth >0,"use a valid number of teeth's"); > // Main wheel body > circle(r=r, $fn=fn); > > // Gripping profile > step = 360/num_teeth; > for (angle = [0:360/num_teeth:360]) > { > rotate([0,0,angle]) > translate([(r+0.49*grip_depth ) ,0,0 ]) > square([grip_depth,grip_width ], center=true); > } > } > // 3D friction wheel snugging to the ball > module friction_wheel(r= ball_diameter/2, h = 3/4*ball_diameter,fn = 5, > center = false) > { > > max_z = h/2; > translate([(center)?-r:0,0,0]) > for(z = [-max_z:2*max_z/fn:max_z]) > { > delta = r-sqrt(r^2-z^2); > translate([r+grip_depth, 0, z]) > wheel_profile(r=ball_diameter/2+delta); > } > } > ``` > > and now looked for a sweep function.... > well i found one in bosl2, but, well... that looks kinda chinese to me :( > so if someone would be kind enough to show me how to put a skin around my > stack of disks? > or tell me what i did wrong in my thought processes > > thanks in advance! > > -- > ciao > Bruno > > =========================================== > http://nohkumado.eu/, <http://bboett.free.fr>http://aikido.nohkumado.eu/, > <http://bboett.free.fr> > http://aikido.zorn.free.fr > -- ciao Bruno =========================================== http://nohkumado.eu/, <http://bboett.free.fr>http://aikido.nohkumado.eu/, <http://bboett.free.fr> http://aikido.zorn.free.fr