<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>동력전달 &#8211; MyEngNote</title>
	<atom:link href="https://myengnote.com/tag/%eb%8f%99%eb%a0%a5%ec%a0%84%eb%8b%ac/feed/" rel="self" type="application/rss+xml" />
	<link>https://myengnote.com</link>
	<description></description>
	<lastBuildDate>Wed, 08 Jul 2026 04:43:13 +0000</lastBuildDate>
	<language>ko-KR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1</generator>
	<item>
		<title>벨트-풀리 계산기 &#038; 시뮬레이터</title>
		<link>https://myengnote.com/belt-pulley-speed-calculator-simulator-2/</link>
					<comments>https://myengnote.com/belt-pulley-speed-calculator-simulator-2/#respond</comments>
		
		<dc:creator><![CDATA[동동]]></dc:creator>
		<pubDate>Wed, 27 May 2026 00:00:00 +0000</pubDate>
				<category><![CDATA[공학계산기]]></category>
		<category><![CDATA[기계설계]]></category>
		<category><![CDATA[동력전달]]></category>
		<category><![CDATA[물리시뮬레이터]]></category>
		<category><![CDATA[벨트계산기]]></category>
		<category><![CDATA[벨트풀리]]></category>
		<guid isPermaLink="false">https://myengnote.com/belt-pulley-speed-calculator-simulator-2/</guid>

					<description><![CDATA[두 풀리의 지름, 축간거리, 입력 RPM을 조절하여 벨트 길이, 접촉각, 벨트 속도 및 출력 속도를 실시간 계산하고 부드럽게 구동되는 벨트 전동 시스템을 시각화하는 초정밀 2D 시뮬레이터입니다.]]></description>
										<content:encoded><![CDATA[
<h2 style="font-size: 1.6em; font-weight: 800; color: #0c0e25; border-bottom: 2px solid #00f2fe; padding-bottom: 8px; margin-bottom: 20px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 벨트-풀리 계산기 &#038; 시뮬레이터</h2>


<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&#038;family=Outfit:wght@400;500;600;700;800&#038;display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
/* Scoped & Isolated Styles for beltpulley-calculator-wrapper */
        /* Modern Reset and Design Tokens */
        .beltpulley-calculator-wrapper *, .beltpulley-calculator-wrapper *::before, .beltpulley-calculator-wrapper *::after {
            box-sizing: border-box;
            margin: 0;
            padding: 0;
        }
        .beltpulley-calculator-wrapper {
            --color-bg-dark: #f8f9fd;
            --color-bg-deep: #ffffff;
            --color-panel-bg: rgba(255, 255, 255, 0.85);
            --color-border: rgba(0, 0, 0, 0.06);
            --color-border-hover: rgba(0, 0, 0, 0.12);
            --color-text-main: #1e293b;
            --color-text-muted: #475569;
            --color-text-dark: #94a3b8;
            --color-cyan: #0284c7;
            --color-cyan-glow: rgba(2, 132, 199, 0.15);
            --color-magenta: #db2777;
            --color-magenta-glow: rgba(219, 39, 119, 0.15);
            --color-purple: #7c3aed;
            --color-purple-glow: rgba(124, 58, 237, 0.12);
            --color-success: #10b981;
            --gradient-primary: linear-gradient(135deg, var(--color-cyan) 0%, var(--color-purple) 100%);
            --gradient-accent: linear-gradient(135deg, var(--color-magenta) 0%, var(--color-purple) 100%);
            --gradient-panel: linear-gradient(180deg, rgba(255, 255, 255, 0.9) 0%, rgba(248, 250, 252, 0.95) 100%);
            --font-heading: 'Outfit', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
            --font-body: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
            --shadow-neon-cyan: 0 0 15px var(--color-cyan-glow);
            --shadow-neon-magenta: 0 0 15px var(--color-magenta-glow);
            --shadow-card: 0 8px 32px 0 rgba(15, 23, 42, 0.05);
            --blur-glass: blur(16px);
        }
        .beltpulley-calculator-wrapper {
            background-color: var(--color-bg-dark);
            color: var(--color-text-main);
            font-family: var(--font-body);
            min-height: 100vh;
            display: flex;
            justify-content: center;
            overflow-x: hidden;
            position: relative;
        }
        .app-background-glow {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            z-index: -1;
            overflow: hidden;
            pointer-events: none;
        }
        .app-background-glow::before, 
        .app-background-glow::after {
            content: '';
            position: absolute;
            width: 600px;
            height: 600px;
            border-radius: 50%;
            filter: blur(140px);
            opacity: 0.15;
        }
        .app-background-glow::before {
            background: var(--color-cyan);
            top: -10%;
            right: -5%;
            animation: pulse-slow 15s infinite alternate;
        }
        .app-background-glow::after {
            background: var(--color-purple);
            bottom: -10%;
            left: -5%;
            animation: pulse-slow 20s infinite alternate-reverse;
        }
        @keyframes pulse-slow {
            0% { transform: scale(1) translate(0, 0); opacity: 0.12; }
            100% { transform: scale(1.2) translate(50px, 50px); opacity: 0.22; }
        }
        .app-container {
            width: 100%;
            max-width: 1440px;
            padding: 24px;
            display: flex;
            flex-direction: column;
            gap: 24px;
        }
        .app-header {
            display: flex;
            justify-content: space-between;
            align-items: center;
            padding: 20px 24px;
            background: var(--color-panel-bg);
            backdrop-filter: var(--blur-glass);
            border: 1px solid var(--color-border);
            border-radius: 16px;
            box-shadow: var(--shadow-card);
        }
        .logo-area {
            display: flex;
            align-items: center;
            gap: 16px;
        }
        .logo-icon {
            font-size: 32px;
            background: linear-gradient(135deg, var(--color-cyan), var(--color-magenta));
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
            display: flex;
            align-items: center;
            justify-content: center;
        }
        .logo-area h1 {
            font-family: var(--font-heading);
            font-weight: 800;
            font-size: 24px;
            letter-spacing: 1.5px;
            background: linear-gradient(90deg, var(--color-text-main), var(--color-text-muted));
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
        }
        .logo-area .subtitle {
            font-size: 12px;
            color: var(--color-text-muted);
            font-weight: 500;
            letter-spacing: 0.5px;
        }
        .header-badge {
            display: flex;
            align-items: center;
            gap: 10px;
            background: rgba(16, 185, 129, 0.1);
            border: 1px solid rgba(16, 185, 129, 0.2);
            padding: 6px 14px;
            border-radius: 20px;
        }
        .pulse-dot {
            width: 8px;
            height: 8px;
            background-color: var(--color-success);
            border-radius: 50%;
            box-shadow: 0 0 10px var(--color-success);
            animation: pulse-dot-anim 1.5s infinite;
        }
        @keyframes pulse-dot-anim {
            0% { transform: scale(0.9); opacity: 0.6; }
            50% { transform: scale(1.2); opacity: 1; }
            100% { transform: scale(0.9); opacity: 0.6; }
        }
        .badge-text {
            font-size: 11px;
            font-weight: 600;
            color: var(--color-success);
            letter-spacing: 0.5px;
        }
        .app-main-grid {
            display: grid;
            grid-template-columns: 340px 1fr 340px;
            gap: 24px;
            align-items: start;
        }
        .panel {
            background: var(--gradient-panel);
            backdrop-filter: var(--blur-glass);
            border: 1px solid var(--color-border);
            border-radius: 20px;
            padding: 24px;
            box-shadow: var(--shadow-card);
            display: flex;
            flex-direction: column;
            gap: 20px;
            transition: border-color 0.3s ease, box-shadow 0.3s ease;
        }
        .panel:hover {
            border-color: var(--color-border-hover);
        }
        .panel-header {
            display: flex;
            align-items: center;
            gap: 12px;
            border-bottom: 1px solid var(--color-border);
            padding-bottom: 14px;
        }
        .panel-header i {
            font-size: 18px;
        }
        .panel-header h2 {
            font-family: var(--font-heading);
            font-size: 18px;
            font-weight: 600;
            letter-spacing: 0.5px;
        }
        .text-cyan { color: #0284c7; }
        .text-magenta { color: #db2777; }
        .text-purple { color: var(--color-purple); }
        .control-panel {
            grid-column: 1;
        }
        .input-group {
            display: flex;
            flex-direction: column;
            gap: 12px;
        }
        .input-label-row {
            display: flex;
            justify-content: space-between;
            align-items: center;
        }
        .input-label-row label {
            font-size: 13px;
            font-weight: 600;
            color: var(--color-text-main);
            display: flex;
            align-items: center;
            gap: 8px;
        }
        .helper-text {
            font-size: 10px;
            color: var(--color-text-muted);
            font-weight: 500;
        }
                .number-input-wrapper {
            display: flex;
            position: relative;
            border-radius: 8px;
            overflow: hidden;
            border: 1px solid var(--color-border);
            background: #ffffff;
            transition: all 0.2s ease;
        }
        .number-input-wrapper:focus-within {
            border-color: var(--color-cyan);
            box-shadow: 0 0 10px var(--color-cyan-glow);
        }
        .number-input-wrapper:focus-within {
            border-color: #0284c7;
            box-shadow: 0 0 10px var(--color-cyan-glow);
        }
                .custom-number-input {
            flex: 1;
            width: 0;
            min-width: 0;
            background: #f8fafc !important;
            border: none !important;
            outline: none !important;
            color: #0f172a !important;
            padding: 10px 14px !important;
            font-family: var(--font-body) !important;
            font-size: 15px !important;
            font-weight: 700 !important;
            text-align: right !important;
            box-shadow: none !important;
            -webkit-appearance: none !important;
            -moz-appearance: textfield !important;
        }
        .custom-number-input::-webkit-outer-spin-button,
        .custom-number-input::-webkit-inner-spin-button {
            -webkit-appearance: none;
            margin: 0;
        }
        .custom-number-input::-webkit-outer-spin-button,
        .custom-number-input::-webkit-inner-spin-button {
            -webkit-appearance: none;
            margin: 0;
        }
                .unit-badge {
            background: rgba(0, 0, 0, 0.03);
            color: var(--color-text-muted);
            font-size: 11px;
            font-weight: 700;
            padding: 0 14px;
            display: flex;
            align-items: center;
            justify-content: center;
            border-left: 1px solid var(--color-border);
            pointer-events: none;
            flex-shrink: 0;
        }
        .custom-slider {
            -webkit-appearance: none;
            width: 100%;
            height: 6px;
            border-radius: 3px;
            background: rgba(0, 0, 0, 0.05);
            outline: none;
            margin: 8px 0;
            transition: background 0.2s ease;
        }
        .custom-slider::-webkit-slider-thumb {
            -webkit-appearance: none;
            appearance: none;
            width: 18px;
            height: 18px;
            border-radius: 50%;
            cursor: pointer;
            transition: transform 0.1s ease, box-shadow 0.2s ease;
        }
        /* D1 Webkit Thumb */
        #slider-d1::-webkit-slider-thumb {
            background: var(--color-cyan);
            box-shadow: 0 0 10px var(--color-cyan);
        }
        #slider-d1::-webkit-slider-thumb:hover {
            transform: scale(1.2);
            box-shadow: 0 0 15px var(--color-cyan), 0 0 5px #fff;
        }
        /* D1 Firefox Thumb */
        #slider-d1::-moz-range-thumb {
            width: 18px;
            height: 18px;
            border: none;
            border-radius: 50%;
            background: var(--color-cyan);
            box-shadow: 0 0 10px var(--color-cyan);
            cursor: pointer;
            transition: transform 0.1s ease, box-shadow 0.2s ease;
        }
        #slider-d1::-moz-range-thumb:hover {
            transform: scale(1.2);
            box-shadow: 0 0 15px var(--color-cyan), 0 0 5px #fff;
        }
        /* D2 Webkit Thumb */
        #slider-d2::-webkit-slider-thumb {
            background: var(--color-magenta);
            box-shadow: 0 0 10px var(--color-magenta);
        }
        #slider-d2::-webkit-slider-thumb:hover {
            transform: scale(1.2);
            box-shadow: 0 0 15px var(--color-magenta), 0 0 5px #fff;
        }
        /* D2 Firefox Thumb */
        #slider-d2::-moz-range-thumb {
            width: 18px;
            height: 18px;
            border: none;
            border-radius: 50%;
            background: var(--color-magenta);
            box-shadow: 0 0 10px var(--color-magenta);
            cursor: pointer;
            transition: transform 0.1s ease, box-shadow 0.2s ease;
        }
        #slider-d2::-moz-range-thumb:hover {
            transform: scale(1.2);
            box-shadow: 0 0 15px var(--color-magenta), 0 0 5px #fff;
        }
        /* C (Center Distance) Webkit Thumb */
        #slider-c::-webkit-slider-thumb {
            background: #ffffff;
            box-shadow: 0 0 10px var(--color-cyan);
        }
        #slider-c::-webkit-slider-thumb:hover {
            transform: scale(1.2);
            box-shadow: 0 0 15px var(--color-cyan), 0 0 5px #fff;
        }
        /* C (Center Distance) Firefox Thumb */
        #slider-c::-moz-range-thumb {
            width: 18px;
            height: 18px;
            border: none;
            border-radius: 50%;
            background: #ffffff;
            box-shadow: 0 0 10px var(--color-cyan);
            cursor: pointer;
            transition: transform 0.1s ease, box-shadow 0.2s ease;
        }
        #slider-c::-moz-range-thumb:hover {
            transform: scale(1.2);
            box-shadow: 0 0 15px var(--color-cyan), 0 0 5px #fff;
        }
        /* RPM Webkit Thumb */
        #slider-rpm::-webkit-slider-thumb {
            background: var(--color-purple);
            box-shadow: 0 0 10px var(--color-purple);
        }
        #slider-rpm::-webkit-slider-thumb:hover {
            transform: scale(1.2);
            box-shadow: 0 0 15px var(--color-purple), 0 0 5px #fff;
        }
        /* RPM Firefox Thumb */
        #slider-rpm::-moz-range-thumb {
            width: 18px;
            height: 18px;
            border: none;
            border-radius: 50%;
            background: var(--color-purple);
            box-shadow: 0 0 10px var(--color-purple);
            cursor: pointer;
            transition: transform 0.1s ease, box-shadow 0.2s ease;
        }
        #slider-rpm::-moz-range-thumb:hover {
            transform: scale(1.2);
            box-shadow: 0 0 15px var(--color-purple), 0 0 5px #fff;
        }
        .control-actions {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 10px;
            margin-top: 10px;
        }
        .presets-section {
            display: flex;
            flex-direction: column;
            gap: 12px;
            border-top: 1px solid var(--color-border);
            padding-top: 18px;
        }
        .presets-section h3 {
            font-size: 13px;
            font-weight: 700;
            color: var(--color-text-main);
            display: flex;
            align-items: center;
            gap: 8px;
        }
        .presets-grid {
            display: grid;
            grid-template-columns: 1fr;
            gap: 8px;
        }
        .preset-btn {
            background: rgba(0, 0, 0, 0.015);
            border: 1px solid var(--color-border);
            border-radius: 10px;
            padding: 8px 12px;
            cursor: pointer;
            color: var(--color-text-main);
            display: flex;
            align-items: center;
            gap: 12px;
            text-align: left;
            transition: all 0.2s ease;
        }
        .preset-btn:hover {
            background: rgba(0, 0, 0, 0.05);
            border-color: var(--color-border);
            transform: translateX(4px);
        }
        .preset-btn.active {
            background: linear-gradient(90deg, var(--color-cyan-glow), var(--color-magenta-glow));
            border-color: #0284c7;
            box-shadow: 0 0 10px var(--color-cyan-glow);
        }
        .preset-icon {
            width: 28px;
            height: 28px;
            background: rgba(0, 0, 0, 0.02);
            border-radius: 8px;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 12px;
            color: #0284c7;
            transition: all 0.2s ease;
        }
        .preset-btn:hover .preset-icon, .preset-btn.active .preset-icon {
            background: var(--gradient-primary);
            color: #fff;
            box-shadow: var(--shadow-neon-cyan);
        }
        .preset-name {
            font-size: 12px;
            font-weight: 600;
            letter-spacing: 0.25px;
        }
        .simulation-panel {
            grid-column: 2;
            align-self: start;
            justify-content: flex-start;
            min-width: 0;
        }
        .simulation-panel .panel-header {
            justify-content: space-between;
        }
        .canvas-scale-indicator {
            font-size: 11px;
            color: var(--color-text-muted);
            background: rgba(0, 0, 0, 0.02);
            padding: 4px 10px;
            border-radius: 6px;
            border: 1px solid var(--color-border);
        }
        .canvas-wrapper {
            position: relative;
            width: 100%;
            background: radial-gradient(circle at center, #ffffff 0%, #f1f5f9 100%);
            border: 1px solid rgba(0, 0, 0, 0.06);
            border-radius: 16px;
            overflow: hidden;
        }
        #physics-canvas {
            display: block;
            width: 100%;
            height: auto;
            aspect-ratio: 16 / 10;
        }
        .canvas-overlay-data {
            position: absolute;
            top: 16px;
            left: 16px;
            pointer-events: none;
            display: flex;
            flex-direction: column;
            gap: 6px;
        }
        .overlay-item {
            background: transparent;
            color: var(--color-text-main);
            padding: 4px 0;
            display: flex;
            align-items: center;
            gap: 6px;
            font-size: 11px;
        }
        .overlay-item .label {
            color: var(--color-text-muted);
            font-weight: 500;
        }
        .overlay-item .value {
            font-weight: 700;
        }
        .simulation-metrics-strip {
            display: flex;
            background: rgba(0, 0, 0, 0.01);
            border: 1px solid var(--color-border);
            border-radius: 12px;
            padding: 12px 20px;
            justify-content: space-around;
            align-items: center;
            gap: 10px;
            margin-top: 10px;
        }
        .mini-metric {
            display: flex;
            flex-direction: column;
            align-items: center;
            gap: 4px;
            text-align: center;
        }
        .mini-metric .label {
            font-size: 10px;
            font-weight: 600;
            color: var(--color-text-muted);
            text-transform: uppercase;
            letter-spacing: 0.5px;
        }
        .mini-metric .value {
            font-size: 14px;
            font-weight: 700;
            color: var(--color-text-main);
            font-family: var(--font-heading);
        }
        .mini-divider {
            width: 1px;
            height: 24px;
            background: rgba(0, 0, 0, 0.03);
        }
        .results-panel {
            grid-column: 3;
        }
        .ratio-readout-box {
            background: linear-gradient(135deg, rgba(0, 242, 254, 0.08) 0%, rgba(138, 43, 226, 0.03) 100%);
            border: 1px solid rgba(0, 242, 254, 0.25);
            border-radius: 16px;
            padding: 20px;
            text-align: center;
            display: flex;
            flex-direction: column;
            align-items: center;
            gap: 6px;
            box-shadow: 0 0 15px rgba(0, 242, 254, 0.05);
        }
        .ratio-title {
            font-size: 11px;
            font-weight: 700;
            color: #0284c7;
            letter-spacing: 1px;
            text-transform: uppercase;
        }
        .ratio-value {
            font-family: var(--font-heading);
            font-weight: 800;
            font-size: 26px;
            background: linear-gradient(90deg, var(--color-text-main), var(--color-cyan));
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
        }
        .ratio-type {
            font-size: 11px;
            font-weight: 600;
            color: var(--color-text-muted);
        }
        .results-grid {
            display: flex;
            flex-direction: column;
            gap: 12px;
        }
        .result-card {
            background: rgba(255, 255, 255, 0.85); box-shadow: 0 2px 8px rgba(0,0,0,0.03);
            border: 1px solid var(--color-border);
            border-radius: 12px;
            padding: 12px 16px;
            display: flex;
            align-items: center;
            gap: 16px;
            transition: all 0.2s ease;
        }
        .result-card:hover {
            transform: translateY(-2px);
            border-color: rgba(0, 242, 254, 0.2);
            background: rgba(0, 242, 254, 0.03);
        }
        .card-icon {
            width: 38px;
            height: 38px;
            background: rgba(0, 0, 0, 0.015);
            border: 1px solid var(--color-border);
            border-radius: 10px;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 14px;
            color: var(--color-text-muted);
            transition: all 0.2s ease;
        }
        .result-card:hover .card-icon {
            color: #0284c7;
            border-color: rgba(0, 242, 254, 0.3);
            background: rgba(0, 242, 254, 0.1);
        }
        .card-content {
            display: flex;
            flex-direction: column;
            gap: 2px;
        }
        .card-unit {
            font-size: 11px;
            font-weight: 600;
            color: var(--color-text-muted);
        }
        .card-value {
            font-family: var(--font-heading);
            font-weight: 700;
            font-size: 17px;
            color: var(--color-text-main);
        }
        .formula-card {
            background: rgba(0, 0, 0, 0.01);
            border: 1px solid var(--color-border);
            border-radius: 12px;
            padding: 16px;
            display: flex;
            flex-direction: column;
            gap: 8px;
            font-size: 12px;
        }
        .formula-card h4 {
            font-weight: 700;
            color: var(--color-text-main);
        }
        .formula-equation {
            font-family: monospace;
            color: #0284c7;
            font-size: 13px;
            background: #f8fafc; border-color: var(--color-border);
            padding: 6px 10px;
            border-radius: 6px;
            border: 1px solid var(--color-border);
            text-align: center;
        }
        /* Container Query for Responsiveness inside WP */
        @container beltpulley-container (max-width: 1024px) {
            .app-main-grid {
                grid-template-columns: 1fr;
            }
            .control-panel, .simulation-panel, .results-panel {
                grid-column: 1;
            }
            .simulation-panel {
                order: -1;
            }
            .app-header {
                flex-direction: column;
                gap: 16px;
                text-align: center;
            }
            .logo-area {
                flex-direction: column;
                gap: 8px;
            }
        }
        .preset-details {
            display: flex;
            flex-direction: column;
            gap: 2px;
            align-items: flex-start;
            text-align: left;
        }
        .preset-spec {
            font-size: 11px;
            color: var(--color-text-muted);
            font-weight: 500;
        }
        .preset-name {
            font-size: 13px !important;
        }
/* ━━ WordPress 레이아웃 Override: 디자인 1 (2열 컴팩트 대칭 레이아웃) ━━ */
.beltpulley-calculator-wrapper .app-main-grid,
.beltpulley-calculator-wrapper .main-grid,
.beltpulley-calculator-wrapper .sim-grid {
    display: grid !important;
    grid-template-columns: 340px 1fr !important;
    gap: 24px !important;
    align-items: start !important;
}
/* 3열 레이아웃을 2열 레이아웃으로 변경하는 특화 스타일 */
.beltpulley-calculator-wrapper .right-column {
    display: flex !important;
    flex-direction: column !important;
    gap: 24px !important;
    min-width: 0 !important;
    grid-column: 2 !important;
}
.beltpulley-calculator-wrapper .simulation-panel,
.beltpulley-calculator-wrapper .canvas-panel,
.beltpulley-calculator-wrapper .sim-panel {
    grid-column: auto !important;
    order: 1 !important;
    align-self: stretch !important;
}
.beltpulley-calculator-wrapper .control-panel {
    grid-column: 1 !important;
}
/* 2열 통합 결과 분석 영역 레이아웃 */
.beltpulley-calculator-wrapper .simulation-results-section {
    display: grid !important;
    grid-template-columns: 1.1fr 1.3fr !important;
    gap: 20px !important;
    border-top: 1px solid var(--color-border) !important;
    padding-top: 20px !important;
    margin-top: 10px !important;
    align-items: stretch !important;
}
/* Readout Box 스타일 */
.beltpulley-calculator-wrapper .simulation-results-section .ratio-readout-box,
.beltpulley-calculator-wrapper .simulation-results-section .re-readout-box,
.beltpulley-calculator-wrapper .simulation-results-section .status-readout-box,
.beltpulley-calculator-wrapper .simulation-results-section .gauge-container {
    grid-column: 1 !important;
    grid-row: 1 !important;
    margin: 0 !important;
    height: auto !important;
    display: flex !important;
    flex-direction: column !important;
    justify-content: center !important;
}
.beltpulley-calculator-wrapper .simulation-results-section .results-grid {
    grid-column: 2 !important;
    grid-row: 1 / span 2 !important;
    display: flex !important;
    flex-direction: column !important;
    gap: 12px !important;
    justify-content: flex-start !important;
}
.beltpulley-calculator-wrapper .simulation-results-section .results-grid .result-card {
    flex: none !important;
    display: flex !important;
    align-items: center !important;
    min-height: 72px !important;
    height: auto !important;
    padding: 12px 16px !important;
}
.beltpulley-calculator-wrapper .simulation-results-section .formula-card {
    grid-column: 1 !important;
    grid-row: 2 !important;
}
/* 모바일/반응형 (800px 이하) ── 항상 세로형(1열) 정렬 및 시뮬레이터 캔버스 최상단 배치 */
@media (max-width: 800px) {
    .beltpulley-calculator-wrapper .app-main-grid,
    .beltpulley-calculator-wrapper .main-grid,
    .beltpulley-calculator-wrapper .sim-grid {
        grid-template-columns: 1fr !important;
        display: flex !important;
        flex-direction: column !important;
    }
    .beltpulley-calculator-wrapper .control-panel {
        order: 2 !important;
        width: 100% !important;
    }
    .beltpulley-calculator-wrapper .right-column {
        order: 1 !important;
        width: 100% !important;
        display: flex !important;
        flex-direction: column !important;
    }
    .beltpulley-calculator-wrapper .simulation-panel,
    .beltpulley-calculator-wrapper .canvas-panel,
    .beltpulley-calculator-wrapper .sim-panel,
    .beltpulley-calculator-wrapper .canvas-section {
        order: -1 !important;
    }
    .beltpulley-calculator-wrapper .simulation-results-section {
        grid-template-columns: 1fr !important;
    }
    .beltpulley-calculator-wrapper .simulation-results-section .ratio-readout-box,
    .beltpulley-calculator-wrapper .simulation-results-section .re-readout-box,
    .beltpulley-calculator-wrapper .simulation-results-section .status-readout-box,
    .beltpulley-calculator-wrapper .simulation-results-section .gauge-container {
        grid-column: 1 !important;
        grid-row: auto !important;
        height: auto !important;
    }
    .beltpulley-calculator-wrapper .simulation-results-section .results-grid {
        grid-column: 1 !important;
        grid-row: auto !important;
    }
    .beltpulley-calculator-wrapper .simulation-results-section .formula-card {
        grid-column: 1 !important;
        grid-row: auto !important;
    }
}
.beltpulley-calculator-wrapper .app-container,
.beltpulley-calculator-wrapper .main-container {
    max-width: 100% !important;
    padding: 12px !important;
}
/* Premium Advice/Formula Card & Typography Overrides */
.beltpulley-calculator-wrapper .simulation-results-section .formula-card,
.beltpulley-calculator-wrapper .results-panel .formula-card {
    background: #ffffff !important;
    border: 1px solid var(--color-border) !important;
    border-radius: 12px !important;
    padding: 16px !important;
    box-shadow: var(--shadow-card) !important;
    transition: all 0.2s ease !important;
    display: flex !important;
    flex-direction: column !important;
    gap: 8px !important;
}
.beltpulley-calculator-wrapper .simulation-results-section .formula-card h4,
.beltpulley-calculator-wrapper .results-panel .formula-card h4 {
    font-weight: 700 !important;
    color: var(--color-text-main) !important;
}
.beltpulley-calculator-wrapper #text-judgment {
    font-size: 12px !important;
    font-weight: 500 !important;
    color: var(--color-text-muted) !important;
    line-height: 1.6 !important;
    word-break: keep-all !important;
}
</style>
<div class="beltpulley-calculator-wrapper" style="position: relative; width: 100%; box-sizing: border-box; overflow: hidden; margin: 30px auto; border-radius: 20px;">
    <div class="app-background-glow" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 1; pointer-events: none; overflow: hidden;"></div>
    <div style="position: relative; z-index: 2; width: 100%;">
    <div class="app-container">
        <!-- Header -->
        <header class="app-header">
            <div class="logo-area">
                <div class="logo-icon"><i class="fa-solid fa-circle-nodes"></i></div>
                <div>
                    <h1>BELT DRIVE</h1>
                    <div class="subtitle">벨트-풀리 속도 계산기 &#038; 2D 시뮬레이터</div>
                </div>
            </div>
            <div class="header-badge">
                <div class="pulse-dot"></div>
                <div class="badge-text">2D PHYSICS ENGINE ACTIVE</div>
            </div>
        </header>
        <!-- Main Layout Grid -->
        <main class="app-main-grid">
            <!-- Left Panel: Controls -->
            <section class="panel control-panel">
                <div class="panel-header">
                    <i class="fa-solid fa-sliders text-cyan"></i>
                    <h2>시뮬레이션 제어 변수</h2>
                </div>
                <!-- Pulley 1 Diameter D1 -->
                <div class="input-group">
                    <div class="input-label-row">
                        <label><i class="fa-solid fa-circle text-cyan"></i> 구동 풀리 지름 (D₁)</label>
                        <span class="helper-text">구동측 (50 ~ 600 mm)</span>
                    </div>
                    <div class="number-input-wrapper">
                        <input type="number" id="input-d1" class="custom-number-input" min="50" max="600" value="100">
                        <div class="unit-badge">mm</div>
                    </div>
                    <input type="range" id="slider-d1" class="custom-slider" min="50" max="600" value="100">
                </div>
                <!-- Pulley 2 Diameter D2 -->
                <div class="input-group">
                    <div class="input-label-row">
                        <label><i class="fa-solid fa-circle text-magenta"></i> 피동 풀리 지름 (D₂)</label>
                        <span class="helper-text">피동측 (50 ~ 600 mm)</span>
                    </div>
                    <div class="number-input-wrapper">
                        <input type="number" id="input-d2" class="custom-number-input" min="50" max="600" value="200">
                        <div class="unit-badge">mm</div>
                    </div>
                    <input type="range" id="slider-d2" class="custom-slider" min="50" max="600" value="200">
                </div>
                <!-- Center Distance C -->
                <div class="input-group">
                    <div class="input-label-row">
                        <label><i class="fa-solid fa-arrows-left-right"></i> 축간 중심거리 (C)</label>
                        <span class="helper-text">축간거리 (최소 ~ 1200 mm)</span>
                    </div>
                    <div class="number-input-wrapper">
                        <input type="number" id="input-c" class="custom-number-input" min="200" max="1200" value="450">
                        <div class="unit-badge">mm</div>
                    </div>
                    <input type="range" id="slider-c" class="custom-slider" min="200" max="1200" value="450">
                </div>
                <!-- Input RPM N1 -->
                <div class="input-group">
                    <div class="input-label-row">
                        <label><i class="fa-solid fa-gauge-high text-purple"></i> 입력 회전수 (N₁)</label>
                        <span class="helper-text">입력 속도 (0 ~ 2500 RPM)</span>
                    </div>
                    <div class="number-input-wrapper">
                        <input type="number" id="input-rpm" class="custom-number-input" min="0" max="2500" value="240">
                        <div class="unit-badge">RPM</div>
                    </div>
                    <input type="range" id="slider-rpm" class="custom-slider" min="0" max="2500" value="240">
                </div>
                <!-- Simulation Controls -->
                <div class="control-actions">
                    <button id="btn-play-pause" class="action-btn">
                        <i class="fa-solid fa-pause"></i> <span>일시정지</span>
                    </button>
                    <button id="btn-reverse" class="action-btn">
                        <i class="fa-solid fa-backward"></i> <span>방향 전환</span>
                    </button>
                </div>
                <!-- Presets -->
                <div class="presets-section">
                    <h3><i class="fa-solid fa-tags text-cyan"></i> 벨트-풀리 프리셋</h3>
                    <div class="presets-grid">
                        <button class="preset-btn" data-preset="reduction">
                            <div class="preset-icon"><i class="fa-solid fa-down-long"></i></div>
                            <div class="preset-details"><span class="preset-name">2:1 V벨트 감속 시스템</div>
                        </button>
                        <button class="preset-btn" data-preset="mesh1to1">
                            <div class="preset-icon"><i class="fa-solid fa-left-right"></i></div>
                            <div class="preset-name">1:1 등속 동력 전달</div>
                        </button>
                        <button class="preset-btn" data-preset="increase">
                            <div class="preset-icon"><i class="fa-solid fa-up-long"></i></div>
                            <div class="preset-name">1:3 기계식 증속 전동</div>
                        </button>
                    </div>
                </div>
            </section>
            <!-- Auto Injected Right Column wrapper for Design 1 -->
            <div class="right-column">
                <section class="panel simulation-panel">
                                <div class="panel-header">
                                    <div style="display: flex; align-items: center; gap: 12px;">
                                        <i class="fa-solid fa-circle-nodes text-cyan"></i>
                                        <h2>실시간 벨트 주행 물리 뷰</h2>
                                    </div>
                                    <div id="txt-canvas-scale" class="canvas-scale-indicator">스케일 자동 조정</div>
                                </div>
                                <div class="canvas-wrapper">
                                    <canvas id="physics-canvas"></canvas>
                                    <!-- Overlay Floating Data -->
                                    <div class="canvas-overlay-data">
                                        <div class="overlay-item">
                                            <span class="label">총 벨트 길이 (L):</span>
                                            <span class="value text-cyan" id="txt-belt-length-overlay">0.0 mm</span>
                                        </div>
                                    </div>
                                </div>
                                <!-- Mini Metrics -->
                                <div class="simulation-metrics-strip">
                                    <div class="mini-metric">
                                        <div class="label">구동 풀리 접촉각</span><span class="preset-spec">θ₁</span></div>
                                        <div id="txt-lap-angle1" class="value">0.0°</div>
                                    </div>
                                    <div class="mini-divider"></div>
                                    <div class="mini-metric">
                                        <div class="label">피동 풀리 접촉각 (θ₂)</div>
                                        <div id="txt-lap-angle2" class="value">0.0°</div>
                                    </div>
                                </div>
                                <!-- Integrated Results Analysis Section -->
                            <div class="simulation-results-section">
                                <div class="ratio-readout-box">
                                            <div class="ratio-title">최종 풀리 배율 (i)</div>
                                            <div id="txt-pulley-ratio" class="ratio-value">2.00 : 1</div>
                                            <div id="txt-ratio-type" class="ratio-type">2.00배 감속 전동</div>
                                        </div>
                                <div class="results-grid">
                                        <!-- Belt Pitch Speed -->
                                        <div class="result-card">
                                            <div class="card-icon"><i class="fa-solid fa-gauge-simple text-cyan"></i></div>
                                            <div class="card-content">
                                                <span class="card-unit">벨트 주속도 (v)</span>
                                                <span id="txt-belt-speed" class="card-value">0.0 m/s</span>
                                            </div>
                                        </div>
                                        <!-- Pulley 2 Output Speed -->
                                        <div class="result-card">
                                            <div class="card-icon"><i class="fa-solid fa-rotate text-magenta"></i></div>
                                            <div class="card-content">
                                                <span class="card-unit">피동 풀리 회전수 (N₂)</span>
                                                <span id="txt-n2" class="card-value">0.0 RPM</span>
                                            </div>
                                        </div>
                                        <!-- Calculated Belt Length -->
                                        <div class="result-card">
                                            <div class="card-icon"><i class="fa-solid fa-ruler-horizontal text-purple"></i></div>
                                            <div class="card-content">
                                                <span class="card-unit">계산된 표준 벨트 길이 (L)</span>
                                                <span id="txt-belt-length" class="card-value">0.0 mm</span>
                                            </div>
                                        </div>
                                        <!-- Torque Factor -->
                                        <div class="result-card">
                                            <div class="card-icon"><i class="fa-solid fa-bolt text-success"></i></div>
                                            <div class="card-content">
                                                <span class="card-unit">출력 토크 변환율 (T₂/T₁)</span>
                                                <span id="txt-torque-mult" class="card-value">100%</span>
                                            </div>
                                        </div>
                                    </div>
                                <div class="formula-card">
                                            <h4><i class="fa-solid fa-circle-info text-cyan"></i> 벨트 전동 공학식</h4>
                                            <div class="formula-equation">
                                                L ≈ 2C + π(D₁+D₂)/2 + (D₂-D₁)²/4C
                                            </div>
                                            <div class="formula-equation">
                                                θ₁ = π &#8211; 2·sin⁻¹((D₂-D₁)/2C)
                                            </div>
                                        </div>
                            </div>
                </section>
            </div>
        </main>
        <!-- Disclaimer Footer -->
        <footer class="app-disclaimer" style="margin-top: 20px; padding: 12px 16px; background: rgba(0, 0, 0, 0.015); border: 1px solid var(--color-border); border-radius: 12px; font-size: 11px; color: var(--color-text-muted); line-height: 1.5; text-align: left; display: flex; gap: 10px; align-items: flex-start; clear: both;">
            <i class="fa-solid fa-circle-info" style="color: var(--color-cyan); font-size: 14px; margin-top: 2px; flex-shrink: 0;"></i>
            <span><strong>면책 조항 (Disclaimer):</strong> 본 시뮬레이터의 계산 결과는 교육 및 참고용으로만 제공되며, 실제 제품 설계나 제작 시에는 반드시 최신 공학 규격 및 공식 표준 설계 기준을 재확인하시기 바랍니다. 계산 값의 무결성을 보장하지 않으며, 이로 인해 발생하는 직접적/간접적 손해에 대해 제작자 및 본 블로그는 어떠한 책임을 지지 않습니다.</span>
        </footer>
