No description
Find a file
2026-05-17 22:45:32 -05:00
.gitignore Lapped socket experiments in wings2.scad 2026-05-12 13:23:37 -05:00
AGENTS.md Lapped socket experiments in wings2.scad 2026-05-12 13:23:37 -05:00
README.md Lapped socket experiments in wings2.scad 2026-05-12 13:23:37 -05:00
wings.scad Move clevis joint to wings3.scad 2026-05-17 16:30:35 -05:00
wings2.scad Move clevis joint to wings3.scad 2026-05-17 16:30:35 -05:00
wings3.scad Improve clevis design and setup 4 segment wing prototype 2026-05-17 22:45:32 -05:00

Wings

OpenSCAD experiments for a small 3D-printable folding bird wing. The intended use is a wearable headpiece, so the design prioritizes light weight, compact folding, and simple actuation.

The current goal is a wing-like tucking/folding motion, not a flapping motion.

Current File

The main working design file is:

wings2.scad

Units are millimeters.

wings.scad is now a reference file that preserves earlier explorations:

clevis-style wire-pin joint
animated kinematic layout
original rounded linkage pin/socket test

Current Prototype

wings2.scad is the current focused joint implementation. It uses a lapped pin/socket joint instead of a clevis:

  • Blue part: pin-side segment with a lower thin tongue, snap pin, and raised open stop.
  • Orange part: socket-side segment with an upper thin tongue and matching socket.
  • The two parts are rendered separated for printing, not interlocked.
  • The joint stack is 3mm thick, split into a 1mm pin-side layer and 2mm socket-side layer.

The intent is to keep both segments in the same motion plane while using a printable snap pin/socket connection.

Important Parameters

Core segment dimensions:

joint_length = 30;
joint_width = 5;
joint_thickness = 3.0;

pin_side_thickness = 1.0;
socket_side_thickness = joint_thickness - pin_side_thickness;

tongue_length = 10;
socket_angle = 130;
print_spacing = 12;

Snap pin/socket tuning:

pin_stem_radius = 1.40;
pin_lip_radius = 1.60;
socket_stem_clearance = socket_clearance;
socket_lip_clearance = 0.10;
pin_total_height = socket_side_thickness - socket_clearance;

The stem clearance is intentionally looser than the lip clearance. That keeps rotation clearance reasonable after snapping, while making the snap feel more positive.

Open stop tuning:

open_stop_angle = 150;
open_stop_extension_length = 10.5;
open_stop_length = 4.0;
open_stop_width = 1.5;
open_stop_clearance = 0.10;

The current idea is:

minimum folded angle: controlled mostly by tongue length and body collision
maximum open angle: controlled by the raised open stop

Printing Layout

The current scene renders both pieces separated:

  • The pin-side segment is printed in its normal orientation.
  • The socket-side segment is moved down by print_spacing.
  • The socket-side segment is flipped so its broad face sits on the bed.

This avoids exporting the parts in their assembled/interlocked state.

Design Direction

The current preferred mechanism is:

printed wing segments
lapped pin/socket joints
tendon actuation
geometry-defined hard stops
optional helper linkages if needed

The pin/socket joint is being revisited because it prints simply and can keep the segments in-plane when the joint stack is split into upper and lower tongue layers.

The stop strategy is currently simple and external:

one segment extends its thin tongue past the pivot
that extension carries a raised stop block
the neighboring raised body hits the stop near the open limit
the folded limit is tuned with tongue/body length and overlap

OpenSCAD Conventions

This project intentionally uses a readable, learning-friendly OpenSCAD style.

Write code top-down:

  1. Parameters
  2. Scene switches
  3. Scene composition
  4. Assemblies
  5. Sketch drawing modules, if present
  6. Reusable shapes
  7. Helper functions

Always use braces for module children.

Prefer this:

linear_extrude(height = thickness) {
    hull() {
        translate([end_radius, 0]) {
            circle(r = end_radius);
        }

        translate([length - end_radius, 0]) {
            circle(r = end_radius);
        }
    }
}

Avoid this:

linear_extrude(height = thickness)
    hull() {
        translate([end_radius, 0])
            circle(r = end_radius);
    }

Rendering

From this directory, render the current scene with:

openscad -o /tmp/opencode/wings2-test.stl wings2.scad

For animation-related changes in wings.scad, render a midpoint with:

openscad -D '$t=0.5' -o /tmp/opencode/wings-test-mid.stl wings.scad

A successful render should include:

Top level object is a 3D object:
Simple: yes

Notes

This is still an early mechanical exploration. The current model is not yet a final printable wing. The most useful next steps are likely:

  1. Test the wings2.scad snap fit and open stop on real prints.
  2. Tune tongue_length for folded angle and open_stop_angle for open angle.
  3. Refine stop block size and clearance after physical testing.
  4. Apply the best joint design to the full folding wing layout.