Fixed labels which previously went off edges of bar and tower.

This commit is contained in:
John Poole 2026-03-18 22:04:17 -07:00
commit 85ee00dc19
2 changed files with 299 additions and 3 deletions

260
README.md
View file

@ -1,3 +1,259 @@
# motion-diagnostics-suite
# sv06-belt-recovery-stress-tests
Parametric OpenSCAD models and procedures for diagnosing layer shifts, belt tension, and motion instability in FDM 3D printers.
Belt tension recovery and motion stability test models for bed-slinger 3D printers (e.g., SV06-class machines).
---
![](img/DSC_5098.webp)
## Purpose
These models are designed to help recover from situations where printer motion accuracy has been degraded, typically due to:
* Adjusting belt tension without a reference baseline
* Experiencing layer shifts during prints
* Replacing belts or modifying mechanical components
This project provides:
* Parametric OpenSCAD models
* A structured test procedure
* Guidance for interpreting failure modes
---
## When To Use This
Use these tests if you observe:
* Sudden layer shifts (e.g., 3-5 mm offsets)
* Inconsistent dimensional accuracy
* Audible belt skipping or motor stutter
* After adjusting belt tensioners
Here's an example of a case for a hand held radio where the top suddendly shift at the 20mm height.
![](img/20260318_215156_Wed.png)
---
## Models Included
### 1. Cube (Baseline Test)
* Dimensions: 40 × 40 × 40 mm
* Purpose:
* Verify basic printer stability
* Detect gross mechanical issues
---
### 2. Y-Bar (Axis Stress Test)
* Dimensions: 20 × 150 × 50 mm
* Purpose:
* Stress the Y-axis (bed movement)
* Detect belt slip under momentum and direction reversal
**Important:**
* Orient the 150 mm dimension front-to-back on the bed
---
### 3. Tower (Long-Duration Test)
* Dimensions: 18 × 18 × 120 mm
* Purpose:
* Reveal issues that appear only over time
* Detect cumulative drift, resonance, or late-stage layer shifts
---
## Print Procedure (Recommended Order)
Run each model as a **separate print job**:
1. **Cube**
* Confirms system is not fundamentally broken
2. **Y-Bar**
* Directly tests axis tension and inertia behavior
3. **Tower**
* Tests stability over time and height
---
## Suggested Slicer Settings (Orca Slicer)
### Cube
* Layer height: 0.20 mm
* Perimeters: 3
* Infill: 20-25% (grid or gyroid)
### Y-Bar
* Layer height: 0.20 mm
* Perimeters: 3
* Infill: 15-25% (grid recommended)
### Tower
* Layer height: 0.20 mm
* Perimeters: 3
* Infill: 0-10%
* Brim: optional (only if adhesion is an issue)
See the settings folder for settings used in Orca Slicer.
---
## Belt Tension Guidance
This project assumes GT2 belts (typical for most hobby printers).
### Frequency Method (Recommended)
Using a phone-based spectrum analyzer:
* Target range: **90-110 Hz**
* Reference: ~110 Hz ? ~2 lb tension (Voron baseline)
Procedure:
1. Move bed so belt span ~ 150 mm
2. Pluck belt
3. Measure frequency
4. Adjust tensioner
5. Repeat until stable
### Notes
* Too loose:
* Low frequency (<70 Hz)
* Layer shifts likely
* Too tight:
* High frequency (>120-130 Hz)
* Motor strain, possible missed steps
---
## Interpreting Results
### Good Result
* Clean vertical alignment
* No sudden offsets
* Consistent layer stacking
---
### Failure Modes
#### Sudden Layer Shift
* Cause:
* Belt too loose
* Pulley slipping
* Action:
* Increase tension slightly
* Check motor pulley set screws
---
#### Repeated Shift at Same Height
* Cause:
* Mechanical obstruction
* Cable snag
* Action:
* Inspect motion path
* Check wiring harness clearance
---
#### Gradual Lean / Drift
* Cause:
* Frame or axis alignment issue
* Action:
* Inspect rails, wheels, or rods
---
#### Ringing / Ghosting (No Shift)
* Cause:
* High acceleration
* Action:
* Reduce acceleration (not a belt issue)
---
## Notes on Methodology
These tests intentionally:
* Emphasize repeated motion in one axis
* Increase inertial load with height
* Create conditions where marginal tension fails visibly
This approach isolates motion system issues rather than general print quality.
---
## OpenSCAD Usage
Generate models:
```bash
openscad -D 'model="cube"' -o cube_$(date +%Y%m%d_%H%M).stl stress_test_models.scad
openscad -D 'model="ybar"' -o ybar_$(date +%Y%m%d_%H%M).stl stress_test_models.scad
openscad -D 'model="tower"' -o tower_$(date +%Y%m%d_%H%M).stl stress_test_models.scad
```
---
## Provenance
Generated with:
* OpenSCAD
* Orca Slicer (recommended)
* Frequency-based belt tuning derived from:
* Voron Design tuning methodology
This project was developed with ChatGPT.
---
## License
Recommend: MIT or CC-BY 4.0 for broad reuse.
---
## Contributing
Improvements welcome:
* Additional test geometries
* Axis-specific stress models
* Automated calibration workflows
---

View file

@ -147,8 +147,48 @@ module rounded_box_uncentered(x, y, z, r) {
square([x, y], center=false);
}
module place_top_label(txt, x, y, z, center_it=false) {
// --- parameters ---
margin = 2; // mm clearance from edges
// usable space
usable_x = x - margin;
usable_y = y - margin;
// choose orientation: run along long axis
rotate_text = (y > x);
// limiting width after orientation
limit = rotate_text ? usable_y : usable_x;
// crude text width estimate factor (~0.6 * size * chars)
est_char_width = 1.0;
est_len = len(txt) * est_char_width;
// compute size that fits
auto_size = limit / est_len;
// clamp to your preferred max size
final_size = min(label_size, auto_size);
// placement
tx = center_it ? 0 : x/2;
ty = center_it ? 0 : y/2;
tz = center_it ? z/2 : z;
translate([tx, ty, tz - label_depth])
rotate([0, 0, rotate_text ? 90 : 0])
linear_extrude(height=label_depth + 0.02)
text(
txt,
size=final_size,
font=label_font,
halign="center",
valign="center"
);
}
module place_top_labelOLD(txt, x, y, z, center_it=false) {
tx = center_it ? 0 : x/2;
ty = center_it ? 0 : y/2;
tz = center_it ? z/2 : z;