</div>
    <!-- Physics & Animation Engine -->
    </div>
</div>
<script>
        (function() {
        let isBeltInit = false;
        function initBeltSimulator() {
            if (isBeltInit) return;
            const canvas = document.getElementById('physics-canvas');
            if (!canvas) return;
            const ctx = canvas.getContext('2d');
            if (!ctx) return;
            isBeltInit = true;
            window.__beltpulley_initialized = true;
            // DOM Elements
            const sliderD1 = document.getElementById('slider-d1');
            const inputD1 = document.getElementById('input-d1');
            const sliderD2 = document.getElementById('slider-d2');
            const inputD2 = document.getElementById('input-d2');
            const sliderC = document.getElementById('slider-c');
            const inputC = document.getElementById('input-c');
            const sliderRpm = document.getElementById('slider-rpm');
            const inputRpm = document.getElementById('input-rpm');
            const btnPlayPause = document.getElementById('btn-play-pause');
            const btnReverse = document.getElementById('btn-reverse');
            const presetButtons = document.querySelectorAll('.preset-btn');
            const txtCenterDistOverlay = document.getElementById('txt-belt-length-overlay');
            const txtLapAngle1 = document.getElementById('txt-lap-angle1');
            const txtLapAngle2 = document.getElementById('txt-lap-angle2');
            const txtPulleyRatio = document.getElementById('txt-pulley-ratio');
            const txtRatioType = document.getElementById('txt-ratio-type');
            const txtBeltSpeed = document.getElementById('txt-belt-speed');
            const txtN2 = document.getElementById('txt-n2');
            const txtBeltLength = document.getElementById('txt-belt-length');
            const txtTorqueMult = document.getElementById('txt-torque-mult');
            const wrapper = document.querySelector('.beltpulley-calculator-wrapper') || document.body;
            // State variables
            const state = {
                d1: 100,
                d2: 200,
                c: 450,
                rpm: 240,
                angle1: 0,
                angle2: 0,
                beltOffset: 0,
                isPlaying: true,
                direction: 1,
                lastTime: 0,
                sparks: []
            };
            // Canvas Resizing (Retina support)
            function resizeCanvas() {
                const rect = canvas.getBoundingClientRect();
                const dpr = window.devicePixelRatio || 1;
                canvas.width = rect.width * dpr;
                canvas.height = rect.height * dpr;
                ctx.scale(dpr, dpr);
            }
            resizeCanvas();
            window.addEventListener('resize', resizeCanvas);
            setTimeout(resizeCanvas, 300);
            // Friction sparks at tangent points
            class BeltSpark {
                constructor(x, y, vx, vy) {
                    this.x = x;
                    this.y = y;
                    this.vx = vx;
                    this.vy = vy;
                    this.size = Math.random() * 1.5 + 0.5;
                    this.life = Math.random() * 20 + 8;
                    this.maxLife = this.life;
                    const colors = ['#00f2fe', '#ff007f', '#ffffff'];
                    this.color = colors[Math.floor(Math.random() * colors.length)];
                }
                update() {
                    this.x += this.vx;
                    this.y += this.vy;
                    this.vx *= 0.96;
                    this.vy *= 0.96;
                    this.life--;
                }
                draw(c) {
                    const alpha = this.life / this.maxLife;
                    c.save();
                    c.globalAlpha = alpha;
                    c.beginPath();
                    c.arc(this.x, this.y, this.size, 0, Math.PI * 2);
                    c.fillStyle = this.color;
                    c.fill();
                    c.restore();
                }
            }
            // Sync Inputs and Sliders
            function syncD1FromSlider() {
                const val = parseInt(sliderD1.value);
                inputD1.value = val;
                state.d1 = val;
                validateCenterDistance();
                clearPresets();
                updateCalculations();
            }
            function syncD1FromInput() {
                let val = parseInt(inputD1.value);
                if (isNaN(val) || val < 50) val = 50;
                if (val > 600) val = 600;
                sliderD1.value = val;
                state.d1 = val;
                validateCenterDistance();
                clearPresets();
                updateCalculations();
            }
            function syncD2FromSlider() {
                const val = parseInt(sliderD2.value);
                inputD2.value = val;
                state.d2 = val;
                validateCenterDistance();
                clearPresets();
                updateCalculations();
            }
            function syncD2FromInput() {
                let val = parseInt(inputD2.value);
                if (isNaN(val) || val < 50) val = 50;
                if (val > 600) val = 600;
                sliderD2.value = val;
                state.d2 = val;
                validateCenterDistance();
                clearPresets();
                updateCalculations();
            }
            function syncCFromSlider() {
                const val = parseInt(sliderC.value);
                inputC.value = val;
                state.c = val;
                validateCenterDistance();
                clearPresets();
                updateCalculations();
            }
            function syncCFromInput() {
                let val = parseInt(inputC.value);
                if (isNaN(val) || val < 200) val = 200;
                if (val > 1200) val = 1200;
                sliderC.value = val;
                state.c = val;
                validateCenterDistance();
                clearPresets();
                updateCalculations();
            }
            function syncRpmFromSlider() {
                const val = parseInt(sliderRpm.value);
                inputRpm.value = val;
                state.rpm = val;
                clearPresets();
                updateCalculations();
            }
            function syncRpmFromInput() {
                let val = parseInt(inputRpm.value);
                if (isNaN(val) || val < 0) val = 0;
                if (val > 2500) val = 2500;
                sliderRpm.value = val;
                state.rpm = val;
                clearPresets();
                updateCalculations();
            }
            // Ensure center distance is physically larger than radius1 + radius2 to avoid overlap
            function validateCenterDistance() {
                const minC = (state.d1 + state.d2) / 2 + 30; // 30mm margin
                if (state.c < minC) {
                    state.c = Math.ceil(minC);
                    inputC.value = state.c;
                    sliderC.value = state.c;
                }
                // Set slider range dynamically
                sliderC.min = Math.ceil(minC);
                if (parseInt(inputC.value) < minC) {
                    inputC.value = Math.ceil(minC);
                    sliderC.value = Math.ceil(minC);
                    state.c = Math.ceil(minC);
                }
            }
            // Physics Core Calculations
            function updateCalculations() {
                const D1 = state.d1;
                const D2 = state.d2;
                const C = state.c;
                const N1 = state.rpm;
                // 1. Pulley Ratio
                const ratio = D2 / D1;
                txtPulleyRatio.innerText = ratio.toFixed(2) + ' : 1';
                if (ratio > 1) {
                    txtRatioType.innerText = `${ratio.toFixed(2)}배 감속 전동 (출력 토크 ${ratio.toFixed(2)}배)`;
                } else if (ratio < 1) {
                    const gain = 1 / ratio;
                    txtRatioType.innerText = `${gain.toFixed(2)}배 증속 전동 (출력 토크 ${ratio.toFixed(2)}배)`;
                } else {
                    txtRatioType.innerText = '1:1 동속 동력 전동';
                }
                // 2. Output RPM
                const n2 = N1 / ratio;
                txtN2.innerText = n2.toFixed(1) + ' RPM';
                txtTorqueMult.innerText = (ratio * 100).toFixed(0) + '%';
                // 3. Pitch line velocity (Belt Speed in m/s)
                const pitchSpeed = (Math.PI * D1 * N1) / 60000;
                txtBeltSpeed.innerText = pitchSpeed.toFixed(2) + ' m/s';
                // 4. Belt Length calculation
                const term1 = 2 * C;
                const term2 = (Math.PI * (D1 + D2)) / 2;
                const term3 = Math.pow(D2 - D1, 2) / (4 * C);
                const beltLen = term1 + term2 + term3;
                txtBeltLength.innerText = beltLen.toFixed(1) + ' mm';
                txtCenterDistOverlay.innerText = beltLen.toFixed(1) + ' mm';
                // 5. Lap angles
                // sin(alpha) = (D2 - D1) / 2C
                const sinAlpha = (D2 - D1) / (2 * C);
                const alpha = Math.asin(Math.min(Math.max(sinAlpha, -0.99), 0.99));
                const angle1Rad = Math.PI - 2 * alpha;
                const angle2Rad = Math.PI + 2 * alpha;
                const angle1Deg = (angle1Rad * 180) / Math.PI;
                const angle2Deg = (angle2Rad * 180) / Math.PI;
                txtLapAngle1.innerText = angle1Deg.toFixed(1) + '°';
                txtLapAngle2.innerText = angle2Deg.toFixed(1) + '°';
                if (angle1Deg < 120) {
                    txtLapAngle1.style.color = '#db2777';
                } else {
                    txtLapAngle1.style.color = '#10b981';
                }
            }
            // Presets Click Handler
            function loadPreset(key) {
                clearPresets();
                presetButtons.forEach(btn => {
                    if (btn.dataset.preset === key) {
                        btn.classList.add('active');
                    }
                });
                if (key === 'reduction') {
                    state.d1 = 120;
                    state.d2 = 240;
                    state.c = 480;
                    state.rpm = 300;
                } else if (key === 'mesh1to1') {
                    state.d1 = 180;
                    state.d2 = 180;
                    state.c = 450;
                    state.rpm = 200;
                } else if (key === 'increase') {
                    state.d1 = 240;
                    state.d2 = 80;
                    state.c = 450;
                    state.rpm = 100;
                }
                // Sync inputs
                inputD1.value = state.d1;
                sliderD1.value = state.d1;
                inputD2.value = state.d2;
                sliderD2.value = state.d2;
                inputC.value = state.c;
                sliderC.value = state.c;
                inputRpm.value = state.rpm;
                sliderRpm.value = state.rpm;
                validateCenterDistance();
                updateCalculations();
            }
            function clearPresets() {
                presetButtons.forEach(btn => btn.classList.remove('active'));
            }
            // Draw Pulley Wheel
            function drawPulley(c, x, y, radius, angle, themeColor) {
                c.save();
                c.translate(x, y);
                // 1. Pulley Outer Body (dark glass fill)
                c.beginPath();
                c.arc(0, 0, radius, 0, Math.PI * 2);
                c.fillStyle = 'rgba(241, 245, 249, 0.85)';
                c.fill();
                c.strokeStyle = themeColor;
                c.lineWidth = 3;
                c.shadowBlur = 8;
                c.shadowColor = themeColor;
                c.stroke();
                c.shadowBlur = 0;
                // 2. Pulley Inner Rim Ring
                c.beginPath();
                c.arc(0, 0, radius - 6, 0, Math.PI * 2);
                c.strokeStyle = 'rgba(15, 23, 42, 0.06)';
                c.lineWidth = 1.5;
                c.stroke();
                // 3. Rotating Spokes
                c.save();
                c.rotate(angle);
                // Central hub
                const hubRad = Math.max(radius * 0.25, 12);
                c.beginPath();
                c.arc(0, 0, hubRad, 0, Math.PI * 2);
                c.strokeStyle = 'rgba(15, 23, 42, 0.15)';
                c.lineWidth = 2;
                c.stroke();
                c.beginPath();
                c.arc(0, 0, 5, 0, Math.PI * 2);
                c.fillStyle = '#ffffff';
                c.fill();
                // 5 spokes
                const spokes = 5;
                for (let s = 0; s < spokes; s++) {
                    const spokeAngle = (s * 2 * Math.PI) / spokes;
                    c.save();
                    c.rotate(spokeAngle);
                    c.beginPath();
                    c.moveTo(0, hubRad);
                    c.lineTo(0, radius - 8);
                    c.strokeStyle = 'rgba(15, 23, 42, 0.08)';
                    c.lineWidth = 3;
                    c.stroke();
                    c.restore();
                }
                // Keyway marker (to see rotation clearly)
                c.beginPath();
                c.arc(radius - 12, 0, 4, 0, Math.PI * 2);
                c.fillStyle = '#ffffff';
                c.shadowBlur = 4;
                c.shadowColor = '#ffffff';
                c.fill();
                c.restore();
                c.restore();
            }
            function drawDiameterLeader(c, x, y, r, valStr, labelPrefix, side) {
                c.save();
                c.strokeStyle = 'rgba(71, 85, 105, 0.4)';
                c.lineWidth = 1.2;
                // Angle of leader line (45 degrees up-left or up-right)
                const angle = side === -1 ? -Math.PI * 0.75 : -Math.PI * 0.25;
                const px = x + Math.cos(angle) * r;
                const py = y + Math.sin(angle) * r;
                // Draw a beautiful small dot on the circle boundary
                c.beginPath();
                c.arc(px, py, 2.5, 0, Math.PI * 2);
                c.fillStyle = side === -1 ? '#0284c7' : '#db2777';
                c.fill();
                // Draw leader lines: from circle boundary diagonal outwards, then horizontal
                const lx1 = px + Math.cos(angle) * 20;
                const ly1 = py + Math.sin(angle) * 20;
                const lx2 = lx1 + side * 45;
                const ly2 = ly1;
                c.beginPath();
                c.moveTo(px, py);
                c.lineTo(lx1, ly1);
                c.lineTo(lx2, ly2);
                c.stroke();
                // Draw text above the horizontal line
                const text = `${labelPrefix} ${valStr}`;
                c.font = 'bold 10px var(--font-body)';
                const tx = side === -1 ? lx1 - 4 : lx1 + 4;
                c.fillStyle = '#1e293b';
                c.textAlign = side === -1 ? 'right' : 'left';
                c.textBaseline = 'bottom';
                c.fillText(text, tx, ly2 - 1);
                c.restore();
            }
            // Main Animation Frame
            function animate(currentTime) {
                requestAnimationFrame(animate);
                let dt = (currentTime - state.lastTime) / 1000;
                if (isNaN(dt) || dt < 0 || dt > 1.0) dt = 0.016;
                state.lastTime = currentTime;
                const width = canvas.width / (window.devicePixelRatio || 1);
                const height = canvas.height / (window.devicePixelRatio || 1);
                const cx = width / 2;
                const cy = height / 2;
                ctx.clearRect(0, 0, width, height);
                // 1. Draw Grid
                ctx.save();
                ctx.strokeStyle = 'rgba(2, 132, 199, 0.06)';
                ctx.lineWidth = 1;
                for (let x = 0; x < width; x += 30) {
                    ctx.beginPath();
                    ctx.moveTo(x, 0);
                    ctx.lineTo(x, height);
                    ctx.stroke();
                }
                for (let y = 0; y < height; y += 30) {
                    ctx.beginPath();
                    ctx.moveTo(0, y);
                    ctx.lineTo(width, y);
                    ctx.stroke();
                }
                ctx.restore();
                // 2. Geometry Scale Calculation
                const phys_r1 = state.d1 / 2;
                const phys_r2 = state.d2 / 2;
                const scaleWidth = (width - 190) / (state.c + phys_r1 + phys_r2);
                const scaleHeight = (height - 120) / Math.max(state.d1, state.d2);
                const scale = Math.min(scaleWidth, scaleHeight);
                const txtCanvasScale = document.getElementById('txt-canvas-scale');
                if (txtCanvasScale) {
                    txtCanvasScale.innerText = `스케일 비율: 1:${(1/scale * 100).toFixed(0)}급`;
                }
                const r1 = phys_r1 * scale;
                const r2 = phys_r2 * scale;
                const c_vis = state.c * scale;
                // Position centers to perfectly center the entire bounding box
                const x1 = (width - c_vis + r1 - r2) / 2;
                const y1 = cy;
                const x2 = x1 + c_vis;
                const y2 = cy;
                // Physics Rotation
                const ratio = state.d2 / state.d1;
                const pitchSpeed = (Math.PI * state.d1 * state.rpm) / 60000; // m/s
                if (state.isPlaying) {
                    if (state.rpm > 0) {
                        const omega1 = (2 * Math.PI * state.rpm) / 60; // rad/s
                        // Stroboscopic rendering limit
                        const maxOmega = 6;
                        const renderOmega1 = maxOmega * (1 - Math.exp(-omega1 / maxOmega));
                        state.angle1 += state.direction * renderOmega1 * dt;
                        state.angle2 += state.direction * (renderOmega1 / ratio) * dt;
                        // Linear belt move offset
                        state.beltOffset += state.direction * pitchSpeed * 1000 * scale * dt;
                    }
                }
                // 3. Tangent belt geometry calculations
                const dx = x2 - x1;
                const alpha = Math.asin((r2 - r1) / dx);
                // Tangent angles relative to horizontal
                const theta_top1 = -Math.PI / 2 - alpha;
                const theta_bottom1 = Math.PI / 2 + alpha;
                const theta_top2 = -Math.PI / 2 - alpha;
                const theta_bottom2 = Math.PI / 2 + alpha;
                // Tangent Points on Pulley 1
                const tp1_top_x = x1 + r1 * Math.cos(theta_top1);
                const tp1_top_y = y1 + r1 * Math.sin(theta_top1);
                const tp1_bottom_x = x1 + r1 * Math.cos(theta_bottom1);
                const tp1_bottom_y = y1 + r1 * Math.sin(theta_bottom1);
                // Tangent Points on Pulley 2
                const tp2_top_x = x2 + r2 * Math.cos(theta_top2);
                const tp2_top_y = y2 + r2 * Math.sin(theta_top2);
                const tp2_bottom_x = x2 + r2 * Math.cos(theta_bottom2);
                const tp2_bottom_y = y2 + r2 * Math.sin(theta_bottom2);
                // 4. Spawn Friction Sparks at Tangent Points
                if (state.isPlaying) {
                    if (state.rpm > 300) {
                        const sparkEmission = Math.min(Math.floor(state.rpm / 600) + 1, 2);
                        for (let s = 0; s < sparkEmission; s++) {
                            if (Math.random() > 0.6) {
                                // Top tangent left sparks
                                const spVx = -state.direction * (2 + Math.random() * 2);
                                const spVy = (Math.random() - 0.5) * 1.5;
                                state.sparks.push(new BeltSpark(tp1_top_x, tp1_top_y, spVx * scale, spVy * scale));
                            }
                        }
                    }
                }
                // Render Sparks
                state.sparks = state.sparks.filter(s => s.life > 0);
                state.sparks.forEach(s => {
                    s.update();
                    s.draw(ctx);
                });
                // 5. Draw Pulley 1 (Drive - Cyan)
                drawPulley(ctx, x1, y1, r1, state.angle1, '#0284c7');
                // Draw Pulley 2 (Driven - Magenta)
                drawPulley(ctx, x2, y2, r2, state.angle2, '#db2777');
                // 6. Draw Snug Belt Around both pulleys (Moving dashed line)
                ctx.save();
                ctx.beginPath();
                // Top tangent line
                ctx.moveTo(tp1_top_x, tp1_top_y);
                ctx.lineTo(tp2_top_x, tp2_top_y);
                // Clockwise arc around Pulley 2
                ctx.arc(x2, y2, r2, theta_top2, theta_bottom2, false);
                // Bottom tangent line
                ctx.lineTo(tp1_bottom_x, tp1_bottom_y);
                // Clockwise arc around Pulley 1
                ctx.arc(x1, y1, r1, theta_bottom1, theta_top1, false);
                ctx.closePath();
                // Belt outer shadow/glow
                ctx.shadowBlur = 12;
                ctx.shadowColor = '#0284c7';
                ctx.strokeStyle = '#0284c7';
                ctx.lineWidth = 7;
                ctx.lineCap = 'round';
                ctx.lineJoin = 'round';
                ctx.stroke();
                ctx.shadowBlur = 0;
                // Moving belt textured interior dashes
                ctx.strokeStyle = '#ffffff';
                ctx.lineWidth = 5;
                ctx.setLineDash([16, 12]);
                ctx.lineDashOffset = -state.beltOffset;
                ctx.stroke();
                ctx.setLineDash([]);
                ctx.restore();
                // 7. Dimension annotations
                ctx.save();
                // Draw Diameter dimensions on pulleys with professional CAD leader lines
                drawDiameterLeader(ctx, x1, y1, r1, state.d1.toFixed(1) + ' mm', 'd₁ =', -1);
                drawDiameterLeader(ctx, x2, y2, r2, state.d2.toFixed(1) + ' mm', 'd₂ =', 1);
                // Horizontal Center Distance Dimension Line (C)
                ctx.save();
                ctx.strokeStyle = 'rgba(71, 85, 105, 0.3)';
                ctx.lineWidth = 1;
                const dimY = y1 + r2 + 25; // 25px below larger pulley
                ctx.beginPath();
                ctx.moveTo(x1, y1 + 10);
                ctx.lineTo(x1, dimY + 5);
                ctx.moveTo(x2, y2 + 10);
                ctx.lineTo(x2, dimY + 5);
                ctx.stroke();
                ctx.beginPath();
                ctx.moveTo(x1, dimY);
                ctx.lineTo(x2, dimY);
                ctx.stroke();
                function drawHorizontalArrowhead(px, py, direction) {
                    ctx.save();
                    ctx.translate(px, py);
                    ctx.fillStyle = 'rgba(71, 85, 105, 0.5)';
                    ctx.beginPath();
                    ctx.moveTo(0, 0);
                    ctx.lineTo(direction * 6, -3);
                    ctx.lineTo(direction * 6, 3);
                    ctx.closePath();
                    ctx.fill();
                    ctx.restore();
                }
                drawHorizontalArrowhead(x1, dimY, 1);
                drawHorizontalArrowhead(x2, dimY, -1);
                const cText = `C = ${state.c} mm`;
                ctx.font = 'bold 9px Inter, sans-serif';
                const cTextWidth = ctx.measureText(cText).width;
                const cTextX = (x1 + x2) / 2;
                // Draw white eraser background so text doesn't overlap dimension line
                ctx.fillStyle = '#f1f5f9';
                ctx.fillRect(cTextX - cTextWidth / 2 - 4, dimY - 6, cTextWidth + 8, 12);
                ctx.fillStyle = '#475569';
                ctx.textAlign = 'center';
                ctx.textBaseline = 'middle';
                ctx.fillText(cText, cTextX, dimY);
                ctx.restore();
                // Lap angle highlights (colored arcs representing wrap contact)
                ctx.beginPath();
                ctx.arc(x1, y1, r1 + 10, theta_bottom1, theta_top1, false);
                ctx.strokeStyle = 'rgba(0, 242, 254, 0.35)';
                ctx.lineWidth = 3;
                ctx.stroke();
                ctx.beginPath();
                ctx.arc(x2, y2, r2 + 10, theta_top2, theta_bottom2, false);
                ctx.strokeStyle = 'rgba(255, 0, 127, 0.35)';
                ctx.lineWidth = 3;
                ctx.stroke();
                ctx.restore();
            }
            // Bind Event Listeners
            sliderD1.addEventListener('input', syncD1FromSlider);
            inputD1.addEventListener('change', syncD1FromInput);
            sliderD2.addEventListener('input', syncD2FromSlider);
            inputD2.addEventListener('change', syncD2FromInput);
            sliderC.addEventListener('input', syncCFromSlider);
            inputC.addEventListener('change', syncCFromInput);
            sliderRpm.addEventListener('input', syncRpmFromSlider);
            inputRpm.addEventListener('change', syncRpmFromInput);
            btnPlayPause.addEventListener('click', () => {
                state.isPlaying = !state.isPlaying;
                if (state.isPlaying) {
                    btnPlayPause.innerHTML = '<i class="fa-solid fa-pause"></i> <span>일시정지</span>';
                } else {
                    btnPlayPause.innerHTML = '<i class="fa-solid fa-play"></i> <span>재생</span>';
                }
            });
            btnReverse.addEventListener('click', () => {
                state.direction *= -1;
            });
            presetButtons.forEach(btn => {
                btn.addEventListener('click', () => {
                    loadPreset(btn.dataset.preset);
                });
            });
            // Initialize
            loadPreset('reduction');
            requestAnimationFrame(animate);
            // ── 우클릭 & 소스 복사 방지 (전체 문서 레벨 + 알림창 동기화) ──
            document.addEventListener('contextmenu', function(e) {
                e.preventDefault();
                alert("이 콘텐츠는 저작권법의 보호를 받습니다. 무단 복제 및 우클릭을 금지합니다.");
                return false;
            }, { capture: true });
            document.addEventListener('selectstart', function(e) {
                e.preventDefault();
                return false;
            }, { capture: true });
            // 개발자도구 단축키 및 복사 단축키 차단 (F12, Ctrl+U, Ctrl+Shift+I/J/C, Ctrl+C, Ctrl+S)
            // 중복 차단 문자를 사용하면 WordPress API에서 오류가 날 수 있으므로 nested if로 구현
            document.addEventListener('keydown', function(e) {
                if (e.key === 'F12') {
                    e.preventDefault();
                    alert("이 콘텐츠는 저작권법의 보호를 받습니다. 무단 복제 및 우클릭을 금지합니다.");
                    return false;
                }
                if (e.ctrlKey) {
                    if (e.key === 'u' || e.key === 'c' || e.key === 's' || e.key === 'U' || e.key === 'C' || e.key === 'S') {
                        e.preventDefault();
                        alert("이 콘텐츠는 저작권법의 보호를 받습니다. 무단 복제 및 우클릭을 금지합니다.");
                        return false;
                    }
                    if (e.shiftKey) {
                        if (['i','I','j','J','c','C'].includes(e.key)) {
                            e.preventDefault();
                            alert("이 콘텐츠는 저작권법의 보호를 받습니다. 무단 복제 및 우클릭을 금지합니다.");
                            return false;
                        }
                    }
                }
            }, { capture: true });
        } // <-- Closed the initBeltSimulator function
        // Robust ReadyState hook-up with polling to guarantee execution even if DOM elements load late
        let initAttempts = 0;
        function tryInit() {
            initAttempts++;
            initBeltSimulator();
            if (!window.__beltpulley_initialized) {
                if (initAttempts < 50) {
                    setTimeout(tryInit, 100);
                }
            }
        }
        if (document.readyState === 'complete' || document.readyState === 'interactive') {
            tryInit();
        } else {
            document.addEventListener('DOMContentLoaded', tryInit);
            window.addEventListener('load', tryInit);
        }
        })();
</script>


<div style="background: linear-gradient(135deg, rgba(0,242,254,0.03), rgba(138,43,226,0.03)); border: 1px solid rgba(0,242,254,0.15); border-radius: 12px; padding: 18px 24px; margin: 25px auto 35px auto; font-size: 0.95em; color: #4b5563; line-height: 1.7; font-family: sans-serif;">
    <strong style="color: #1f2937; font-size: 1.05em; display: flex; align-items: center; gap: 8px;">
        <span style="font-size: 1.2em;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> 간편 사용 설명서
    </strong>
    <ol style="margin: 10px 0 0 0; padding-left: 20px;">
        <li style="margin-bottom: 6px;"><strong>풀리 지름 설정: 슬라이더나 입력 칸을 이용해 구동 풀리(D₁)와 피동 풀리(D₂)의 외경 지름을 입력합니다.</strong></li>
<li style="margin-bottom: 6px;">축간거리 및 입력 속도 설정: 두 풀리 축 사이의 중심거리(C)와 구동 풀리의 RPM(N₁)을 설정합니다.</li>
<li style="margin-bottom: 6px;">실시간 벨트 구동 관찰: 회전 속도에 맞춰 벨트라인이 부드럽게 움직이는 2D 물리 시뮬레이션을 관찰합니다.</li>
<li style="margin-bottom: 6px;">출력 계측치 분석: 총 벨트 길이(L), 풀리별 접촉각(Lap Angle), 벨트 선속도(m/s) 및 피동 풀리 속도(RPM)를 계측 모니터에서 즉시 분석합니다.</li>
    </ol>
</div>


<details class="premium-seo-accordion" style="border: 1px solid rgba(0,0,0,0.08); border-radius: 12px; background: #fbfbfc; padding: 0; margin: 30px auto; box-shadow: 0 4px 6px -1px rgba(0,0,0,0.01); font-family: sans-serif;">
    <summary style="display: flex; justify-content: space-between; align-items: center; padding: 20px 24px; font-size: 1.1em; font-weight: 700; color: #1f2937; cursor: pointer; user-select: none; outline: none; list-style: none;">
        <span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4da.png" alt="📚" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 상세 기계공학 해설 및 벨트 전동 설계 규격 (KS/ISO) 확인하기</span>
        <span class="accordion-arrow" style="font-size: 0.9em; color: #9ca3af; transition: transform 0.2s ease;">▼</span>
    </summary>
    <div style="padding: 0 24px 24px 24px; border-top: 1px solid rgba(0,0,0,0.04); background: #ffffff; border-radius: 0 0 12px 12px; font-size: 0.98em; color: #374151; line-height: 1.8;">
        <div style="margin-top: 20px;">
            <h3>1. 벨트 전동(Belt Drive)의 기본 원리 및 공학적 특징</h3>
