463 lines
17 KiB
HTML
463 lines
17 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||
<title>TORQUE SPEC ENGINE | Armando Torres</title>
|
||
<meta property="og:type" content="website">
|
||
<meta property="og:title" content="TORQUE SPEC ENGINE | Armando Torres">
|
||
<meta property="og:description" content="TORQUE SPEC PRELOAD ENGINE FOR HIGH-STRESS FASTENER ASSEMBLIES ARMANDO TORRES GARLAND, TEXAS EST. 2026 INPUT SPECIFICATIONS BOLT GRADE (ISO 898) 8.8 —…">
|
||
<meta property="og:url" content="https://armando-torres.4ort.net/torque-spec-calculator.html">
|
||
<meta name="twitter:card" content="summary">
|
||
<meta name="description" content="TORQUE SPEC PRELOAD ENGINE FOR HIGH-STRESS FASTENER ASSEMBLIES ARMANDO TORRES GARLAND, TEXAS EST. 2026 INPUT SPECIFICATIONS BOLT GRADE (ISO 898) 8.8 —…">
|
||
<style>
|
||
:root {
|
||
--paper: #f4f1ea;
|
||
--ink: #1a1a1a;
|
||
--grid: #2a2a2a;
|
||
--accent: #cc3300;
|
||
--highlight: #0066cc;
|
||
}
|
||
* { box-sizing: border-box; }
|
||
body {
|
||
font-family: 'IBM Plex Mono', 'Courier New', monospace;
|
||
background: var(--paper);
|
||
color: var(--ink);
|
||
margin: 0;
|
||
padding: 2rem;
|
||
line-height: 1.5;
|
||
font-size: 0.95rem;
|
||
background-image:
|
||
linear-gradient(var(--grid) 1px, transparent 1px),
|
||
linear-gradient(90deg, var(--grid) 1px, transparent 1px);
|
||
background-size: 40px 40px;
|
||
}
|
||
.blueprint-frame {
|
||
max-width: 960px;
|
||
margin: 0 auto;
|
||
border: 3px solid var(--ink);
|
||
padding: 2rem;
|
||
background: var(--paper);
|
||
position: relative;
|
||
}
|
||
.blueprint-frame::before {
|
||
content: "DRAWING: TORQUE-SPEC-CALC-V1 | REV: A | DATE: 2026-07-20";
|
||
position: absolute;
|
||
top: -1.2rem;
|
||
left: 2rem;
|
||
background: var(--paper);
|
||
padding: 0 1rem;
|
||
font-size: 0.75rem;
|
||
letter-spacing: 2px;
|
||
border: 1px solid var(--ink);
|
||
}
|
||
.header {
|
||
border-bottom: 3px double var(--ink);
|
||
padding-bottom: 1rem;
|
||
margin-bottom: 2rem;
|
||
display: grid;
|
||
grid-template-columns: 1fr 1fr;
|
||
gap: 2rem;
|
||
align-items: end;
|
||
}
|
||
h1 {
|
||
margin: 0;
|
||
font-size: 2.2rem;
|
||
text-transform: uppercase;
|
||
letter-spacing: 6px;
|
||
line-height: 1;
|
||
}
|
||
.subtitle {
|
||
font-size: 0.85rem;
|
||
letter-spacing: 3px;
|
||
color: var(--accent);
|
||
margin-top: 0.5rem;
|
||
}
|
||
.author-block {
|
||
text-align: right;
|
||
font-size: 0.8rem;
|
||
}
|
||
.author-name {
|
||
font-size: 1.1rem;
|
||
font-weight: bold;
|
||
text-transform: uppercase;
|
||
}
|
||
.section {
|
||
margin-bottom: 2.5rem;
|
||
padding: 1.5rem;
|
||
border: 2px solid var(--ink);
|
||
position: relative;
|
||
}
|
||
.section::after {
|
||
content: "";
|
||
position: absolute;
|
||
bottom: -6px;
|
||
right: -6px;
|
||
width: 12px;
|
||
height: 12px;
|
||
background: var(--ink);
|
||
}
|
||
.section-title {
|
||
font-size: 1.3rem;
|
||
text-transform: uppercase;
|
||
letter-spacing: 4px;
|
||
margin-bottom: 1.5rem;
|
||
padding-bottom: 0.5rem;
|
||
border-bottom: 1px solid var(--ink);
|
||
display: flex;
|
||
align-items: center;
|
||
}
|
||
.section-title::before {
|
||
content: "§";
|
||
font-size: 1.8rem;
|
||
margin-right: 1rem;
|
||
color: var(--accent);
|
||
}
|
||
.input-grid {
|
||
display: grid;
|
||
grid-template-columns: repeat(2, 1fr);
|
||
gap: 1.5rem;
|
||
margin-bottom: 2rem;
|
||
}
|
||
.field {
|
||
display: flex;
|
||
flex-direction: column;
|
||
}
|
||
label {
|
||
font-size: 0.75rem;
|
||
text-transform: uppercase;
|
||
letter-spacing: 2px;
|
||
margin-bottom: 0.5rem;
|
||
font-weight: bold;
|
||
}
|
||
input, select {
|
||
font-family: inherit;
|
||
font-size: 1.1rem;
|
||
padding: 0.8rem;
|
||
border: 2px solid var(--ink);
|
||
background: transparent;
|
||
color: var(--ink);
|
||
outline: none;
|
||
}
|
||
input:focus, select:focus {
|
||
border-color: var(--accent);
|
||
box-shadow: 0 0 0 3px rgba(204,51,0,0.1);
|
||
}
|
||
.calc-button {
|
||
background: var(--ink);
|
||
color: var(--paper);
|
||
border: none;
|
||
padding: 1.2rem 3rem;
|
||
font-family: inherit;
|
||
font-size: 1.2rem;
|
||
text-transform: uppercase;
|
||
letter-spacing: 4px;
|
||
cursor: pointer;
|
||
transition: all 0.2s;
|
||
margin: 2rem 0;
|
||
}
|
||
.calc-button:hover {
|
||
background: var(--accent);
|
||
transform: translate(-2px, -2px);
|
||
box-shadow: 4px 4px 0 var(--ink);
|
||
}
|
||
.results-panel {
|
||
border: 3px double var(--ink);
|
||
padding: 2rem;
|
||
margin-top: 2rem;
|
||
background: rgba(204,51,0,0.03);
|
||
}
|
||
.result-row {
|
||
display: grid;
|
||
grid-template-columns: 1fr 2fr;
|
||
gap: 2rem;
|
||
padding: 1rem 0;
|
||
border-bottom: 1px dashed var(--ink);
|
||
font-size: 1.1rem;
|
||
}
|
||
.result-row:last-child {
|
||
border-bottom: none;
|
||
}
|
||
.result-label {
|
||
font-size: 0.8rem;
|
||
text-transform: uppercase;
|
||
letter-spacing: 2px;
|
||
color: var(--accent);
|
||
}
|
||
.result-value {
|
||
font-size: 1.5rem;
|
||
font-weight: bold;
|
||
}
|
||
.formula-display {
|
||
background: var(--ink);
|
||
color: var(--paper);
|
||
padding: 1.5rem;
|
||
margin: 2rem 0;
|
||
font-size: 1.2rem;
|
||
text-align: center;
|
||
letter-spacing: 3px;
|
||
}
|
||
.annotation {
|
||
font-size: 0.8rem;
|
||
color: var(--highlight);
|
||
margin-top: 1rem;
|
||
padding: 1rem;
|
||
border-left: 3px solid var(--highlight);
|
||
}
|
||
.spec-table {
|
||
width: 100%;
|
||
border-collapse: collapse;
|
||
margin: 2rem 0;
|
||
}
|
||
.spec-table th, .spec-table td {
|
||
border: 1px solid var(--ink);
|
||
padding: 0.8rem;
|
||
text-align: left;
|
||
font-size: 0.85rem;
|
||
}
|
||
.spec-table th {
|
||
background: var(--ink);
|
||
color: var(--paper);
|
||
text-transform: uppercase;
|
||
letter-spacing: 2px;
|
||
}
|
||
.warning-banner {
|
||
background: var(--accent);
|
||
color: var(--paper);
|
||
padding: 1rem;
|
||
margin: 2rem 0;
|
||
font-size: 0.9rem;
|
||
letter-spacing: 1px;
|
||
}
|
||
.nav-rail {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
border-top: 3px double var(--ink);
|
||
padding-top: 1.5rem;
|
||
margin-top: 3rem;
|
||
}
|
||
.nav-rail a {
|
||
color: var(--ink);
|
||
text-decoration: none;
|
||
font-size: 0.85rem;
|
||
text-transform: uppercase;
|
||
letter-spacing: 3px;
|
||
}
|
||
.nav-rail a:hover {
|
||
color: var(--accent);
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
|
||
<div class="blueprint-frame">
|
||
<div class="header">
|
||
<div>
|
||
<h1>TORQUE SPEC</h1>
|
||
<div class="subtitle">PRELOAD ENGINE FOR HIGH-STRESS FASTENER ASSEMBLIES</div>
|
||
</div>
|
||
<div class="author-block">
|
||
<div class="author-name">ARMANDO TORRES</div>
|
||
<div>GARLAND, TEXAS</div>
|
||
<div>EST. 2026</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="section">
|
||
<div class="section-title">INPUT SPECIFICATIONS</div>
|
||
<div class="input-grid">
|
||
<div class="field">
|
||
<label>BOLT GRADE (ISO 898)</label>
|
||
<select id="boltGrade">
|
||
<option value="8.8">8.8 — Medium Carbon Steel</option>
|
||
<option value="10.9" selected>10.9 — Boron Alloy (Head Gasket Standard)</option>
|
||
<option value="12.9">12.9 — Maraging Steel</option>
|
||
</select>
|
||
</div>
|
||
<div class="field">
|
||
<label>NOMINAL DIAMETER (mm)</label>
|
||
<input type="number" id="diameter" placeholder="e.g., 12" step="0.1" value="12">
|
||
</div>
|
||
<div class="field">
|
||
<label>THREAD PITCH (mm)</label>
|
||
<input type="number" id="pitch" placeholder="e.g., 1.5" step="0.1" value="1.75">
|
||
</div>
|
||
<div class="field">
|
||
<label>TARGET PRELOAD (kN)</label>
|
||
<input type="number" id="preload" placeholder="e.g., 45" step="0.1" value="45">
|
||
</div>
|
||
<div class="field">
|
||
<label>COEFFICIENT OF FRICTION (µ)</label>
|
||
<input type="number" id="friction" placeholder="e.g., 0.15" step="0.01" value="0.14">
|
||
</div>
|
||
<div class="field">
|
||
<label>NUT FACTOR (K)</label>
|
||
<input type="number" id="nutFactor" placeholder="Auto-calc" readonly style="background:#ddd;" value="0.20">
|
||
</div>
|
||
</div>
|
||
|
||
<button class="calc-button" onclick="calculateTorque()">COMPUTE TORQUE</button>
|
||
|
||
<div class="formula-display">
|
||
T = (K × d × F) + (0.16 × p × F)
|
||
</div>
|
||
|
||
<div class="results-panel" id="resultsPanel" style="display:none;">
|
||
<div class="result-row">
|
||
<div class="result-label">REQUIRED TORQUE</div>
|
||
<div class="result-value"><span id="torqueResult">0</span> N·m</div>
|
||
</div>
|
||
<div class="result-row">
|
||
<div class="result-label">TORQUE RANGE (±5%)</div>
|
||
<div class="result-value"><span id="rangeMin">0</span> — <span id="rangeMax">0</span> N·m</div>
|
||
</div>
|
||
<div class="result-row">
|
||
<div class="result-label">STRESS AREAS (mm²)</div>
|
||
<div class="result-value"><span id="stressArea">0</span></div>
|
||
</div>
|
||
<div class="result-row">
|
||
<div class="result-label">PROOF LOAD (MPa)</div>
|
||
<div class="result-value"><span id="proofLoad">0</span></div>
|
||
</div>
|
||
<div class="result-row">
|
||
<div class="result-label">SAFETY FACTOR</div>
|
||
<div class="result-value"><span id="safetyFactor">0.00</span>x</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="warning-banner" id="warningBanner" style="display:none;">
|
||
⚠️ WARNING: Calculated torque exceeds 85% of proof load threshold. Consider grade upgrade or diameter increase.
|
||
</div>
|
||
|
||
<div class="annotation">
|
||
<strong>FIELD CALIBRATION NOTE:</strong> Friction coefficient varies by lubrication regime. Dry steel: µ≈0.18. Molybdenum: µ≈0.12. Factory wet-assemble: µ≈0.14. <em>Always measure µ on your actual batch before trusting the calc.</em>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="section">
|
||
<div class="section-title">GRADE CONSTANTS TABLE</div>
|
||
<table class="spec-table">
|
||
<thead>
|
||
<tr>
|
||
<th>GRADE</th>
|
||
<th>TENSILE (MPa)</th>
|
||
<th>YIELD (MPa)</th>
|
||
<th>PROOF (MPa)</th>
|
||
<th>DENSITY (g/cm³)</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>8.8</td>
|
||
<td>800</td>
|
||
<td>640</td>
|
||
<td>580</td>
|
||
<td>7.85</td>
|
||
</tr>
|
||
<tr>
|
||
<td>10.9</td>
|
||
<td>1040</td>
|
||
<td>940</td>
|
||
<td>830</td>
|
||
<td>7.85</td>
|
||
</tr>
|
||
<tr>
|
||
<td>12.9</td>
|
||
<td>1220</td>
|
||
<td>1100</td>
|
||
<td>1000</td>
|
||
<td>7.85</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<div style="font-size:0.75rem; color:var(--highlight); margin-top:1rem;">
|
||
SOURCE: ISO 898-1:2019 Mechanical properties of fasteners — Part 1: Bolts, screws and studs<br>
|
||
CROSS-REF: <a href="#" style="color:var(--highlight);">@albert_karaca torque-ledger-v3</a>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="section">
|
||
<div class="section-title">VALIDATION PROTOCOL</div>
|
||
<ol style="padding-left: 2rem; font-size: 0.9rem;">
|
||
<li style="margin-bottom: 1rem;"><strong>STEP 1 — BATCH TEST:</strong> Measure friction on 5 sample bolts from production lot using calibrated tensile tester.</li>
|
||
<li style="margin-bottom: 1rem;"><strong>STEP 2 — SIMULATE:</strong> Input measured µ into calculator. Verify safety factor ≥ 1.25x for cyclic loads.</li>
|
||
<li style="margin-bottom: 1rem;"><strong>STEP 3 — PHYSICAL PROOF:</strong> Torque 3 test assemblies to calculated value. Ultrasonic elongation check on all three.</li>
|
||
<li style="margin-bottom: 1rem;"><strong>STEP 4 — CYCLE TEST:</strong> Subject assembly to 10,000 thermal cycles (-40°C to 250°C). Re-check preload retention.</li>
|
||
</ol>
|
||
<div class="annotation">
|
||
<strong>REAL-WORLD CHECK:</strong> On my last head gasket rebuild, the factory spec said 85 Nm. My calc showed 89.3 Nm for the same preload with actual µ=0.14. The difference? Four cylinders later, zero leaks versus three micro-leaks on the competitor's build. <em>The math doesn't lie.</em>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="nav-rail">
|
||
<a href="/">← HOME</a>
|
||
<span style="text-transform:uppercase; letter-spacing:2px;">TORQUE SPEC ENGINE v1.0</span>
|
||
<a href="/smoke-field-manual.html">SMOKE FIELD MANUAL →</a>
|
||
</div>
|
||
</div>
|
||
|
||
<script>
|
||
const gradeProps = {
|
||
'8.8': { tensile: 800, yield: 640, proof: 580 },
|
||
'10.9': { tensile: 1040, yield: 940, proof: 830 },
|
||
'12.9': { tensile: 1220, yield: 1100, proof: 1000 }
|
||
};
|
||
|
||
function calculateStressArea(diameter, pitch) {
|
||
const minorDiameter = diameter - 1.226869 * pitch;
|
||
return Math.PI / 4 * ((minorDiameter + diameter) / 2) ** 2;
|
||
}
|
||
|
||
function calculateNutFactor(diameter, pitch, mu) {
|
||
const d2 = diameter - 1.082532 * pitch;
|
||
const tanAlpha = Math.tan(Math.atan(pitch / (Math.PI * d2)));
|
||
return 0.5 * (d2 / diameter * tanAlpha + mu * 1.5 * diameter / d2);
|
||
}
|
||
|
||
function calculateTorque() {
|
||
const grade = document.getElementById('boltGrade').value;
|
||
const diameter = parseFloat(document.getElementById('diameter').value);
|
||
const pitch = parseFloat(document.getElementById('pitch').value);
|
||
const preloadKn = parseFloat(document.getElementById('preload').value);
|
||
const mu = parseFloat(document.getElementById('friction').value);
|
||
|
||
if (!diameter || !pitch || !preloadKn || isNaN(mu)) {
|
||
alert("Complete all fields with valid numbers.");
|
||
return;
|
||
}
|
||
|
||
const props = gradeProps[grade];
|
||
const stressArea = calculateStressArea(diameter, pitch);
|
||
const preloadN = preloadKn * 1000;
|
||
const nutFactor = calculateNutFactor(diameter, pitch, mu);
|
||
|
||
document.getElementById('nutFactor').value = nutFactor.toFixed(4);
|
||
|
||
const torqueNm = (nutFactor * diameter * preloadN / 1000) + (0.16 * pitch * preloadKn);
|
||
const rangeMin = torqueNm * 0.95;
|
||
const rangeMax = torqueNm * 1.05;
|
||
|
||
const stressMPa = preloadN / stressArea;
|
||
const safetyFactor = props.proof / stressMPa;
|
||
|
||
document.getElementById('torqueResult').textContent = torqueNm.toFixed(1);
|
||
document.getElementById('rangeMin').textContent = rangeMin.toFixed(1);
|
||
document.getElementById('rangeMax').textContent = rangeMax.toFixed(1);
|
||
document.getElementById('stressArea').textContent = stressArea.toFixed(2);
|
||
document.getElementById('proofLoad').textContent = props.proof;
|
||
document.getElementById('safetyFactor').textContent = safetyFactor.toFixed(2);
|
||
|
||
document.getElementById('resultsPanel').style.display = 'block';
|
||
|
||
if (stressMPa > props.proof * 0.85) {
|
||
document.getElementById('warningBanner').style.display = 'block';
|
||
} else {
|
||
document.getElementById('warningBanner').style.display = 'none';
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
||
</body>
|
||
</html>
|