{"id":24521,"date":"2026-07-17T08:42:43","date_gmt":"2026-07-17T08:42:43","guid":{"rendered":"https:\/\/www.mechstream.com\/?p=24521"},"modified":"2026-07-17T08:51:59","modified_gmt":"2026-07-17T08:51:59","slug":"key-joint-strength-calculator","status":"publish","type":"post","link":"https:\/\/www.mechstream.com\/ar\/key-joint-strength-calculator\/","title":{"rendered":"Key Joint Strength Calculator"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The <strong>Key Joint Strength Calculator<\/strong> is a practical online engineering tool designed to evaluate the strength and load-carrying capacity of keyed shaft connections. By entering parameters such as shaft diameter, key width, key height, key length, transmitted torque, and material strength, users can quickly calculate shear stress, crushing stress, and the allowable torque of the key joint. The <strong>Key Joint Strength Calculator<\/strong> helps mechanical engineers, designers, and students verify whether a key and keyway connection can safely transmit power without failure. It is ideal for shaft design, couplings, gears, pulleys, and other mechanical transmission systems. With fast browser-based calculations and clear results, this tool supports safer design decisions, improved reliability, and efficient engineering analysis.<\/p>\n\n\n\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>Key Joint Strength Calculator \u2014 Flat Key \/ Woodruff Key<\/title>\n<\/head>\n<body>\n\n<!--\n  WordPress \u5d4c\u5165\u8bf4\u660e\uff1a\n  \u5c06\u4e0b\u65b9\u300cBEGIN EMBED\u300d\u5230\u300cEND EMBED\u300d\u4e4b\u95f4\u7684\u5168\u90e8\u5185\u5bb9\n  \u7c98\u8d34\u5230 WordPress \u81ea\u5b9a\u4e49 HTML \u533a\u5757\u4e2d\u5373\u53ef\u3002\n  \uff08\u5df2\u79fb\u9664 Tailwind CDN\uff0c\u6240\u6709\u6837\u5f0f\u4e25\u683c\u9650\u5b9a\u5728 #kjsc-root \u5185\uff0c\u4e0d\u4f1a\u5f71\u54cd\u9875\u9762\u5176\u4ed6\u90e8\u5206\uff09\n-->\n\n<!-- BEGIN EMBED -->\n<style>\n  \/* ===== \u6240\u6709\u89c4\u5219\u4e25\u683c\u9650\u5b9a\u5728 #kjsc-root \u5185\uff0c\u4e0d\u4f7f\u7528 Tailwind ===== *\/\n  #kjsc-root {\n    box-sizing: border-box;\n    font-family: system-ui, -apple-system, 'Segoe UI', sans-serif;\n    font-size: 16px;\n    line-height: 1.5;\n    color: #1e293b;\n    background: #f8fafc;\n    -webkit-font-smoothing: antialiased;\n    isolation: isolate;\n    position: relative;\n    width: 100%;\n  }\n  #kjsc-root *, #kjsc-root *::before, #kjsc-root *::after { box-sizing: border-box; }\n\n  #kjsc-root .kjsc-main { max-width: 48rem; margin: 0 auto; padding: 1.5rem 1rem; }\n  #kjsc-root .kjsc-stack { display: flex; flex-direction: column; gap: 1.5rem; }\n\n  #kjsc-root .kjsc-card {\n    background: #fff;\n    border-radius: 1rem;\n    border: 1px solid rgba(226,232,240,.8);\n    padding: 1.25rem;\n    box-shadow: 0 1px 2px rgba(0,0,0,.05);\n    transition: box-shadow .2s;\n  }\n  #kjsc-root .kjsc-card:hover { box-shadow: 0 8px 30px rgba(15,23,42,.08); }\n\n  #kjsc-root .kjsc-section-title {\n    margin: 0 0 1rem;\n    font-size: .875rem;\n    font-weight: 600;\n    color: #64748b !important;\n    text-transform: uppercase;\n    letter-spacing: .05em;\n  }\n\n  #kjsc-root .kjsc-grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: .75rem; }\n  #kjsc-root .kjsc-grid-fields { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; }\n  #kjsc-root .kjsc-grid-results { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; }\n  @media (min-width: 640px) {\n    #kjsc-root .kjsc-grid-results { grid-template-columns: repeat(4, 1fr); }\n    #kjsc-root .kjsc-field-half { grid-column: span 1; }\n  }\n  #kjsc-root .kjsc-field-full { grid-column: 1 \/ -1; }\n\n  #kjsc-root .kjsc-toggle-btn {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    gap: .5rem;\n    padding: 1rem;\n    border-radius: .75rem;\n    border: 2px solid #e2e8f0;\n    background: #f8fafc;\n    color: #1e293b !important;\n    cursor: pointer;\n    font-family: inherit;\n    font-size: inherit;\n    line-height: inherit;\n    transition: all .2s ease;\n    text-align: center;\n  }\n  #kjsc-root .kjsc-toggle-btn.kjsc-row { flex-direction: row; justify-content: center; padding: .75rem 1rem; font-size: .875rem; font-weight: 600; color: #1e293b !important; }\n  #kjsc-root .kjsc-toggle-btn.kjsc-active {\n    background: linear-gradient(135deg, #4f46e5, #6366f1);\n    color: #ffffff !important;\n    border-color: #818cf8;\n    box-shadow: 0 4px 14px rgba(79,70,229,.35);\n  }\n  #kjsc-root .kjsc-toggle-btn.kjsc-active-alt {\n    background: #eef2ff;\n    color: #1e293b !important;\n    border-color: #c7d2fe;\n    box-shadow: none;\n  }\n  #kjsc-root .kjsc-toggle-btn:not(.kjsc-active):not(.kjsc-active-alt):hover { border-color: #c7d2fe; color: #1e293b !important; }\n  #kjsc-root .kjsc-toggle-label { font-weight: 600; font-size: .875rem; color: #1e293b !important; }\n  #kjsc-root .kjsc-toggle-sub { font-size: .75rem; color: #64748b !important; }\n  #kjsc-root .kjsc-toggle-btn.kjsc-active .kjsc-toggle-label,\n  #kjsc-root .kjsc-toggle-btn.kjsc-active .kjsc-toggle-sub { color: #ffffff !important; }\n  #kjsc-root .kjsc-toggle-btn.kjsc-active-alt .kjsc-toggle-label { color: #1e293b !important; }\n  #kjsc-root .kjsc-toggle-btn.kjsc-active-alt .kjsc-toggle-sub { color: #64748b !important; }\n\n  #kjsc-root .kjsc-field { margin-bottom: 0; }\n  #kjsc-root .kjsc-field-group { display: flex; flex-direction: column; gap: 1rem; margin-top: 1.25rem; }\n  #kjsc-root .kjsc-label {\n    display: block;\n    font-size: .875rem;\n    font-weight: 500;\n    color: #1e293b !important;\n    margin-bottom: .375rem;\n  }\n  #kjsc-root .kjsc-label-hint { color: #64748b !important; font-weight: 400; }\n  #kjsc-root .kjsc-input {\n    display: block;\n    width: 100%;\n    padding: .625rem 1rem;\n    border-radius: .5rem;\n    border: 1px solid #e2e8f0;\n    background: #f8fafc;\n    font-family: Consolas, Monaco, 'Courier New', monospace;\n    font-size: .875rem;\n    color: #1e293b !important;\n    line-height: 1.5;\n    transition: border-color .15s, box-shadow .15s, background .15s;\n    -webkit-appearance: none;\n    appearance: none;\n  }\n  #kjsc-root .kjsc-input:focus {\n    outline: none;\n    border-color: #818cf8;\n    background: #fff;\n    box-shadow: 0 0 0 3px rgba(99,102,241,.2);\n  }\n  #kjsc-root .kjsc-formula-hint {\n    margin: 0;\n    font-size: .75rem;\n    color: #94a3b8;\n    background: #f8fafc;\n    border-radius: .5rem;\n    padding: .5rem .75rem;\n    border: 1px solid #f1f5f9;\n  }\n\n  #kjsc-root .kjsc-btn-wrap { margin-top: 1.25rem; display: flex; justify-content: center; }\n  #kjsc-root .kjsc-btn-calculate {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    gap: .5rem;\n    padding: .75rem 4rem;\n    border: none;\n    border-radius: .75rem;\n    background: linear-gradient(to right, #4f46e5, #6366f1);\n    color: #fff;\n    font-family: inherit;\n    font-size: 1rem;\n    font-weight: 600;\n    line-height: 1.5;\n    cursor: pointer;\n    box-shadow: 0 10px 15px -3px rgba(99,102,241,.3), 0 4px 6px -4px rgba(99,102,241,.2);\n    transition: background .2s, box-shadow .2s, transform .15s;\n    -webkit-appearance: none;\n    appearance: none;\n  }\n  #kjsc-root .kjsc-btn-calculate:hover,\n  #kjsc-root .kjsc-btn-calculate:focus {\n    background: linear-gradient(to right, #4338ca, #4f46e5);\n    color: #fff;\n    box-shadow: 0 10px 20px -3px rgba(79,70,229,.4);\n  }\n  #kjsc-root .kjsc-btn-calculate:active { transform: scale(.98); color: #fff; }\n  #kjsc-root .kjsc-btn-calculate svg { width: 1.25rem; height: 1.25rem; stroke: #fff; flex-shrink: 0; }\n  #kjsc-root .kjsc-btn-calculate span { color: #fff; }\n\n  #kjsc-root .kjsc-hidden { display: none !important; }\n\n  \/* Results *\/\n  #kjsc-root .kjsc-result-card {\n    background: #fff;\n    border-radius: .75rem;\n    border: 1px solid rgba(226,232,240,.8);\n    padding: 1rem;\n    box-shadow: 0 1px 2px rgba(0,0,0,.05);\n  }\n  #kjsc-root .kjsc-result-label {\n    margin: 0;\n    font-size: .75rem;\n    font-weight: 500;\n    color: #94a3b8;\n    text-transform: uppercase;\n    letter-spacing: .05em;\n  }\n  #kjsc-root .kjsc-result-value {\n    margin: .25rem 0 0;\n    font-size: 1.25rem;\n    font-weight: 700;\n    font-family: Consolas, Monaco, 'Courier New', monospace;\n    color: #4f46e5;\n  }\n  #kjsc-root .kjsc-result-value.kjsc-muted { color: #334155; }\n  #kjsc-root .kjsc-result-unit { margin: 0; font-size: .75rem; color: #94a3b8; }\n\n  #kjsc-root .kjsc-stress-block { margin-bottom: 1.5rem; }\n  #kjsc-root .kjsc-stress-block:last-child { margin-bottom: 0; }\n  #kjsc-root .kjsc-stress-header {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    flex-wrap: wrap;\n    gap: .5rem;\n    margin-bottom: .5rem;\n  }\n  #kjsc-root .kjsc-stress-title { font-size: .875rem; font-weight: 600; color: #334155; }\n  #kjsc-root .kjsc-stress-val { font-family: Consolas, Monaco, monospace; font-size: .875rem; font-weight: 700; color: #4f46e5; margin-left: .5rem; }\n  #kjsc-root .kjsc-stress-meta { text-align: right; font-size: .75rem; color: #94a3b8; }\n  #kjsc-root .kjsc-stress-meta strong { font-family: Consolas, Monaco, monospace; font-weight: 600; color: #475569; }\n  #kjsc-root .kjsc-sf { font-family: Consolas, Monaco, monospace; font-weight: 700; }\n  #kjsc-root .kjsc-sf-ok { color: #16a34a; }\n  #kjsc-root .kjsc-sf-bad { color: #dc2626; }\n\n  #kjsc-root .kjsc-bar-track {\n    position: relative;\n    height: 1rem;\n    background: #f1f5f9;\n    border-radius: 9999px;\n    overflow: hidden;\n  }\n  #kjsc-root .kjsc-bar-fill {\n    height: 100%;\n    border-radius: 9999px;\n    width: 0;\n    transition: width .4s cubic-bezier(.4,0,.2,1), background-color .3s;\n  }\n  #kjsc-root .kjsc-bar-fill.kjsc-bar-green { background: #22c55e; }\n  #kjsc-root .kjsc-bar-fill.kjsc-bar-amber { background: #f59e0b; }\n  #kjsc-root .kjsc-bar-fill.kjsc-bar-red { background: #ef4444; }\n  #kjsc-root .kjsc-bar-labels {\n    display: flex;\n    justify-content: space-between;\n    margin-top: .25rem;\n    font-size: .75rem;\n    color: #94a3b8;\n  }\n  #kjsc-root .kjsc-bar-pct { font-family: Consolas, Monaco, monospace; color: #64748b; }\n  #kjsc-root .kjsc-bar-pct.kjsc-warn { color: #d97706; font-weight: 600; }\n  #kjsc-root .kjsc-bar-pct.kjsc-over { color: #dc2626; font-weight: 600; }\n\n  #kjsc-root sub { vertical-align: sub; font-size: smaller; }\n  #kjsc-root h2 { margin: 0; padding: 0; border: none; background: none; }\n  #kjsc-root p { margin: 0; }\n  #kjsc-root svg.kjsc-key-icon { width: 4rem; height: 2.5rem; }\n<\/style>\n\n<div id=\"kjsc-root\">\n\n  <div class=\"kjsc-main\">\n    <div class=\"kjsc-stack\">\n\n      <!-- Key Type -->\n      <div class=\"kjsc-card\">\n        <h2 class=\"kjsc-section-title\">Key Type<\/h2>\n        <div class=\"kjsc-grid-2\">\n          <button type=\"button\" id=\"btnFlatKey\" class=\"kjsc-toggle-btn kjsc-active-alt\">\n            <svg class=\"kjsc-key-icon\" viewBox=\"0 0 64 40\" aria-hidden=\"true\">\n              <rect x=\"8\" y=\"14\" width=\"48\" height=\"12\" rx=\"1\" fill=\"#6366f1\" opacity=\"0.8\"\/>\n              <rect x=\"20\" y=\"8\" width=\"24\" height=\"20\" rx=\"1\" fill=\"none\" stroke=\"#94a3b8\" stroke-width=\"1.5\" stroke-dasharray=\"3 2\"\/>\n              <line x1=\"4\" y1=\"20\" x2=\"60\" y2=\"20\" stroke=\"#cbd5e1\" stroke-width=\"2\"\/>\n            <\/svg>\n            <span class=\"kjsc-toggle-label\">Flat Key<\/span>\n            <span class=\"kjsc-toggle-sub\">Parallel Key<\/span>\n          <\/button>\n          <button type=\"button\" id=\"btnWoodruffKey\" class=\"kjsc-toggle-btn\">\n            <svg class=\"kjsc-key-icon\" viewBox=\"0 0 64 40\" aria-hidden=\"true\">\n              <path d=\"M 32 36 A 14 14 0 0 1 32 8\" fill=\"#6366f1\" opacity=\"0.8\"\/>\n              <circle cx=\"32\" cy=\"22\" r=\"14\" fill=\"none\" stroke=\"#94a3b8\" stroke-width=\"1.5\" stroke-dasharray=\"3 2\"\/>\n              <line x1=\"4\" y1=\"22\" x2=\"60\" y2=\"22\" stroke=\"#cbd5e1\" stroke-width=\"2\"\/>\n            <\/svg>\n            <span class=\"kjsc-toggle-label\">Woodruff Key<\/span>\n            <span class=\"kjsc-toggle-sub\">Half-Moon Key<\/span>\n          <\/button>\n        <\/div>\n      <\/div>\n\n      <!-- Load Input -->\n      <div class=\"kjsc-card\">\n        <h2 class=\"kjsc-section-title\">Load Input Mode<\/h2>\n        <div class=\"kjsc-grid-2\">\n          <button type=\"button\" id=\"btnTorqueMode\" class=\"kjsc-toggle-btn kjsc-row kjsc-active-alt\">Direct Torque<\/button>\n          <button type=\"button\" id=\"btnPowerMode\" class=\"kjsc-toggle-btn kjsc-row\">Power &amp; Speed<\/button>\n        <\/div>\n        <div id=\"torqueInputs\" class=\"kjsc-field-group\">\n          <div class=\"kjsc-field\">\n            <label class=\"kjsc-label\" for=\"inputT\">Torque, T <span class=\"kjsc-label-hint\">(N\u00b7m)<\/span><\/label>\n            <input type=\"number\" id=\"inputT\" class=\"kjsc-input\" value=\"150\" min=\"0\" step=\"any\">\n          <\/div>\n        <\/div>\n        <div id=\"powerInputs\" class=\"kjsc-field-group kjsc-hidden\">\n          <div class=\"kjsc-field\">\n            <label class=\"kjsc-label\" for=\"inputP\">Power, P <span class=\"kjsc-label-hint\">(kW)<\/span><\/label>\n            <input type=\"number\" id=\"inputP\" class=\"kjsc-input\" value=\"15\" min=\"0\" step=\"any\">\n          <\/div>\n          <div class=\"kjsc-field\">\n            <label class=\"kjsc-label\" for=\"inputN\">Rotational Speed, n <span class=\"kjsc-label-hint\">(rpm)<\/span><\/label>\n            <input type=\"number\" id=\"inputN\" class=\"kjsc-input\" value=\"955\" min=\"0\" step=\"any\">\n          <\/div>\n          <p class=\"kjsc-formula-hint\">T = 9550 \u00d7 P \/ n \u2192 T in N\u00b7m<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Geometry -->\n      <div class=\"kjsc-card\">\n        <h2 class=\"kjsc-section-title\">Geometry &amp; Material<\/h2>\n        <div class=\"kjsc-grid-fields\">\n          <div class=\"kjsc-field kjsc-field-half\">\n            <label class=\"kjsc-label\" for=\"inputD\">Shaft Diameter, d <span class=\"kjsc-label-hint\">(mm)<\/span><\/label>\n            <input type=\"number\" id=\"inputD\" class=\"kjsc-input\" value=\"40\" min=\"0\" step=\"any\">\n          <\/div>\n          <div class=\"kjsc-field kjsc-field-half\">\n            <label class=\"kjsc-label\" for=\"inputB\">Key Width, b <span class=\"kjsc-label-hint\">(mm)<\/span><\/label>\n            <input type=\"number\" id=\"inputB\" class=\"kjsc-input\" value=\"12\" min=\"0\" step=\"any\">\n          <\/div>\n          <div class=\"kjsc-field kjsc-field-half\">\n            <label class=\"kjsc-label\" for=\"inputH\">Key Height, h <span class=\"kjsc-label-hint\">(mm)<\/span><\/label>\n            <input type=\"number\" id=\"inputH\" class=\"kjsc-input\" value=\"8\" min=\"0\" step=\"any\">\n          <\/div>\n          <div id=\"fieldFlatL\" class=\"kjsc-field kjsc-field-half\">\n            <label class=\"kjsc-label\" for=\"inputL\">Active Length, L <span class=\"kjsc-label-hint\">(mm)<\/span><\/label>\n            <input type=\"number\" id=\"inputL\" class=\"kjsc-input\" value=\"50\" min=\"0\" step=\"any\">\n          <\/div>\n          <div id=\"fieldWoodruffDk\" class=\"kjsc-field kjsc-field-half kjsc-hidden\">\n            <label class=\"kjsc-label\" for=\"inputDk\">Key Diameter, D<sub>k<\/sub> <span class=\"kjsc-label-hint\">(mm)<\/span><\/label>\n            <input type=\"number\" id=\"inputDk\" class=\"kjsc-input\" value=\"25\" min=\"0\" step=\"any\">\n          <\/div>\n          <div class=\"kjsc-field kjsc-field-half\">\n            <label class=\"kjsc-label\" for=\"inputTauAllow\">Allowable Shear, [\u03c4] <span class=\"kjsc-label-hint\">(MPa)<\/span><\/label>\n            <input type=\"number\" id=\"inputTauAllow\" class=\"kjsc-input\" value=\"60\" min=\"0\" step=\"any\">\n          <\/div>\n          <div class=\"kjsc-field kjsc-field-half\">\n            <label class=\"kjsc-label\" for=\"inputSigmaAllow\">Allowable Bearing, [\u03c3<sub>p<\/sub>] <span class=\"kjsc-label-hint\">(MPa)<\/span><\/label>\n            <input type=\"number\" id=\"inputSigmaAllow\" class=\"kjsc-input\" value=\"100\" min=\"0\" step=\"any\">\n          <\/div>\n        <\/div>\n        <div class=\"kjsc-btn-wrap\">\n          <button type=\"button\" id=\"btnCalculate\" class=\"kjsc-btn-calculate\">\n            <svg fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n              <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 7h6m0 10v-3m-3 3h.01M9 17h.01M9 14h.01M12 14h.01M15 11h.01M12 11h.01M9 11h.01M7 21h10a2 2 0 002-2V5a2 2 0 00-2-2H7a2 2 0 00-2 2v14a2 2 0 002 2z\"\/>\n            <\/svg>\n            <span>Calculate<\/span>\n          <\/button>\n        <\/div>\n      <\/div>\n\n      <!-- Results -->\n      <div id=\"resultsSection\" class=\"kjsc-stack kjsc-hidden\">\n\n        <div class=\"kjsc-grid-results\">\n          <div class=\"kjsc-result-card\">\n            <p class=\"kjsc-result-label\">Torque<\/p>\n            <p id=\"resT\" class=\"kjsc-result-value\">\u2014<\/p>\n            <p class=\"kjsc-result-unit\">N\u00b7m<\/p>\n          <\/div>\n          <div class=\"kjsc-result-card\">\n            <p class=\"kjsc-result-label\">Tangential Force<\/p>\n            <p id=\"resFt\" class=\"kjsc-result-value\">\u2014<\/p>\n            <p class=\"kjsc-result-unit\">N<\/p>\n          <\/div>\n          <div class=\"kjsc-result-card\">\n            <p class=\"kjsc-result-label\">Shear Area<\/p>\n            <p id=\"resAs\" class=\"kjsc-result-value kjsc-muted\">\u2014<\/p>\n            <p class=\"kjsc-result-unit\">mm\u00b2<\/p>\n          <\/div>\n          <div class=\"kjsc-result-card\">\n            <p class=\"kjsc-result-label\">Bearing Area<\/p>\n            <p id=\"resAb\" class=\"kjsc-result-value kjsc-muted\">\u2014<\/p>\n            <p class=\"kjsc-result-unit\">mm\u00b2<\/p>\n          <\/div>\n        <\/div>\n\n        <div class=\"kjsc-card\">\n          <h2 class=\"kjsc-section-title\" style=\"margin-bottom:1.25rem\">Stress Analysis<\/h2>\n\n          <div class=\"kjsc-stress-block\">\n            <div class=\"kjsc-stress-header\">\n              <div>\n                <span class=\"kjsc-stress-title\">Shear Stress, \u03c4<\/span>\n                <span id=\"resTau\" class=\"kjsc-stress-val\">\u2014 MPa<\/span>\n              <\/div>\n              <div class=\"kjsc-stress-meta\">\n                Allowable [\u03c4] = <strong id=\"resTauAllow\">60 MPa<\/strong> | SF = <span id=\"resSfShear\" class=\"kjsc-sf kjsc-sf-ok\">\u2014<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"kjsc-bar-track\">\n              <div id=\"barShear\" class=\"kjsc-bar-fill kjsc-bar-green\" style=\"width:0%\"><\/div>\n            <\/div>\n            <div class=\"kjsc-bar-labels\">\n              <span>0%<\/span>\n              <span id=\"pctShear\" class=\"kjsc-bar-pct\">0% of limit<\/span>\n              <span>100%+<\/span>\n            <\/div>\n          <\/div>\n\n          <div class=\"kjsc-stress-block\">\n            <div class=\"kjsc-stress-header\">\n              <div>\n                <span class=\"kjsc-stress-title\">Bearing Stress, \u03c3<sub>p<\/sub><\/span>\n                <span id=\"resSigma\" class=\"kjsc-stress-val\">\u2014 MPa<\/span>\n              <\/div>\n              <div class=\"kjsc-stress-meta\">\n                Allowable [\u03c3<sub>p<\/sub>] = <strong id=\"resSigmaAllow\">100 MPa<\/strong> | SF = <span id=\"resSfBearing\" class=\"kjsc-sf kjsc-sf-ok\">\u2014<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"kjsc-bar-track\">\n              <div id=\"barBearing\" class=\"kjsc-bar-fill kjsc-bar-green\" style=\"width:0%\"><\/div>\n            <\/div>\n            <div class=\"kjsc-bar-labels\">\n              <span>0%<\/span>\n              <span id=\"pctBearing\" class=\"kjsc-bar-pct\">0% of limit<\/span>\n              <span>100%+<\/span>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function () {\n  'use strict';\n\n  var root = document.getElementById('kjsc-root');\n  if (!root) return;\n\n  var DEFAULTS = {\n    flat: { d: 40, b: 12, h: 8, L: 50, T: 150, tauAllow: 60, sigmaAllow: 100, P: 15, n: 955 },\n    woodruff: { d: 25, b: 6, h: 10, Dk: 25, T: 50, tauAllow: 60, sigmaAllow: 100, P: 5, n: 955 }\n  };\n\n  var keyType = 'flat';\n  var loadMode = 'torque';\n\n  function $(id) { return root.querySelector('#' + id); }\n\n  var els = {\n    btnFlatKey: $('btnFlatKey'),\n    btnWoodruffKey: $('btnWoodruffKey'),\n    btnTorqueMode: $('btnTorqueMode'),\n    btnPowerMode: $('btnPowerMode'),\n    btnCalculate: $('btnCalculate'),\n    resultsSection: $('resultsSection'),\n    torqueInputs: $('torqueInputs'),\n    powerInputs: $('powerInputs'),\n    fieldFlatL: $('fieldFlatL'),\n    fieldWoodruffDk: $('fieldWoodruffDk'),\n    inputT: $('inputT'), inputP: $('inputP'), inputN: $('inputN'),\n    inputD: $('inputD'), inputB: $('inputB'), inputH: $('inputH'),\n    inputL: $('inputL'), inputDk: $('inputDk'),\n    inputTauAllow: $('inputTauAllow'), inputSigmaAllow: $('inputSigmaAllow'),\n    resT: $('resT'), resFt: $('resFt'), resAs: $('resAs'), resAb: $('resAb'),\n    resTau: $('resTau'), resSigma: $('resSigma'),\n    resTauAllow: $('resTauAllow'), resSigmaAllow: $('resSigmaAllow'),\n    resSfShear: $('resSfShear'), resSfBearing: $('resSfBearing'),\n    barShear: $('barShear'), barBearing: $('barBearing'),\n    pctShear: $('pctShear'), pctBearing: $('pctBearing')\n  };\n\n  function fmt(val, decimals) {\n    decimals = decimals === undefined ? 2 : decimals;\n    if (val === null || val === undefined || !isFinite(val)) return '\u2014';\n    return val.toFixed(decimals);\n  }\n\n  function parseInput(el) {\n    var v = parseFloat(el.value);\n    return isFinite(v) && v >= 0 ? v : NaN;\n  }\n\n  function setToggle(activeBtn, inactiveBtn) {\n    activeBtn.classList.add('kjsc-active-alt');\n    inactiveBtn.classList.remove('kjsc-active-alt');\n  }\n\n  function hideResults() {\n    els.resultsSection.classList.add('kjsc-hidden');\n  }\n\n  function setKeyType(type) {\n    keyType = type;\n    hideResults();\n    if (type === 'flat') {\n      setToggle(els.btnFlatKey, els.btnWoodruffKey);\n      els.fieldFlatL.classList.remove('kjsc-hidden');\n      els.fieldWoodruffDk.classList.add('kjsc-hidden');\n    } else {\n      setToggle(els.btnWoodruffKey, els.btnFlatKey);\n      els.fieldFlatL.classList.add('kjsc-hidden');\n      els.fieldWoodruffDk.classList.remove('kjsc-hidden');\n    }\n  }\n\n  function setLoadMode(mode) {\n    loadMode = mode;\n    hideResults();\n    if (mode === 'torque') {\n      setToggle(els.btnTorqueMode, els.btnPowerMode);\n      els.torqueInputs.classList.remove('kjsc-hidden');\n      els.powerInputs.classList.add('kjsc-hidden');\n    } else {\n      setToggle(els.btnPowerMode, els.btnTorqueMode);\n      els.torqueInputs.classList.add('kjsc-hidden');\n      els.powerInputs.classList.remove('kjsc-hidden');\n    }\n  }\n\n  function getBarClass(pct) {\n    if (pct > 100) return 'kjsc-bar-red';\n    if (pct >= 80) return 'kjsc-bar-amber';\n    return 'kjsc-bar-green';\n  }\n\n  function updateProgressBar(barEl, pctEl, stress, allowable) {\n    var pct = allowable > 0 ? (stress \/ allowable) * 100 : 0;\n    barEl.style.width = Math.min(pct, 100) + '%';\n    barEl.className = 'kjsc-bar-fill ' + getBarClass(pct);\n    pctEl.textContent = fmt(pct, 1) + '% of limit';\n    pctEl.className = 'kjsc-bar-pct' + (pct > 100 ? ' kjsc-over' : pct >= 80 ? ' kjsc-warn' : '');\n  }\n\n  function calculate() {\n    var d = parseInput(els.inputD);\n    var b = parseInput(els.inputB);\n    var h = parseInput(els.inputH);\n    var tauAllow = parseInput(els.inputTauAllow);\n    var sigmaAllow = parseInput(els.inputSigmaAllow);\n    var T, P, n, activeLength, As, Ab, Dk, Ft, tau, sigma, sfShear, sfBearing;\n\n    if (loadMode === 'torque') {\n      T = parseInput(els.inputT);\n    } else {\n      P = parseInput(els.inputP);\n      n = parseInput(els.inputN);\n      T = n > 0 ? 9550 * P \/ n : NaN;\n    }\n\n    if (keyType === 'flat') {\n      activeLength = parseInput(els.inputL);\n      As = isFinite(activeLength) && isFinite(b) ? b * activeLength : NaN;\n      Ab = isFinite(activeLength) && isFinite(h) ? 0.5 * h * activeLength : NaN;\n    } else {\n      Dk = parseInput(els.inputDk);\n      activeLength = (isFinite(h) && isFinite(Dk) && Dk > h && h > 0) ? 2 * Math.sqrt(h * (Dk - h)) : NaN;\n      As = isFinite(activeLength) && isFinite(b) ? b * activeLength : NaN;\n      Ab = isFinite(activeLength) && isFinite(h) ? 0.5 * h * activeLength : NaN;\n    }\n\n    Ft = isFinite(T) && isFinite(d) && d > 0 ? 2000 * T \/ d : NaN;\n    tau = isFinite(Ft) && isFinite(As) && As > 0 ? Ft \/ As : NaN;\n    sigma = isFinite(Ft) && isFinite(Ab) && Ab > 0 ? Ft \/ Ab : NaN;\n    sfShear = isFinite(tau) && tau > 0 && isFinite(tauAllow) ? tauAllow \/ tau : NaN;\n    sfBearing = isFinite(sigma) && sigma > 0 && isFinite(sigmaAllow) ? sigmaAllow \/ sigma : NaN;\n\n    els.resT.textContent = fmt(T);\n    els.resFt.textContent = fmt(Ft, 1);\n    els.resAs.textContent = fmt(As, 1);\n    els.resAb.textContent = fmt(Ab, 1);\n    els.resTau.textContent = fmt(tau) + ' MPa';\n    els.resSigma.textContent = fmt(sigma) + ' MPa';\n    els.resTauAllow.textContent = fmt(tauAllow) + ' MPa';\n    els.resSigmaAllow.textContent = fmt(sigmaAllow) + ' MPa';\n    els.resSfShear.textContent = fmt(sfShear, 2);\n    els.resSfBearing.textContent = fmt(sfBearing, 2);\n    els.resSfShear.className = 'kjsc-sf ' + (sfShear >= 1 ? 'kjsc-sf-ok' : 'kjsc-sf-bad');\n    els.resSfBearing.className = 'kjsc-sf ' + (sfBearing >= 1 ? 'kjsc-sf-ok' : 'kjsc-sf-bad');\n\n    if (isFinite(tau) && isFinite(tauAllow)) updateProgressBar(els.barShear, els.pctShear, tau, tauAllow);\n    if (isFinite(sigma) && isFinite(sigmaAllow)) updateProgressBar(els.barBearing, els.pctBearing, sigma, sigmaAllow);\n  }\n\n  function onCalculate() {\n    calculate();\n    els.resultsSection.classList.remove('kjsc-hidden');\n  }\n\n  function applyDefaults(type) {\n    var defs = DEFAULTS[type];\n    els.inputD.value = defs.d;\n    els.inputB.value = defs.b;\n    els.inputH.value = defs.h;\n    els.inputT.value = defs.T;\n    els.inputTauAllow.value = defs.tauAllow;\n    els.inputSigmaAllow.value = defs.sigmaAllow;\n    els.inputP.value = defs.P;\n    els.inputN.value = defs.n;\n    if (type === 'flat') els.inputL.value = defs.L;\n    else els.inputDk.value = defs.Dk;\n  }\n\n  els.btnFlatKey.addEventListener('click', function () { applyDefaults('flat'); setKeyType('flat'); });\n  els.btnWoodruffKey.addEventListener('click', function () { applyDefaults('woodruff'); setKeyType('woodruff'); });\n  els.btnTorqueMode.addEventListener('click', function () { setLoadMode('torque'); });\n  els.btnPowerMode.addEventListener('click', function () { setLoadMode('power'); });\n  els.btnCalculate.addEventListener('click', onCalculate);\n\n  root.querySelectorAll('input[type=\"number\"]').forEach(function (inp) {\n    inp.addEventListener('input', hideResults);\n    inp.addEventListener('change', hideResults);\n  });\n})();\n<\/script>\n<!-- END EMBED -->\n\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>The Key Joint Strength Calculator is a practical online engineering tool designed to evaluate the strength and load-carrying capacity of keyed shaft connections. By entering&#8230;<\/p>","protected":false},"author":2,"featured_media":24523,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"pmpro_default_level":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[8520],"tags":[8531,3390,2940,8529,8530],"class_list":["post-24521","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mechanical-basic-component-design","tag-load-capacity","tag-mechanical-engineering","tag-shaft-design","tag-spline-shaft","tag-torque-calculator","pmpro-has-access"],"acf":[],"jetpack_featured_media_url":"https:\/\/www.mechstream.com\/wp-content\/uploads\/2026\/07\/Key-Joint-Strength-Calculator.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/posts\/24521","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/comments?post=24521"}],"version-history":[{"count":4,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/posts\/24521\/revisions"}],"predecessor-version":[{"id":24527,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/posts\/24521\/revisions\/24527"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/media\/24523"}],"wp:attachment":[{"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/media?parent=24521"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/categories?post=24521"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/tags?post=24521"}],"curies":[{"name":"\u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}