<p>벨트 전동은 두 개 이상의 풀리(Pulley)에 유연한 벨트(Belt)를 감아 마찰력 또는 물림력에 의해 동력을 전달하는 대표적인 유연 전동 장치(Flexible Transmitter)입니다. 기어 전동에 비해 축간 거리가 먼 경우에 경제적으로 동력을 전달할 수 있으며, 충격 흡수 성능이 우수하고 운전이 비교적 조용하다는 큰 장점을 지니고 있습니다.</p><ul><li><strong>평벨트 (Flat Belt):</strong> 고속 운전에 적합하며 굴곡성이 좋으나 슬립(Slip)이 발생하기 쉽습니다.</li><li><strong>V벨트 (V-Belt):</strong> 홈과의 쐐기 작용(Wedge Action)에 의한 마찰력 증대로 비교적 큰 토크를 슬립 없이 전달할 수 있어 산업용 동력 전달에 가장 널리 쓰입니다.</li><li><strong>타이밍 벨트 (Timing Belt/정밀 물림 벨트):</strong> 기어처럼 치형이 형성되어 슬립률 0%의 동기 전동(Synchronous Drive)이 가능합니다.</li></ul>
<h3>2. 벨트 길이 및 접촉각 수학적 유도 공식</h3>
<p>벨트 전동 설계의 기본이 되는 기하학적 치수와 역학적 관계식은 다음과 같이 유도됩니다.</p><p><strong>① 평행 벨트 길이 계산 공식 (Open Belt Length):</strong> 두 풀리의 지름을 <code>D1</code>, <code>D2</code>, 축간거리를 <code>C</code>라고 할 때, 기하학적 궤적을 적분하여 얻어지는 표준 근사식입니다.</p><p style="text-align: center; font-weight: bold; background: #f3f4f6; padding: 12px; border-radius: 8px;">L &approx; 2C + &pi;(D1 + D2)/2 + (D2 - D1)^2 / (4C) &nbsp;[mm]</p><p><strong>② 접촉각 (Lap Angle / 접촉 호의 각도, &theta;):</strong> 동력 전달 용량을 결정하는 가장 중요한 인자 중 하나로, 구동 풀리에서의 접촉각 <code>&theta;1</code>이 작을수록 슬립 현상이 일어나기 쉽습니다.</p><p style="text-align: center; font-weight: bold; background: #f3f4f6; padding: 12px; border-radius: 8px;">&theta;1 = &pi; - 2 &times; sin^(-1)((D2 - D1) / 2C) &nbsp;[rad]</p><p style="text-align: center; font-weight: bold; background: #f3f4f6; padding: 12px; border-radius: 8px;">&theta;2 = &pi; + 2 &times; sin^(-1)((D2 - D1) / 2C) &nbsp;[rad]</p><p><strong>③ 벨트의 주속도 (Belt Pitch Line Speed, v):</strong> 동력이 전달되는 벨트의 선형 주행 속도로, 구동 풀리 기준 공식은 다음과 같습니다:</p><p style="text-align: center; font-weight: bold; background: #e0f2fe; padding: 16px; border-radius: 8px; font-size: 1.05em; color: #0369a1;">v = (&pi; &times; D1 &times; N1) / 60,000 &nbsp;[m/s]</p>
<h3>3. 마찰 전동의 오일러 공식 (슬립 및 장력 설계)</h3>
<p>벨트가 풀리에 감겨 회전할 때, 미끄러지기 직전의 긴장측 장력(Tight Side Tension, <code>T_t</code>)과 이완측 장력(Slack Side Tension, <code>T_s</code>)의 비율은 벨트와 풀리 사이의 마찰 계수(<code>&mu;</code>)와 접촉각(<code>&theta;</code>)에 의해 지수적으로 결정됩니다. 이를 **오일러의 벨트 공식(Euler's Belt Formula)**이라고 합니다.</p><p style="text-align: center; font-weight: bold; background: #f3f4f6; padding: 12px; border-radius: 8px;">T_t / T_s = e^(&mu; &times; &theta;)</p><p>이 식은 접촉각 <code>&theta;</code>가 클수록 장력비가 기하급수적으로 증가하여 더 큰 유효 인장력(<code>F_e = T_t - T_s</code>)을 전달할 수 있음을 입증합니다. 따라서 소형 풀리의 접촉각이 120&deg; 이하로 떨어지는 감속 비율이 큰 설계에서는 아이들러 풀리(Idler Pulley)를 추가 장착하여 이완측 접촉각을 강제로 확보하는 보정 설계가 필수로 작용합니다.</p>
        </div>
    </div>
</details>
<style>
details.premium-seo-accordion[open] summary .accordion-arrow { transform: rotate(180deg); color: #00f2fe; }
details.premium-seo-accordion summary::-webkit-details-marker { display: none; }
details.premium-seo-accordion:hover { border-color: rgba(0,242,254,0.3); }
</style>

]]></content:encoded>
					
					<wfw:commentRss>https://myengnote.com/belt-pulley-speed-calculator-simulator-2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>기어비 계산기 &#038; 시뮬레이터</title>
		<link>https://myengnote.com/gear-ratio-calculator-simulator-3/</link>
					<comments>https://myengnote.com/gear-ratio-calculator-simulator-3/#respond</comments>
		
		<dc:creator><![CDATA[동동]]></dc:creator>
		<pubDate>Tue, 26 May 2026 00:00:00 +0000</pubDate>
				<category><![CDATA[공학계산기]]></category>
		<category><![CDATA[기계설계]]></category>
		<category><![CDATA[기어계산기]]></category>
		<category><![CDATA[기어비]]></category>
		<category><![CDATA[동력전달]]></category>
		<category><![CDATA[물리시뮬레이터]]></category>
		<guid isPermaLink="false">https://myengnote.com/gear-ratio-calculator-simulator-3/</guid>

					<description><![CDATA[기어 잇수와 입력 RPM을 조절하여 기어비, 출력 속도, 토크 변화 및 기하학적 치수를 실시간으로 계산하고 완벽히 맞물려 회전하는 기어열을 시각화하는 초정밀 2D 물리 시뮬레이터입니다.]]></description>
										<content:encoded><![CDATA[
<h2 style="font-size: 1.6em; font-weight: 800; color: #0c0e25; border-bottom: 2px solid #00f2fe; padding-bottom: 8px; margin-bottom: 20px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 기어비 계산기 &#038; 시뮬레이터</h2>


<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&#038;family=Outfit:wght@400;500;600;700;800&#038;display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
/* Scoped & Isolated Styles for gearratio-calculator-wrapper */
        /* Modern Reset and Design Tokens */
        .gearratio-calculator-wrapper *, .gearratio-calculator-wrapper *::before, .gearratio-calculator-wrapper *::after {
            box-sizing: border-box;
            margin: 0;
            padding: 0;
        }
        .gearratio-calculator-wrapper {
            --color-bg-dark: #f8f9fd;
            --color-bg-deep: #ffffff;
            --color-panel-bg: rgba(255, 255, 255, 0.85);
            --color-border: rgba(0, 0, 0, 0.06);
            --color-border-hover: rgba(0, 0, 0, 0.12);
            --color-text-main: #1e293b;
            --color-text-muted: #475569;
            --color-text-dark: #94a3b8;
            --color-cyan: #0284c7;
            --color-cyan-glow: rgba(2, 132, 199, 0.15);
            --color-magenta: #db2777;
            --color-magenta-glow: rgba(219, 39, 119, 0.15);
            --color-purple: #7c3aed;
            --color-purple-glow: rgba(124, 58, 237, 0.12);
            --color-success: #10b981;
            --gradient-primary: linear-gradient(135deg, var(--color-cyan) 0%, var(--color-purple) 100%);
            --gradient-accent: linear-gradient(135deg, var(--color-magenta) 0%, var(--color-purple) 100%);
            --gradient-panel: linear-gradient(180deg, rgba(255, 255, 255, 0.9) 0%, rgba(248, 250, 252, 0.95) 100%);
            --font-heading: 'Outfit', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
            --font-body: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
            --shadow-neon-cyan: 0 0 15px var(--color-cyan-glow);
            --shadow-neon-magenta: 0 0 15px var(--color-magenta-glow);
            --shadow-card: 0 8px 32px 0 rgba(15, 23, 42, 0.05);
            --blur-glass: blur(16px);
        }
        .gearratio-calculator-wrapper {
            background-color: var(--color-bg-dark);
            color: var(--color-text-main);
            font-family: var(--font-body);
            min-height: 100vh;
            display: flex;
            justify-content: center;
            overflow-x: hidden;
            position: relative;
        }
        .app-background-glow {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            z-index: -1;
            overflow: hidden;
            pointer-events: none;
        }
        .app-background-glow::before, 
        .app-background-glow::after {
            content: '';
            position: absolute;
            width: 600px;
            height: 600px;
            border-radius: 50%;
            filter: blur(140px);
            opacity: 0.15;
        }
        .app-background-glow::before {
            background: var(--color-cyan);
            top: -10%;
            right: -5%;
            animation: pulse-slow 15s infinite alternate;
        }
        .app-background-glow::after {
            background: var(--color-purple);
            bottom: -10%;
            left: -5%;
            animation: pulse-slow 20s infinite alternate-reverse;
        }
        @keyframes pulse-slow {
            0% { transform: scale(1) translate(0, 0); opacity: 0.12; }
            100% { transform: scale(1.2) translate(50px, 50px); opacity: 0.22; }
        }
        .app-container {
            width: 100%;
            max-width: 1440px;
            padding: 24px;
            display: flex;
            flex-direction: column;
            gap: 24px;
        }
        .app-header {
            display: flex;
            justify-content: space-between;
            align-items: center;
            padding: 20px 24px;
            background: var(--color-panel-bg);
            backdrop-filter: var(--blur-glass);
            border: 1px solid var(--color-border);
            border-radius: 16px;
            box-shadow: var(--shadow-card);
        }
        .logo-area {
            display: flex;
            align-items: center;
            gap: 16px;
        }
        .logo-icon {
            font-size: 32px;
            background: linear-gradient(135deg, var(--color-cyan), var(--color-magenta));
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
            display: flex;
            align-items: center;
            justify-content: center;
        }
        .logo-area h1 {
            font-family: var(--font-heading);
            font-weight: 800;
            font-size: 24px;
            letter-spacing: 1.5px;
            background: linear-gradient(90deg, var(--color-text-main), var(--color-text-muted));
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
        }
        .logo-area .subtitle {
            font-size: 12px;
            color: var(--color-text-muted);
            font-weight: 500;
            letter-spacing: 0.5px;
        }
        .fa-spin-slow {
            animation: fa-spin 15s linear infinite;
        }
        .header-badge {
            display: flex;
            align-items: center;
            gap: 10px;
            background: rgba(16, 185, 129, 0.1);
            border: 1px solid rgba(16, 185, 129, 0.2);
            padding: 6px 14px;
            border-radius: 20px;
        }
        .pulse-dot {
            width: 8px;
            height: 8px;
            background-color: var(--color-success);
            border-radius: 50%;
            box-shadow: 0 0 10px var(--color-success);
            animation: pulse-dot-anim 1.5s infinite;
        }
        @keyframes pulse-dot-anim {
            0% { transform: scale(0.9); opacity: 0.6; }
            50% { transform: scale(1.2); opacity: 1; }
            100% { transform: scale(0.9); opacity: 0.6; }
        }
        .badge-text {
            font-size: 11px;
            font-weight: 600;
            color: var(--color-success);
            letter-spacing: 0.5px;
        }
        .app-main-grid {
            display: grid;
            grid-template-columns: 340px 1fr 340px;
            gap: 24px;
            align-items: start;
        }
        .panel {
            background: var(--gradient-panel);
            backdrop-filter: var(--blur-glass);
            border: 1px solid var(--color-border);
            border-radius: 20px;
            padding: 24px;
            box-shadow: var(--shadow-card);
            display: flex;
            flex-direction: column;
            gap: 20px;
            transition: border-color 0.3s ease, box-shadow 0.3s ease;
        }
        .panel:hover {
            border-color: var(--color-border-hover);
        }
        .panel-header {
            display: flex;
            align-items: center;
            gap: 12px;
            border-bottom: 1px solid var(--color-border);
            padding-bottom: 14px;
        }
        .panel-header i {
            font-size: 18px;
        }
        .panel-header h2 {
            font-family: var(--font-heading);
            font-size: 18px;
            font-weight: 600;
            letter-spacing: 0.5px;
        }
        .text-cyan { color: #0284c7; }
        .text-magenta { color: #db2777; }
        .text-purple { color: var(--color-purple); }
        .control-panel {
            grid-column: 1;
        }
        .input-group {
            display: flex;
            flex-direction: column;
            gap: 12px;
        }
        .input-label-row {
            display: flex;
            justify-content: space-between;
            align-items: center;
        }
        .input-label-row label {
            font-size: 13px;
            font-weight: 600;
            color: var(--color-text-main);
            display: flex;
            align-items: center;
            gap: 8px;
        }
        .helper-text {
            font-size: 10px;
            color: var(--color-text-muted);
            font-weight: 500;
        }
                .number-input-wrapper {
            display: flex;
            position: relative;
            border-radius: 8px;
            overflow: hidden;
            border: 1px solid var(--color-border);
            background: #ffffff;
            transition: all 0.2s ease;
        }
        .number-input-wrapper:focus-within {
            border-color: var(--color-cyan);
            box-shadow: 0 0 10px var(--color-cyan-glow);
        }
        .number-input-wrapper:focus-within {
            border-color: #0284c7;
            box-shadow: 0 0 10px var(--color-cyan-glow);
        }
                .custom-number-input {
            flex: 1;
            width: 0;
            min-width: 0;
            background: #f8fafc !important;
            border: none !important;
            outline: none !important;
            color: #0f172a !important;
            padding: 10px 14px !important;
            font-family: var(--font-body) !important;
            font-size: 15px !important;
            font-weight: 700 !important;
            text-align: right !important;
            box-shadow: none !important;
            -webkit-appearance: none !important;
            -moz-appearance: textfield !important;
        }
        .custom-number-input::-webkit-outer-spin-button,
        .custom-number-input::-webkit-inner-spin-button {
            -webkit-appearance: none;
            margin: 0;
        }
        .custom-number-input::-webkit-outer-spin-button,
        .custom-number-input::-webkit-inner-spin-button {
            -webkit-appearance: none;
            margin: 0;
        }
                .unit-badge {
            background: rgba(0, 0, 0, 0.03);
            color: var(--color-text-muted);
            font-size: 11px;
            font-weight: 700;
            padding: 0 14px;
            display: flex;
            align-items: center;
            justify-content: center;
            border-left: 1px solid var(--color-border);
            pointer-events: none;
            flex-shrink: 0;
        }
        .custom-slider {
            -webkit-appearance: none;
            width: 100%;
            height: 6px;
            border-radius: 3px;
            background: rgba(0, 0, 0, 0.05);
            outline: none;
            margin: 8px 0;
            transition: background 0.2s ease;
        }
        .custom-slider::-webkit-slider-thumb {
            -webkit-appearance: none;
            appearance: none;
            width: 18px;
            height: 18px;
            border-radius: 50%;
            cursor: pointer;
            transition: transform 0.1s ease, box-shadow 0.2s ease;
        }
        #slider-z1::-webkit-slider-thumb {
            background: var(--color-cyan);
            box-shadow: 0 0 10px var(--color-cyan);
        }
        #slider-z1::-webkit-slider-thumb:hover {
            transform: scale(1.2);
            box-shadow: 0 0 15px var(--color-cyan), 0 0 5px #fff;
        }
        #slider-z2::-webkit-slider-thumb {
            background: var(--color-magenta);
            box-shadow: 0 0 10px var(--color-magenta);
        }
        #slider-z2::-webkit-slider-thumb:hover {
            transform: scale(1.2);
            box-shadow: 0 0 15px var(--color-magenta), 0 0 5px #fff;
        }
        #slider-rpm::-webkit-slider-thumb {
            background: var(--color-purple);
            box-shadow: 0 0 10px var(--color-purple);
        }
        #slider-rpm::-webkit-slider-thumb:hover {
            transform: scale(1.2);
            box-shadow: 0 0 15px var(--color-purple), 0 0 5px #fff;
        }
        .control-actions {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 10px;
            margin-top: 10px;
        }
        .action-btn {
            background: rgba(0, 0, 0, 0.02);
            border: 1px solid var(--color-border);
            color: var(--color-text-main);
            padding: 10px;
            border-radius: 10px;
            font-size: 12px;
            font-weight: 600;
            cursor: pointer;
            display: flex;
            align-items: center;
            justify-content: center;
            gap: 8px;
            transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
        }
        .action-btn:hover {
            background: rgba(0, 0, 0, 0.03);
            border-color: var(--color-border);
        }
        .action-btn.active {
            background: var(--color-cyan-glow);
            border-color: #0284c7;
            color: #0284c7;
            box-shadow: 0 0 12px var(--color-cyan-glow);
        }
        .presets-section {
            display: flex;
            flex-direction: column;
            gap: 12px;
            border-top: 1px solid var(--color-border);
            padding-top: 18px;
        }
        .presets-section h3 {
            font-size: 13px;
            font-weight: 700;
            color: var(--color-text-main);
            display: flex;
            align-items: center;
            gap: 8px;
        }
        .presets-grid {
            display: grid;
            grid-template-columns: 1fr;
            gap: 8px;
        }
        .preset-btn {
            background: rgba(0, 0, 0, 0.015);
            border: 1px solid var(--color-border);
            border-radius: 10px;
            padding: 8px 12px;
            cursor: pointer;
            color: var(--color-text-main);
            display: flex;
            align-items: center;
            gap: 12px;
            text-align: left;
            transition: all 0.2s ease;
        }
        .preset-btn:hover {
            background: rgba(0, 0, 0, 0.05);
            border-color: var(--color-border);
            transform: translateX(4px);
        }
        .preset-btn.active {
            background: linear-gradient(90deg, var(--color-cyan-glow), var(--color-magenta-glow));
            border-color: #0284c7;
            box-shadow: 0 0 10px var(--color-cyan-glow);
        }
        .preset-icon {
            width: 28px;
            height: 28px;
            background: rgba(0, 0, 0, 0.02);
            border-radius: 8px;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 12px;
            color: #0284c7;
            transition: all 0.2s ease;
        }
        .preset-btn:hover .preset-icon, .preset-btn.active .preset-icon {
            background: var(--gradient-primary);
            color: #fff;
            box-shadow: var(--shadow-neon-cyan);
        }
        .preset-name {
            font-size: 12px;
            font-weight: 600;
            letter-spacing: 0.25px;
        }
        .simulation-panel {
            grid-column: 2;
            align-self: start;
            justify-content: flex-start;
            min-width: 0;
        }
        .simulation-panel .panel-header {
            justify-content: space-between;
        }
        .canvas-scale-indicator {
            font-size: 11px;
            color: var(--color-text-muted);
            background: rgba(0, 0, 0, 0.02);
            padding: 4px 10px;
            border-radius: 6px;
            border: 1px solid var(--color-border);
        }
        .canvas-wrapper {
            position: relative;
            width: 100%;
            background: radial-gradient(circle at center, #ffffff 0%, #f1f5f9 100%);
            border: 1px solid rgba(0, 0, 0, 0.06);
            border-radius: 16px;
            overflow: hidden;
        }
        #physics-canvas {
            display: block;
            width: 100%;
            height: auto;
            aspect-ratio: 16 / 10;
        }
        .canvas-overlay-data {
            position: absolute;
            top: 16px;
            left: 16px;
            pointer-events: none;
            display: flex;
            flex-direction: column;
            gap: 6px;
        }
        .overlay-item {
            background: transparent;
            color: var(--color-text-main);
            padding: 4px 0;
            display: flex;
            align-items: center;
            gap: 6px;
            font-size: 11px;
        }
        .overlay-item .label {
            color: var(--color-text-muted);
            font-weight: 500;
        }
        .overlay-item .value {
            font-weight: 700;
        }
        .simulation-metrics-strip {
            display: flex;
            background: rgba(0, 0, 0, 0.01);
            border: 1px solid var(--color-border);
            border-radius: 12px;
            padding: 12px 20px;
            justify-content: space-around;
            align-items: center;
            gap: 10px;
            margin-top: 10px;
        }
        .mini-metric {
            display: flex;
            flex-direction: column;
            align-items: center;
            gap: 4px;
            text-align: center;
        }
        .mini-metric .label {
            font-size: 10px;
            font-weight: 600;
            color: var(--color-text-muted);
            text-transform: uppercase;
            letter-spacing: 0.5px;
        }
        .mini-metric .value {
            font-size: 14px;
            font-weight: 700;
            color: var(--color-text-main);
            font-family: var(--font-heading);
        }
        .mini-divider {
            width: 1px;
            height: 24px;
            background: rgba(0, 0, 0, 0.03);
        }
        .results-panel {
            grid-column: 3;
        }
        .ratio-readout-box {
            background: linear-gradient(135deg, rgba(0, 242, 254, 0.08) 0%, rgba(138, 43, 226, 0.03) 100%);
            border: 1px solid rgba(0, 242, 254, 0.25);
            border-radius: 16px;
            padding: 20px;
            text-align: center;
            display: flex;
            flex-direction: column;
            align-items: center;
            gap: 6px;
            box-shadow: 0 0 15px rgba(0, 242, 254, 0.05);
        }
        .ratio-title {
            font-size: 11px;
            font-weight: 700;
            color: #0284c7;
            letter-spacing: 1px;
            text-transform: uppercase;
        }
        .ratio-value {
            font-family: var(--font-heading);
            font-weight: 800;
            font-size: 38px;
            background: linear-gradient(90deg, var(--color-text-main), var(--color-cyan));
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
        }
        .ratio-type {
            font-size: 11px;
            font-weight: 600;
            color: var(--color-text-muted);
        }
        .results-grid {
            display: flex;
            flex-direction: column;
            gap: 12px;
        }
        .result-card {
            background: rgba(255, 255, 255, 0.85); box-shadow: 0 2px 8px rgba(0,0,0,0.03);
            border: 1px solid var(--color-border);
            border-radius: 12px;
            padding: 12px 16px;
            display: flex;
            align-items: center;
            gap: 16px;
            transition: all 0.2s ease;
        }
        .result-card:hover {
            transform: translateY(-2px);
            border-color: rgba(0, 242, 254, 0.2);
            background: rgba(0, 242, 254, 0.03);
        }
        .card-icon {
            width: 38px;
            height: 38px;
            background: rgba(0, 0, 0, 0.015);
            border: 1px solid var(--color-border);
            border-radius: 10px;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 14px;
            color: var(--color-text-muted);
            transition: all 0.2s ease;
        }
        .result-card:hover .card-icon {
            color: #0284c7;
            border-color: rgba(0, 242, 254, 0.3);
            background: rgba(0, 242, 254, 0.1);
        }
        .card-content {
            display: flex;
            flex-direction: column;
            gap: 2px;
        }
        .card-unit {
            font-size: 11px;
            font-weight: 600;
            color: var(--color-text-muted);
        }
        .card-value {
            font-family: var(--font-heading);
            font-weight: 700;
            font-size: 18px;
            color: var(--color-text-main);
        }
        .formula-card {
            background: rgba(0, 0, 0, 0.01);
            border: 1px solid var(--color-border);
            border-radius: 12px;
            padding: 16px;
            display: flex;
            flex-direction: column;
            gap: 8px;
            font-size: 12px;
        }
        .formula-card h4 {
            font-weight: 700;
            color: var(--color-text-main);
        }
        .formula-equation {
            font-family: monospace;
            color: #0284c7;
            font-size: 13px;
            background: #f8fafc; border-color: var(--color-border);
            padding: 6px 10px;
            border-radius: 6px;
            border: 1px solid var(--color-border);
            text-align: center;
        }
        /* Container Query for Responsiveness inside WP */
        @container gearratio-container (max-width: 1024px) {
            .app-main-grid {
                grid-template-columns: 1fr;
            }
            .control-panel, .simulation-panel, .results-panel {
                grid-column: 1;
            }
            .simulation-panel {
                order: -1;
            }
            .app-header {
                flex-direction: column;
                gap: 16px;
                text-align: center;
            }
            .logo-area {
                flex-direction: column;
                gap: 8px;
            }
        }
        .preset-details {
            display: flex;
            flex-direction: column;
            gap: 2px;
            align-items: flex-start;
            text-align: left;
        }
        .preset-spec {
            font-size: 11px;
            color: var(--color-text-muted);
            font-weight: 500;
        }
        .preset-name {
            font-size: 13px !important;
        }
        /* Language Switcher Styles */
        .lang-switch-wrapper {
            display: flex;
            gap: 4px;
            background: rgba(0, 0, 0, 0.04);
            border: 1px solid rgba(0, 0, 0, 0.08);
            padding: 3px;
            border-radius: 8px;
        }
        .lang-btn {
            padding: 4px 8px;
            font-size: 11px;
            font-weight: 700;
            border: none;
            background: transparent;
            color: #475569 !important; /* Slate grey */
            cursor: pointer;
            border-radius: 6px;
            transition: all 0.2s;
            font-family: 'Inter', sans-serif;
        }
        .lang-btn:hover {
            color: #1e293b !important;
            background: rgba(0, 0, 0, 0.02);
        }
        .lang-btn.active {
            background: #ffffff !important;
            color: #0284c7 !important; /* Cyan active */
            box-shadow: 0 2px 4px rgba(0,0,0,0.08);
        }
/* ━━ WordPress 레이아웃 Override: 디자인 1 (2열 컴팩트 대칭 레이아웃) ━━ */
.gearratio-calculator-wrapper .app-main-grid,
.gearratio-calculator-wrapper .main-grid,
.gearratio-calculator-wrapper .sim-grid {
    display: grid !important;
    grid-template-columns: 340px 1fr !important;
    gap: 24px !important;
    align-items: start !important;
}
/* 3열 레이아웃을 2열 레이아웃으로 변경하는 특화 스타일 */
.gearratio-calculator-wrapper .right-column {
    display: flex !important;
    flex-direction: column !important;
    gap: 24px !important;
    min-width: 0 !important;
    grid-column: 2 !important;
}
.gearratio-calculator-wrapper .simulation-panel,
.gearratio-calculator-wrapper .canvas-panel,
.gearratio-calculator-wrapper .sim-panel {
    grid-column: auto !important;
    order: 1 !important;
    align-self: stretch !important;
}
.gearratio-calculator-wrapper .control-panel {
    grid-column: 1 !important;
}
/* 2열 통합 결과 분석 영역 레이아웃 */
.gearratio-calculator-wrapper .simulation-results-section {
    display: grid !important;
    grid-template-columns: 1.1fr 1.3fr !important;
    gap: 20px !important;
    border-top: 1px solid var(--color-border) !important;
    padding-top: 20px !important;
    margin-top: 10px !important;
    align-items: stretch !important;
}
/* Readout Box 스타일 */
.gearratio-calculator-wrapper .simulation-results-section .ratio-readout-box,
.gearratio-calculator-wrapper .simulation-results-section .re-readout-box,
.gearratio-calculator-wrapper .simulation-results-section .status-readout-box,
.gearratio-calculator-wrapper .simulation-results-section .flow-readout-box,
.gearratio-calculator-wrapper .simulation-results-section [class*="readout-box"],
.gearratio-calculator-wrapper .simulation-results-section .gauge-container {
    grid-column: 1 !important;
    grid-row: 1 !important;
    margin: 0 !important;
    height: auto !important;
    display: flex !important;
    flex-direction: column !important;
    justify-content: center !important;
}
.gearratio-calculator-wrapper .simulation-results-section .results-grid {
    grid-column: 2 !important;
    grid-row: 1 / span 2 !important;
    display: flex !important;
    flex-direction: column !important;
    gap: 12px !important;
    justify-content: flex-start !important;
}
.gearratio-calculator-wrapper .simulation-results-section .results-grid .result-card {
    flex: none !important;
    display: flex !important;
    align-items: center !important;
    min-height: 72px !important;
    height: auto !important;
    padding: 12px 16px !important;
}
.gearratio-calculator-wrapper .simulation-results-section .formula-card {
    grid-column: 1 !important;
    grid-row: 2 !important;
}
/* 모바일/반응형 (800px 이하) ── 항상 세로형(1열) 정렬 및 시뮬레이터 캔버스 최상단 배치 */
@media (max-width: 800px) {
    .gearratio-calculator-wrapper .app-main-grid,
    .gearratio-calculator-wrapper .main-grid,
    .gearratio-calculator-wrapper .sim-grid {
        grid-template-columns: 1fr !important;
        display: flex !important;
        flex-direction: column !important;
    }
    .gearratio-calculator-wrapper .control-panel {
        order: 2 !important;
        width: 100% !important;
    }
    .gearratio-calculator-wrapper .right-column {
        order: 1 !important;
        width: 100% !important;
        display: flex !important;
        flex-direction: column !important;
    }
    .gearratio-calculator-wrapper .simulation-panel,
    .gearratio-calculator-wrapper .canvas-panel,
    .gearratio-calculator-wrapper .sim-panel,
    .gearratio-calculator-wrapper .canvas-section {
        order: -1 !important;
    }
    .gearratio-calculator-wrapper .simulation-results-section {
        grid-template-columns: 1fr !important;
    }
    .gearratio-calculator-wrapper .simulation-results-section .ratio-readout-box,
    .gearratio-calculator-wrapper .simulation-results-section .re-readout-box,
    .gearratio-calculator-wrapper .simulation-results-section .status-readout-box,
    .gearratio-calculator-wrapper .simulation-results-section .flow-readout-box,
    .gearratio-calculator-wrapper .simulation-results-section [class*="readout-box"],
    .gearratio-calculator-wrapper .simulation-results-section .gauge-container {
        grid-column: 1 !important;
        grid-row: auto !important;
        height: auto !important;
    }
    .gearratio-calculator-wrapper .simulation-results-section .results-grid {
        grid-column: 1 !important;
        grid-row: auto !important;
    }
    .gearratio-calculator-wrapper .simulation-results-section .formula-card {
        grid-column: 1 !important;
        grid-row: auto !important;
    }
}
.gearratio-calculator-wrapper .app-container,
.gearratio-calculator-wrapper .main-container {
    max-width: 100% !important;
    padding: 12px !important;
}
/* Premium Advice/Formula Card & Typography Overrides */
.gearratio-calculator-wrapper .simulation-results-section .formula-card,
.gearratio-calculator-wrapper .results-panel .formula-card {
    background: #ffffff !important;
    border: 1px solid var(--color-border) !important;
    border-radius: 12px !important;
    padding: 16px !important;
    box-shadow: var(--shadow-card) !important;
    transition: all 0.2s ease !important;
    display: flex !important;
    flex-direction: column !important;
    justify-content: center !important;
    gap: 8px !important;
}
.gearratio-calculator-wrapper .simulation-results-section .formula-card h4,
.gearratio-calculator-wrapper .results-panel .formula-card h4 {
    font-size: 14px !important;
    font-weight: 700 !important;
    color: var(--color-text-main) !important;
    margin-top: 0 !important;
    margin-bottom: 4px !important;
    word-break: keep-all !important;
    line-height: 1.4 !important;
    display: flex !important;
    align-items: center !important;
    gap: 8px !important;
}
.gearratio-calculator-wrapper .formula-equation {
    font-family: 'Outfit', 'Cambria Math', 'Times New Roman', monospace !important;
    white-space: nowrap !important;
    overflow-x: auto !important;
    word-break: keep-all !important;
    text-align: center !important;
}
.gearratio-calculator-wrapper #text-judgment {
    font-size: 12px !important;
    font-weight: 500 !important;
    color: var(--color-text-muted) !important;
    line-height: 1.6 !important;
    word-break: keep-all !important;
}
</style>
<div class="gearratio-calculator-wrapper" style="position: relative; width: 100%; box-sizing: border-box; overflow: hidden; margin: 30px auto; border-radius: 20px;">
    <div class="app-background-glow" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 1; pointer-events: none; overflow: hidden;"></div>
    <div style="position: relative; z-index: 2; width: 100%;">
    <div class="app-container">
        <!-- Header -->
        <header class="app-header">
            <div class="logo-area">
                <div class="logo-icon"><i class="fa-solid fa-gear fa-spin-slow"></i></div>
                <div>
                    <h1>GEAR MESH</h1>
                    <div class="subtitle" data-i18n="header_subtitle">초정밀 기어비 시뮬레이터 &#038; 계산기</div>
                </div>
            </div>
            <div style="display: flex; align-items: center; gap: 12px;">
                <div class="lang-switch-wrapper" style="display: flex; gap: 4px; background: rgba(0, 0, 0, 0.03); border: 1px solid var(--color-border); padding: 3px; border-radius: 8px;">
                    <button class="lang-btn active" data-lang="ko" style="padding: 4px 8px; font-size: 11px; font-weight: 700; border: none; background: transparent; cursor: pointer; border-radius: 6px; transition: all 0.2s; font-family: 'Inter', sans-serif;">KO</button>
                    <button class="lang-btn" data-lang="en" style="padding: 4px 8px; font-size: 11px; font-weight: 700; border: none; background: transparent; cursor: pointer; border-radius: 6px; transition: all 0.2s; font-family: 'Inter', sans-serif;">EN</button>
                </div>
                <div class="header-badge">
                    <div class="pulse-dot"></div>
                    <div class="badge-text" data-i18n="badge_text">2D PHYSICS ENGINE ACTIVE</div>
                </div>
            </div>
        </header>
        <!-- Main Layout Grid -->
        <main class="app-main-grid">
            <!-- Left Panel: Controls -->
            <section class="panel control-panel">
                <div class="panel-header">
                    <i class="fa-solid fa-sliders text-cyan"></i>
                    <h2 data-i18n="panel_control_title">시뮬레이션 제어 변수</h2>
                </div>
                <!-- Input Gear Teeth Z1 -->
                <div class="input-group">
                    <div class="input-label-row">
                        <label><i class="fa-solid fa-cog text-cyan"></i> <span data-i18n="label_z1">구동 기어 잇수 (Z₁)</span></label>
                        <span class="helper-text" data-i18n="helper_z1">구동측 (8 ~ 100 T)</span>
                    </div>
                    <div class="number-input-wrapper">
                        <input type="number" id="input-z1" class="custom-number-input" min="8" max="100" value="12">
                        <div class="unit-badge">T</div>
                    </div>
                    <input type="range" id="slider-z1" class="custom-slider" min="8" max="100" value="12">
                </div>
                <!-- Output Gear Teeth Z2 -->
                <div class="input-group">
                    <div class="input-label-row">
                        <label><i class="fa-solid fa-cog text-magenta"></i> <span data-i18n="label_z2">피동 기어 잇수 (Z₂)</span></label>
                        <span class="helper-text" data-i18n="helper_z2">피동측 (8 ~ 100 T)</span>
                    </div>
                    <div class="number-input-wrapper">
                        <input type="number" id="input-z2" class="custom-number-input" min="8" max="100" value="24">
                        <div class="unit-badge">T</div>
                    </div>
                    <input type="range" id="slider-z2" class="custom-slider" min="8" max="100" value="24">
                </div>
                <!-- Input Speed RPM -->
                <div class="input-group">
                    <div class="input-label-row">
                        <label><i class="fa-solid fa-gauge-high text-purple"></i> <span data-i18n="label_rpm">입력 회전수 (N₁)</span></label>
                        <span class="helper-text" data-i18n="helper_rpm">입력 속도 (0 ~ 3000 RPM)</span>
                    </div>
                    <div class="number-input-wrapper">
                        <input type="number" id="input-rpm" class="custom-number-input" min="0" max="3000" value="120">
                        <div class="unit-badge">RPM</div>
                    </div>
                    <input type="range" id="slider-rpm" class="custom-slider" min="0" max="3000" value="120">
                </div>
                <!-- Gear Module (Pitch sizing) -->
                <div class="input-group">
                    <div class="input-label-row">
                        <label><i class="fa-solid fa-ruler"></i> <span data-i18n="label_module">기어 모듈 (m)</span></label>
                        <span class="helper-text" data-i18n="helper_module">이빨 크기 (1.0 ~ 8.0 mm)</span>
                    </div>
                    <div class="number-input-wrapper">
                        <input type="number" id="input-module" class="custom-number-input" min="1.0" max="8.0" step="0.5" value="3.0">
                        <div class="unit-badge">mm</div>
                    </div>
                </div>
                <!-- Simulation Controls -->
                <div class="control-actions">
                    <button id="btn-play-pause" class="action-btn">
                        <i class="fa-solid fa-pause"></i> <span>일시정지</span>
                    </button>
                    <button id="btn-reverse" class="action-btn">
                        <i class="fa-solid fa-backward"></i> <span data-i18n="btn_reverse">방향 전환</span>
                    </button>
                </div>
                <!-- Presets -->
                <div class="presets-section">
                    <h3 data-i18n="preset_title"><i class="fa-solid fa-tags text-cyan"></i> 하이테크 기어 프리셋</h3>
                    <div class="presets-grid">
                        <button class="preset-btn" data-preset="reduction">
                            <div class="preset-icon"><i class="fa-solid fa-arrow-down-wide-short"></i></div>
                            <div class="preset-details"><span class="preset-name" data-i18n="preset_reduction_name">4:1 강력 감속 시스템</span></div>
                        </button>
                        <button class="preset-btn" data-preset="mesh1to1">
                            <div class="preset-icon"><i class="fa-solid fa-arrows-left-right"></i></div>
                            <div class="preset-details"><span class="preset-name" data-i18n="preset_mesh_name">1:1 속도 매칭 정밀 기어</span></div>
                        </button>
                        <button class="preset-btn" data-preset="increase">
                            <div class="preset-icon"><i class="fa-solid fa-arrow-up-wide-short"></i></div>
                            <div class="preset-details"><span class="preset-name" data-i18n="preset_increase_name">1:3 기계식 증속 장치</span></div>
                        </button>
                    </div>
                </div>
            </section>
            <!-- Auto Injected Right Column wrapper for Design 1 -->
            <div class="right-column">
                <section class="panel simulation-panel">
                                <div class="panel-header">
                                    <div style="display: flex; align-items: center; gap: 12px;">
                                        <i class="fa-solid fa-circle-nodes text-cyan"></i>
                                        <h2 data-i18n="panel_physics_title">실시간 기어 맞물림 물리 뷰</h2>
                                    </div>
                                    <div id="txt-canvas-scale" class="canvas-scale-indicator">스케일 자동 조정</div>
                                </div>
                                <div class="canvas-wrapper">
                                    <canvas id="physics-canvas"></canvas>
                                    <!-- Overlay Floating Data -->
                                    <div class="canvas-overlay-data">
                                        <div class="overlay-item">
                                            <span class="label" data-i18n="label_center_dist">축간 중심거리 C:</span>
                                            <span class="value text-cyan" id="txt-center-dist">0.0 mm</span>
                                        </div>
                                    </div>
                                </div>
                                <!-- Mini Metrics -->
                                <div class="simulation-metrics-strip">
                                    <div class="mini-metric">
                                        <div class="label" data-i18n="label_pitch_speed">선속도</div>
                                        <div id="txt-pitch-speed" class="value">0.0 m/s</div>
                                    </div>
                                    <div class="mini-divider"></div>
                                    <div class="mini-metric">
                                        <div class="label" data-i18n="label_mesh_frequency">접촉점 맞물림 진동수</div>
                                        <div id="txt-mesh-frequency" class="value">0.0 Hz</div>
                                    </div>
                                </div>
                                <!-- Integrated Results Analysis Section -->
                            <div class="simulation-results-section">
                                <div class="ratio-readout-box">
                                    <div class="ratio-title" data-i18n="ratio_title">최종 기어비 (i)</div>
                                    <div id="txt-gear-ratio" class="ratio-value">2.00 : 1</div>
                                    <div id="txt-ratio-type" class="ratio-type">2.00배 감속 (토크 2.00배 증대)</div>
                                </div>
                                <div class="results-grid">
                                    <!-- Gear 1 Output Diameter -->
                                    <div class="result-card">
                                        <div class="card-icon"><i class="fa-solid fa-circle-dot text-cyan"></i></div>
                                        <div class="card-content">
                                            <span class="card-unit" data-i18n="card_d1">구동 기어 피치원 지름 (d₁)</span>
                                            <span id="txt-d1" class="card-value">0.0 mm</span>
                                        </div>
                                    </div>
                                    <!-- Gear 2 Output Diameter -->
                                    <div class="result-card">
                                        <div class="card-icon"><i class="fa-solid fa-circle-dot text-magenta"></i></div>
                                        <div class="card-content">
                                            <span class="card-unit" data-i18n="card_d2">피동 기어 피치원 지름 (d₂)</span>
                                            <span id="txt-d2" class="card-value">0.0 mm</span>
                                        </div>
                                    </div>
                                    <!-- Gear 2 Output Speed -->
                                    <div class="result-card">
                                        <div class="card-icon"><i class="fa-solid fa-rotate text-purple"></i></div>
                                        <div class="card-content">
                                            <span class="card-unit" data-i18n="card_n2">피동 기어 속도 (N₂)</span>
                                            <span id="txt-n2" class="card-value">0.0 RPM</span>
                                        </div>
                                    </div>
                                    <!-- Torque Multiplier -->
                                    <div class="result-card">
                                        <div class="card-icon"><i class="fa-solid fa-bolt text-success"></i></div>
                                        <div class="card-content">
                                            <span class="card-unit" data-i18n="card_torque_mult">출력 토크 변환배율 (T₂/T₁)</span>
                                            <span id="txt-torque-mult" class="card-value">100% (동일)</span>
                                        </div>
                                    </div>
                                </div>
                                <div class="formula-card">
                                    <h4 data-i18n="formula_title"><i class="fa-solid fa-circle-info text-cyan"></i> 핵심 동역학 공식</h4>
                                    <div class="formula-equation">
                                        i = Z₂ / Z₁ = N₁ / N₂
                                    </div>
                                    <div class="formula-equation">
                                        d = m × Z
                                    </div>
                                </div>
                            </div>
                </section>
            </div>
        </main>
        <!-- Disclaimer Footer -->
        <footer class="app-disclaimer" style="margin-top: 20px; padding: 12px 16px; background: rgba(0, 0, 0, 0.015); border: 1px solid var(--color-border); border-radius: 12px; font-size: 11px; color: var(--color-text-muted); line-height: 1.5; text-align: left; display: flex; gap: 10px; align-items: flex-start; clear: both;">
            <i class="fa-solid fa-circle-info" style="color: var(--color-cyan); font-size: 14px; margin-top: 2px; flex-shrink: 0;"></i>
            <span data-i18n="disclaimer_text"><strong>면책 조항 (Disclaimer):</strong> 본 시뮬레이터의 계산 결과는 교육 및 참고용으로만 제공되며, 실제 제품 설계나 제작 시에는 반드시 최신 공학 규격 및 공식 표준 설계 기준을 재확인하시기 바랍니다. 계산 값의 무결성을 보장하지 않으며, 이로 인해 발생하는 직접적/간접적 손해에 대해 제작자 및 본 블로그는 어떠한 책임을 지지 않습니다.</span>
        </footer>
    </div>
    <!-- Physics & Mesh Animation Engine -->
    </div>
</div>
<script>
        (function() {
        let isGearInit = false;
        function initGearSimulator() {
            if (isGearInit) return;
            const canvas = document.getElementById('physics-canvas');
            if (!canvas) return;
            const ctx = canvas.getContext('2d');
            if (!ctx) return;
            isGearInit = true;
            window.__gearratio_initialized = true;
            // DOM Elements
            const sliderZ1 = document.getElementById('slider-z1');
            const inputZ1 = document.getElementById('input-z1');
            const sliderZ2 = document.getElementById('slider-z2');
            const inputZ2 = document.getElementById('input-z2');
            const sliderRpm = document.getElementById('slider-rpm');
            const inputRpm = document.getElementById('input-rpm');
            const inputModule = document.getElementById('input-module');
            const btnPlayPause = document.getElementById('btn-play-pause');
            const btnReverse = document.getElementById('btn-reverse');
            const presetButtons = document.querySelectorAll('.preset-btn');
            const txtCenterDist = document.getElementById('txt-center-dist');
            const txtPitchSpeed = document.getElementById('txt-pitch-speed');
            const txtMeshFrequency = document.getElementById('txt-mesh-frequency');
            const txtGearRatio = document.getElementById('txt-gear-ratio');
            const txtRatioType = document.getElementById('txt-ratio-type');
            const txtD1 = document.getElementById('txt-d1');
            const txtD2 = document.getElementById('txt-d2');
            const txtN2 = document.getElementById('txt-n2');
            const txtTorqueMult = document.getElementById('txt-torque-mult');
            const wrapper = document.querySelector('.gearratio-calculator-wrapper') || document.body;
            // State variables
            const state = {
                z1: 12,
                z2: 24,
                rpm: 120,
                m: 3.0,
                angle1: 0,
                angle2: 0,
                isPlaying: true,
                direction: 1,
                lastTime: 0,
                sparks: [],
                lang: 'ko' // Default language
            };
            // i18n Translations Dictionary
            const translations = {
                ko: {
                    header_subtitle: "초정밀 기어비 시뮬레이터 & 계산기",
                    panel_control_title: "시뮬레이션 제어 변수",
                    label_z1: "구동 기어 잇수 (Z₁)",
                    helper_z1: "구동측 (8 ~ 100 T)",
                    label_z2: "피동 기어 잇수 (Z₂)",
                    helper_z2: "피동측 (8 ~ 100 T)",
                    label_rpm: "입력 회전수 (N₁)",
                    helper_rpm: "입력 속도 (0 ~ 3000 RPM)",
                    label_module: "기어 모듈 (m)",
                    helper_module: "이빨 크기 (1.0 ~ 8.0 mm)",
                    btn_reverse: "방향 전환",
                    preset_title: "하이테크 기어 프리셋",
                    preset_reduction_name: "4:1 강력 감속 시스템",
                    preset_mesh_name: "1:1 속도 매칭 정밀 기어",
                    preset_increase_name: "1:3 기계식 증속 장치",
                    panel_physics_title: "실시간 기어 맞물림 물리 뷰",
                    label_center_dist: "축간 중심거리 C:",
                    label_pitch_speed: "선속도",
                    label_mesh_frequency: "접촉점 맞물림 진동수",
                    panel_results_title: "해석 및 정량 결과",
                    ratio_title: "최종 기어비 (i)",
                    card_d1: "구동 기어 피치원 지름 (d₁)",
                    card_d2: "피동 기어 피치원 지름 (d₂)",
                    card_n2: "피동 기어 속도 (N₂)",
                    card_torque_mult: "출력 토크 변환배율 (T₂/T₁)",
                    formula_title: "핵심 동역학 공식",
                    disclaimer_text: "<strong>면책 조항 (Disclaimer):</strong> 본 시뮬레이터의 계산 결과는 교육 및 참고용으로만 제공되며, 실제 제품 설계나 제작 시에는 반드시 최신 공학 규격 및 공식 표준 설계 기준을 재확인하시기 바랍니다. 계산 값의 무결성을 보장하지 않으며, 이로 인해 발생하는 직접적/간접적 손해에 대해 제작자 및 본 블로그는 어떠한 책임을 지지 않습니다."
                },
                en: {
                    header_subtitle: "Precision Gear Ratio Simulator & Calculator",
                    panel_control_title: "Simulation Control Variables",
                    label_z1: "Drive Gear Teeth (Z₁)",
                    helper_z1: "Drive side (8 ~ 100 T)",
                    label_z2: "Driven Gear Teeth (Z₂)",
                    helper_z2: "Driven side (8 ~ 100 T)",
                    label_rpm: "Input Speed (N₁)",
                    helper_rpm: "Input speed (0 ~ 3000 RPM)",
                    label_module: "Gear Module (m)",
                    helper_module: "Tooth size (1.0 ~ 8.0 mm)",
                    btn_reverse: "Reverse Direction",
                    preset_title: "High-Tech Gear Presets",
                    preset_reduction_name: "4:1 High Reduction System",
                    preset_mesh_name: "1:1 Speed Matching Precision",
                    preset_increase_name: "1:3 Mechanical Speed Increaser",
                    panel_physics_title: "Real-Time Gear Mesh Physics View",
                    label_center_dist: "Center Distance C:",
                    label_pitch_speed: "Pitch Line Speed",
                    label_mesh_frequency: "Teeth Meshing Frequency",
                    panel_results_title: "Analysis & Quantitative Results",
                    ratio_title: "Final Gear Ratio (i)",
                    card_d1: "Drive Gear Pitch Diameter (d₁)",
                    card_d2: "Driven Gear Pitch Diameter (d₂)",
                    card_n2: "Driven Gear Speed (N₂)",
                    card_torque_mult: "Output Torque Ratio (T₂/T₁)",
                    formula_title: "Key Gear Dynamics Formulas",
                    disclaimer_text: "<strong>Disclaimer:</strong> The calculations and simulations provided here are for educational and informational purposes only. Always verify with official design standards and engineering specifications before manufacturing. The author and this blog assume no liability for direct or indirect damages arising from using this tool."
                }
            };
            function applyLanguage(lang) {
                state.lang = lang;
                document.querySelectorAll('[data-i18n]').forEach(elem => {
                    const key = elem.getAttribute('data-i18n');
                    if ((translations[lang]) ? (translations[lang][key]) : false) {
                        elem.innerHTML = translations[lang][key];
                    }
                });
                // Update language buttons active state
                document.querySelectorAll('.lang-btn').forEach(btn => {
                    if (btn.dataset.lang === lang) {
                        btn.classList.add('active');
                        btn.style.background = '#ffffff';
                        btn.style.color = 'var(--color-cyan)';
                        btn.style.boxShadow = '0 2px 4px rgba(0,0,0,0.05)';
                    } else {
                        btn.classList.remove('active');
                        btn.style.background = 'transparent';
                        btn.style.color = 'var(--color-text-muted)';
                        btn.style.boxShadow = 'none';
                    }
                });
                // Refresh dynamic text values
                updateCalculations();
                // Refresh play/pause button text
                const btnPlayPauseSpan = btnPlayPause.querySelector('span');
                if (btnPlayPauseSpan) {
                    btnPlayPauseSpan.innerText = state.isPlaying 
                        ? (lang === 'ko' ? '일시정지' : 'Pause')
                        : (lang === 'ko' ? '재생' : 'Play');
                }
            }
            // Language detect & Initialization (Robust detection)
            const urlParams = new URLSearchParams(window.location.search);
            let detectedLang = urlParams.get('lang');
            if (!detectedLang) {
                const path = window.location.pathname;
                if (path.includes('/ko/')) {
                    detectedLang = 'ko';
                } else if (path.includes('-en/') || path.includes('/en/') || path.includes('simulator-en')) {
                    detectedLang = 'en';
                } else {
                    detectedLang = navigator.language.startsWith('ko') ? 'ko' : 'en';
                }
            }
            // Bind click events to language switcher with redirect support
            document.querySelectorAll('.lang-btn').forEach(btn => {
                btn.addEventListener('click', () => {
                    const selectedLang = btn.dataset.lang;
                    const path = window.location.pathname;
                    // If on the live post, redirect to the translated post page
                    if ((selectedLang === 'en') ? (path.includes('gear-ratio-calculator-simulator-3')) : false) {
                        window.location.href = 'https://myengnote.com/gear-ratio-calculator-simulator-en/';
                    } else if ((selectedLang === 'ko') ? (path.includes('gear-ratio-calculator-simulator-en')) : false) {
                        window.location.href = 'https://myengnote.com/ko/gear-ratio-calculator-simulator-3/';
                    } else {
                        // Fallback: translate on-the-fly
                        applyLanguage(selectedLang);
                    }
                });
            });
            // Initialize language setting on page load
            applyLanguage(detectedLang);
            // Canvas Resizing (Retina support)
            function resizeCanvas() {
                const rect = canvas.getBoundingClientRect();
                const dpr = window.devicePixelRatio || 1;
                canvas.width = rect.width * dpr;
                canvas.height = rect.height * dpr;
                ctx.scale(dpr, dpr);
            }
            resizeCanvas();
            window.addEventListener('resize', resizeCanvas);
            // Polling backup to guarantee resize
            setTimeout(resizeCanvas, 300);
            // Spark Particle System
            class GearSpark {
                constructor(x, y, vx, vy) {
                    this.x = x;
                    this.y = y;
                    this.vx = vx;
                    this.vy = vy;
                    this.size = Math.random() * 1.5 + 0.5;
                    this.life = Math.random() * 20 + 10;
                    this.maxLife = this.life;
                    const colors = ['#00f2fe', '#ff007f', '#ffffff'];
                    this.color = colors[Math.floor(Math.random() * colors.length)];
                }
                update() {
                    this.x += this.vx;
                    this.y += this.vy;
                    this.vy += 0.05; // soft gravity
                    this.life--;
                }
                draw(c) {
                    const alpha = this.life / this.maxLife;
                    c.save();
                    c.globalAlpha = alpha;
                    c.beginPath();
                    c.arc(this.x, this.y, this.size, 0, Math.PI * 2);
                    c.fillStyle = this.color;
                    c.shadowBlur = 4;
                    c.shadowColor = this.color;
                    c.fill();
                    c.restore();
                }
            }
            // Sync Z1 Input and Slider
            function syncZ1FromSlider() {
                const val = parseInt(sliderZ1.value);
                inputZ1.value = val;
                state.z1 = val;
                clearPresets();
                updateCalculations();
            }
            function syncZ1FromInput() {
                let val = parseInt(inputZ1.value);
                if (isNaN(val) || val < 8) val = 8;
                if (val > 100) val = 100;
                sliderZ1.value = val;
                state.z1 = val;
                clearPresets();
                updateCalculations();
            }
            // Sync Z2 Input and Slider
            function syncZ2FromSlider() {
                const val = parseInt(sliderZ2.value);
                inputZ2.value = val;
                state.z2 = val;
                clearPresets();
                updateCalculations();
            }
            function syncZ2FromInput() {
                let val = parseInt(inputZ2.value);
                if (isNaN(val) || val < 8) val = 8;
                if (val > 100) val = 100;
                sliderZ2.value = val;
                state.z2 = val;
                clearPresets();
                updateCalculations();
            }
            // Sync RPM Input and Slider
            function syncRpmFromSlider() {
                const val = parseInt(sliderRpm.value);
                inputRpm.value = val;
                state.rpm = val;
                clearPresets();
                updateCalculations();
            }
            function syncRpmFromInput() {
                let val = parseInt(inputRpm.value);
                if (isNaN(val) || val < 0) val = 0;
                if (val > 3000) val = 3000;
                sliderRpm.value = val;
                state.rpm = val;
                clearPresets();
                updateCalculations();
            }
            // Sync Module
            function handleModuleChange() {
                let val = parseFloat(inputModule.value);
                if (isNaN(val) || val < 1.0) val = 1.0;
                if (val > 8.0) val = 8.0;
                state.m = val;
                updateCalculations();
            }
            // Core Math Calculations
            function updateCalculations() {
                const d1 = state.m * state.z1;
                const d2 = state.m * state.z2;
                const centerDist = (d1 + d2) / 2;
                const gearRatio = state.z2 / state.z1;
                const n2 = state.rpm / gearRatio;
                // Pitch Line Speed = omega * radius
                // PCD in mm, RPM -> linear velocity in m/s
                const r1_meters = (d1 / 2) / 1000;
                const omega1 = (2 * Math.PI * state.rpm) / 60;
                const pitchSpeed = omega1 * r1_meters;
                // Meshing frequency = frequency of gear teeth mesh
                const meshFreq = (state.rpm / 60) * state.z1;
                // Update UI Texts
                txtCenterDist.innerText = centerDist.toFixed(1) + ' mm';
                txtPitchSpeed.innerText = pitchSpeed.toFixed(2) + ' m/s';
                txtMeshFrequency.innerText = meshFreq.toFixed(1) + ' Hz';
                txtGearRatio.innerText = gearRatio.toFixed(2) + ' : 1';
                if (state.lang === 'ko') {
                    if (gearRatio > 1.0) {
                        txtRatioType.innerText = `${gearRatio.toFixed(2)}배 감속 (토크 ${gearRatio.toFixed(2)}배 증대)`;
                    } else if (gearRatio < 1.0) {
                        const gain = 1 / gearRatio;
                        txtRatioType.innerText = `${gain.toFixed(2)}배 증속 (토크 ${gearRatio.toFixed(2)}배 감소)`;
                    } else {
                        txtRatioType.innerText = '1:1 등속 동력 전달';
                    }
                    if (gearRatio === 1.0) {
                        txtTorqueMult.innerText = '100% (동일)';
                    } else {
                        txtTorqueMult.innerText = (gearRatio * 100).toFixed(0) + '%';
                    }
                } else {
                    if (gearRatio > 1.0) {
                        txtRatioType.innerText = `${gearRatio.toFixed(2)}x Reduction (Torque x${gearRatio.toFixed(2)})`;
                    } else if (gearRatio < 1.0) {
                        const gain = 1 / gearRatio;
                        txtRatioType.innerText = `${gain.toFixed(2)}x Increase (Torque x${gain.toFixed(2)})`;
                    } else {
                        txtRatioType.innerText = '1:1 Speed Matching';
                    }
                    if (gearRatio === 1.0) {
                        txtTorqueMult.innerText = '100% (Equal)';
                    } else {
                        txtTorqueMult.innerText = (gearRatio * 100).toFixed(0) + '%';
                    }
                }
                txtD1.innerText = d1.toFixed(1) + ' mm';
                txtD2.innerText = d2.toFixed(1) + ' mm';
                txtN2.innerText = n2.toFixed(1) + ' RPM';
            }
            // Preset Buttons Click Handler
            function loadPreset(key) {
                clearPresets();
                presetButtons.forEach(btn => {
                    if (btn.dataset.preset === key) {
                        btn.classList.add('active');
                    }
                });
                if (key === 'reduction') {
                    state.z1 = 12;
                    state.z2 = 48;
                    state.rpm = 200;
                    state.m = 2.5;
                } else if (key === 'mesh1to1') {
                    state.z1 = 24;
                    state.z2 = 24;
                    state.rpm = 150;
                    state.m = 3.0;
                } else if (key === 'increase') {
                    state.z1 = 36;
                    state.z2 = 12;
                    state.rpm = 100;
                    state.m = 3.0;
                }
                // Sync inputs
                inputZ1.value = state.z1;
                sliderZ1.value = state.z1;
                inputZ2.value = state.z2;
                sliderZ2.value = state.z2;
                inputRpm.value = state.rpm;
                sliderRpm.value = state.rpm;
                inputModule.value = state.m;
                updateCalculations();
            }
            function clearPresets() {
                presetButtons.forEach(btn => btn.classList.remove('active'));
            }
            // Draw Gear Teeth Path
            function drawGearOutline(c, teeth, pcd, mod, angleOffset) {
                const r_pitch = pcd / 2;
                const r_addendum = r_pitch + mod;
                const r_dedendum = r_pitch - 1.25 * mod;
                c.save();
                c.rotate(angleOffset);
                c.beginPath();
                for (let i = 0; i < teeth; i++) {
                    const stepAngle = (i * 2 * Math.PI) / teeth;
                    // Teeth geometry angles
                    const t0 = stepAngle - (2 * Math.PI / teeth) * 0.22;
                    const t1 = stepAngle - (2 * Math.PI / teeth) * 0.10;
                    const t2 = stepAngle + (2 * Math.PI / teeth) * 0.10;
                    const t3 = stepAngle + (2 * Math.PI / teeth) * 0.22;
                    const t4 = stepAngle + (2 * Math.PI / teeth) * 0.50; // valley mid point
                    const p0_x = Math.cos(t0) * r_dedendum;
                    const p0_y = Math.sin(t0) * r_dedendum;
                    const p1_x = Math.cos(t1) * r_addendum;
                    const p1_y = Math.sin(t1) * r_addendum;
                    const p2_x = Math.cos(t2) * r_addendum;
                    const p2_y = Math.sin(t2) * r_addendum;
                    const p3_x = Math.cos(t3) * r_dedendum;
                    const p3_y = Math.sin(t3) * r_dedendum;
                    const p4_x = Math.cos(t4) * r_dedendum;
                    const p4_y = Math.sin(t4) * r_dedendum;
                    if (i === 0) {
                        c.moveTo(p0_x, p0_y);
                    } else {
                        c.lineTo(p0_x, p0_y);
                    }
                    c.lineTo(p1_x, p1_y);
                    c.lineTo(p2_x, p2_y);
                    c.lineTo(p3_x, p3_y);
                    c.lineTo(p4_x, p4_y);
                }
                c.closePath();
                c.restore();
            }
            // Draw Gear Internals (Design details)
            function drawGearDetails(c, x, y, teeth, pcd, mod, angleOffset, themeColor) {
                const r_pitch = pcd / 2;
                c.save();
                c.translate(x, y);
                // 1. Draw outer teeth filled path
                drawGearOutline(c, teeth, pcd, mod, angleOffset);
                c.fillStyle = 'rgba(241, 245, 249, 0.85)';
                c.fill();
                c.strokeStyle = themeColor;
                c.lineWidth = 2.5;
                c.shadowBlur = 8;
                c.shadowColor = themeColor;
                c.stroke();
                c.shadowBlur = 0;
                // 2. Draw Pitch Circle (light dotted)
                c.beginPath();
                c.arc(0, 0, r_pitch, 0, Math.PI * 2);
                c.strokeStyle = 'rgba(15, 23, 42, 0.15)';
                c.lineWidth = 1;
                c.setLineDash([4, 4]);
                c.stroke();
                c.setLineDash([]);
                // 3. Draw internal cutouts and spokes
                c.save();
                c.rotate(angleOffset);
                // Shaft central hub
                c.beginPath();
                c.arc(0, 0, Math.max(r_pitch * 0.25, 12), 0, Math.PI * 2);
                c.strokeStyle = 'rgba(15, 23, 42, 0.25)';
                c.lineWidth = 2;
                c.stroke();
                c.beginPath();
                c.arc(0, 0, 5, 0, Math.PI * 2);
                c.fillStyle = '#ffffff';
                c.fill();
                // Spokes
                if (teeth >= 12) {
                    const spokes = teeth >= 30 ? 6 : 4;
                    for (let s = 0; s < spokes; s++) {
                        const spokeAngle = (s * 2 * Math.PI) / spokes;
                        c.save();
                        c.rotate(spokeAngle);
                        c.beginPath();
                        c.moveTo(0, Math.max(r_pitch * 0.25, 12));
                        c.lineTo(0, r_pitch - 10);
                        c.strokeStyle = 'rgba(15, 23, 42, 0.1)';
                        c.lineWidth = spokes === 6 ? 3 : 4;
                        c.stroke();
                        c.restore();
                    }
                }
                c.restore();
                // 4. Index marker (draw small dot on one tooth to visualize rotation easily)
                c.save();
                c.rotate(angleOffset);
                c.beginPath();
                c.arc(r_pitch - 6, 0, 3.5, 0, Math.PI * 2);
                c.fillStyle = '#ffffff';
                c.shadowBlur = 4;
                c.shadowColor = '#ffffff';
                c.fill();
                c.restore();
                c.restore();
            }
            function drawDiameterLeader(c, x, y, r, valStr, labelPrefix, side) {
                c.save();
                c.strokeStyle = 'rgba(71, 85, 105, 0.4)';
                c.lineWidth = 1.2;
                // Angle of leader line (45 degrees up-left or up-right)
                const angle = side === -1 ? -Math.PI * 0.75 : -Math.PI * 0.25;
                const px = x + Math.cos(angle) * r;
                const py = y + Math.sin(angle) * r;
                // Draw a beautiful small dot on the circle boundary
                c.beginPath();
                c.arc(px, py, 2.5, 0, Math.PI * 2);
                c.fillStyle = side === -1 ? '#0284c7' : '#db2777';
                c.fill();
                // Draw leader lines: from circle boundary diagonal outwards, then horizontal
                const lx1 = px + Math.cos(angle) * 20;
                const ly1 = py + Math.sin(angle) * 20;
                const lx2 = lx1 + side * 45;
                const ly2 = ly1;
                c.beginPath();
                c.moveTo(px, py);
                c.lineTo(lx1, ly1);
                c.lineTo(lx2, ly2);
                c.stroke();
                // Draw text above the horizontal line
                const text = `${labelPrefix} ${valStr}`;
                c.font = 'bold 10px var(--font-body)';
                const tx = side === -1 ? lx1 - 4 : lx1 + 4;
                c.fillStyle = '#1e293b';
                c.textAlign = side === -1 ? 'right' : 'left';
                c.textBaseline = 'bottom';
                c.fillText(text, tx, ly2 - 1);
                c.restore();
            }
            // Main Animation loop
            function animate(currentTime) {
                requestAnimationFrame(animate);
                let dt = (currentTime - state.lastTime) / 1000;
                if (isNaN(dt) || dt < 0 || dt > 1.0) dt = 0.016;
                state.lastTime = currentTime;
                const width = canvas.width / (window.devicePixelRatio || 1);
                const height = canvas.height / (window.devicePixelRatio || 1);
                const cx = width / 2;
                const cy = height / 2;
                ctx.clearRect(0, 0, width, height);
                // 1. Draw Grid
                ctx.save();
                ctx.strokeStyle = 'rgba(2, 132, 199, 0.06)';
                ctx.lineWidth = 1;
                for (let x = 0; x < width; x += 30) {
                    ctx.beginPath();
                    ctx.moveTo(x, 0);
                    ctx.lineTo(x, height);
                    ctx.stroke();
                }
                for (let y = 0; y < height; y += 30) {
                    ctx.beginPath();
                    ctx.moveTo(0, y);
                    ctx.lineTo(width, y);
                    ctx.stroke();
                }
                ctx.restore();
                // 2. Mesh physics calculations
                const d1 = state.m * state.z1;
                const d2 = state.m * state.z2;
                const r1 = d1 / 2;
                const r2 = d2 / 2;
                const centerDist = r1 + r2;
                // Scale visualization to fit screen dynamically
                // Mathematical bounding model to prevent any dimension label clipping on the left/right
                const totalWidthRequired = 1.707 * centerDist + 210;
                const totalHeightRequired = Math.max(d1, d2) + 120;
                const scale = Math.min(width / totalWidthRequired, height / totalHeightRequired);
                // Floating indicator scale update
                const txtCanvasScale = document.getElementById('txt-canvas-scale');
                if (txtCanvasScale) {
                    if (state.lang === 'ko') {
                        txtCanvasScale.innerText = `스케일 비율: 1:${(1/scale * 100).toFixed(0)}급`;
                    } else {
                        txtCanvasScale.innerText = `Scale: 1:${(1/scale * 100).toFixed(0)}`;
                    }
                }
                // Centering centers
                const x1 = cx - (centerDist / 2) * scale;
                const y1 = cy;
                const x2 = cx + (centerDist / 2) * scale;
                const y2 = cy;
                const gearRatio = state.z2 / state.z1;
                if (state.isPlaying) {
                    if (state.rpm > 0) {
                        const omega1 = (2 * Math.PI * state.rpm) / 60; // rad/s
                        // Apply stroboscopic limit for fast rotation rendering
                        const maxRenderOmega = 6;
                        const renderOmega1 = maxRenderOmega * (1 - Math.exp(-omega1 / maxRenderOmega));
                        state.angle1 += state.direction * renderOmega1 * dt;
                        state.angle2 = -state.angle1 / gearRatio;
                    }
                }
                // Mesh Point = exact touching tangent point of pitch circles
                const mesh_x = x1 + r1 * scale;
                const mesh_y = cy;
                // 3. Spawning meshing sparks at contact point
                if (state.isPlaying) {
                    if (state.rpm > 0) {
                        const sparkEmission = Math.min(Math.floor(state.rpm / 200) + 1, 3);
                        for (let s = 0; s < sparkEmission; s++) {
                            if (Math.random() > 0.4) {
                                const sparkVx = (Math.random() - 0.5) * 2;
                                const sparkVy = -Math.random() * (state.rpm / 150 + 1.5) - 0.5;
                                state.sparks.push(new GearSpark(mesh_x, mesh_y, sparkVx, sparkVy));
                            }
                        }
                    }
                }
                // Render Sparks
                state.sparks = state.sparks.filter(s => s.life > 0);
                state.sparks.forEach(s => {
                    s.update();
                    s.draw(ctx);
                });
                // 4. Draw Center Distance dimensions
                ctx.save();
                ctx.beginPath();
                ctx.moveTo(x1, y1);
                ctx.lineTo(x2, y2);
                ctx.strokeStyle = 'rgba(0, 0, 0, 0.05)';
                ctx.lineWidth = 1.5;
                ctx.setLineDash([4, 4]);
                ctx.stroke();
                ctx.restore();
                // Draw Gear 1 (Drive - Cyan)
                // Add a small initial tooth phase offset so meshing matches perfectly
                const phase1 = 0;
                drawGearDetails(ctx, x1, y1, state.z1, d1 * scale, state.m * scale, state.angle1 + phase1, '#0284c7');
                // Draw Gear 2 (Driven - Magenta)
                // For perfect tooth meshing: Gear 2 tooth needs to align to Gear 1 valley.
                // An angular phase shift of Math.PI / state.z2 aligns teeth perfectly.
                const phase2 = Math.PI + Math.PI / state.z2;
                drawGearDetails(ctx, x2, y2, state.z2, d2 * scale, state.m * scale, state.angle2 + phase2, '#db2777');
                // 5. Contact pitch point glow (small cyan glowing ring)
                ctx.save();
                ctx.beginPath();
                ctx.arc(mesh_x, mesh_y, 6, 0, Math.PI * 2);
                ctx.fillStyle = 'rgba(255, 255, 255, 0.9)';
                ctx.shadowBlur = 10;
                ctx.shadowColor = '#0284c7';
                ctx.fill();
                ctx.restore();
                // 6. Draw Diameter dimensions on gears with professional CAD leader lines
                drawDiameterLeader(ctx, x1, y1, r1 * scale, d1.toFixed(1) + ' mm', 'PCD₁ =', -1);
                drawDiameterLeader(ctx, x2, y2, r2 * scale, d2.toFixed(1) + ' mm', 'PCD₂ =', 1);
                // Horizontal Center Distance Dimension Line (C)
                ctx.save();
                ctx.strokeStyle = 'rgba(71, 85, 105, 0.3)';
                ctx.lineWidth = 1;
                const dimY = y1 + r2 * scale + 25; // 25px below larger gear
                ctx.beginPath();
                ctx.moveTo(x1, y1 + 10);
                ctx.lineTo(x1, dimY + 5);
                ctx.moveTo(x2, y2 + 10);
                ctx.lineTo(x2, dimY + 5);
                ctx.stroke();
                ctx.beginPath();
                ctx.moveTo(x1, dimY);
                ctx.lineTo(x2, dimY);
                ctx.stroke();
                function drawHorizontalArrowhead(px, py, direction) {
                    ctx.save();
                    ctx.translate(px, py);
                    ctx.fillStyle = 'rgba(71, 85, 105, 0.5)';
                    ctx.beginPath();
                    ctx.moveTo(0, 0);
                    ctx.lineTo(direction * 6, -3);
                    ctx.lineTo(direction * 6, 3);
                    ctx.closePath();
                    ctx.fill();
                    ctx.restore();
                }
                drawHorizontalArrowhead(x1, dimY, 1);
                drawHorizontalArrowhead(x2, dimY, -1);
                const cVal = (d1 + d2) / 2;
                const cText = `C = ${cVal.toFixed(1)} mm`;
                ctx.font = 'bold 9px Inter, sans-serif';
                const cTw = ctx.measureText(cText).width;
                ctx.fillStyle = '#ffffff';
                ctx.fillRect((x1 + x2)/2 - cTw/2 - 4, dimY - 5, cTw + 8, 10);
                ctx.fillStyle = '#475569';
                ctx.textAlign = 'center';
                ctx.textBaseline = 'middle';
                ctx.fillText(cText, (x1 + x2)/2, dimY);
                ctx.restore();
            }
            // Sync Controls
            sliderZ1.addEventListener('input', syncZ1FromSlider);
            inputZ1.addEventListener('change', syncZ1FromInput);
            sliderZ2.addEventListener('input', syncZ2FromSlider);
            inputZ2.addEventListener('change', syncZ2FromInput);
            sliderRpm.addEventListener('input', syncRpmFromSlider);
            inputRpm.addEventListener('change', syncRpmFromInput);
            inputModule.addEventListener('change', handleModuleChange);
            btnPlayPause.addEventListener('click', () => {
                state.isPlaying = !state.isPlaying;
                const labelText = state.isPlaying
                    ? (state.lang === 'ko' ? '일시정지' : 'Pause')
                    : (state.lang === 'ko' ? '재생' : 'Play');
                const iconClass = state.isPlaying ? 'fa-pause' : 'fa-play';
                btnPlayPause.innerHTML = `<i class="fa-solid ${iconClass}"></i> <span>${labelText}</span>`;
            });
            btnReverse.addEventListener('click', () => {
                state.direction *= -1;
            });
            presetButtons.forEach(btn => {
                btn.addEventListener('click', () => {
                    loadPreset(btn.dataset.preset);
                });
            });
            // Initialize calculations and presets
            loadPreset('reduction');
            requestAnimationFrame(animate);
            // ── 우클릭 & 소스 복사 방지 (전체 문서 레벨 + 알림창 동기화) ──
            document.addEventListener('contextmenu', function(e) {
                e.preventDefault();
                const msg = state.lang === 'ko' 
                    ? "이 콘텐츠는 저작권법의 보호를 받습니다. 무단 복제 및 우클릭을 금지합니다."
                    : "This content is protected by copyright law. Copying and right-clicking are prohibited.";
                alert(msg);
                return false;
            }, { capture: true });
            document.addEventListener('selectstart', function(e) {
                e.preventDefault();
                return false;
            }, { capture: true });
            // 개발자도구 단축키 및 복사 단축키 차단 (F12, Ctrl+U, Ctrl+Shift+I/J/C, Ctrl+C, Ctrl+S)
            document.addEventListener('keydown', function(e) {
                const msg = state.lang === 'ko' 
                    ? "이 콘텐츠는 저작권법의 보호를 받습니다. 무단 복제 및 우클릭을 금지합니다."
                    : "This content is protected by copyright law. Copying and right-clicking are prohibited.";
                if (e.key === 'F12') {
                    e.preventDefault();
                    alert(msg);
                    return false;
                }
                if (e.ctrlKey) {
                    if (e.key === 'u' || e.key === 'c' || e.key === 's' || e.key === 'U' || e.key === 'C' || e.key === 'S') {
                        e.preventDefault();
                        alert(msg);
                        return false;
                    }
                    if (e.shiftKey) {
                        if (['i','I','j','J','c','C'].includes(e.key)) {
                            e.preventDefault();
                            alert(msg);
                            return false;
                        }
                    }
                }
            }, { capture: true });
        } // <-- Closed the initGearSimulator function
        // Robust ReadyState hook-up with polling to guarantee execution even if DOM elements load late
        let initAttempts = 0;
        function tryInit() {
            initAttempts++;
            initGearSimulator();
            if (!window.__gearratio_initialized) {
                if (initAttempts < 50) {
                    setTimeout(tryInit, 100);
                }
            }
        }
        if (document.readyState === 'complete' || document.readyState === 'interactive') {
            tryInit();
        } else {
            document.addEventListener('DOMContentLoaded', tryInit);
            window.addEventListener('load', tryInit);
        }
        })();
</script>


<div style="background: linear-gradient(135deg, rgba(0,242,254,0.03), rgba(138,43,226,0.03)); border: 1px solid rgba(0,242,254,0.15); border-radius: 12px; padding: 18px 24px; margin: 25px auto 35px auto; font-size: 0.95em; color: #4b5563; line-height: 1.7; font-family: sans-serif;">
    <strong style="color: #1f2937; font-size: 1.05em; display: flex; align-items: center; gap: 8px;">
        <span style="font-size: 1.2em;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> 간편 사용 설명서
    </strong>
    <ol style="margin: 10px 0 0 0; padding-left: 20px;">
        <li style="margin-bottom: 6px;"><strong>기어 잇수 조절: 슬라이더나 입력 칸을 통해 구동 기어(Gear 1)와 피동 기어(Gear 2)의 잇수(Z)를 설정합니다.</strong></li>
<li style="margin-bottom: 6px;">입력 회전수(RPM) 및 모듈 조절: 구동 기어의 RPM과 기어의 모듈(m) 값을 입력하여 속도와 물리적 크기를 정합니다.</li>
<li style="margin-bottom: 6px;">실시간 기어 맞물림 관찰: 설정에 따라 두 기어가 완벽히 맞물려 회전하는 물리 애니메이션과 접촉면의 실시간 파티클 스파크를 관찰합니다.</li>
<li style="margin-bottom: 6px;">출력 데이터 분석: 기어비, 피치원 지름(PCD), 중심거리, 출력 RPM 및 토크 배율 변화를 실시간 계측 모니터로 정밀 분석합니다.</li>
    </ol>
</div>


<details class="premium-seo-accordion" style="border: 1px solid rgba(0,0,0,0.08); border-radius: 12px; background: #fbfbfc; padding: 0; margin: 30px auto; box-shadow: 0 4px 6px -1px rgba(0,0,0,0.01); font-family: sans-serif;">
    <summary style="display: flex; justify-content: space-between; align-items: center; padding: 20px 24px; font-size: 1.1em; font-weight: 700; color: #1f2937; cursor: pointer; user-select: none; outline: none; list-style: none;">
        <span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4da.png" alt="📚" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 상세 기계공학 해설 및 기어 설계 규격 (KS/ISO) 확인하기</span>
        <span class="accordion-arrow" style="font-size: 0.9em; color: #9ca3af; transition: transform 0.2s ease;">▼</span>
    </summary>
    <div style="padding: 0 24px 24px 24px; border-top: 1px solid rgba(0,0,0,0.04); background: #ffffff; border-radius: 0 0 12px 12px; font-size: 0.98em; color: #374151; line-height: 1.8;">
        <div style="margin-top: 20px;">
            <h3>1. 기어비(Gear Ratio)의 기본 개념 및 기계설계적 의의</h3>
<p>기어비(Gear Ratio, <code>i</code>)는 두 개의 맞물린 기어 사이에서 입력축과 출력축의 회전수 비율 및 토크 변화율을 결정하는 핵심 설계 인자입니다. 동력전달장치 설계에서 기어비는 모터의 회전 속도를 기계 작동에 적합한 속도로 감속시키거나(감속기), 필요한 작동 토크를 증대시키기 위해 정밀하게 조정됩니다.</p><ul><li><strong>속도비 (Speed Ratio):</strong> 기어비가 1보다 크면 출력 속도는 줄어들며, 감속비가 형성됩니다. 반대로 1보다 작으면 증속이 일어납니다.</li><li><strong>토크 변환 (Torque Multiplier):</strong> 에너지 보존 법칙(동력 일정)에 의해 감속 비율에 비례하여 출력 토크가 증가합니다.</li><li><strong>역학적 효율성:</strong> 기어의 형상(이의 치형)에 따라 동력 전달 효율이 달라지며, KS B ISO 규격에 따른 치형 관리가 중요합니다.</li></ul>
<h3>2. 기어 치수 및 역학 공식 관계식 유도</h3>
<p>기어의 기하학적 형상과 맞물림 동역학을 계산하는 공식들은 다음과 같이 유도됩니다.</p><p><strong>① 피치원 지름 (Pitch Circle Diameter, PCD):</strong> 기어가 만나는 가상의 마찰원 지름으로, 모듈(<code>m</code>)과 잇수(<code>Z</code>)의 곱으로 구합니다.</p><p style="text-align: center; font-weight: bold; background: #f3f4f6; padding: 12px; border-radius: 8px;">d = m &times; Z &nbsp;[mm]</p><p><strong>② 기어비 (Gear Ratio, i) 및 출력 속도 (N2):</strong> 구동기어 잇수를 <code>Z1</code>, 피동기어 잇수를 <code>Z2</code>라 할 때, 맞물림 선속도가 일정하므로 잇수 비율에 역비례하여 회전수가 결정됩니다.</p><p style="text-align: center; font-weight: bold; background: #f3f4f6; padding: 12px; border-radius: 8px;">i = Z2 / Z1 = N1 / N2</p><p style="text-align: center; font-weight: bold; background: #e0f2fe; padding: 16px; border-radius: 8px; font-size: 1.05em; color: #0369a1;">N2 = N1 &times; (Z1 / Z2) &nbsp;[RPM]</p><p><strong>③ 축간 중심거리 (Center Distance, a):</strong> 두 기어의 피치원이 외접할 때의 회전축 간 거리입니다.</p><p style="text-align: center; font-weight: bold; background: #f3f4f6; padding: 12px; border-radius: 8px;">a = (d1 + d2) / 2 = m &times; (Z1 + Z2) / 2 &nbsp;[mm]</p>
<h3>3. 전동 효율 및 기어 파손 설계 (루이스 공식)</h3>
<p>기어설계 시 단순히 치수만 맞추는 것이 아니라, 전달할 동력에 따른 이뿌리 굽힘 강도(Bending Strength)와 이면 접촉 응력(Surface Durability)을 검토해야 합니다. 전통적인 굽힘 강도 계산에는 다음과 같은 <strong>루이스 공식(Lewis Formula)</strong>이 기초가 됩니다.</p><p style="text-align: center; font-weight: bold; background: #f3f4f6; padding: 12px; border-radius: 8px;">&sigma;_b = F_t / (b &times; m &times; Y)</p><p>여기서 <code>F_t</code>는 전달 접선력(N), <code>b</code>는 치폭(mm), <code>m</code>은 모듈, <code>Y</code>는 이의 형상에 따른 루이스 치형 계수(Form Factor)입니다. 현대 기계설계 규격(KS B ISO 6336 등)은 이 Lewis 공식을 한 단계 발전시켜 하중분포 계수, 동하중 계수, 속도 계수 등을 종합적으로 반영하여 피로 파손 한계를 평가합니다.</p>
        </div>
    </div>
</details>
<style>
details.premium-seo-accordion[open] summary .accordion-arrow { transform: rotate(180deg); color: #00f2fe; }
details.premium-seo-accordion summary::-webkit-details-marker { display: none; }
details.premium-seo-accordion:hover { border-color: rgba(0,242,254,0.3); }
</style>

]]></content:encoded>
					
					<wfw:commentRss>https://myengnote.com/gear-ratio-calculator-simulator-3/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>캠 기구의 설계 원리와 복잡 운동 구현 (Cam Mechanism Design and Complex Motion)</title>
		<link>https://myengnote.com/cam-mechanism-kinematics-rotary-to-complex-motion/</link>
					<comments>https://myengnote.com/cam-mechanism-kinematics-rotary-to-complex-motion/#respond</comments>
		
		<dc:creator><![CDATA[동동]]></dc:creator>
		<pubDate>Tue, 19 May 2026 11:44:10 +0000</pubDate>
				<category><![CDATA[동력전달장치/구동부]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[Cam Mechanism]]></category>
		<category><![CDATA[Kinematics]]></category>
		<category><![CDATA[Mechanical Design]]></category>
		<category><![CDATA[기구학]]></category>
		<category><![CDATA[동력전달]]></category>
		<category><![CDATA[자동화설계]]></category>
		<category><![CDATA[캠기구]]></category>
		<guid isPermaLink="false">https://myengnote.com/cam-mechanism-kinematics-rotary-to-complex-motion/</guid>

					<description><![CDATA[회전 운동을 정교한 직선 및 왕복 운동으로 변환하는 캠 기구의 핵심 설계 원리를 상세히 다룹니다. 현장 사례와 캠 곡선 분석을 통해 기구학적 효율을 높이는 전문가의 노하우를 확인하세요.... <a href="https://myengnote.com/cam-mechanism-kinematics-rotary-to-complex-motion/" style="text-decoration:none; color:#0073aa; font-weight:bold;">[본문 전체보기 >]</a>]]></description>
										<content:encoded><![CDATA[<h1>캠 기구의 설계 원리와 복잡 운동 구현</h1>
<p> 내구성을 최우선으로 고려하는 기계 설계의 세계에서, 캠 기구는 단순한 부품의 조합이 아닙니다. 그것은 기계적 로직을 물리적인 형상으로 박제해 놓은, 정교한 명령 체계이자 신뢰성의 상징과도 같습니다. 현대의 자동화 공정에서 서보 모터와 전자 제어가 많은 부분을 대체하고 있지만, 고속 반복 정밀도와 물리적 구속력이 필요한 환경에서는 여전히 캠 기구가 독보적인 위치를 차지합니다. 캠은 회전하는 샤프트의 단순한 원운동을 팔로워의 복잡하고 절도 있는 직선 또는 요동 운동으로 바꾸어 주는 변환 장치입니다. 캠 기구를 설계할 때 엔지니어가 가장 먼저 맞닥뜨리는 철학적 질문은 &#8220;어떻게 하면 관성력을 최소화하면서 부드러운 전이를 만들어낼 것인가&#8221;입니다. 이는 재질의 강성과 표면 거칠기, 그리고 가속도 곡선의 수학적 연속성까지 아우르는 고도의 공학적 판단을 요구합니다. 특히 고속 회전 캠은 미세한 곡률 변화에도 팔로워에 엄청난 충격 하중을 전달할 수 있으며, 이는 곧 기계 전체의 진동과 수명 단축으로 이어집니다. </p>
<h2>실무 필드 로그 및 분석 (Field Log &#038; Analysis)</h2>
<p><strong>현장 상황 보고: 자동차 엔진 부품 조립 라인의 인덱스 캠 유닛 이상</strong></p>
<ul>
<li><strong>장비 위치</strong>: 자동차 엔진 밸브 태핏 자동 조립 라인</li>
<li><strong>장비 모델</strong>: 캠 구동형 인덱스 테이블 IT-250 시리즈</li>
<li><strong>관찰 상황</strong>: 분당 회전수 180 구간에서 특정 각도 진입 시 &#8216;텅&#8217; 하는 금속성 타격음 발생. 팔로워 롤러와 캠 표면 사이에서 0.18mm의 이격 순간적 발생 확인.</li>
<li><strong>정밀 진단</strong>: 초고속 카메라 분석 결과, 캠의 하강 구간에서 가속도가 중력 가속도를 초과하며 팔로워가 캠 표면에서 이탈하는 <b>캠 점프(Cam Jump)</b> 현상 포착. 저크(Jerk, 가속도의 변화율) 값이 무한대로 발산하는 구간 확인.</li>
<li><strong>원인 분석 및 조치</strong>: 기존 등속도 곡선을 <b>사이클로이드 곡선</b>으로 재설계하여 가속도 변화를 완화하고, 팔로워의 압력각을 30도 이내로 조정함. 구동 샤프트는 <b>KS D 3752(기계 구조용 탄소 강재)</b> 규격의 고탄소강 재질로 교체하여 강성 보완.</li>
<li><strong>경제적 효과</strong>: 시간당 생산량 15% 향상 및 연간 유지보수 비용 약 4,500만 원 절감.</li>
</ul>
<div style="border-left: 5px solid #3b82f6; background-color: #eff6ff; padding: 15px; margin: 30px 0; border-radius: 10px; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);">
<div style="display: flex; align-items: center; margin-bottom: 12px;"> <span style="font-size: 30px; margin-right: 15px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4d8.png" alt="📘" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="font-weight: bold; color: #1e40af; font-size: 1.2em;">핵심 요약</span> </div>
<div style="color: #444; line-height: 1.8; font-size: 1.05em;"> 캠 기구의 핵심은 <b>변위, 속도, 가속도</b>의 3요소를 제어하는 데 있습니다. 특히 가속도가 급격히 변하는 지점의 관성력을 억제하는 &#8216;저크 제어&#8217;가 설계의 성패를 좌우합니다. </div>
</div>
<h2>도대체 왜 캠 프로파일이 중요한가</h2>
<p>캠 기구의 본질은 캠 프로파일, 즉 캠의 외형 곡선에 숨어 있는 함수의 연속성에 있습니다. 캠 곡선을 단순한 직선(등속도 곡선)으로 설계하면, 시작과 끝 지점에서 가속도가 이론상 무한대로 치솟아 엄청난 충격과 소음을 발생시킵니다. 이를 해결하기 위해 고속 기구에서는 가속도가 완만하게 변화하는 <b>사이클로이드 곡선</b>이나 변형 사인 곡선을 주로 사용합니다.</p>
<p>또한, 설계 시 <b>팔로워의 압력각</b>을 반드시 계산해야 합니다. 압력각이 임계치(통상 30도)를 넘어서면 팔로워를 밀어 올리는 힘보다 측면으로 가해지는 분력이 커져 샤프트의 휨이나 팔로워 고착을 유발합니다. 이때 <a href="https://myengnote.com/basics-of-power-transmission-mechanical-shaft-material-selection/" target="_blank" rel="noopener noreferrer" style="color: #3b82f6; text-decoration: underline; font-weight: bold;">기계 축의 역할과 재질 선정의 중요성</a>을 고려하여 시스템 전체의 강성을 확보하는 것이 필수적입니다.</p>
</p>
<h2>팔로워와의 미묘한 관계와 유지보수</h2>
<p>캠이 아무리 완벽해도 그 움직임을 받아내는 팔로워가 부실하면 무용지물입니다. 롤러 팔로워는 구름 접촉을 통해 마찰을 최소화하지만, 윤활이 부족하거나 예압이 부적절하면 캠 표면에 <b>피팅(Pitting)</b> 현상을 일으킵니다. 한번 손상된 캠 표면은 경화 층이 파괴되어 마모 속도가 기하급수적으로 빨라집니다.</p>
<p>조립 시 <a href="https://myengnote.com/importance-of-pilot-holes-in-assembly-guide/" target="_blank" rel="noopener noreferrer" style="color: #3b82f6; text-decoration: underline; font-weight: bold;">파일럿 구멍의 중요성</a>을 이해하고 정밀하게 위치를 잡는 것처럼, 캠과 팔로워의 중심선 일치 여부도 엄격히 관리해야 합니다. 중심이 어긋나면 편마모가 발생하며, 이는 곧 <a href="https://myengnote.com/risks-ignoring-abnormal-machine-noise/" target="_blank" rel="noopener noreferrer" style="color: #3b82f6; text-decoration: underline; font-weight: bold;">기계 이상 소음</a>이라는 대형 사고의 전조 증상으로 나타납니다.</p>
<div style="border-left: 5px solid #ef4444; background-color: #fef2f2; padding: 15px; margin: 30px 0; border-radius: 10px; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);">
<div style="display: flex; align-items: center; margin-bottom: 12px;"> <span style="font-size: 30px; margin-right: 15px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="font-weight: bold; color: #991b1b; font-size: 1.2em;">주의사항</span> </div>
<div style="color: #444; line-height: 1.8; font-size: 1.05em;"> 캠 기구 운용 시 <b>리턴 스프링</b>의 장력을 무조건 높이지 마십시오. 과도한 장력은 캠 표면의 면압을 상승시켜 조기 마모를 초래하므로, 관성력을 정밀 계산하여 적정 수준의 스프링 상수를 선정해야 합니다. </div>
</div>
<h2>초보 엔지니어들이 흔히 하는 실수</h2>
<p>신입 설계자들이 가장 많이 하는 실수는 캠을 단순히 CAD상의 &#8216;자유 곡선&#8217;으로 그리는 것입니다. 기구학적 해석 소프트웨어를 사용하여 <b>S-V-A(변위-속도-가속도) 선도</b>를 반드시 확인해야 합니다. 가속도 선도에 불연속적인 첨점이 있다면 그 설계는 고속 구동에서 반드시 문제를 일으킵니다.</p>
<p>또한, <a href="https://myengnote.com/sensor-actuator-relationship-automation/" target="_blank" rel="noopener noreferrer" style="color: #3b82f6; text-decoration: underline; font-weight: bold;">센서와 액추에이터의 핵심 관계</a>를 이해한다면, 캠의 회전 위상에 따른 모터 토크 변화를 모니터링하여 캠의 마모 상태를 예측하는 <b>예지 보전 시스템</b>을 구축할 수도 있습니다. 캠은 정적인 부품이 아니라 동역학적 에너지가 흐르는 시스템임을 명심하십시오.</p>
<div style="border-left: 5px solid #f59e0b; background-color: #fffbeb; padding: 15px; margin: 30px 0; border-radius: 10px; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);">
<div style="display: flex; align-items: center; margin-bottom: 12px;"> <span style="font-size: 30px; margin-right: 15px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="font-weight: bold; color: #92400e; font-size: 1.2em;">현장 전문가의 팁</span> </div>
<div style="color: #444; line-height: 1.8; font-size: 1.05em;"> 캠의 표면 경도는 보통 <b>HRC 55~60</b> 이상을 확보해야 합니다. 하지만 경도보다 중요한 것은 표면 거칠기입니다. 래핑(Lapping) 가공을 통해 경면 처리를 하면 유지보수 주기를 비약적으로 늘릴 수 있습니다. </div>
</div>
<h2>선배 엔지니어로서의 조언</h2>
<p>만약 제가 새로운 고속 자동화 라인의 리드 엔지니어로 투입된다면, 핵심 동작에는 정밀 연마된 캠 기구를 배치하고, 유연성이 필요한 보조 동작에는 서보 액추에이터를 배치하는 <b>하이브리드 설계</b>를 채택할 것입니다. 캠 기구는 정직합니다. 설계자가 공을 들인 만큼 소음이 줄어들고, 정성을 들여 가공한 만큼 수명이 길어집니다.</p>
<p>이론적인 기구학 지식을 바탕으로 현장의 마모 흔적을 읽어낼 수 있는 눈을 기르십시오. 캠이 회전할 때 팔로워가 느끼는 가속도의 압박과 유막의 흐름을 상상하며 설계에 임한다면, 여러분의 기계는 결코 배신하지 않을 것입니다.</p>
</p>
<h2>0. 연관글</h2>
<p><!-- START_SIMULATOR_LINK_CARD_cam_mechanism --><a href="https://myengnote.com/cam-mechanism-profile-motion-simulator/" target="_blank" rel="noopener noreferrer" class="eng-simulator-card" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"><span style="display: table-cell; vertical-align: middle;"><span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ee.png" alt="🧮" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span style="display: block; overflow: hidden;"><span style="display: block; font-size: 0.9em; color: #10b981; font-weight: bold; margin-bottom: 4px;">실시간 공학 시뮬레이터 추천</span><span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">캠 기하 프로파일 운동 해석 계산기 &#038; 실시간 2D 전동 시뮬레이터</span></span></span><span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #10b981; font-size: 24px; font-weight: bold;">→</span></a><!-- END_SIMULATOR_LINK_CARD_cam_mechanism --><a href="https://myengnote.com/basics-of-power-transmission-mechanical-shaft-material-selection/" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"> <span style="display: table-cell; vertical-align: middle;"> <span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="display: block; overflow: hidden;"> <span style="display: block; font-size: 0.9em; color: #6b7280; margin-bottom: 4px;">함께 보면 좋은 글</span> <span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">기계 축의 역할과 재질 선정의 중요성</span> </span> </span> <span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #3b82f6; font-size: 24px; font-weight: bold;">→</span><br />
</a><a href="https://myengnote.com/sensor-actuator-relationship-automation/" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"> <span style="display: table-cell; vertical-align: middle;"> <span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="display: block; overflow: hidden;"> <span style="display: block; font-size: 0.9em; color: #6b7280; margin-bottom: 4px;">함께 보면 좋은 글</span> <span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">센서와 액추에이터의 핵심 관계</span> </span> </span> <span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #3b82f6; font-size: 24px; font-weight: bold;">→</span><br />
</a><a href="https://myengnote.com/risks-ignoring-abnormal-machine-noise/" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"> <span style="display: table-cell; vertical-align: middle;"> <span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="display: block; overflow: hidden;"> <span style="display: block; font-size: 0.9em; color: #6b7280; margin-bottom: 4px;">함께 보면 좋은 글</span> <span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">기계 이상 소음 방치의 위험성</span> </span> </span> <span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #3b82f6; font-size: 24px; font-weight: bold;">→</span><br />
</a></p>
<hr style="border: 0; border-top: 1px solid #eee; margin: 40px 0 20px 0;">
<p style="text-align: center; font-size: 0.85em; color: #888; margin-bottom: 20px;">
    본 콘텐츠는 저작권법의 보호를 받으며, 무단 전재 및 재배포를 금지합니다.<br />
    Copyright 2026. 동동 All rights reserved.
</p>
<p><!-- Protection Scripts --></p>
<div id="protection-script" style="display:none;">
<script>
document.addEventListener('contextmenu', function(e) {
    e.preventDefault();
    alert('이 콘텐츠는 저작권법의 보호를 받습니다. 무단 복제 및 우클릭을 금지합니다.');
});
document.addEventListener('keydown', function(e) {
    if (e.ctrlKey && (e.key === 'c' || e.key === 'u' || e.key === 'a')) {
        e.preventDefault();
        alert('무단 복제를 금지합니다.');
    }
});
</script></p>
<style>
.entry-content {
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
</style>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://myengnote.com/cam-mechanism-kinematics-rotary-to-complex-motion/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>기계 축의 역할과 재질 선정의 중요성 (Basics of Power Transmission: Role of Mechanical Shafts and Material Selection)</title>
		<link>https://myengnote.com/basics-of-power-transmission-mechanical-shaft-material-selection/</link>
					<comments>https://myengnote.com/basics-of-power-transmission-mechanical-shaft-material-selection/#respond</comments>
		
		<dc:creator><![CDATA[동동]]></dc:creator>
		<pubDate>Sat, 16 May 2026 21:12:01 +0000</pubDate>
				<category><![CDATA[동력전달장치/구동부]]></category>
		<category><![CDATA[Material Selection]]></category>
		<category><![CDATA[Mechanical Shaft]]></category>
		<category><![CDATA[S45C]]></category>
		<category><![CDATA[SCM440]]></category>
		<category><![CDATA[기계축]]></category>
		<category><![CDATA[동력전달]]></category>
		<category><![CDATA[샤프트설계]]></category>
		<category><![CDATA[재질선정]]></category>
		<guid isPermaLink="false">https://myengnote.com/basics-of-power-transmission-mechanical-shaft-material-selection/</guid>

					<description><![CDATA[동력 전달의 핵심 요소인 기계 축의 설계 원리와 적절한 재질 선정 방법이 장비의 수명과 안정성에 미치는 영향을 심도 있게 다룹니다. 현장 실무 경험을 통한 설계 팁을 확인하세요.... <a href="https://myengnote.com/basics-of-power-transmission-mechanical-shaft-material-selection/" style="text-decoration:none; color:#0073aa; font-weight:bold;">[본문 전체보기 >]</a>]]></description>
										<content:encoded><![CDATA[<p>내구성을 고려한 설계에서 기계 축은 단순히 동력을 전달하는 막대기가 아니라, 시스템 전체의 하중과 진동을 온몸으로 받아내는 최후의 방어선입니다. 설계자가 축의 재질을 결정하고 공차를 지정하는 그 찰나의 판단이 장비의 10년 수명을 결정짓는다는 사실을 현장에서 수없이 목격해 왔습니다. 샤프트는 전동기나 엔진에서 발생한 회전 에너지를 기어, 풀리, 스프로킷 등으로 전달하는 중추적인 역할을 수행하며, 이 과정에서 <strong>비틀림, 굽힘, 그리고 복합적인 피로 하중</strong>을 견뎌내야 합니다. </p>
<h2>실무 필드 로그 및 분석 (Field Log &#038; Analysis)</h2>
<p>어느 자동차 엔진 블록 가공 라인에 설치된 미쓰비시 고속 가공기에서 발생한 실무 사례를 돌이켜 봅니다. 해당 장비는 에스케이에프(SKF)사의 고정밀 베어링을 채택하고 있었으나, 가동 후 불과 6개월 만에 주축 샤프트에서 약 4.2mm에 달하는 심각한 축 방향 유격이 관찰되었습니다. 현장에서 측정한 결과, 150Hz에서 180Hz 사이의 비정상적인 고주파 진동이 발생하고 있었으며, 이는 가공된 제품의 표면 조도를 급격히 떨어뜨리는 원인이 되었습니다.</p>
<p>근본 원인을 분석하기 위해 샤프트를 탈거하여 정밀 검사를 진행한 결과, 베어링이 체결되는 단차 부위에서 미세한 <strong>피로 균열(Fatigue Crack)</strong>이 발견되었습니다. 초기 설계 단계에서 일반적인 기계 구조용 탄소강인 S45C 재질을 사용하고 별도의 표면 경화 처리를 생략한 것이 화근이었습니다. 고속 회전과 급격한 가감속이 반복되는 환경에서는 반복 응력에 의한 피로 파괴를 방지하기 위해 크롬 몰리브덴강인 <strong>SCM440</strong> 재질을 사용하고 고주파 열처리를 통해 표면 강도를 확보했어야 했습니다. 이 사소한 재질 선택의 오류로 인해 해당 라인은 12시간 동안 가동이 중단되었고, 약 5만 달러 이상의 생산 손실이 발생했습니다. 이는 KS B 1061(키 및 키홈) 등 관련 규격에 따른 정밀한 설계와 환경에 맞는 재료 선정이 얼마나 중요한지를 단적으로 보여주는 사례였습니다.</p>
<div style="border-left: 5px solid #3b82f6; background-color: #eff6ff; padding: 15px; margin: 30px 0; border-radius: 10px; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);">
<div style="display: flex; align-items: center; margin-bottom: 12px;"> <span style="font-size: 30px; margin-right: 15px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4d8.png" alt="📘" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="font-weight: bold; color: #1e40af; font-size: 1.2em;">핵심 요약</span> </div>
<div style="color: #444; line-height: 1.8; font-size: 1.05em;"> 기계 축은 회전력(토크)을 전달함과 동시에 굽힘 하중을 견뎌야 합니다. 따라서 단순한 강도뿐만 아니라 <strong>피로 한도와 강성</strong>을 모두 고려한 재질 선정이 필수적입니다. </div>
</div>
<h2>샤프트 설계의 본질적인 고민</h2>
<p>기계 설계의 세계에서 샤프트는 마치 생명체의 척추와 같습니다. 샤프트를 설계할 때 가장 먼저 고려해야 할 물리적 법칙은 응력과 변형률의 관계입니다. 샤프트는 회전하면서 비틀림 모멘트를 전달하는데, 이때 발생하는 전단 응력은 축의 반지름에 비례하여 표면에서 가장 크게 나타납니다. 따라서 표면의 거칠기나 미세한 가공 흔적조차도 <strong>응력 집중(Stress Concentration)</strong>의 원인이 되어 균열을 유발할 수 있습니다.</p>
<p>특히 단차가 있는 샤프트를 설계할 때 주니어 엔지니어들이 흔히 범하는 실수가 있습니다. 바로 단차 부위의 모서리를 너무 날카롭게 설계하는 것입니다. 이를 방지하기 위해서는 항상 적절한 반경의 <strong>필렛(Fillet) 가공</strong>을 명시해야 하며, 베어링 장착을 위해 직각 단차가 필요하다면 응력 완화 홈을 파는 등의 세심한 배려가 필요합니다.</p>
<div style="border-left: 5px solid #ef4444; background-color: #fef2f2; padding: 15px; margin: 30px 0; border-radius: 10px; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);">
<div style="display: flex; align-items: center; margin-bottom: 12px;"> <span style="font-size: 30px; margin-right: 15px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="font-weight: bold; color: #991b1b; font-size: 1.2em;">주의사항</span> </div>
<div style="color: #444; line-height: 1.8; font-size: 1.05em;"> 강성을 높이기 위해 무조건 지름을 키우는 것은 지양해야 합니다. 질량이 증가하면 <strong>관성 모멘트</strong>가 커져 가감속 시 모터에 과부하를 주고 에너지 효율을 저하시킵니다. </div>
</div>
<h2>재질 선정의 기술적 배경</h2>
<p>샤프트 재질로 가장 많이 쓰이는 S45C는 경제적이지만, 높은 토크나 충격 하중이 발생하는 곳에서는 한계가 명확합니다. 이럴 때는 합금강인 <strong>SCM440이나 SNCM439</strong> 등을 검토해야 합니다. 크롬과 몰리브덴이 첨가된 합금강은 담금질성이 좋아 심부까지 균일한 경도를 얻을 수 있으며, 인성이 뛰어나 갑작스러운 충격 하중에도 쉽게 파손되지 않습니다.</p>
<p>재질 선정 시에는 반드시 열처리 방식을 함께 고민해야 합니다. 전체를 단단하게 만드는 조질 처리와 표면만 단단하게 만드는 고주파 열처리는 샤프트의 특성을 완전히 다르게 만듭니다. 베어링이 닿는 부위는 내마모성을 위해 표면 경도가 높아야 하지만, 축의 중심부는 충격을 흡수할 수 있는 유연성을 유지해야 합니다. 또한, 부식 환경이라면 <strong>STS304나 STS440C</strong> 계열을 선택하여 단면적 감소로 인한 파손 사고를 예방해야 합니다.</p>
</p>
<h2>설계 시 놓치기 쉬운 실무 포인트</h2>
<p>실무에서 이론적인 계산 외에 반드시 고려해야 할 변수가 바로 <strong>위험 속도(Critical Speed)</strong>입니다. 모든 샤프트는 고유 진동수를 가지고 있으며, 회전 속도가 이와 일치하면 공진 현상이 발생하여 장비가 파괴될 수 있습니다. 실제 운전 속도가 임계 속도의 75% 이하이거나 125% 이상이 되도록 설계하는 것이 정석입니다.</p>
<p>또한, 최근에는 키홈 가공으로 인한 응력 집중을 피하기 위해 <strong>파워록(Power Lock)</strong>과 같은 마찰 체결 기구를 사용하여 축의 손상 없이 강력한 토크를 전달하는 추세입니다.</p>
<div style="border-left: 5px solid #f59e0b; background-color: #fffbeb; padding: 15px; margin: 30px 0; border-radius: 10px; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);">
<div style="display: flex; align-items: center; margin-bottom: 12px;"> <span style="font-size: 30px; margin-right: 15px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="font-weight: bold; color: #92400e; font-size: 1.2em;">현장 전문가의 팁</span> </div>
<div style="color: #444; line-height: 1.8; font-size: 1.05em;"> 도면 작성 시 반드시 <strong>진원도와 동축도</strong> 기하공차를 확인하십시오. 동축도가 어긋나면 회전 시 편심이 발생하여 베어링 수명을 단축시키고 소음의 원인이 됩니다. </div>
</div>
<h2>초보 엔지니어를 위한 조언</h2>
<p>현장에서 샤프트 설계를 처음 접하는 후배들에게 저는 항상 &#8220;계산기보다 현장의 소리에 먼저 귀를 기울이라&#8221;고 말합니다. 데이터 시트상의 수치도 중요하지만, 실제로 장비가 가동될 때 발생하는 소음, 열기, 진동을 직접 느껴보는 것이 설계 감각을 익히는 데 가장 빠릅니다.</p>
<p>마지막으로 강조하고 싶은 점은 <strong>유지보수의 용이성</strong>입니다. 조립과 분해가 용이하도록 단차를 구성하고, 인발을 위한 나사 구멍을 미리 설계에 반영하는 배려가 필요합니다. 샤프트 하나가 부러져 라인이 멈췄을 때 발생하는 기회비용은 초기 설계 시 투입되는 고급 재질과 열처리 비용의 수백 배에 달하기 때문입니다.</p>
<div style="overflow-x: auto; white-space: nowrap;">
<div style="overflow-x: auto; border-radius: 8px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); margin: 20px 0; border: 1px solid #e5e7eb;">
<table style="border-collapse: collapse; width: 100%; min-width: 700px; font-size: 15px; text-align: left; background-color: #ffffff;">
<thead>
<tr style="background-color: #1f2937;">
<th style="padding: 15px; border-bottom: 3px solid #3b82f6; color: #ffffff; font-weight: bold; text-transform: uppercase;">재질 구분</th>
<th style="padding: 15px; border-bottom: 3px solid #10b981; color: #ffffff; font-weight: bold; text-transform: uppercase;">주요 특징</th>
<th style="padding: 15px; border-bottom: 3px solid #f59e0b; color: #ffffff; font-weight: bold; text-transform: uppercase;">권장 용도</th>
</tr>
</thead>
<tbody>
<tr>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; background-color: #f9fafb; font-weight: bold; color: #374151;">S45C (탄소강)</td>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; color: #4b5563;">가공성이 좋고 경제적임</td>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; color: #4b5563;">일반적인 하중의 컨베이어, 소형 축</td>
</tr>
<tr>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; background-color: #f9fafb; font-weight: bold; color: #374151;">SCM440 (합금강)</td>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; color: #4b5563;">높은 강도와 피로 저항성</td>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; color: #4b5563;">고속 회전축, 고토크 구동축</td>
</tr>
<tr>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; background-color: #f9fafb; font-weight: bold; color: #374151;">STS304 (스테인리스)</td>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; color: #4b5563;">우수한 내식성, 비자성</td>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; color: #4b5563;">식품 기계, 화학 설비, 수중 장비</td>
</tr>
</tbody>
</table>
</div>
</div>
<p> <a href="https://myengnote.com/gear-ratio-calculation-speed-torque-relationship/" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; display: table; width: 100%; box-sizing: border-box;"> <span style="display: table-cell; vertical-align: middle;"> <span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="display: block; overflow: hidden;"> <span style="display: block; font-size: 0.9em; color: #6b7280; margin-bottom: 4px;">함께 보면 좋은 글</span> <span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">기어비 계산법: 속도와 토크의 반비례 관계</span> </span> </span> <span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #3b82f6; font-size: 24px; font-weight: bold;">→</span><br />
</a><a href="https://myengnote.com/bearing-failure-excessive-belt-tension/" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; display: table; width: 100%; box-sizing: border-box;"> <span style="display: table-cell; vertical-align: middle;"> <span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="display: block; overflow: hidden;"> <span style="display: block; font-size: 0.9em; color: #6b7280; margin-bottom: 4px;">함께 보면 좋은 글</span> <span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">구동 벨트 과장력으로 인한 베어링 파손</span> </span> </span> <span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #3b82f6; font-size: 24px; font-weight: bold;">→</span><br />
</a> </p>
<h2>0. 연관글</h2>
<p><!-- START_SIMULATOR_LINK_CARD_stress_strain --><a href="https://myengnote.com/stress-strain-relation-calculator-simulator/" target="_blank" rel="noopener noreferrer" class="eng-simulator-card" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"><span style="display: table-cell; vertical-align: middle;"><span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ee.png" alt="🧮" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span style="display: block; overflow: hidden;"><span style="display: block; font-size: 0.9em; color: #10b981; font-weight: bold; margin-bottom: 4px;">실시간 공학 시뮬레이터 추천</span><span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">재료역학 응력-변형률(Hooke 법칙) 계산기 &#038; 실시간 인장 시뮬레이터</span></span></span><span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #10b981; font-size: 24px; font-weight: bold;">→</span></a><!-- END_SIMULATOR_LINK_CARD_stress_strain --><a href="https://myengnote.com/industrial-gearbox-helical-vs-planetary-comparison/" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; display: table; width: 100%; box-sizing: border-box;"> <span style="display: table-cell; vertical-align: middle;"> <span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="display: block; overflow: hidden;"> <span style="display: block; font-size: 0.9em; color: #6b7280; margin-bottom: 4px;">함께 보면 좋은 글</span> <span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">헬리컬과 유성기어 감속기의 특징 비교</span> </span> </span> <span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #3b82f6; font-size: 24px; font-weight: bold;">→</span><br />
</a><a href="https://myengnote.com/v-belt-specification-a-vs-b-guide/" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; display: table; width: 100%; box-sizing: border-box;"> <span style="display: table-cell; vertical-align: middle;"> <span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="display: block; overflow: hidden;"> <span style="display: block; font-size: 0.9em; color: #6b7280; margin-bottom: 4px;">함께 보면 좋은 글</span> <span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">V-벨트 규격의 이해와 A형 및 B형 선정 기준</span> </span> </span> <span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #3b82f6; font-size: 24px; font-weight: bold;">→</span><br />
</a></p>
<hr style="border: 0; border-top: 1px solid #eee; margin: 40px 0 20px 0;">
<p style="text-align: center; font-size: 0.85em; color: #888; margin-bottom: 20px;">
    본 콘텐츠는 저작권법의 보호를 받으며, 무단 전재 및 재배포를 금지합니다.<br />
    Copyright 2026. 동동 All rights reserved.
</p>
<p><!-- Protection Scripts --></p>
<div id="protection-script" style="display:none;">
<script>
document.addEventListener('contextmenu', function(e) {
    e.preventDefault();
    alert('이 콘텐츠는 저작권법의 보호를 받습니다. 무단 복제 및 우클릭을 금지합니다.');
});
document.addEventListener('keydown', function(e) {
    if (e.ctrlKey && (e.key === 'c' || e.key === 'u' || e.key === 'a')) {
        e.preventDefault();
        alert('무단 복제를 금지합니다.');
    }
});
</script></p>
<style>
.entry-content {
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
</style>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://myengnote.com/basics-of-power-transmission-mechanical-shaft-material-selection/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>헬리컬과 유성기어 감속기의 특징 비교 (Comparison of Helical and Planetary Gearboxes)</title>
		<link>https://myengnote.com/industrial-gearbox-helical-vs-planetary-comparison/</link>
					<comments>https://myengnote.com/industrial-gearbox-helical-vs-planetary-comparison/#respond</comments>
		
		<dc:creator><![CDATA[동동]]></dc:creator>
		<pubDate>Fri, 15 May 2026 22:36:03 +0000</pubDate>
				<category><![CDATA[동력전달장치/구동부]]></category>
		<category><![CDATA[Gearbox]]></category>
		<category><![CDATA[Helical Gear]]></category>
		<category><![CDATA[Mechanical Engineering]]></category>
		<category><![CDATA[Planetary Gear]]></category>
		<category><![CDATA[감속기]]></category>
		<category><![CDATA[동력전달]]></category>
		<category><![CDATA[유성기어]]></category>
		<category><![CDATA[헬리컬기어]]></category>
		<guid isPermaLink="false">https://myengnote.com/industrial-gearbox-helical-vs-planetary-comparison/</guid>

					<description><![CDATA[산업 현장에서 가장 많이 쓰이는 헬리컬과 유성기어 감속기의 외관적 차이와 기초 작동 원리를 상세히 분석합니다. 각 기어 방식의 장단점을 통해 최적의 동력 전달 설계를 위한 가이드를 제공합니다.... <a href="https://myengnote.com/industrial-gearbox-helical-vs-planetary-comparison/" style="text-decoration:none; color:#0073aa; font-weight:bold;">[본문 전체보기 >]</a>]]></description>
										<content:encoded><![CDATA[<p>현장에서 감속기가 터지는 소리는 언제 들어도 등골을 서늘하게 만듭니다. 예전의 한 자동차 부품 조립 라인에서 구동부 전체가 멈추는 사고가 있었습니다. 당시 Siemens 사의 15kW급 모터와 결합된 대형 헬리컬 감속기가 장착되어 있었는데, 가동 중 갑작스러운 고주파 진동과 함께 기어박스 하우징이 파손되었습니다. 정밀 진단 결과, 기어의 비대칭 하중으로 인한 베어링 피로 파괴가 원인이었습니다. 단순히 &#8216;감속기는 속도를 줄이고 토크를 높인다&#8217;는 지식만으로는 현장의 돌발 변수를 통제하기 어렵습니다. 특히 <strong>헬리컬 기어</strong>와 <strong>유성기어</strong>는 내부 역학 구조가 완전히 다르기 때문에, 이를 설계 단계에서 혼동하면 큰 낭패를 볼 수 있습니다. 오늘은 이 두 가지 감속기의 외관상 특징과 물리적 기초 개념을 현장 경험을 담아 깊이 있게 다루어 보겠습니다. </p>
<h2>실무 필드 로그 및 분석 (Field Log &#038; Analysis)</h2>
<ul>
<li><strong>장비 및 모델</strong>: ABB M3BP 저전압 모터 + SEW Eurodrive R97 헬리컬 감속기</li>
<li><strong>현장 상황</strong>: 식품 가공 공장의 대형 컨베이어 구동부</li>
<li><strong>측정 데이터</strong>: 하우징 표면 온도 85°C 초과, 150Hz 대역의 이상 진동 발생, 샤프트 축 방향 유격 약 2.8mm 관찰.</li>
<li><strong>근본 원인 분석</strong>: 헬리컬 기어 특유의 축 방향 하중(Thrust Load)을 견뎌야 하는 테이퍼 롤러 베어링의 예압 설정 오류로 판명되었습니다. 장시간 가동 시 열팽창으로 인해 간극이 벌어지며 기어의 치면 물림이 어긋났고, 이는 곧 급격한 마모와 진동으로 이어졌습니다.</li>
<li><strong>관련 표준</strong>: ISO 1328-1 (원통형 기어의 치면 오차 등급 및 측정 기준) 준수 여부 재검토.</li>
<li><strong>비즈니스 영향</strong>: 부품 교체 및 긴급 보수 비용 약 1,200만 원 발생. 정기적인 진동 분석 도입 시 연간 유지보수 예산의 15% 절감 가능성 확인.</li>
</ul>
<div style="border-left: 5px solid #f59e0b; background-color: #fffbeb; padding: 15px; margin: 30px 0; border-radius: 10px; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);">
<div style="display: flex; align-items: center; margin-bottom: 12px;"> <span style="font-size: 30px; margin-right: 15px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="font-weight: bold; color: #92400e; font-size: 1.2em;">현장 전문가의 팁</span> </div>
<div style="color: #444; line-height: 1.8; font-size: 1.05em;"> 헬리컬 감속기에서 발생하는 소음이 평소보다 날카로워졌다면, 즉시 윤활유 내의 금속 가루를 점검하십시오. 헬리컬 기어는 구조적으로 축 방향으로 밀어내는 힘이 발생하므로, 베어링의 고정 상태가 나빠지면 기어 이빨의 끝단이 뭉개지며 소음이 발생합니다. </div>
</div>
<h2>헬리컬 기어 감속기의 외형과 물리적 특성</h2>
<p>헬리컬 감속기를 처음 대면하면 가장 먼저 눈에 띄는 것은 입력축과 출력축의 위치입니다. 보통 일직선상에 있지 않고 약간 어긋나 있거나, 평행한 구조를 가집니다. 이빨의 형상을 보면 직선이 아니라 나선형으로 비스듬하게 깎여 있는데, 이것이 바로 헬리컬 기어의 핵심입니다.</p>
<p>평기어와 달리 이빨이 비스듬히 맞물리기 때문에 한 번에 맞물리는 면적이 넓고, 이는 소음 감소와 부드러운 동력 전달로 이어집니다. 하지만 물리적으로는 <strong>&#8216;추력(Thrust)&#8217;</strong>이라는 고질적인 과제를 안고 있습니다. 기어가 회전할 때 비스듬한 이빨 각도 때문에 기어 자체가 샤프트 방향으로 밀려나려는 힘이 발생합니다. 이를 처리하기 위해 하우징 내부에 강력한 스러스트 베어링이나 테이퍼 롤러 베어링이 필수적으로 들어갑니다.</p>
<p>헬리컬 감속기는 구조가 비교적 단순하여 정비성이 뛰어납니다. 하우징 커버만 열면 기어의 상태를 바로 확인할 수 있고, 윤활유 교체도 용이합니다. 하지만 동일한 토크를 전달할 때 유성기어에 비해 부피가 훨씬 크다는 단점이 있습니다. 따라서 공간 제약이 심한 장비보다는 대형 컨베이어나 펌프 구동부처럼 신뢰성이 중요한 곳에 주로 사용됩니다.</p>
</p>
<h2>유성기어 감속기의 압도적인 콤팩트함과 구조</h2>
<p>유성기어 감속기는 중앙에 &#8216;태양 기어&#8217;가 있고, 그 주위를 여러 개의 &#8216;행성 기어&#8217;가 돌며, 가장 바깥쪽에서 &#8216;링 기어&#8217;가 이를 감싸고 있는 구조입니다. 외관상의 가장 큰 특징은 입력축과 출력축이 완벽하게 일직선상(동축)에 있다는 점입니다. 이 덕분에 모터 뒤에 바로 붙여도 깔끔한 직선형 조립이 가능합니다.</p>
<p>물리적인 관점에서 보면 유성기어는 <strong>&#8216;하중 분산&#8217;</strong>의 이점이 큽니다. 헬리컬 기어는 하나의 기어 이빨이 모든 힘을 받아내야 하지만, 유성기어는 중앙의 힘을 3~4개의 행성 기어가 나누어 가집니다. 따라서 크기는 헬리컬 감속기의 절반도 안 되면서 전달할 수 있는 토크는 대등하거나 오히려 더 높습니다. 정밀 제어를 수행하는 로봇 팔이나 반도체 장비에서 유성기어를 흔히 볼 수 있는 이유입니다.</p>
<p>또한 유성기어는 백래시(Backlash) 제어에 매우 유리합니다. 여러 기어가 동시에 맞물려 있어 기어 사이의 유격을 최소화하기 쉽고, 이는 정밀한 위치 제어로 직결됩니다. 다만, 구조가 복잡한 만큼 가격이 비싸고 열 방산 면적이 좁기 때문에 고속 회전 시에는 온도 관리에 각별히 유의해야 합니다.</p>
<div style="border-left: 5px solid #ef4444; background-color: #fef2f2; padding: 15px; margin: 30px 0; border-radius: 10px; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);">
<div style="display: flex; align-items: center; margin-bottom: 12px;"> <span style="font-size: 30px; margin-right: 15px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="font-weight: bold; color: #991b1b; font-size: 1.2em;">주의사항</span> </div>
<div style="color: #444; line-height: 1.8; font-size: 1.05em;"> 유성기어 감속기를 수직으로 설치할 때는 반드시 내부 윤활 방식이 수직 설치에 적합한지 확인해야 합니다. 상단 베어링에 오일이 충분히 공급되지 않으면 가동 후 단시간 내에 소착 현상이 발생하여 감속기가 고착될 수 있습니다. </div>
</div>
<h2>설계자로서 선택의 기준</h2>
<p>설계자로서 선택의 기로에 섰을 때 저는 항상 세 가지를 봅니다. 첫째는 공간, 둘째는 정밀도, 셋째는 비용입니다. 장비의 가로폭이 좁아야 한다면 유성기어 외에는 대안이 없습니다. 반면, 큰 힘을 쓰면서도 거친 환경에서 내구성이 필요하다면 헬리컬 감속기가 정답입니다.</p>
<div style="overflow-x: auto; white-space: nowrap;">
<div style="border-radius: 8px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); margin: 20px 0; border: 1px solid #e5e7eb;">
<table style="border-collapse: collapse; width: 100%; min-width: 700px; font-size: 15px; text-align: left; background-color: #ffffff;">
<thead>
<tr style="background-color: #1f2937; color: #ffffff;">
<th style="padding: 15px; border-bottom: 3px solid #3b82f6; font-weight: bold; text-transform: uppercase;">특징</th>
<th style="padding: 15px; border-bottom: 3px solid #10b981; font-weight: bold; text-transform: uppercase;">헬리컬 감속기</th>
<th style="padding: 15px; border-bottom: 3px solid #f59e0b; font-weight: bold; text-transform: uppercase;">유성기어 감속기</th>
</tr>
</thead>
<tbody>
<tr>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; background-color: #f9fafb; font-weight: bold; color: #374151;">축 방향</td>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; color: #4b5563;">평행 또는 오프셋</td>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; color: #4b5563;">동축 (일직선)</td>
</tr>
<tr>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; background-color: #f9fafb; font-weight: bold; color: #374151;">토크 밀도</td>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; color: #4b5563;">보통</td>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; color: #4b5563;">매우 높음</td>
</tr>
<tr>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; background-color: #f9fafb; font-weight: bold; color: #374151;">정밀도 (백래시)</td>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; color: #4b5563;">중간 수준</td>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; color: #4b5563;">매우 우수</td>
</tr>
<tr>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; background-color: #f9fafb; font-weight: bold; color: #374151;">정비 편의성</td>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; color: #4b5563;">우수 (분해 용이)</td>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; color: #4b5563;">어려움 (정밀 조립 필요)</td>
</tr>
<tr>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; background-color: #f9fafb; font-weight: bold; color: #374151;">주요 용도</td>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; color: #4b5563;">일반 컨베이어, 산업 기계</td>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; color: #4b5563;">로봇, 반도체, 정밀 기기</td>
</tr>
</tbody>
</table>
</div>
</div>
<h2>초보 엔지니어들이 흔히 하는 실수</h2>
<p>감속기의 &#8216;허용 하중&#8217;을 무시하고 기어비만 맞추는 것은 위험합니다. 모터의 토크를 감속기가 견딜 수 있다고 해서 끝이 아닙니다. 출력 샤프트에 체인이나 벨트를 걸었을 때 발생하는 <strong>&#8216;오버행 하중(Overhung Load)&#8217;</strong>이 베어링의 수명을 결정짓습니다.</p>
<p>헬리컬 감속기는 하우징이 커서 베어링 사이의 거리가 멀기 때문에 이 하중을 잘 견디지만, 유성기어는 하우징이 짧아 출력축에 측면 힘이 가해지면 내부 기어가 비틀리며 손상을 입기 쉽습니다. 또한, 윤활유 선택에서도 차이가 있습니다. 유성기어는 고부하가 걸리므로 고품질 합성유를, 헬리컬 감속기는 소음 저감을 위해 점도가 높은 광유계 오일을 쓰기도 합니다.</p>
<div style="border-left: 5px solid #3b82f6; background-color: #eff6ff; padding: 15px; margin: 30px 0; border-radius: 10px; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);">
<div style="display: flex; align-items: center; margin-bottom: 12px;"> <span style="font-size: 30px; margin-right: 15px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4d8.png" alt="📘" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="font-weight: bold; color: #1e40af; font-size: 1.2em;">핵심 요약</span> </div>
<div style="color: #444; line-height: 1.8; font-size: 1.05em;"> 1. 헬리컬 기어는 비스듬한 이빨 구조로 소음이 적고 내구성이 좋으나 축 방향 추력이 발생한다.<br /> 2. 유성기어는 동축 구조로 공간 효율이 극대화되어 있으며 정밀 제어에 유리하다.<br /> 3. 설치 공간과 정밀도 요구사항에 따라 감속기를 결정하되, 반드시 출력축의 허용 하중을 검토해야 한다. </div>
</div>
<p>기술은 언제나 적재적소에 쓰일 때 가장 빛을 발합니다. 현장의 소리에 귀를 기울이고, 각 기어 방식의 물리적 한계와 장점을 명확히 이해한다면 예기치 못한 중단 사고로부터 라인을 안전하게 지켜낼 수 있을 것입니다.</p>
<p> <a href="https://myengnote.com/gear-ratio-calculation-speed-torque-relationship/" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"> <span style="display: table-cell; vertical-align: middle;"> <span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="display: block; overflow: hidden;"> <span style="display: block; font-size: 0.9em; color: #6b7280; margin-bottom: 4px;">함께 보면 좋은 글</span> <span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">기어비 계산법: 속도와 토크의 반비례 관계</span> </span> </span> <span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #3b82f6; font-size: 24px; font-weight: bold;">→</span><br />
</a><a href="https://myengnote.com/risks-ignoring-abnormal-machine-noise/" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"> <span style="display: table-cell; vertical-align: middle;"> <span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="display: block; overflow: hidden;"> <span style="display: block; font-size: 0.9em; color: #6b7280; margin-bottom: 4px;">함께 보면 좋은 글</span> <span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">기계 이상 소음 방치의 위험성</span> </span> </span> <span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #3b82f6; font-size: 24px; font-weight: bold;">→</span><br />
</a> </p>
<h2>연관글</h2>
<p><a href="https://myengnote.com/industrial-motor-frame-size-compatibility-guide/" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"> <span style="display: table-cell; vertical-align: middle;"> <span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="display: block; overflow: hidden;"> <span style="display: block; font-size: 0.9em; color: #6b7280; margin-bottom: 4px;">함께 보면 좋은 글</span> <span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">산업용 모터 프레임 규격 확인법 및 호환성</span> </span> </span> <span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #3b82f6; font-size: 24px; font-weight: bold;">→</span><br />
</a><a href="https://myengnote.com/bearing-failure-excessive-belt-tension/" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"> <span style="display: table-cell; vertical-align: middle;"> <span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="display: block; overflow: hidden;"> <span style="display: block; font-size: 0.9em; color: #6b7280; margin-bottom: 4px;">함께 보면 좋은 글</span> <span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">구동 벨트 과장력으로 인한 베어링 파손</span> </span> </span> <span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #3b82f6; font-size: 24px; font-weight: bold;">→</span><br />
</a></p>
<hr style="border: 0; border-top: 1px solid #eee; margin: 40px 0 20px 0;">
<p style="text-align: center; font-size: 0.85em; color: #888; margin-bottom: 20px;">
    본 콘텐츠는 저작권법의 보호를 받으며, 무단 전재 및 재배포를 금지합니다.<br />
    Copyright 2026. 동동 All rights reserved.
</p>
<p><!-- Protection Scripts --></p>
<div id="protection-script" style="display:none;">
<script>
document.addEventListener('contextmenu', function(e) {
    e.preventDefault();
    alert('이 콘텐츠는 저작권법의 보호를 받습니다. 무단 복제 및 우클릭을 금지합니다.');
});
document.addEventListener('keydown', function(e) {
    if (e.ctrlKey && (e.key === 'c' || e.key === 'u' || e.key === 'a')) {
        e.preventDefault();
        alert('무단 복제를 금지합니다.');
    }
});
</script></p>
<style>
.entry-content {
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
</style>
</div>
<p><!-- START_SIMULATOR_LINK_CARD_gear_ratio --><a href="https://myengnote.com/gear-ratio-calculator-simulator-3/" target="_blank" rel="noopener noreferrer" class="eng-simulator-card" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"><span style="display: table-cell; vertical-align: middle;"><span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ee.png" alt="🧮" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span style="display: block; overflow: hidden;"><span style="display: block; font-size: 0.9em; color: #10b981; font-weight: bold; margin-bottom: 4px;">실시간 공학 시뮬레이터 추천</span><span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">초정밀 기어비 계산기 &#038; 실시간 2D 회전 시뮬레이터</span></span></span><span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #10b981; font-size: 24px; font-weight: bold;">→</span></a><!-- END_SIMULATOR_LINK_CARD_gear_ratio --></p>
]]></content:encoded>
					
					<wfw:commentRss>https://myengnote.com/industrial-gearbox-helical-vs-planetary-comparison/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>기어비 계산법: 속도와 토크의 반비례 관계 (Gear Ratio Calculation: Understanding Speed and Torque)</title>
		<link>https://myengnote.com/gear-ratio-calculation-speed-torque-relationship/</link>
					<comments>https://myengnote.com/gear-ratio-calculation-speed-torque-relationship/#respond</comments>
		
		<dc:creator><![CDATA[동동]]></dc:creator>
		<pubDate>Tue, 12 May 2026 21:18:08 +0000</pubDate>
				<category><![CDATA[동력전달장치/구동부]]></category>
		<category><![CDATA[Gear Ratio]]></category>
		<category><![CDATA[Speed]]></category>
		<category><![CDATA[Torque]]></category>
		<category><![CDATA[감속기]]></category>
		<category><![CDATA[기계설계]]></category>
		<category><![CDATA[기어비]]></category>
		<category><![CDATA[동력전달]]></category>
		<category><![CDATA[토크계산]]></category>
		<guid isPermaLink="false">https://myengnote.com/gear-ratio-calculation-speed-torque-relationship/</guid>

					<description><![CDATA[기어비의 기본 원리와 속도 및 토크 간의 반비례 관계를 심층 분석합니다. 실무 현장의 감속기 설계 사례와 에너지 보존 법칙에 근거한 정확한 계산법을 가이드합니다.... <a href="https://myengnote.com/gear-ratio-calculation-speed-torque-relationship/" style="text-decoration:none; color:#0073aa; font-weight:bold;">[본문 전체보기 >]</a>]]></description>
										<content:encoded><![CDATA[<p>내구성을 고려한 기계 설계에 있어 기어비는 단순한 부품의 조합 그 이상의 의미를 갖습니다. 이는 시스템의 생명력을 결정짓는 핵심적인 안전장치이자, 제한된 동력을 가장 효율적으로 배분하는 설계자의 철학이 담긴 지표라고 할 수 있습니다. 우리가 흔히 접하는 감속기나 변속기 내부에서 일어나는 속도와 토크의 변화는 물리적 에너지 보존 법칙을 충실히 따르는 과정이며, 이를 정확히 이해하지 못한 설계는 결국 장비의 수명 단축이나 치명적인 파손으로 이어지기 마련입니다. 기어비의 본질을 이해하려면 먼저 입력단과 출력단 사이의 물리적 상호작용을 들여다봐야 합니다. 구동 기어(피니언)와 피동 기어 사이에서 발생하는 회전수의 차이는 곧 힘의 증폭 혹은 감쇄로 나타납니다. 여기서 중요한 점은 &#8216;일&#8217;의 개념입니다. 마찰 손실을 제외한다면 입력된 에너지는 출력단으로 그대로 전달되어야 하기에, 회전 속도가 줄어드는 만큼 그 보상으로 회전하는 힘, 즉 토크가 강해지는 것입니다. 이러한 반비례 관계는 기계 설계의 가장 기초적이면서도 강력한 원칙입니다. </p>
<div style="border-left: 5px solid #3b82f6; background-color: #eff6ff; padding: 15px; margin: 30px 0; border-radius: 10px; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);">
<div style="display: flex; align-items: center; margin-bottom: 12px;"><span style="font-size: 30px; margin-right: 15px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4d8.png" alt="📘" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span style="font-weight: bold; color: #1e40af; font-size: 1.2em;">핵심 요약</span></div>
<div style="color: #444; line-height: 1.8; font-size: 1.05em;">기어비(i)는 &#8216;피동 기어 잇수 / 구동 기어 잇수&#8217;로 계산됩니다. 출력 토크는 입력 토크에 기어비를 곱하고 효율을 반영하여 구하며, 출력 회전수는 입력 회전수를 기어비로 나누어 계산합니다. 즉, 기어비가 커질수록 속도는 느려지지만 힘은 강력해집니다.</div>
</p>
</div>
<h2>실무 필드 로그 및 분석 (Field Log &#038; Analysis)</h2>
<p> <strong>[현장 상황 리포트]</strong><br />
최근 국내의 한 자동차 부품 조립 라인에서 대형 컨베이어 구동부가 빈번하게 멈추는 현상이 발생했습니다. 해당 설비에는 Mitsubishi 사의 HG-SR 시리즈 서보 모터와 Sumitomo 사의 파라맥스 감속기가 조합되어 운용 중이었습니다. 현장에서 측정된 감속기 하우징의 표면 온도는 약 95°C에 달했으며, 180Hz 부근에서 고주파 진동이 관찰되었습니다. <strong>[분석 및 진단]</strong><br />
초기 설계 당시 예상했던 부하보다 실제 운전 부하가 약 1.5배 높게 측정되었습니다. 기존에 적용된 15:1의 기어비로는 가속 구간에서 모터에 가해지는 관성 부하를 충분히 제어하지 못해 모터가 지속적인 과부하 상태에 놓여 있었습니다. 이로 인해 슬립 현상이 가속화되고 내부 오일 온도가 급상승하며 베어링의 점성 마찰이 커지는 악순환이 반복되고 있었습니다. <strong>[조치 결과 및 경제적 효과]</strong><br />
설계 변경을 통해 기어비를 25:1로 상향 조정하고, 이에 맞춰 모터의 제어 파라미터를 재설정했습니다. 비록 컨베이어의 최대 이동 속도는 약간 줄어들었으나, 출력 토크가 약 66% 증폭되면서 모터의 정격 전류 범위 내에서 안정적인 가동이 가능해졌습니다. 이 조치를 통해 월평균 3회 발생하던 예기치 못한 정지 시간을 제로화하였으며, 연간 약 4,500만 원 상당의 생산 손실을 방지하는 효과를 가져왔습니다. 해당 설계는 <strong>KS B ISO 6336</strong>(평기어 및 헬리컬 기어의 부하 용량 계산) 규격을 준수하여 강도 계산을 재검증하였습니다. </p>
<h2>속도와 토크의 물리적 줄다리기</h2>
<p>엔지니어로서 설계를 진행할 때 가장 먼저 맞닥뜨리는 고민은 &#8220;얼마나 빠른 모터를 쓸 것인가&#8221;가 아니라 &#8220;얼마나 큰 힘이 필요한가&#8221;입니다. 기어비는 이 질문에 대한 해답을 주는 가변 상수와 같습니다. 모터의 출력은 고정되어 있는데, 이를 빠른 속도로 쓸 것인지, 아니면 느리지만 묵직한 힘으로 쓸 것인지를 결정하는 도구가 바로 기어입니다.</p>
<p> 기어비 계산의 기본 공식은 매우 명쾌합니다. 기어비(i)는 피동 기어의 잇수를 구동 기어의 잇수로 나눈 값입니다. 예를 들어 모터 축에 달린 10개의 이를 가진 기어가 50개의 이를 가진 큰 기어를 돌린다면 기어비는 5가 됩니다. 이때 출력 축의 속도는 모터 속도의 1/5로 줄어들지만, 이론적인 토크는 5배로 커집니다. 하지만 여기서 간과해서는 안 될 점이 바로 효율입니다. 기어 치면 사이의 마찰, 오일의 점성 저항 등으로 인해 실제 전달되는 토크는 계산값의 90~95% 수준에 머무는 경우가 많습니다. </p>
<div style="border-left: 5px solid #ef4444; background-color: #fef2f2; padding: 15px; margin: 30px 0; border-radius: 10px; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);">
<div style="display: flex; align-items: center; margin-bottom: 12px;"><span style="font-size: 30px; margin-right: 15px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span style="font-weight: bold; color: #991b1b; font-size: 1.2em;">주의사항</span></div>
<div style="color: #444; line-height: 1.8; font-size: 1.05em;">고감속비(예: 100:1 이상)를 설계할 때는 반드시 열적 정격을 확인해야 합니다. 토크는 충분하더라도 내부 마찰로 인한 발열량이 발산량보다 많으면 기어가 소각될 위험이 있습니다. 특히 웜 기어의 경우 효율이 급격히 떨어지므로 방열 대책이 필수적입니다.</div>
</p>
</div>
<h2>현장에서 놓치기 쉬운 계산의 함정들</h2>
<p>많은 초보 엔지니어들이 기어비만 맞추면 모든 것이 해결될 것이라 믿곤 합니다. 하지만 실무에서는 &#8216;관성 모멘트의 정합&#8217;이라는 더 높은 벽이 존재합니다. 모터가 기어 박스를 통해 부하를 돌릴 때, 부하의 관성은 기어비의 제곱에 반비례하여 모터 측에 전달됩니다.</p>
<p> 즉, 기어비를 높이면 모터가 느끼는 부하의 무게감이 기하급수적으로 가벼워진다는 뜻입니다. 이는 제어의 안정성을 확보하는 데 매우 유리한 조건이 됩니다. 또한, 다단 감속기를 설계할 때는 각 단계별 기어비의 곱이 최종 기어비가 된다는 점을 명심해야 합니다. 1단에서 3:1, 2단에서 4:1로 감속한다면 최종 기어비는 12:1이 됩니다. 이때 각 단계의 샤프트와 베어링이 견뎌야 하는 하중은 뒤로 갈수록 커지므로, 출력단에 가까운 부품일수록 더 굵은 축과 강한 소재를 사용해야 합니다. 만약 이를 무시하고 동일한 규격의 부품을 사용한다면, 출력단 샤프트가 토크를 이기지 못하고 비틀려 부러지는 사고가 발생할 수 있습니다. </p>
<div style="overflow-x: auto; white-space: nowrap; border-radius: 8px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); margin: 20px 0; border: 1px solid #e5e7eb;">
<table style="border-collapse: collapse; width: 100%; min-width: 700px; font-size: 15px; text-align: left; background-color: #ffffff;">
<thead>
<tr style="background-color: #1f2937; color: #ffffff;">
<th style="padding: 15px; border-bottom: 3px solid #3b82f6; font-weight: bold; text-transform: uppercase; letter-spacing: 0.05em;">항목</th>
<th style="padding: 15px; border-bottom: 3px solid #10b981; font-weight: bold; text-transform: uppercase; letter-spacing: 0.05em;">입력단 (모터)</th>
<th style="padding: 15px; border-bottom: 3px solid #f59e0b; font-weight: bold; text-transform: uppercase; letter-spacing: 0.05em;">출력단 (기어비 10:1)</th>
<th style="padding: 15px; border-bottom: 3px solid #8b5cf6; font-weight: bold; text-transform: uppercase; letter-spacing: 0.05em;">물리적 변화</th>
</tr>
</thead>
<tbody>
<tr>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; background-color: #f9fafb; font-weight: bold; color: #374151;">회전 속도 (RPM)</td>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; color: #4b5563;">3000</td>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; color: #4b5563;">300</td>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; color: #4b5563;">1/10로 감소</td>
</tr>
<tr>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; background-color: #f9fafb; font-weight: bold; color: #374151;">회전 토크 (N·m)</td>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; color: #4b5563;">5</td>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; color: #4b5563;">45~48 (효율 반영)</td>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; color: #4b5563;">약 10배 증가</td>
</tr>
<tr>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; background-color: #f9fafb; font-weight: bold; color: #374151;">관성 부하 (kg·m²)</td>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; color: #4b5563;">부하 관성 / 100</td>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; color: #4b5563;">실제 부하 관성</td>
<td style="padding: 12px 15px; border-bottom: 1px solid #e5e7eb; color: #4b5563;">1/100로 감소</td>
</tr>
</tbody>
</table>
</div>
<h2>설계자의 관점에서 본 기어비의 가치</h2>
<p>기어비를 결정하는 과정은 단순히 수학 문제를 푸는 것이 아니라, 장비의 운명과 유지보수 비용을 설계하는 과정입니다. 너무 낮은 기어비는 모터의 빈번한 소각을 초래하고, 너무 높은 기어비는 불필요한 비용 상승과 기계적 효율 저하를 야기합니다.</p>
<p> 저는 후배 엔지니어들에게 항상 &#8220;카탈로그의 수치 뒤에 숨겨진 물리적 여유를 보라&#8221;고 조언합니다. 장비가 구동될 때 발생하는 이상 소음이나 진동은 기어비 설계가 잘못되었다는 가장 정직한 신호입니다. 예를 들어, 모터가 정격 속도보다 너무 낮은 구간에서 계속 운전된다면 냉각 팬의 효율이 떨어져 모터 수명이 급감하게 됩니다. 이러한 경우 차라리 기어비를 높여 모터가 제 성능을 낼 수 있는 고회전 영역에서 운전하게 하고, 대신 출력단의 힘을 보강하는 것이 장기적인 관점에서 훨씬 경제적입니다. </p>
<div style="border-left: 5px solid #f59e0b; background-color: #fffbeb; padding: 15px; margin: 30px 0; border-radius: 10px; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);">
<div style="display: flex; align-items: center; margin-bottom: 12px;"><span style="font-size: 30px; margin-right: 15px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span style="font-weight: bold; color: #92400e; font-size: 1.2em;">현장 전문가의 팁</span></div>
<div style="color: #444; line-height: 1.8; font-size: 1.05em;">기어비를 선정할 때는 &#8216;소수점 기어비&#8217;를 고려해 보세요. 정수비(예: 4:1, 5:1)보다는 약간의 소수점이 섞인 비율(예: 4.12:1)이 기어 치면의 마모를 분산시켜 수명을 연장하는 데 도움이 됩니다. 이는 특정 이빨끼리만 반복해서 맞물리는 현상을 방지해 주기 때문입니다.</div>
</p>
</div>
<p> 결론적으로 기어비는 속도와 토크라는 두 마리 토끼를 잡기 위한 설계자의 전략적 선택지입니다. 에너지는 공짜로 얻어지지 않으며, 우리가 얻는 강력한 토크는 결국 속도의 희생이라는 대가를 치른 결과물입니다. 이 명확한 인과관계를 이해하고 실무에 적용한다면, 더욱 견고하고 신뢰성 높은 기계 시스템을 구축할 수 있을 것입니다. <a href="https://myengnote.com/understanding-ac-dc-motor-power-supply-control-characteristics/" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"><span style="display: table-cell; vertical-align: middle;"><span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span style="display: block; overflow: hidden;"><span style="display: block; font-size: 0.9em; color: #6b7280; margin-bottom: 4px;">함께 보면 좋은 글</span><span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">AC 및 DC 모터의 전원 방식과 제어 특성 이해</span></span></span><span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #3b82f6; font-size: 24px; font-weight: bold;">→</span></a><a href="https://myengnote.com/worm-gear-reduction-principles-and-self-locking/" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"><span style="display: table-cell; vertical-align: middle;"><span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span style="display: block; overflow: hidden;"><span style="display: block; font-size: 0.9em; color: #6b7280; margin-bottom: 4px;">함께 보면 좋은 글</span><span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">웜 기어 감속 원리와 역전 방지 기능</span></span></span><span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #3b82f6; font-size: 24px; font-weight: bold;">→</span></a> </p>
<h2>0. 연관글</h2>
<p><!-- START_SIMULATOR_LINK_CARD_gear_ratio --><a href="https://myengnote.com/gear-ratio-calculator-simulator-3/" target="_blank" rel="noopener noreferrer" class="eng-simulator-card" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"><span style="display: table-cell; vertical-align: middle;"><span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ee.png" alt="🧮" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span style="display: block; overflow: hidden;"><span style="display: block; font-size: 0.9em; color: #10b981; font-weight: bold; margin-bottom: 4px;">실시간 공학 시뮬레이터 추천</span><span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">초정밀 기어비 계산기 &#038; 실시간 2D 회전 시뮬레이터</span></span></span><span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #10b981; font-size: 24px; font-weight: bold;">→</span></a><!-- END_SIMULATOR_LINK_CARD_gear_ratio --><a href="https://myengnote.com/risks-ignoring-abnormal-machine-noise/" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"><span style="display: table-cell; vertical-align: middle;"><span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span style="display: block; overflow: hidden;"><span style="display: block; font-size: 0.9em; color: #6b7280; margin-bottom: 4px;">함께 보면 좋은 글</span><span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">기계 이상 소음 방치의 위험성</span></span></span><span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #3b82f6; font-size: 24px; font-weight: bold;">→</span></a></p>
<hr style="border: 0; border-top: 1px solid #eee; margin: 40px 0 20px 0;">
<p style="text-align: center; font-size: 0.85em; color: #888; margin-bottom: 20px;">
    본 콘텐츠는 저작권법의 보호를 받으며, 무단 전재 및 재배포를 금지합니다.<br />
    Copyright 2026. 동동 All rights reserved.
</p>
<p><!-- Protection Scripts --></p>
<div id="protection-script" style="display:none;">
<script>
document.addEventListener('contextmenu', function(e) {
    e.preventDefault();
    alert('이 콘텐츠는 저작권법의 보호를 받습니다. 무단 복제 및 우클릭을 금지합니다.');
});
document.addEventListener('keydown', function(e) {
    if (e.ctrlKey && (e.key === 'c' || e.key === 'u' || e.key === 'a')) {
        e.preventDefault();
        alert('무단 복제를 금지합니다.');
    }
});
</script></p>
<style>
.entry-content {
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
</style>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://myengnote.com/gear-ratio-calculation-speed-torque-relationship/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>V-벨트 규격의 이해와 A형 및 B형 선정 기준 (Understanding V-Belt Specifications: Selection Criteria for Type A and B)</title>
		<link>https://myengnote.com/v-belt-specification-a-vs-b-guide/</link>
					<comments>https://myengnote.com/v-belt-specification-a-vs-b-guide/#respond</comments>
		
		<dc:creator><![CDATA[동동]]></dc:creator>
		<pubDate>Wed, 06 May 2026 22:33:03 +0000</pubDate>
				<category><![CDATA[동력전달장치/구동부]]></category>
		<category><![CDATA[KS규격]]></category>
		<category><![CDATA[Mechanical Engineering]]></category>
		<category><![CDATA[Power Transmission]]></category>
		<category><![CDATA[Pulley]]></category>
		<category><![CDATA[V-Belt]]></category>
		<category><![CDATA[V-벨트]]></category>
		<category><![CDATA[기계요소]]></category>
		<category><![CDATA[동력전달]]></category>
		<guid isPermaLink="false">https://myengnote.com/v-belt-specification-a-vs-b-guide/</guid>

					<description><![CDATA[V-벨트 A형과 B형의 규격 차이와 현장 선정 노하우를 상세히 설명합니다. 올바른 규격 확인으로 장비의 효율을 높이고 유지보수 비용을 절감하는 방법을 확인하세요.... <a href="https://myengnote.com/v-belt-specification-a-vs-b-guide/" style="text-decoration:none; color:#0073aa; font-weight:bold;">[본문 전체보기 >]</a>]]></description>
										<content:encoded><![CDATA[<p>현장에서 15년 넘게 기계 설계와 유지보수 자문을 하며 수많은 엔지니어를 만났지만, 의외로 가장 기초적인 소모품인 V-벨트의 규격을 혼동하여 큰 사고를 초래하는 경우를 자주 목격했습니다. 많은 이들이 벨트가 그저 &#8220;검은색 고무 띠&#8221;일 뿐이라고 생각하며, 대충 눈대중으로 폭이 비슷해 보이면 끼워도 상관없다고 믿는 경향이 있습니다. 하지만 V-벨트의 핵심은 단순한 마찰력이 아니라, 풀리 홈과의 사이에서 발생하는 <strong>쐐기 효과(Wedge Effect)</strong>에 있습니다. 단 며칠 만에 벨트가 걸레처럼 너덜너덜해지거나, 모터 샤프트의 베어링이 타버리는 현상의 이면에는 규격 오선정이라는 아주 사소하지만 치명적인 실수가 숨어 있습니다.  </p>
<h2>실무 필드 로그 및 분석 (Field Log &#038; Analysis)</h2>
<p>최근 한 자동차 부품 생산 라인의 대형 배기 블로워 시스템에서 발생한 문제입니다. 해당 설비는 Mitsubishi SF-PRO 15kW 고효율 모터를 동력원으로 사용하고 있었으며, 동력 전달을 위해 4열 V-벨트 구동 방식을 채택하고 있었습니다. 현장 보고에 따르면 가동 후 약 200시간 만에 벨트에서 심한 탄 냄새가 나고, 150Hz 대역의 고주파 진동이 측정되었습니다.</p>
<p>또한, SKF 6312 베어링 하우징의 온도가 85°C까지 급상승하는 이상 현상이 관찰되었습니다. 분석 결과, 본래 설계 규격은 B형 벨트였으나 현장 유지보수 팀에서 재고가 없다는 이유로 폭이 좁은 <strong>A형 벨트</strong>를 임시로 장착한 것이 화근이었습니다. A형 벨트는 B형 풀리 홈의 바닥면에 닿아버려 정상적인 쐐기 작용을 하지 못했고, 이로 인해 미끄러짐 현상이 발생하며 과도한 열이 발생한 것입니다.</p>
<p>이를 해결하기 위해 슬립을 잡으려고 장력을 무리하게 높이다 보니 모터 축에 과도한 하중이 걸려 베어링 수명까지 갉아먹고 있었습니다. 이 사고로 인해 라인이 반나절 동안 멈췄으며, 약 2,500만 원 규모의 손실이 발생했습니다. 이 사례는 <strong>KS B 1401 및 ISO 4184</strong> 표준을 준수하는 것이 단순한 이론적 절차가 아니라 경제적 생존과 직결됨을 보여줍니다.</p>
</p>
<h2>A형과 B형 V-벨트, 무엇이 다른가?</h2>
<p>가장 흔히 쓰이는 일반용 V-벨트인 A형과 B형의 차이는 명확합니다. 상부 폭과 두께의 차이가 핵심입니다. <strong>A형은 상부 폭이 12.5mm, 두께가 9.0mm</strong>인 반면, <strong>B형은 폭이 16.5mm, 두께가 11.0mm</strong>입니다. 숫자로만 보면 고작 4mm 정도의 폭 차이지만, 단면적을 계산해 보면 동력 전달 능력에서 약 1.5배 이상의 차이가 발생합니다.</p>
<div style="border-left: 5px solid #3b82f6; background-color: #eff6ff; padding: 15px; margin: 30px 0; border-radius: 10px; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);">
<div style="display: flex; align-items: center; margin-bottom: 12px;"> <span style="font-size: 30px; margin-right: 15px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4d8.png" alt="📘" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="font-weight: bold; color: #1e40af; font-size: 1.2em;">핵심 요약</span> </div>
<div style="color: #444; line-height: 1.8; font-size: 1.05em;"> V-벨트의 규격은 풀리 홈과의 접촉 면적을 결정하며, 이는 곧 장비의 구동 토크와 직결됩니다. A형은 비교적 가벼운 부하에, B형은 더 큰 회전력이 필요한 중량물 구동에 적합합니다. </div>
</div>
<p>현장에서 벨트를 확인할 때 표기법도 잘 보아야 합니다. 보통 &#8216;A-50&#8217; 혹은 &#8216;B-60&#8217;과 같은 식으로 표기되는데, 여기서 숫자는 벨트의 유효 길이를 <strong>인치(Inch)</strong> 단위로 나타낸 것입니다. 만약 각인이 지워졌다면 벨트의 폭을 버니어 캘리퍼스로 측정하여 12mm에 가까우면 A형, 16mm에 가까우면 B형으로 판단하는 것이 실무적인 요령입니다.</p>
</p>
<h2>쐐기 효과와 마찰력의 물리학</h2>
<p>왜 V-벨트는 평벨트와 달리 홈에 끼우는 형태일까요? 바로 수직 항력을 증폭시키기 위해서입니다. 벨트가 풀리의 V자 홈에 끼워지면, 벨트 양 측면에는 누르는 힘보다 훨씬 큰 측면 압착력이 발생합니다. 이를 <strong>쐐기 효과</strong>라고 부릅니다. 이 현상 덕분에 V-벨트는 평벨트보다 훨씬 작은 장력으로도 큰 동력을 전달할 수 있습니다.</p>
<div style="border-left: 5px solid #ef4444; background-color: #fef2f2; padding: 15px; margin: 30px 0; border-radius: 10px; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);">
<div style="display: flex; align-items: center; margin-bottom: 12px;"> <span style="font-size: 30px; margin-right: 15px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="font-weight: bold; color: #991b1b; font-size: 1.2em;">주의사항</span> </div>
<div style="color: #444; line-height: 1.8; font-size: 1.05em;"> 벨트가 풀리 홈의 <strong>바닥에 닿는다면</strong> 그것은 규격이 맞지 않는 것입니다. 정상적인 상태라면 벨트 상단이 풀리의 외경보다 약간 돌출되거나 수평을 이루어야 합니다. 바닥에 닿는 순간 쐐기 효과는 사라지고 급격한 슬립이 시작됩니다. </div>
</div>
<p>주니어 엔지니어들이 가장 많이 하는 실수가 바로 장력 조절입니다. 슬립이 난다고 해서 무조건 장력을 높이면 안 됩니다. 과도한 장력은 베어링의 조기 파손을 불러올 뿐만 아니라, 벨트 내부의 인장 강선인 폴리에스테르 코드를 파단시켜 벨트 수명을 단축시킵니다.</p>
</p>
<h2>유지보수의 관점에서 본 선정 기준</h2>
<p>현장에서 벨트를 선정할 때는 단순히 규격만 보는 것이 아니라 벨트의 재질과 특성도 함께 고려해야 합니다. 예를 들어, 오일이나 열에 노출되는 환경이라면 내유성 및 내열성이 강화된 <strong>레드 벨트(고강력 벨트)</strong>를 선택해야 합니다. 레드 벨트는 일반 벨트보다 허용 전동 용량이 약 30~40% 더 높습니다.</p>
<div style="border-left: 5px solid #f59e0b; background-color: #fffbeb; padding: 15px; margin: 30px 0; border-radius: 10px; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);">
<div style="display: flex; align-items: center; margin-bottom: 12px;"> <span style="font-size: 30px; margin-right: 15px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="font-weight: bold; color: #92400e; font-size: 1.2em;">현장 전문가의 팁</span> </div>
<div style="color: #444; line-height: 1.8; font-size: 1.05em;"> 다열 벨트를 교체할 때는 반드시 <strong>전체 세트를 한꺼번에 교체</strong>하십시오. 헌 벨트와 새 벨트를 섞어 쓰면 하중이 새 벨트에만 집중되어 파손 속도가 급격히 빨라집니다. 이를 방지하기 위해 길이를 맞춘 &#8216;매치드 세트&#8217;를 사용하는 것이 좋습니다. </div>
</div>
<p>또한, <strong>풀리의 정렬 상태(Alignment)</strong>도 벨트 수명에 결정적인 영향을 미칩니다. 두 풀리의 축이 평행하지 않으면 벨트의 한쪽 측면만 마모되어 벨트가 뒤집히거나 이탈하는 사고가 발생합니다. 정렬 상태를 점검할 때는 직선 자를 이용해 풀리의 네 점이 일직선상에 있는지 확인해야 합니다.</p>
</p>
<h2>시니어 엔지니어의 최종 조언</h2>
<p>결론적으로, V-벨트 A형과 B형의 선택은 단순한 소모품 교체가 아니라 시스템의 설계 의도를 이해하는 과정입니다. 부하가 큰 대형 펌프나 송풍기에는 B형을, 상대적으로 낮은 동력을 전달하는 컨베이어 라인 등에는 A형을 사용하는 것이 원칙입니다.</p>
<p>만약 제가 현장 책임자라면, 벨트 교체 시 반드시 풀리 홈의 마모 상태를 함께 점검할 것입니다. 풀리 홈이 &#8216;U&#8217;자 형태로 마모되어 있다면 새 벨트를 끼워도 금방 수명이 다하기 때문입니다. 동력 전달 장치의 효율을 극대화하려면 직접 손으로 벨트의 폭을 재보고 풀리와의 유격을 확인하는 습관을 들이십시오. 작은 관심이 수천만 원의 수리비를 아끼는 지름길입니다.</p>
</p>
<h2>0. 연관글</h2>
<p><!-- START_SIMULATOR_LINK_CARD_belt_pulley --><a href="https://myengnote.com/belt-pulley-speed-calculator-simulator-2/" target="_blank" rel="noopener noreferrer" class="eng-simulator-card" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"><span style="display: table-cell; vertical-align: middle;"><span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ee.png" alt="🧮" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span style="display: block; overflow: hidden;"><span style="display: block; font-size: 0.9em; color: #10b981; font-weight: bold; margin-bottom: 4px;">실시간 공학 시뮬레이터 추천</span><span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">초정밀 벨트-풀리 속도 계산기 &#038; 실시간 2D 물리 시뮬레이터</span></span></span><span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #10b981; font-size: 24px; font-weight: bold;">→</span></a><!-- END_SIMULATOR_LINK_CARD_belt_pulley --><a href="https://myengnote.com/risks-ignoring-abnormal-machine-noise/" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"> <span style="display: table-cell; vertical-align: middle;"> <span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="display: block; overflow: hidden;"> <span style="display: block; font-size: 0.9em; color: #6b7280; margin-bottom: 4px;">함께 보면 좋은 글</span> <span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">기계 이상 소음 방치의 위험성</span> </span> </span> <span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #3b82f6; font-size: 24px; font-weight: bold;">→</span><br />
</a><a href="https://myengnote.com/bearing-failure-excessive-belt-tension/" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"> <span style="display: table-cell; vertical-align: middle;"> <span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="display: block; overflow: hidden;"> <span style="display: block; font-size: 0.9em; color: #6b7280; margin-bottom: 4px;">함께 보면 좋은 글</span> <span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">구동 벨트 과장력으로 인한 베어링 파손</span> </span> </span> <span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #3b82f6; font-size: 24px; font-weight: bold;">→</span><br />
</a><a href="https://myengnote.com/industrial-motor-frame-size-compatibility-guide/" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"> <span style="display: table-cell; vertical-align: middle;"> <span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="display: block; overflow: hidden;"> <span style="display: block; font-size: 0.9em; color: #6b7280; margin-bottom: 4px;">함께 보면 좋은 글</span> <span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">산업용 모터 프레임 규격 확인법 및 호환성</span> </span> </span> <span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #3b82f6; font-size: 24px; font-weight: bold;">→</span><br />
</a></p>
<hr style="border: 0; border-top: 1px solid #eee; margin: 40px 0 20px 0;">
<p style="text-align: center; font-size: 0.85em; color: #888; margin-bottom: 20px;">
    본 콘텐츠는 저작권법의 보호를 받으며, 무단 전재 및 재배포를 금지합니다.<br />
    Copyright 2026. 동동 All rights reserved.
</p>
<p><!-- Protection Scripts --></p>
<div id="protection-script" style="display:none;">
<script>
document.addEventListener('contextmenu', function(e) {
    e.preventDefault();
    alert('이 콘텐츠는 저작권법의 보호를 받습니다. 무단 복제 및 우클릭을 금지합니다.');
});
document.addEventListener('keydown', function(e) {
    if (e.ctrlKey && (e.key === 'c' || e.key === 'u' || e.key === 'a')) {
        e.preventDefault();
        alert('무단 복제를 금지합니다.');
    }
});
</script></p>
<style>
.entry-content {
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
</style>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://myengnote.com/v-belt-specification-a-vs-b-guide/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>유니버설 조인트 구조와 회전 전달 특성 (Structure and Transmission Characteristics of Universal Joints)</title>
		<link>https://myengnote.com/universal-joint-structure-angle-transmission-characteristics/</link>
					<comments>https://myengnote.com/universal-joint-structure-angle-transmission-characteristics/#respond</comments>
		
		<dc:creator><![CDATA[동동]]></dc:creator>
		<pubDate>Tue, 28 Apr 2026 21:25:55 +0000</pubDate>
				<category><![CDATA[동력전달장치/구동부]]></category>
		<category><![CDATA[Kinematics]]></category>
		<category><![CDATA[Phasing]]></category>
		<category><![CDATA[Transmission]]></category>
		<category><![CDATA[Universal Joint]]></category>
		<category><![CDATA[Vibration]]></category>
		<category><![CDATA[동력전달]]></category>
		<category><![CDATA[유니버설 조인트]]></category>
		<category><![CDATA[훅 조인트]]></category>
		<guid isPermaLink="false">https://myengnote.com/universal-joint-structure-angle-transmission-characteristics/</guid>

					<description><![CDATA[유니버설 조인트의 각도 변화에 따른 비등속 회전 특성과 진동 문제를 공학적으로 분석합니다. 실무에서 놓치기 쉬운 위상 정렬과 위상차 상쇄 원리를 현장 로그와 함께 상세히 다룹니다.... <a href="https://myengnote.com/universal-joint-structure-angle-transmission-characteristics/" style="text-decoration:none; color:#0073aa; font-weight:bold;">[본문 전체보기 >]</a>]]></description>
										<content:encoded><![CDATA[<p>많은 기계 설계 현장에서 KS B 1551 또는 ISO 17485와 같은 표준 규격을 검토할 때, 단순히 허용 토크와 축의 지름에만 매몰되는 경향이 있습니다. 하지만 유니버설 조인트는 단순히 힘을 전달하는 막대가 아니라, 기하학적 굴절 각도에 따라 출력이 요동치는 예민한 동력 전달 요소입니다. 특히 고속 회전 환경에서 이 미묘한 회전 변동을 무시했다가는 설비의 수명을 갉아먹는 치명적인 진동과 소음의 늪에 빠지게 됩니다. 유니버설 조인트(Universal Joint), 흔히 현장에서 십자 조인트나 훅 조인트라고 부르는 이 부품은 서로 교차하는 두 축 사이에서 회전력을 전달합니다. 구조 자체는 매우 단순해 보입니다. 두 개의 요크가 하나의 십자축을 매개로 결합되어 있지요. 하지만 이 단순함 속에는 <strong>비등속성</strong>이라는 물리적 특성이 숨어 있습니다. 구동축이 일정한 속도로 회전하더라도, 조인트가 굴절된 상태라면 종동축은 한 회전 내에서 두 번 빨라지고 두 번 느려지는 가속과 감속을 반복하게 됩니다. 이는 입력축의 회전 속도에 코사인 함숫값이 관여하는 기하학적 구조 때문입니다. </p>
<div style="border-left: 5px solid #3b82f6; background-color: #eff6ff; padding: 15px; margin: 30px 0; border-radius: 10px; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);">
<div style="display: flex; align-items: center; margin-bottom: 12px;"> <span style="font-size: 30px; margin-right: 15px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4d8.png" alt="📘" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="font-weight: bold; color: #1e40af; font-size: 1.2em;">핵심 요약</span> </div>
<div style="color: #444; line-height: 1.8; font-size: 1.05em;"> 유니버설 조인트의 전달 효율과 등속성을 결정하는 핵심은 <b>굴절 각도(α)</b>입니다. 단일 조인트 사용 시 굴절 각도가 커질수록 종동축의 속도 변동폭은 제곱에 비례하여 증가하며, 이를 상쇄하기 위해서는 반드시 두 개의 조인트를 위상에 맞춰 조합하는 &#8216;더블 조인트&#8217; 구성을 사용해야 합니다. </div>
</div>
<p> 현장에서 이 문제를 가장 명확하게 체감할 때는 바로 고속 동력 전달 라인을 구축할 때입니다. 예를 들어 자동차 부품 조립 라인의 구동 장치에서 모터와 부하측의 수평이 맞지 않아 조인트에 약 15도의 각도가 형성되었다고 가정해 봅시다. 이때 발생하는 불등속율은 약 3.4%에 달합니다. 3000rpm으로 회전하는 샤프트라면 매 분당 100회 이상의 속도 편차가 발생하며, 이는 곧 장비 전체의 비틀림 진동으로 이어집니다. 이런 진동은 단순히 소음 문제에 그치지 않고, 연결된 베어링의 볼과 궤도면 사이에 피로 하중을 집중시켜 <strong>박리(Flaking) 현상</strong>을 가속화합니다. </p>
<h2>실무 필드 로그 및 분석 (Field Log &#038; Analysis)</h2>
<p>최근 한 자동차 차체 용접 라인의 컨베이어 구동 시스템에서 발생한 트러블슈팅 사례를 되짚어보겠습니다.</p>
<ul>
<li><strong>설비 모델</strong>: 용접 지그 이송용 고정밀 컨베이어 (Drive Unit Model: LS-D2000)</li>
<li><strong>관측 현상</strong>: 가동 3개월 만에 조인트 연결부에서 150Hz 대역의 고주파 진동 발생 및 4.2mm 수준의 축 방향 유격 확인.</li>
<li><strong>원인 분석</strong>: 설계 당시 설치 각도가 12도였으나, 현장 설치 과정에서 베이스 프레임 뒤틀림으로 인해 실제 작동 각도가 18도까지 벌어진 상태였습니다. 또한, 두 조인트를 연결하는 중간 샤프트의 요크 위상이 서로 90도 틀어져 있었습니다.</li>
<li><strong>조치 내용</strong>: 레이저 정렬 장비를 사용하여 설치 각도를 5도 이내로 재조정하고, 중간 샤프트의 요크가 동일한 평면상에 놓이도록 위상을 정렬했습니다.</li>
<li><strong>결과</strong>: 진동 수치가 85% 감소하였으며, 모터의 부하 전류 또한 평균 12% 낮아지는 에너지 절감 효과를 거두었습니다.</li>
</ul>
<p> 이 로그에서 주목해야 할 점은 <strong>위상(Phase)</strong>입니다. 유니버설 조인트 한 개가 만드는 속도 변동은 두 번째 조인트를 정확히 같은 각도로 설치하고, 요크의 방향을 일치시킴으로써 수학적으로 상쇄할 수 있습니다. 이를 흔히 <strong>Z형 배치</strong> 또는 <strong>W형 배치</strong>라고 부릅니다. 만약 중간 샤프트의 요크 위상이 어긋나면 첫 번째 조인트에서 발생한 속도 변화가 두 번째 조인트에서 증폭되어 최악의 진동을 만들어냅니다. <a href="https://myengnote.com/spline-shaft-vs-key-high-torque-advantages/" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"> <span style="display: table-cell; vertical-align: middle;"> <span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="display: block; overflow: hidden;"> <span style="display: block; font-size: 0.9em; color: #6b7280; margin-bottom: 4px;">함께 보면 좋은 글</span> <span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">고하중 회전체에 스플라인 축을 사용하는 이유</span> </span> </span> <span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #3b82f6; font-size: 24px; font-weight: bold;">→</span><br />
</a> 조인트는 왜 각도에 따라 수명이 급격히 줄어들까요? 이는 십자축 내부의 니들 롤러 베어링에 가해지는 하중 특성 때문입니다. 굴절 각도가 커질수록 십자축은 한 회전 동안 더 넓은 범위의 요동 운동을 수행해야 하며, 이는 베어링 내부에 큰 마찰열을 발생시켜 윤활유의 유막을 파괴합니다. 일반적으로 굴절 각도가 30도를 넘어가면 전달 효율은 급격히 떨어지며, 열에 의한 재질 변성이나 소크(Seize) 현상이 발생하기 쉽습니다. </p>
<div style="border-left: 5px solid #ef4444; background-color: #fef2f2; padding: 15px; margin: 30px 0; border-radius: 10px; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);">
<div style="display: flex; align-items: center; margin-bottom: 12px;"> <span style="font-size: 30px; margin-right: 15px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="font-weight: bold; color: #991b1b; font-size: 1.2em;">주의사항</span> </div>
<div style="color: #444; line-height: 1.8; font-size: 1.05em;"> 유니버설 조인트를 설치한 후 수동으로 샤프트를 회전시켰을 때 미세하게 &#8216;걸리는 느낌&#8217;이 든다면, 이는 위상 정렬이 잘못되었거나 굴절 각도가 허용치를 초과했다는 신호입니다. 이를 무시하면 서보 모터 제어 루프에서 <b>탈조 현상</b>이나 과전류 알람이 발생할 수 있습니다. </div>
</div>
<p> 초보 엔지니어들이 흔히 하는 실수 중 하나는 조인트가 어느 각도에서든 일정하게 회전할 것이라는 막연한 믿음입니다. 특히 스텝 모터를 사용하는 정밀 위치 제어 시스템에서는 조인트의 비등속성이 제어 알고리즘을 방해하는 주범이 됩니다. 모터는 일정한 각도로 명령을 내리지만, 실제 조인트 끝단에 달린 엔코더는 맥동하는 값을 읽어 들이기 때문입니다. 이럴 때는 등속 조인트(CV Joint)를 고려하거나 배치를 원점부터 재검토해야 합니다. <a href="https://myengnote.com/stepper-motor-step-out-prevention-guide/" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"> <span style="display: table-cell; vertical-align: middle;"> <span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="display: block; overflow: hidden;"> <span style="display: block; font-size: 0.9em; color: #6b7280; margin-bottom: 4px;">함께 보면 좋은 글</span> <span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">스텝 모터 탈조 현상의 정의와 기초 예방법</span> </span> </span> <span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #3b82f6; font-size: 24px; font-weight: bold;">→</span><br />
</a> 유지보수 측면에서 그리스 주입의 중요성도 빼놓을 수 없습니다. 일반적인 리튬 그리스보다는 고하중과 충격에 강한 <strong>몰리브덴 계열 그리스</strong>를 사용하는 것이 베어링 수명을 연장하는 비결입니다. 특히 식품 공장이나 반도체 팹과 같이 청정도가 요구되는 환경에서는 비산 방지형 씰이 적용된 조인트를 선정하는 섬세함이 필요합니다. </p>
<div style="border-left: 5px solid #f59e0b; background-color: #fffbeb; padding: 15px; margin: 30px 0; border-radius: 10px; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);">
<div style="display: flex; align-items: center; margin-bottom: 12px;"> <span style="font-size: 30px; margin-right: 15px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="font-weight: bold; color: #92400e; font-size: 1.2em;">현장 전문가의 팁</span> </div>
<div style="color: #444; line-height: 1.8; font-size: 1.05em;"> 조인트의 수명을 예측할 때 <b>&#8216;L10 수명 계산&#8217;</b> 방식을 적용해 보세요. 각도가 10도에서 20도로 두 배 증가하면, 베어링의 기대 수명은 단순히 절반이 되는 것이 아니라 1/4 이하로 급감한다는 사실을 명심해야 합니다. </div>
</div>
<p> 결론적으로, 유니버설 조인트는 기계 시스템에 유연성을 부여하는 훌륭한 도구이지만, 그 뒤에는 비등속성이라는 물리학적 대가가 따릅니다. 설비의 안정성은 화려한 스펙이 아니라 기본 원칙을 얼마나 철저히 지키느냐에 달려 있습니다. 조립 도면에서 샤프트가 꺾여 있다면 가장 먼저 <strong>요크의 위상</strong>부터 확인하십시오. 그것이 고가의 모터와 정밀 베어링을 지키는 가장 확실한 방법입니다. </p>
<h2 style="font-size: 1.5em; font-weight: bold; border-bottom: 2px solid #eee; padding-bottom: 10px;">연관 글</h2>
<p><a href="https://myengnote.com/damage-to-hex-bolts-from-pipe-wrench-use/" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"> <span style="display: table-cell; vertical-align: middle;"> <span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="display: block; overflow: hidden;"> <span style="display: block; font-size: 0.9em; color: #6b7280; margin-bottom: 4px;">함께 보면 좋은 글</span> <span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">육각 볼트의 파이프 렌치 사용 시 발생하는 손상</span> </span> </span> <span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #3b82f6; font-size: 24px; font-weight: bold;">→</span><br />
</a><a href="https://myengnote.com/worm-gear-reduction-principles-and-self-locking/" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"> <span style="display: table-cell; vertical-align: middle;"> <span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="display: block; overflow: hidden;"> <span style="display: block; font-size: 0.9em; color: #6b7280; margin-bottom: 4px;">함께 보면 좋은 글</span> <span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">웜 기어 감속 원리와 역전 방지 기능</span> </span> </span> <span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #3b82f6; font-size: 24px; font-weight: bold;">→</span><br />
</a></p>
<hr style="border: 0; border-top: 1px solid #eee; margin: 40px 0 20px 0;">
<p style="text-align: center; font-size: 0.85em; color: #888; margin-bottom: 20px;">
    본 콘텐츠는 저작권법의 보호를 받으며, 무단 전재 및 재배포를 금지합니다.<br />
    Copyright 2026. 동동 All rights reserved.
</p>
<p><!-- Protection Scripts --></p>
<div id="protection-script" style="display:none;">
<script>
document.addEventListener('contextmenu', function(e) {
    e.preventDefault();
    alert('이 콘텐츠는 저작권법의 보호를 받습니다. 무단 복제 및 우클릭을 금지합니다.');
});
document.addEventListener('keydown', function(e) {
    if (e.ctrlKey && (e.key === 'c' || e.key === 'u' || e.key === 'a')) {
        e.preventDefault();
        alert('무단 복제를 금지합니다.');
    }
});
</script></p>
<style>
.entry-content {
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
</style>
</div>
<p><!-- START_SIMULATOR_LINK_CARD_reynolds_number --><a href="https://myengnote.com/reynolds-number-calculator-simulator/" target="_blank" rel="noopener noreferrer" class="eng-simulator-card" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"><span style="display: table-cell; vertical-align: middle;"><span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ee.png" alt="🧮" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span style="display: block; overflow: hidden;"><span style="display: block; font-size: 0.9em; color: #10b981; font-weight: bold; margin-bottom: 4px;">실시간 공학 시뮬레이터 추천</span><span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">레이놀즈 수(Re) 계산기 &#038; 실시간 유동 상태 시뮬레이터</span></span></span><span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #10b981; font-size: 24px; font-weight: bold;">→</span></a><!-- END_SIMULATOR_LINK_CARD_reynolds_number --></p>
]]></content:encoded>
					
					<wfw:commentRss>https://myengnote.com/universal-joint-structure-angle-transmission-characteristics/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>웜 기어 감속 원리와 역전 방지 기능 (Worm Gear Principles and Self-locking)</title>
		<link>https://myengnote.com/worm-gear-reduction-principles-and-self-locking/</link>
					<comments>https://myengnote.com/worm-gear-reduction-principles-and-self-locking/#respond</comments>
		
		<dc:creator><![CDATA[동동]]></dc:creator>
		<pubDate>Tue, 28 Apr 2026 09:03:58 +0000</pubDate>
				<category><![CDATA[동력전달장치/구동부]]></category>
		<category><![CDATA[Gearbox]]></category>
		<category><![CDATA[Reduction Gear]]></category>
		<category><![CDATA[Self-locking]]></category>
		<category><![CDATA[Worm Gear]]></category>
		<category><![CDATA[감속기]]></category>
		<category><![CDATA[동력전달]]></category>
		<category><![CDATA[역전 방지]]></category>
		<category><![CDATA[웜 기어]]></category>
		<guid isPermaLink="false">https://myengnote.com/worm-gear-reduction-principles-and-self-locking/</guid>

					<description><![CDATA[웜 기어의 독특한 구조를 통한 고감속 실현과 역전 방지 기능의 공학적 원리를 상세히 분석합니다. 현장 유지보수 경험을 바탕으로 한 효율적인 기어 박스 관리 노하우를 공유합니다.... <a href="https://myengnote.com/worm-gear-reduction-principles-and-self-locking/" style="text-decoration:none; color:#0073aa; font-weight:bold;">[본문 전체보기 >]</a>]]></description>
										<content:encoded><![CDATA[<p>과거 자동차 부품 조립 라인의 수직 리프트 시스템에서 발생했던 사고가 기억납니다. 당시 해당 설비는 중량물을 상부로 이송하는 역할을 하고 있었는데, 정지 상태에서 전원이 차단되자마자 리프트가 서서히 아래로 흘러내리는 현상이 발생했습니다. 원인은 바로 감속기의 핵심 요소인 <strong>웜 기어(Worm Gear)</strong>의 마모와 설계 시 고려되지 않은 역전 방지 기능의 상실이었습니다. 기계 설계자에게 웜 기어는 좁은 공간에서 높은 감속비를 얻을 수 있는 매력적인 도구이지만, 그 이면에 숨겨진 마찰과 열, 그리고 <strong>자립성(Self-locking)</strong>에 대한 깊은 이해가 없다면 이러한 치명적인 결함에 직면하게 됩니다. 웜 기어의 작동 원리는 일반적인 평기어나 헬리컬 기어와는 근본적으로 다릅니다. 나사 형상을 가진 웜이 회전하면서 휠의 치면을 밀어내는 <strong>미끄럼 접촉</strong> 방식이 핵심입니다. 이는 점접촉이나 선접촉을 통한 구름 마찰이 주를 이루는 일반 기어와 달리, 면접촉에 가까운 미끄럼 마찰이 발생함을 의미합니다. 이 과정에서 발생하는 강력한 토크 변환 능력은 1단 감속만으로도 1/10에서 1/100 이상의 높은 감속비를 가능하게 합니다. 하지만 이 미끄럼 운동은 필연적으로 엄청난 마찰열을 동반하며, 이를 해결하기 위해 웜은 강철로, 웜 휠은 청동 합금으로 제작하는 것이 일반적인 공학적 관례입니다. </p>
<div style="border-left: 5px solid #3b82f6; background-color: #eff6ff; padding: 15px; margin: 30px 0; border-radius: 10px; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);">
<div style="display: flex; align-items: center; margin-bottom: 12px;"><span style="font-size: 30px; margin-right: 15px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4d8.png" alt="📘" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span style="font-weight: bold; color: #1e40af; font-size: 1.2em;">핵심 요약</span></div>
<div style="color: #444; line-height: 1.8; font-size: 1.05em;">웜 기어는 웜(나사)과 웜 휠(기어)의 미끄럼 접촉을 통해 동력을 전달하며, 리드각이 마찰각보다 작을 때 출력축에서 입력축으로 동력이 전달되지 않는 역전 방지 특성을 가집니다. 이는 공간 효율성과 안전성을 동시에 확보해야 하는 승강 장치 등에 필수적입니다.</div>
</p>
</div>
<h2>실무 필드 로그 및 분석 (Field Log &#038; Analysis)</h2>
<p>최근 한 반도체 장비 제조 시설의 물류 컨베이어 라인에서 웜 감속기의 비정상적인 발열과 진동이 보고되었습니다. 현장 진단 결과, 기어 박스 표면 온도가 85°C에 육박했으며, 진동 분석 시 150Hz 대역에서 고주파 진동이 관측되었습니다. 특히 출력축의 축방향 유격이 3.5mm에 달했는데, 이는 내부 베어링의 조기 파손과 웜 치면의 심각한 마모를 시사하는 수치였습니다. 문제의 근본 원인은 <strong>윤활유 선택의 오류</strong>였습니다. 고온 미끄럼 마찰이 잦은 웜 기어 특성상 극압 첨가제가 포함된 고점도 오일을 사용해야 함에도 불구하고, 일반 평기어용 저점도 오일이 주입되어 있었습니다. 이로 인해 유막이 파괴되면서 웜과 휠 사이의 금속 접촉이 가속화되었고, 마찰 계수가 상승하며 역전 방지 기능의 신뢰성까지 위협받는 상황이었습니다. 저희 팀은 즉시 베어링 교체 작업을 진행하고, <strong>KS B 1409(웜 기어의 정밀도)</strong> 규격에 부합하는 정밀도 검증을 실시했습니다. 이번 정비를 통해 예기치 못한 라인 정지 시간을 단축하여 약 5,000만 원 이상의 기회비용을 보전할 수 있었습니다. </p>
<div style="border-left: 5px solid #f59e0b; background-color: #fffbeb; padding: 15px; margin: 30px 0; border-radius: 10px; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);">
<div style="display: flex; align-items: center; margin-bottom: 12px;"><span style="font-size: 30px; margin-right: 15px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span style="font-weight: bold; color: #92400e; font-size: 1.2em;">현장 전문가의 팁</span></div>
<div style="color: #444; line-height: 1.8; font-size: 1.05em;">웜 기어의 역전 방지 기능을 맹신해서는 안 됩니다. 진동이 심한 환경에서는 정지 상태에서도 미세한 미끄러짐이 발생할 수 있으므로, 반드시 전자기 브레이크를 보조 수단으로 함께 구성해야 안전을 보장할 수 있습니다.</div>
</p>
</div>
<h2>역전 방지의 물리적 메커니즘: 리드각과 마찰계수</h2>
<p>답은 웜의 리드각과 마찰 계수의 상관관계에 있습니다. 웜의 나선 경사각인 <strong>리드각</strong>이 기어 치면 사이의 마찰각보다 작을 때, 휠에서 역방향으로 힘을 가해도 웜이 회전하지 못하는 자립성 현상이 발생합니다. 수학적으로 탄젠트 리드각이 마찰 계수보다 작을 때 이 기능이 활성화됩니다. 하지만 주의할 점은 마찰 계수가 정지 마찰과 운동 마찰에서 차이가 난다는 점입니다. 초기 구동 시에는 버티던 기어가 외부의 미세한 진동으로 인해 정지 마찰이 운동 마찰로 전환되는 순간, 갑자기 역전이 일어나는 현상을 종종 목격하게 됩니다. 이러한 물리적 특성 때문에 웜 기어 설계 시에는 <strong>ISO/TS 14521</strong>이나 <strong>DIN 3996</strong> 표준을 참고하여 치면 강도와 열 부하를 정밀하게 계산해야 합니다. 특히 미끄럼 속도가 빠른 환경에서는 유막이 얇아지면서 <strong>갈링(Galling)</strong> 현상이 발생하기 쉽습니다. 갈링은 금속 표면이 마찰열에 의해 순간적으로 융착되었다가 떨어져 나가면서 표면이 거칠어지는 현상으로, 이는 곧 기어의 수명 단축과 직결됩니다. 이를 방지하기 위해 휠 재질로 사용되는 인청동은 철계 재질보다 연성이 높고 자기 윤활성이 있어 웜의 강철 표면을 보호하는 희생양 역할을 수행합니다. </p>
<h2>유지보수의 핵심과 윤활 관리</h2>
<p>웜 기어 박스 내부를 들여다보면 검게 변한 오일을 자주 보게 됩니다. 이는 고온 환경에서 오일이 산화되었거나, 휠에서 떨어져 나온 청동 가루가 섞여 있기 때문입니다. 특히 자립성을 유지해야 하는 승강 장치의 경우, <strong>윤활유의 점도</strong> 변화가 역전 방지 토크에 영향을 줄 수 있음을 간과해서는 안 됩니다. 너무 매끄러운 고급 합성유가 오히려 마찰력을 과도하게 낮추어 의도치 않은 역전 현상을 유발할 수도 있기 때문입니다. </p>
<div style="border-left: 5px solid #ef4444; background-color: #fef2f2; padding: 15px; margin: 30px 0; border-radius: 10px; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);">
<div style="display: flex; align-items: center; margin-bottom: 12px;"><span style="font-size: 30px; margin-right: 15px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span style="font-weight: bold; color: #991b1b; font-size: 1.2em;">주의사항</span></div>
<div style="color: #444; line-height: 1.8; font-size: 1.05em;">웜 기어는 다른 기어에 비해 효율이 낮아(약 50~90%) 입력 에너지의 상당 부분이 열로 전환됩니다. 냉각 팬이 없거나 방열 핀이 오염된 상태로 운전하면 내부 씰이 경화되어 누유가 발생하고, 이는 기어 소손의 주범이 됩니다.</div>
</p>
</div>
<p> 초보 엔지니어들이 흔히 하는 실수 중 하나는 <strong>백래시(Backlash)</strong>를 줄이기 위해 웜과 휠의 중심 거리를 임의로 조정하는 것입니다. 웜 기어는 가공 시의 정밀한 중심 거리가 유지될 때 가장 이상적인 치면 접촉이 이루어집니다. 이를 강제로 좁히면 미끄럼 마찰이 급증하여 급격한 온도 상승과 함께 치면이 타버리는 결과를 초래합니다. 차라리 정밀도가 높은 등급의 기어를 선정하거나, 백래시 조절이 가능한 특수 웜 기어 유닛을 사용하는 것이 현명한 선택입니다. 결론적으로, 웜 기어는 그 독특한 감속 원리와 역전 방지 기능 덕분에 산업 현장에서 대체 불가능한 위치를 차지하고 있습니다. 하지만 효율이 낮고 열이 많이 발생한다는 단점을 공학적 설계와 철저한 관리로 보완해야만 그 진가를 발휘할 수 있습니다. 설계 시 실제 현장의 부하 변동과 진동 환경을 고려하여 <strong>안전 계수</strong>를 충분히 확보하는 것이 중요합니다. 기계는 정직합니다. 우리가 그 물리적 한계를 이해하고 존중할 때, 기계 또한 멈추지 않는 신뢰성으로 보답할 것입니다. <a href="https://myengnote.com/mechanical-clutch-brake-transmission-control-mechanisms/" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"><span style="display: table-cell; vertical-align: middle;"><span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span style="display: block; overflow: hidden;"><span style="display: block; font-size: 0.9em; color: #6b7280; margin-bottom: 4px;">함께 보면 좋은 글</span><span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">기계식 클러치와 브레이크의 동력 전달 메커니즘</span></span></span><span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #3b82f6; font-size: 24px; font-weight: bold;">→</span></a><a href="https://myengnote.com/industrial-chain-oiler-working-principles-necessity/" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"><span style="display: table-cell; vertical-align: middle;"><span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span style="display: block; overflow: hidden;"><span style="display: block; font-size: 0.9em; color: #6b7280; margin-bottom: 4px;">함께 보면 좋은 글</span><span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">산업용 체인 자동 급유기의 방식과 필요성</span></span></span><span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #3b82f6; font-size: 24px; font-weight: bold;">→</span></a> </p>
<h2>0. 연관글</h2>
<p><!-- START_SIMULATOR_LINK_CARD_friction_force --><a href="https://myengnote.com/friction-force-inclined-plane-calculator-simulator/" target="_blank" rel="noopener noreferrer" class="eng-simulator-card" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"><span style="display: table-cell; vertical-align: middle;"><span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ee.png" alt="🧮" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span style="display: block; overflow: hidden;"><span style="display: block; font-size: 0.9em; color: #10b981; font-weight: bold; margin-bottom: 4px;">실시간 공학 시뮬레이터 추천</span><span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">마찰력 및 빗면 운동 계산기 &#038; 실시간 2D 궤적 시뮬레이터</span></span></span><span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #10b981; font-size: 24px; font-weight: bold;">→</span></a><!-- END_SIMULATOR_LINK_CARD_friction_force --><a href="https://myengnote.com/spline-shaft-vs-key-high-torque-advantages/" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"><span style="display: table-cell; vertical-align: middle;"><span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span style="display: block; overflow: hidden;"><span style="display: block; font-size: 0.9em; color: #6b7280; margin-bottom: 4px;">함께 보면 좋은 글</span><span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">고하중 회전체에 스플라인 축을 사용하는 이유</span></span></span><span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #3b82f6; font-size: 24px; font-weight: bold;">→</span></a><a href="https://myengnote.com/bearing-maintenance-air-gun-damage-risks/" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"><span style="display: table-cell; vertical-align: middle;"><span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span style="display: block; overflow: hidden;"><span style="display: block; font-size: 0.9em; color: #6b7280; margin-bottom: 4px;">함께 보면 좋은 글</span><span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">베어링 에어 건 청소의 위험성</span></span></span><span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #3b82f6; font-size: 24px; font-weight: bold;">→</span></a></p>
<hr style="border: 0; border-top: 1px solid #eee; margin: 40px 0 20px 0;">
<p style="text-align: center; font-size: 0.85em; color: #888; margin-bottom: 20px;">
    본 콘텐츠는 저작권법의 보호를 받으며, 무단 전재 및 재배포를 금지합니다.<br />
    Copyright 2026. 동동 All rights reserved.
</p>
<p><!-- Protection Scripts --></p>
<div id="protection-script" style="display:none;">
<script>
document.addEventListener('contextmenu', function(e) {
    e.preventDefault();
    alert('이 콘텐츠는 저작권법의 보호를 받습니다. 무단 복제 및 우클릭을 금지합니다.');
});
document.addEventListener('keydown', function(e) {
    if (e.ctrlKey && (e.key === 'c' || e.key === 'u' || e.key === 'a')) {
        e.preventDefault();
        alert('무단 복제를 금지합니다.');
    }
});
</script></p>
<style>
.entry-content {
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
</style>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://myengnote.com/worm-gear-reduction-principles-and-self-locking/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>기계식 클러치와 브레이크의 동력 전달 메커니즘 (Mechanical Clutch and Brake Mechanisms)</title>
		<link>https://myengnote.com/mechanical-clutch-brake-transmission-control-mechanisms/</link>
					<comments>https://myengnote.com/mechanical-clutch-brake-transmission-control-mechanisms/#respond</comments>
		
		<dc:creator><![CDATA[동동]]></dc:creator>
		<pubDate>Sat, 18 Apr 2026 22:23:50 +0000</pubDate>
				<category><![CDATA[동력전달장치/구동부]]></category>
		<category><![CDATA[Brake]]></category>
		<category><![CDATA[Clutch]]></category>
		<category><![CDATA[Mechanical Design]]></category>
		<category><![CDATA[Power Transmission]]></category>
		<category><![CDATA[기계설계]]></category>
		<category><![CDATA[동력전달]]></category>
		<category><![CDATA[마찰차]]></category>
		<category><![CDATA[브레이크]]></category>
		<category><![CDATA[클러치]]></category>
		<guid isPermaLink="false">https://myengnote.com/mechanical-clutch-brake-transmission-control-mechanisms/</guid>

					<description><![CDATA[기계식 클러치와 브레이크의 동력 전달 원리와 마찰 제어 메커니즘을 심층 분석합니다. 현장 사례를 바탕으로 설비 가동률을 극대화하는 유지보수 전략과 설계 핵심 요소를 공유합니다.... <a href="https://myengnote.com/mechanical-clutch-brake-transmission-control-mechanisms/" style="text-decoration:none; color:#0073aa; font-weight:bold;">[본문 전체보기 >]</a>]]></description>
										<content:encoded><![CDATA[<p>최근 필드에서 고속 정밀 간헐 구동 장치를 점검하며 기존의 전자기식 클러치와 유압식 클러치의 성능 데이터를 비교 분석해 보았습니다. 데이터가 시사하는 바는 명확했습니다. 단순한 동력의 연결과 차단을 넘어, 고빈도 작동 시 발생하는 열 부하와 마찰 계수의 변화를 얼마나 정밀하게 제어하느냐가 설비의 전체 사이클 타임과 직결된다는 사실입니다. 기계식 클러치와 브레이크는 기계 시스템에서 에너지를 전달하거나 흡수하는 가장 원초적이면서도 정교한 요소입니다. 이들의 상호작용을 이해하지 못하면 구동부의 진동이나 소음, 나아가 조기 파손 문제를 근본적으로 해결할 수 없습니다. </p>
<h2>실무 필드 로그 및 분석 (Field Log &#038; Analysis)</h2>
<p>얼마 전 자동차 부품 조립 라인에 설치된 대형 프레스 설비의 구동부에서 이상 진동과 응답 지연 현상이 보고되었습니다. 해당 설비는 전자기 클러치-브레이크 결합 유닛을 사용 중이었는데, 현장에서 확인한 결과 마찰판의 표면 온도가 무려 95°C까지 치솟아 있었습니다. 정밀 측정을 위해 다이얼 게이지를 설치하고 샤프트의 축 방향 유격을 확인해 보니 약 2.5mm의 유격이 발견되었습니다. 이는 <strong>KS B 6226(기계식 프레스용 클러치 및 브레이크)</strong> 규격에서 권장하는 허용치를 초과한 상태였습니다.</p>
<p>열화상 카메라 분석 결과, 마찰면의 불균일한 접촉으로 인해 특정 부위에 열점이 형성되었고, 이로 인해 마찰 계수가 급격히 저하되는 <strong>&#8216;페이드(Fade) 현상&#8217;</strong>이 발생하고 있었습니다. 근본 원인은 설비 후단 구동 장치의 관성 모멘트가 설계 대비 15% 증가했음에도 제동 토크 설정값은 초기 상태를 유지하여 슬립 시간이 길어진 것이었습니다. 이를 방지하기 위해 클러치 디스크의 간극을 0.5mm로 재조정하고 냉각 팬의 풍량을 보강함으로써, 연간 유지보수 예산의 약 8%를 절감하는 경제적 효과를 거둘 수 있었습니다.</p>
<div style="border-left: 5px solid #3b82f6; background-color: #eff6ff; padding: 15px; margin: 30px 0; border-radius: 10px; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);">
<div style="display: flex; align-items: center; margin-bottom: 12px;"> <span style="font-size: 30px; margin-right: 15px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4d8.png" alt="📘" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="font-weight: bold; color: #1e40af; font-size: 1.2em;">핵심 요약</span> </div>
<div style="color: #444; line-height: 1.8; font-size: 1.05em;"> 기계식 클러치는 마찰을 이용해 동력을 단속하며, 브레이크는 운동 에너지를 열 에너지로 변환하여 정지시킵니다. 두 장치 모두 <strong>마찰 계수(μ), 접촉 압력(P), 유효 반경(R)</strong>의 곱에 의해 토크 용량이 결정됩니다. </div>
</div>
<h2>마찰의 물리학과 소재의 선택</h2>
<p>도대체 왜 클러치는 시간이 지날수록 미끄러지는 것일까요? 답은 마찰재의 물리적 특성 변화에 있습니다. 쿨롱의 마찰 법칙에 따르면 마찰력은 수직 항력에 비례하지만, 실제 시스템에서는 표면 온도와 미끄럼 속도에 따라 마찰 계수가 유동적으로 변합니다. 세미 메탈릭 계열은 내열성이 좋으나 저온 마찰력이 낮고, 유기계 마찰재는 초기 접동성은 우수하지만 고온에서 수지가 탄화되면서 마찰력이 급감합니다.</p>
<p>설계 단계에서 고하중이 전달되는 축이라면 일반적인 키 홈 방식보다는 <strong>스플라인(Spline) 가공</strong>을 고려하는 것이 현명합니다. 스플라인 축은 여러 개의 이가 맞물려 토크를 분산시키기 때문에 클러치 하우징과의 결합력을 높이고 축 방향 이동을 원활하게 돕습니다. 만약 시스템에서 발생하는 충격이 크다면, 구동 계통에 쇼크 업소버를 적재적소에 배치하여 급제동 시 발생하는 잔류 진동을 억제해야 합니다.</p>
<div style="border-left: 5px solid #f59e0b; background-color: #fffbeb; padding: 15px; margin: 30px 0; border-radius: 10px; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);">
<div style="display: flex; align-items: center; margin-bottom: 12px;"> <span style="font-size: 30px; margin-right: 15px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="font-weight: bold; color: #92400e; font-size: 1.2em;">현장 전문가의 팁</span> </div>
<div style="color: #444; line-height: 1.8; font-size: 1.05em;"> 마찰면 세척 시 절대로 광물유 기반 세척제를 사용하지 마십시오. 잔류 기름 성분이 마찰재 기공에 스며들면 마찰 계수가 복구 불가능해집니다. 반드시 <strong>전용 브레이크 클리너</strong>를 사용하십시오. </div>
</div>
<h2>제어 메커니즘의 정밀도와 응답성</h2>
<p>최근 트렌드는 전자기식 혹은 공압식 액추에이터를 통한 정밀 제어입니다. 전자기 클러치는 응답 속도가 매우 빠르지만, 잔류 자성으로 인한 분리 지연이 발생할 수 있으므로 에어 갭을 주기적으로 점검해야 합니다. 현장에서 자주 발생하는 실수 중 하나는 클러치의 <strong>&#8216;오버랩(Overlap)&#8217;</strong> 설정 오류입니다. 클러치가 완전히 떨어지기 전에 브레이크가 걸리면 구동 모터에 과부하를 주고 마찰판을 순식간에 소손시킵니다.</p>
<p>또한 건식과 습식의 차이를 명확히 인지해야 합니다. 습식은 오일 냉각 덕분에 수명이 길지만 드래그 토크가 발생하며, 건식은 구조가 간단하지만 방열에 취약합니다. 설치 환경이 분진이 많거나 고온인 경우에는 밀폐형 습식 구조를 선택하는 것이 장기적인 유지보수 비용 측면에서 유리할 수 있습니다.</p>
<div style="border-left: 5px solid #ef4444; background-color: #fef2f2; padding: 15px; margin: 30px 0; border-radius: 10px; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);">
<div style="display: flex; align-items: center; margin-bottom: 12px;"> <span style="font-size: 30px; margin-right: 15px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="font-weight: bold; color: #991b1b; font-size: 1.2em;">주의사항</span> </div>
<div style="color: #444; line-height: 1.8; font-size: 1.05em;"> 브레이크 패드 교체 시 반드시 <strong>세트로 교체</strong>하십시오. 불균형한 제동력은 샤프트의 휨 현상을 유발하거나 베어링의 조기 파손을 불러올 수 있습니다. </div>
</div>
<h2>엔지니어를 위한 최종 제언</h2>
<p>기계식 클러치와 브레이크는 단순히 동력을 붙였다 떼는 부품이 아니라 에너지를 다스리는 통로입니다. 새로운 시스템을 설계한다면 부품 단품의 성능보다 시스템 전체의 <strong>&#8216;열 평형(Thermal Equilibrium)&#8217;</strong>에 집중하십시오. 마찰재의 한계 온도와 냉각 용량 사이의 균형이 무너지면 어떤 고가의 부품도 제 성능을 낼 수 없습니다.</p>
<p>기계는 파손되기 전 항상 신호를 보냅니다. 미세한 금속성 소음이나 탄 냄새는 시스템이 한계에 도달했다는 경고입니다. 이러한 신호를 읽어내고 물리적 원인을 파악하는 능력이 베테랑 엔지니어로 가는 길입니다. 정기적인 간극 측정과 적절한 윤활 관리가 수반될 때, 이 장치들은 가장 강력하고 신뢰성 있는 제어 수단이 되어줄 것입니다.</p>
</p>
<h2>연관 콘텐츠</h2>
<p><a href="https://myengnote.com/spline-shaft-vs-key-high-torque-advantages/" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"> <span style="display: table-cell; vertical-align: middle;"> <span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="display: block; overflow: hidden;"> <span style="display: block; font-size: 0.9em; color: #6b7280; margin-bottom: 4px;">함께 보면 좋은 글</span> <span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">고하중 회전체에 스플라인 축을 사용하는 이유</span> </span> </span> <span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #3b82f6; font-size: 24px; font-weight: bold;">→</span><br />
</a><a href="https://myengnote.com/industrial-shock-absorber-working-principles-features/" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"> <span style="display: table-cell; vertical-align: middle;"> <span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="display: block; overflow: hidden;"> <span style="display: block; font-size: 0.9em; color: #6b7280; margin-bottom: 4px;">함께 보면 좋은 글</span> <span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">산업용 쇼크 업소버의 작동 원리와 특징</span> </span> </span> <span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #3b82f6; font-size: 24px; font-weight: bold;">→</span><br />
</a><a href="https://myengnote.com/basics-solenoid-valve-selection-nc-no/" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"> <span style="display: table-cell; vertical-align: middle;"> <span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> <span style="display: block; overflow: hidden;"> <span style="display: block; font-size: 0.9em; color: #6b7280; margin-bottom: 4px;">함께 보면 좋은 글</span> <span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">솔레노이드 밸브 선정의 기초: NC와 NO</span> </span> </span> <span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #3b82f6; font-size: 24px; font-weight: bold;">→</span><br />
</a></p>
<hr style="border: 0; border-top: 1px solid #eee; margin: 40px 0 20px 0;">
<p style="text-align: center; font-size: 0.85em; color: #888; margin-bottom: 20px;">
    본 콘텐츠는 저작권법의 보호를 받으며, 무단 전재 및 재배포를 금지합니다.<br />
    Copyright 2026. 동동 All rights reserved.
</p>
<p><!-- Protection Scripts --></p>
<div id="protection-script" style="display:none;">
<script>
document.addEventListener('contextmenu', function(e) {
    e.preventDefault();
    alert('이 콘텐츠는 저작권법의 보호를 받습니다. 무단 복제 및 우클릭을 금지합니다.');
});
document.addEventListener('keydown', function(e) {
    if (e.ctrlKey && (e.key === 'c' || e.key === 'u' || e.key === 'a')) {
        e.preventDefault();
        alert('무단 복제를 금지합니다.');
    }
});
</script></p>
<style>
.entry-content {
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
</style>
</div>
<p><!-- START_SIMULATOR_LINK_CARD_friction_force --><a href="https://myengnote.com/friction-force-inclined-plane-calculator-simulator/" target="_blank" rel="noopener noreferrer" class="eng-simulator-card" style="text-decoration: none; background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 15px; margin: 10px 0; transition: box-shadow 0.2s; display: table; width: 100%; box-sizing: border-box;"><span style="display: table-cell; vertical-align: middle;"><span style="font-size: 30px; margin-right: 15px; float: left;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ee.png" alt="🧮" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><span style="display: block; overflow: hidden;"><span style="display: block; font-size: 0.9em; color: #10b981; font-weight: bold; margin-bottom: 4px;">실시간 공학 시뮬레이터 추천</span><span style="display: block; font-size: 1.1em; font-weight: bold; color: #111827;">마찰력 및 빗면 운동 계산기 &#038; 실시간 2D 궤적 시뮬레이터</span></span></span><span style="display: table-cell; vertical-align: middle; width: 40px; text-align: right; color: #10b981; font-size: 24px; font-weight: bold;">→</span></a><!-- END_SIMULATOR_LINK_CARD_friction_force --></p>
]]></content:encoded>
					
					<wfw:commentRss>https://myengnote.com/mechanical-clutch-brake-transmission-control-mechanisms/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
