<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>_roadhobo.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Sat, 03 Jan 2026 09:21:47 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>_roadhobo.log</title>
            <url>https://velog.velcdn.com/images/_roadhobo/profile/06e314f5-88c4-46e3-b890-1e1c0894ed7d/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. _roadhobo.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/_roadhobo" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[로봇활용 첨단 생산시스템 전문가 양성 교육기 (메카트로닉스) - 30 (마무리)]]></title>
            <link>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-30-%EB%A7%88%EB%AC%B4%EB%A6%AC</link>
            <guid>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-30-%EB%A7%88%EB%AC%B4%EB%A6%AC</guid>
            <pubDate>Sat, 03 Jan 2026 09:21:47 GMT</pubDate>
            <description><![CDATA[<p>프로젝트 끝났고, 수료도 했다.
12월 23일에 수료했는데 한참 지나서 블로그를 쓰는 이유는
내가 게을러서다. 너무 놀고 싶었다.</p>
<p>그래서 마무리할 겸해서 사용한 기술 스택을 가볍게 적고 끝내려고 한다.</p>
<hr>
<h1 id="0-notion">0. Notion</h1>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/083311a8-8d37-47e9-9d2a-4beeb87f0e07/image.png" alt=""></p>
<p><a href="https://dented-polyanthus-255.notion.site/2c7432d8688b811aa5a0ced945f63e47?pvs=74">https://dented-polyanthus-255.notion.site/2c7432d8688b811aa5a0ced945f63e47?pvs=74</a></p>
<p>정리가 좀 덜 됐지만 가능한 가독성 있게 구성했다.</p>
<h1 id="1-digital-twin">1. Digital Twin</h1>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/d53b8c9e-06a5-465c-abe8-da3478fd5a6e/image.gif" alt=""></p>
<p>다른 조의 프로그래밍 담당분과 개발한 Unity 기반 Digital Twin이다.
위 영상은 기존의 정해둔 작동 순서로 제어하는 <strong>수동 제어</strong> 작동 화면이다.</p>
<p>실제 작동 시에는 <strong>센서나 로봇 행동 신호</strong>에 맞춰 작동하는 모습을 볼 수 있다.</p>
<h1 id="2-modbus">2. Modbus</h1>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/614c490f-d28a-4d2a-90bd-8c430afea21a/image.png" alt=""></p>
<p>구조가 단순하고 범용성이 좋아 산업 현장에 자주 사용되는 Master/Slave 기반의 통신 프로토콜이다. TCP, RS-485 등을 사용해 통신을 주고 받을 수 있다.</p>
<p> 이전 기수에서는 Unity를 사용해서 작업을 했기에 C# 기반의 <strong>NModbus</strong>라는 라이브러리를 활용한 것으로 보인다.</p>
<p> 라이브러리의 작동 원리는 연결된 네트워크나 시리얼 포트에 <strong>Modbus라는 요청-응답 규약(프로토콜)</strong>을 덧씌워서, <strong>Master가 지정된 시간마다 Slave에게 정보를 보내는 방식</strong>이다. <del>원리가 정말 간단하다</del></p>
<h2 id="장점">장점</h2>
<table>
<thead>
<tr>
<th>구분</th>
<th>내용</th>
</tr>
</thead>
<tbody><tr>
<td>구조 단순</td>
<td>프로토콜 구조가 단순해 구현·디버깅이 쉽다</td>
</tr>
<tr>
<td>범용성</td>
<td>제조사 종속성이 낮아 다양한 PLC·장비 간 호환 가능</td>
</tr>
<tr>
<td>구현 비용 낮음</td>
<td>라이선스 비용 없음, 오픈 표준</td>
</tr>
<tr>
<td>안정성</td>
<td>산업 현장에서 장기간 검증됨</td>
</tr>
<tr>
<td>다양한 전송 방식</td>
<td>RS-485(Modbus RTU), TCP/IP(Modbus TCP) 모두 지원</td>
</tr>
</tbody></table>
<hr>
<h2 id="단점">단점</h2>
<table>
<thead>
<tr>
<th>구분</th>
<th>내용</th>
</tr>
</thead>
<tbody><tr>
<td>보안 취약</td>
<td>인증·암호화 개념 없음 (TCP에서도 동일)</td>
</tr>
<tr>
<td>실시간성 한계</td>
<td>폴링 방식 → 지연 발생 가능</td>
</tr>
<tr>
<td>확장성 부족</td>
<td>대규모 시스템에서 성능 저하</td>
</tr>
<tr>
<td>데이터 표현 제한</td>
<td>단순 레지스터 기반, 복잡한 구조 표현 불리</td>
</tr>
<tr>
<td>마스터–슬레이브 구조</td>
<td>슬레이브가 능동적으로 통신 불가</td>
</tr>
<tr>
<td>충돌 관리 필요</td>
<td>RTU에서 배선·종단저항·노이즈 관리 중요</td>
</tr>
</tbody></table>
<h2 id="0-데이터-단위">0. 데이터 단위</h2>
<h3 id="0-1-modbus-데이터-단위-정리-표">0-1. Modbus 데이터 단위 정리 표</h3>
<table>
<thead>
<tr>
<th>구분</th>
<th>메모리 영역</th>
<th>논리 주소</th>
<th>데이터 단위</th>
<th>크기</th>
<th>접근</th>
<th>관련 FC</th>
<th>용도</th>
</tr>
</thead>
<tbody><tr>
<td><strong>Coil</strong></td>
<td>Coil</td>
<td>0xxxx</td>
<td>Boolean</td>
<td>1 bit</td>
<td>R/W</td>
<td>01, 05, 15</td>
<td>출력 ON/OFF</td>
</tr>
<tr>
<td><strong>Discrete Input</strong></td>
<td>Discrete Input</td>
<td>1xxxx</td>
<td>Boolean</td>
<td>1 bit</td>
<td>Read Only</td>
<td>02</td>
<td>입력 센서</td>
</tr>
<tr>
<td><strong>Input Register</strong></td>
<td>Input Register</td>
<td>3xxxx</td>
<td>Register</td>
<td>16 bit (ushort)</td>
<td>Read Only</td>
<td>04</td>
<td>센서 값</td>
</tr>
<tr>
<td><strong>Holding Register</strong></td>
<td>Holding Register</td>
<td>4xxxx</td>
<td>Register</td>
<td>16 bit (ushort)</td>
<td>R/W</td>
<td>03, 06, 16</td>
<td>설정·제어값</td>
</tr>
</tbody></table>
<h3 id="0-2-실무에서의-선택-기준-span-stylecolorred중요span">0-2. 실무에서의 선택 기준 <span style="color:red">(중요)</span></h3>
<table>
<thead>
<tr>
<th>상황</th>
<th>사용 영역</th>
</tr>
</thead>
<tbody><tr>
<td>ON/OFF 제어</td>
<td>Coil</td>
</tr>
<tr>
<td>센서 디지털 입력</td>
<td>Discrete Input</td>
</tr>
<tr>
<td>아날로그 센서</td>
<td>Input Register</td>
</tr>
<tr>
<td>제어 파라미터</td>
<td>Holding Register</td>
</tr>
</tbody></table>
<h2 id="1-마스터-예제">1. 마스터 예제</h2>
<pre><code class="language-cs">using System;
using System.Net.Sockets;
using System.Threading;
using NModbus;

namespace MasterApp
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 대상 슬레이브
            string ip = &quot;127.0.0.1&quot;;
            int port = 1502;
            byte unitId = 1;

            var factory = new ModbusFactory();

            // 기본적으로 1:1 통신 (비동기/멀티쓰레드 방식으로 1:N 가능)
            using var client = new TcpClient();
            client.Connect(ip, port);

            // Master 생성 및 타임아웃 지정
            var master = factory.CreateMaster(client);
            master.Transport.ReadTimeout = 1000;
            master.Transport.WriteTimeout = 1000;

            // 예제: 1초마다 읽고, 가끔 쓰기
            // 작동 원리 : 연결은 TCP가 하고 있고, Master가 1초마다 Slave에게 호출한다.
            int tick = 0;
            while (true)
            {
                tick++;

                // 1) Coil 읽기 (FC01) : 00001~00008 (addr 0, count 8)
                bool[] coils = master.ReadCoils(unitId, 0, 8);

                // 2) Discrete Input 읽기 (FC02) : 10001~10008
                bool[] inputs = master.ReadInputs(unitId, 0, 8);

                // 3) Input Register 읽기 (FC04) : 30001~30004
                ushort[] inputRegs = master.ReadInputRegisters(unitId, 0, 4);

                // 4) Holding Register 읽기 (FC03) : 40001~40004
                ushort[] holdingRegs = master.ReadHoldingRegisters(unitId, 0, 4);

                // 5) 주기적으로 Write 테스트
                // - Coil 00001 토글 (FC05)
                // - Holding Register 40001 증가 (FC06)
                if (tick % 3 == 0)
                {
                    bool newCoil0 = !coils[0];
                    master.WriteSingleCoil(unitId, 0, newCoil0);

                    ushort newHr0 = (ushort)(holdingRegs[0] + 1);
                    master.WriteSingleRegister(unitId, 0, newHr0);

                    Console.WriteLine($&quot;[MASTER] WRITE: C00001={newCoil0}, HR40001={newHr0}&quot;);
                }

                Thread.Sleep(1000);
            }
        }
    }
}
</code></pre>
<h2 id="2-슬레이브-예제">2. 슬레이브 예제</h2>
<pre><code class="language-cs">using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using NModbus;

namespace SlaveApp
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 설정
            byte unitId = 1;
            int port = 1502; // 실장비는 보통 502 (포트 502는 관리자 권한이 필요한 경우가 많다)
            var ip = IPAddress.Any;

            // Modbus 데이터 저장소(메모리 맵)
            // - Coils:             0xxxx (bool)
            // - Discrete Inputs:   1xxxx (bool)
            // - Input Registers:   3xxxx (ushort)
            // - Holding Registers: 4xxxx (ushort)
            var dataStore = new DefaultSlaveDataStore(unitId);

            // TCP Listener 시작
            var listener = new TcpListener(ip, port);
            listener.Start();

            // Modbus 슬레이브 네트워크 구성
            var factory = new ModbusFactory();
            var slave = factory.CreateSlave(unitId, dataStore);
            var network = factory.CreateSlaveNetwork(listener);
            network.AddSlave(slave);

            // 백그라운드에서 Accept/처리 시작
            // (라이브러리 내부에서 연결 수락 및 요청 처리)
            // CancellationTokenSource: 쓰레드 안전 종료 버튼
            var cts = new CancellationTokenSource();
            var serverThread = new Thread(() =&gt;
            {
                try
                {
                    network.ListenAsync(cts.Token).GetAwaiter().GetResult();
                }
                catch (OperationCanceledException) { }
                catch (Exception ex)
                {
                    Console.WriteLine($&quot;[SLAVE] Listen error: {ex}&quot;);
                }
            })
            {
                IsBackground = true
            };
            serverThread.Start();
            Console.WriteLine(&quot;[SLAVE] Press Ctrl+C to stop.&quot;);

            // 데이터 값을 주기적으로 갱신(센서값처럼)
            // - Input Register(3xxxx): 읽기 전용 영역이지만 &quot;슬레이브 내부&quot;에서는 값을 갱신해줄 수 있음
            // - Holding Register(4xxxx): 마스터가 쓰기도 가능
            var rnd = new Random();

            while (true)
            {
                // 예: Discrete Input 10001 ~ 10008 (index 0~7)
                // 센서 입력이 토글되는 것처럼
                bool di0 = rnd.Next(0, 2) == 0;
                dataStore.SetDiscreteInput(0, di0);

                // 예: Input Register 30001 (index 0)
                // 아날로그 센서 값처럼 0~1000
                ushort sensor = (ushort)rnd.Next(0, 1001);
                dataStore.SetInputRegister(0, sensor);

                // 예: Coil 00001 (index 0) 상태 출력
                bool coil0 = dataStore.GetCoil(0);

                // 예: Holding Register 40001 (index 0) 상태 출력
                ushort hr0 = dataStore.GetHoldingRegister(0);

                Thread.Sleep(1000);
            }
        }
    }

    /// &lt;summary&gt;
    /// NModbus의 DataStore를 감싸서 &quot;주소 0부터&quot; 접근을 편하게 만든 래퍼.
    /// &lt;/summary&gt;
    internal sealed class DefaultSlaveDataStore : ISlaveDataStore
    {
        public byte UnitId { get; }
        public NModbus.Data.DataStore DataStore { get; }

        public DefaultSlaveDataStore(byte unitId)
        {
            UnitId = unitId;
            DataStore = NModbus.Data.DataStoreFactory.CreateDefaultDataStore();
        }

        // ISlaveDataStore 구현: NModbus가 내부적으로 접근하는 메모리
        public bool[] CoilDiscretes =&gt; DataStore.CoilDiscretes;
        public bool[] InputDiscretes =&gt; DataStore.InputDiscretes;
        public ushort[] HoldingRegisters =&gt; DataStore.HoldingRegisters;
        public ushort[] InputRegisters =&gt; DataStore.InputRegisters;

        // 편의 메서드들(0-based index)
        public void SetCoil(ushort index, bool value) =&gt; DataStore.CoilDiscretes[index + 1] = value;
        public bool GetCoil(ushort index) =&gt; DataStore.CoilDiscretes[index + 1];

        public void SetDiscreteInput(ushort index, bool value) =&gt; DataStore.InputDiscretes[index + 1] = value;
        public bool GetDiscreteInput(ushort index) =&gt; DataStore.InputDiscretes[index + 1];

        public void SetHoldingRegister(ushort index, ushort value) =&gt; DataStore.HoldingRegisters[index + 1] = value;
        public ushort GetHoldingRegister(ushort index) =&gt; DataStore.HoldingRegisters[index + 1];

        public void SetInputRegister(ushort index, ushort value) =&gt; DataStore.InputRegisters[index + 1] = value;
        public ushort GetInputRegister(ushort index) =&gt; DataStore.InputRegisters[index + 1];
    }
}</code></pre>
<h1 id="3-mqtt">3. MQTT</h1>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/308c3f8a-21f2-4113-9eb4-6b3c4e2fd37c/image.png" alt=""></p>
<p><strong>MQTT(Message Queuing Telemetry Transport)</strong>는 <strong>Publish / Subscribe(발행–구독)</strong> 모델을 사용하는 경량 메시징 프로토콜이다.</p>
<p>Modbus와의 대표적인 차이점은 <strong>MQTT는 값이 변할 때만 호출한다는 점</strong>이다. 그렇기 때문에 통신량이 굉장히 적고, 이에 따라 저사양 &amp; 저전력 장치에 굉장히 유리하다는 장점이 있다.</p>
<p>다만 <strong>Broker를 경유하여 전송</strong>해야 한다는 점과 <strong>Polling 주기가 불확실</strong>하다는 점이 데이터 지연 예측을 힘들게 만들기에 <strong>하드 리얼타임(지정시간이 있는 통신)에는 Modbus보다 불리</strong>하다.</p>
<p>MQTT를 사용하기 위해 주로 <strong>Mosquitto라는 C 기반의 Broker를 사용</strong>하는데 일단 Broker의 개념을 알 필요가 있을 거 같다.</p>
<h2 id="broker">Broker</h2>
<p>Broker는 <strong>서버와 클라이언트를 효과적으로 분리/분산</strong>시키기 위해 사용하는 <strong>중개 프로그램 혹은 설계 기법</strong>을 의미한다. <strong>서버에게서 신호를 받아 적절한 클라이언트에 넘겨주는 역할</strong>을 한다.</p>
<p>쉽게 설명하자면 <strong>우체부</strong>가 하는 일과 같다.</p>
<p>Pub/Sub (발행/구독) 패턴과의 차이점이 있는데, <strong>N:N을 사용하는 Pub/Sub</strong>와 달리 <strong>N:1:N</strong>의 형태를 갖는다는 점이다.</p>
<h4 id="글쓰다가-든-의문점">글쓰다가 든 의문점</h4>
<blockquote>
<p>Q ) 근데 MQTT는 <strong>Pub/Sub(발행–구독)</strong> 모델을 사용한다고 하지 않았나? <strong>Broker</strong>는 왜 쓰는 거지?</p>
</blockquote>
<blockquote>
<p>A ) <strong>Peer-to-Peer 방식의 Pub/Sub</strong>가 <strong>순수한 Pub/Sub 패턴</strong>이고, MQTT는 <strong>두 패턴을 섞어서 사용</strong>한다고 한다. <strong>Pub/Sub 패턴의 네트워크 분산성</strong>과 <strong>Broker의 안정성</strong>을 반반 섞은 느낌이다.</p>
</blockquote>
<h2 id="장점-1">장점</h2>
<table>
<thead>
<tr>
<th>항목</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td>이벤트 기반</td>
<td>데이터 변경 시 즉시 Push</td>
</tr>
<tr>
<td>낮은 결합도</td>
<td>송신자·수신자 독립</td>
</tr>
<tr>
<td>확장성 우수</td>
<td>Subscriber 수 증가에 유리</td>
</tr>
<tr>
<td>네트워크 효율</td>
<td>필요할 때만 전송</td>
</tr>
<tr>
<td>경량 프로토콜</td>
<td>저사양 장치에 적합</td>
</tr>
<tr>
<td>NAT/방화벽 친화</td>
<td>TCP 기반</td>
</tr>
<tr>
<td>클라우드 친화</td>
<td>AWS, Azure, GCP 기본 지원</td>
</tr>
</tbody></table>
<hr>
<h2 id="단점-1">단점</h2>
<table>
<thead>
<tr>
<th>항목</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td>Broker 의존</td>
<td>Broker 장애 시 전체 영향</td>
</tr>
<tr>
<td>실시간 결정성 부족</td>
<td>하드 리얼타임 부적합</td>
</tr>
<tr>
<td>메시지 순서 보장 한계</td>
<td>설정에 따라 달라짐</td>
</tr>
<tr>
<td>데이터 구조 표준 없음</td>
<td>Payload는 사용자 정의</td>
</tr>
<tr>
<td>보안 설정 필요</td>
<td>TLS/인증 직접 구성</td>
</tr>
<tr>
<td>산업 제어 직접용 한계</td>
<td>안전·제어 신뢰성 낮음</td>
</tr>
</tbody></table>
<h2 id="1-publisher발행자-전체-코드">1. Publisher(발행자) 전체 코드</h2>
<pre><code class="language-cs">using System;
using System.Text;
using System.Threading.Tasks;
using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Client.Options;
using MQTTnet.Protocol;

class Program
{
    static async Task Main()
    {
        string brokerHost = &quot;localhost&quot;;
        int brokerPort = 1883;

        string clientId = &quot;pub-client-1&quot;;
        string topic = &quot;factory/line1/motor1/status&quot;;

        var factory = new MqttFactory();
        using var client = factory.CreateMqttClient();

        var options = new MqttClientOptionsBuilder()
            .WithClientId(clientId)
            .WithTcpServer(brokerHost, brokerPort)
            .WithCleanSession()
            .Build();

        await client.ConnectAsync(options);
        Console.WriteLine(&quot;[CONNECTED]&quot;);

        int n = 0;
        while (true)
        {
            n++;

            string payload = $&quot;{{\&quot;ts\&quot;:\&quot;{DateTime.UtcNow:o}\&quot;,\&quot;run\&quot;:true,\&quot;rpm\&quot;:{1000 + n}}}&quot;;
            var message = new MqttApplicationMessageBuilder()
                .WithTopic(topic)
                .WithPayload(Encoding.UTF8.GetBytes(payload))
                .WithQualityOfServiceLevel(MqttQualityOfServiceLevel.AtLeastOnce) // QoS 1
                .WithRetainFlag(false) // true면 “마지막 값 유지”
                .Build();

            await client.PublishAsync(message);
            Console.WriteLine($&quot;[PUBLISH] {payload}&quot;);

            await Task.Delay(1000);
        }
    }
}
</code></pre>
<h2 id="2-subscriber구독자-전체-코드">2. Subscriber(구독자) 전체 코드</h2>
<pre><code class="language-cs">using System;
using System.Text;
using System.Threading.Tasks;
using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Client.Options;
using MQTTnet.Protocol;

class Program
{
    static async Task Main()
    {
        string brokerHost = &quot;localhost&quot;;
        int brokerPort = 1883;

        string clientId = &quot;sub-client-1&quot;;
        string topic = &quot;factory/line1/motor1/status&quot;;

        var factory = new MqttFactory();
        using var client = factory.CreateMqttClient();

        client.ApplicationMessageReceivedAsync += e =&gt;
        {
            var payload = e.ApplicationMessage.PayloadSegment.Array is null
                ? &quot;&quot;
                : Encoding.UTF8.GetString(e.ApplicationMessage.PayloadSegment);

            Console.WriteLine($&quot;[RECV] topic={e.ApplicationMessage.Topic}, qos={e.ApplicationMessage.QualityOfServiceLevel}, payload={payload}&quot;);
            return Task.CompletedTask;
        };

        client.DisconnectedAsync += e =&gt;
        {
            Console.WriteLine(&quot;[DISCONNECTED]&quot;);
            return Task.CompletedTask;
        };

        var options = new MqttClientOptionsBuilder()
            .WithClientId(clientId)
            .WithTcpServer(brokerHost, brokerPort)
            .WithCleanSession() // 필요시 false + 세션 유지 옵션 사용
            .Build();

        await client.ConnectAsync(options);
        Console.WriteLine(&quot;[CONNECTED]&quot;);

        var subscribeOptions = factory.CreateSubscribeOptionsBuilder()
            .WithTopicFilter(f =&gt;
                f.WithTopic(topic)
                 .WithQualityOfServiceLevel(MqttQualityOfServiceLevel.AtLeastOnce)) // QoS 1
            .Build();

        await client.SubscribeAsync(subscribeOptions);
        Console.WriteLine($&quot;[SUBSCRIBED] {topic}&quot;);

        Console.WriteLine(&quot;Press Enter to exit...&quot;);
        Console.ReadLine();

        await client.DisconnectAsync();
    }
}</code></pre>
<h2 id="3-실행-순서">3. 실행 순서</h2>
<ol>
<li>브로커 실행<ul>
<li>로컬 설치 후 <code>mosquitto -v</code> (환경에 따라 다름)</li>
</ul>
</li>
<li><code>SubscriberApp</code> 실행</li>
<li><code>PublisherApp</code> 실행</li>
</ol>
<hr>
<p>교육 과정하느라 힘들었다. 이제 게임해야지 ㅎㅎ
다음 글부터는 취업 관련 글 올려야지</p>
<p>2026-01-03 복습 끝</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[로봇활용 첨단 생산시스템 전문가 양성 교육기 (메카트로닉스) - 29]]></title>
            <link>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-29</link>
            <guid>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-29</guid>
            <pubDate>Sat, 06 Dec 2025 07:25:58 GMT</pubDate>
            <description><![CDATA[<p>블로그 글도 안 쓰고 열심히 작업한 2주동안 하드웨어와 전장을 완성했다.
덕분에 며칠간은 소프트웨어에 집중할 수 있어서 조금이나마 전체 공정 상에 진전이 있었다.</p>
<p>지난 글에서는 내가 주도하여 진행한 업무가 거의 없어서 단순히 보조했던 업무와 기록했던 업무만 적어놨었다. 오늘은 AI를 이용한 비전검사 로직을 주도적으로 개발한 것에 대해 적을 수 있을 거 같다.</p>
<h1 id="0-노션">0. 노션</h1>
<p>
    <img src="https://velog.velcdn.com/images/_roadhobo/post/af4fcf56-0b83-4181-bfe0-569612e6c73e/image.png" width=600>
</p>

<h4 id="노션-바로가기"><a href="https://www.notion.so/2a0432d8688b8013a839d61c001a5cad?v=2a0432d8688b805aad37000cbcd03c7c">노션 바로가기</a></h4>
<p>보다시피 실질적으로 중요도가 높은 작업들은 이미 종료가 되거나 완료하기 직전이다. 완료하기 직전인 것들은 우리와 같은 공정을 공유하는 다른 조에 영향을 받는 부분이 있기 때문에 </p>
<h1 id="1-진행상황">1. 진행상황</h1>
<h2 id="1-1-하드웨어">1-1. 하드웨어</h2>
<p style="display:flex;gap:10px">
  <img src="https://velog.velcdn.com/images/_roadhobo/post/03c6c4ca-fc5b-4f7b-840b-419b55274deb/image.jpg" width=400>
  <img src="https://velog.velcdn.com/images/_roadhobo/post/bdb2cb87-1b1a-44ad-9791-72902c461194/image.jpg" width=400>
</p>
<span style="font-weight:700">
  △ 조립 및 배선 완료 / △ 웨이퍼(실제 사용 모델)
</span>

<p> 왼쪽 사진은 정리가 덜 되었을 때에 찍은 사진이긴 하지만 총 <strong>5가지 정도의 스텝을 구현하기 위해 만든 공정의 완성본</strong>이다. 오른쪽 사진은 실제 웨이퍼와는 전혀 다르지만 실제 공정을 구현하기는 힘든 학습 환경에 맞춰 시연하기 편한 형태로 만든 <strong>색깔과 형태 구별용 웨이퍼</strong>이다.</p>
<p>아래는 공정의 간략한 순서이다.</p>
<ol>
<li>미가공 웨이퍼의 배출</li>
<li>미가공의 웨이퍼의 연마 및 형태 검사</li>
<li>감광액 도포와 노광 작업 및 색깔 검사 </li>
<li>위 두 검사에서 하나라도 불량일 시, 폐기 처분</li>
<li>가공 완료된 웨이퍼를 후반 공정용 자재 창고에 피킹&amp;플레이스</li>
</ol>
<p>
    <img src="https://velog.velcdn.com/images/_roadhobo/post/7c2a239a-97de-4b03-ae47-c6db6c790ec1/image.png" width=600>
</p>

<p> 지난 번에 올렸던 <strong>위 그림(초기 구상)</strong>과의 차이는 공정 구성이 좀 더 간소해졌고, <strong>카메라를 포토센서 대신에 쓰게 되었다</strong>고 보면 될 거 같다. 즉, <strong>비전AI로 카메라 2개를 체크</strong>하게 되었다.</p>
<h2 id="1-2-ai-비전검사">1-2. AI 비전검사</h2>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/dc9f9293-c12c-46ec-8208-d47686b1cd45/image.png" alt=""></p>
<p> 비전검사를 카메라 2대로 나눠서 수행함에 따라 <strong>색깔과 형태를 구분</strong>지어서 학습시킬 필요가 생기게 되었다. 그래서 많은 예제 수 덕분에 학습방법이 비교적 알기 쉬운 <a href="https://docs.ultralytics.com/ko/models/yolov8/"><strong>YoloV8n</strong></a> 모델과 <strong>객체 감지 모델 학습용 사이트</strong>인 <a href="https://roboflow.com/"><strong>Roboflow</strong></a>를 사용하기로 결정했다.</p>
<p> 또한 우리 조는 라벨링을 통해 <strong>양품(Orange, Square)</strong>와 <strong>불량품(Brown, Not_Square)</strong> 클래스를 구별하는 작업을 현재 수행하기로 결정했다. 만약 <strong>하나라도 불량품 기준에 걸리면 불량</strong>인 구조이기에 불량품을 색출하는 능력을 높히는 방향으로 계획하고 있다.</p>
<pre><code class="language-python"># main.py
# ------------------------------------------------------------
from __future__ import annotations

from ultralytics import YOLO
import cv2
import threading
from queue import Queue
from datetime import datetime
from dataclasses import dataclass, field
from typing import List, Callable, Dict

# ----------------------------------------
# 설정
# ----------------------------------------
model_path = &quot;yolov8_project/dataset/weights/best.pt&quot;
# 카메라별 Good / Bad 기준
good_prod0 = [&quot;Orange_Waper&quot;]
bad_prod0  = [&quot;Brown_Waper&quot;]

good_prod1 = [&quot;Square&quot;]
bad_prod1  = [&quot;Not_Square&quot;]


# ============================================================
#  CameraStream — 카메라 프레임 수집
# ============================================================
class CameraStream:
    def __init__(self, camera_ids, width=640, height=480):
        self.camera_ids = camera_ids
        self.queues = {cid: Queue(maxsize=1) for cid in camera_ids}
        self.captures = {cid: cv2.VideoCapture(cid) for cid in camera_ids}
        self.running = False

        for _, cap in self.captures.items():
            cap.set(cv2.CAP_PROP_FRAME_WIDTH, width)
            cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height)

    def _reader(self, cam_id: int):
        cap = self.captures[cam_id]
        q = self.queues[cam_id]

        while self.running:
            ret, frame = cap.read()
            if not ret:
                continue

            if q.full():
                q.get()
            q.put(frame)

        cap.release()

    def start(self):
        self.running = True
        self.threads = []
        for cam_id in self.camera_ids:
            t = threading.Thread(target=self._reader, args=(cam_id,), daemon=True)
            t.start()
            self.threads.append(t)

    def stop(self):
        self.running = False

    def get_frame(self, cam_id: int):
        q = self.queues[cam_id]
        return q.get() if not q.empty() else None


# ============================================================
# 데이터 구조
# ============================================================
@dataclass
class DetectionResult:
    timestamp: datetime
    object_id: int
    is_good: bool
    is_defective: bool
    confidence_avg: float
    frame_count: int

    def to_dict(self):
        return {
            &quot;timestamp&quot;: self.timestamp.isoformat(),
            &quot;object_id&quot;: self.object_id,
            &quot;IsGood&quot;: self.is_good,
            &quot;defective&quot;: self.is_defective,
            &quot;confidence&quot;: round(self.confidence_avg, 3),
            &quot;frames&quot;: self.frame_count
        }


@dataclass
class TrackedObject:
    object_id: int
    bbox: tuple
    good_list: List[str]  # VisionAI에서 camera별 기준을 받아 저장

    is_good: bool = None
    detections: List[tuple] = field(default_factory=list)
    frame_count: int = 0
    missing_time: int = 0
    in_roi: bool = False
    finalized: bool = False
    finalized_frame_count: int = 0
    display_duration: int = 100

    def add_missing(self):
        self.missing_time += 1

    def clear_missing(self):
        self.missing_time = 0

    def add_detection(self, cls: str, conf: float):
        self.detections.append((cls, conf))
        self.frame_count += 1

    def get_final_decision(self) -&gt; tuple[bool, float] | None:
        # 감지 데이터 부족
        if len(self.detections) &lt; 20:
            return None

        # good_score / bad_score 계산을 camera 기준 good_list로만 수행
        good_score = sum(c for cls, c in self.detections if cls in self.good_list)
        total_score = sum(c for _, c in self.detections)

        if total_score == 0:
            return None

        # is_good 판정 (예: good_score 비율 기반)
        self.is_good = (good_score / total_score) &gt;= 0.8

        avg_conf = total_score / len(self.detections)

        return self.is_good, avg_conf


# ============================================================
# 시작 신호 + (bool)-&gt;void 콜백 관리
# ============================================================
class DetectionSignalController:
    &quot;&quot;&quot;
    - request_start() : 상위 공정에서 &#39;검출 시작&#39; 신호가 들어올 때 호출
    - set_result_callback(cb) : cb(bool) 형태로 PLC 등에 보낼 콜백 등록
    - handle_detection(is_good) : VisionAI에서 finalize 시 호출
    &quot;&quot;&quot;
    def __init__(self, name: str = &quot;&quot;):
        self.name = name
        self._armed: bool = False
        self._result_callback: Callable[[bool], None] | None = None

    def request_start(self) -&gt; None:
        &quot;&quot;&quot;
        상위 공정이 완료되어 다음 검출 1회를 허용할 때 호출.
        다음 finalize 결과 1회만 통과시키고 다시 disarm 된다.
        &quot;&quot;&quot;
        self._armed = True

    def set_result_callback(self, cb: Callable[[bool], None]) -&gt; None:
        &quot;&quot;&quot;
        cb: (is_good: bool) -&gt; None
        &quot;&quot;&quot;
        self._result_callback = cb

    def handle_detection(self, is_good: bool) -&gt; None:
        &quot;&quot;&quot;
        VisionAI에서 finalize될 때 호출.
        _armed 상태가 아니면 무시, _armed이면 cb를 1번 호출하고 disarm.
        &quot;&quot;&quot;
        if not self._armed:
            return
        self._armed = False
        if self._result_callback is not None:
            self._result_callback(is_good)


# ============================================================
# VisionAI — 카메라별 독립 추적/판정 엔진
# ============================================================
class VisionAI:
    def __init__(self, model_path:str, good_list:List[str], bad_list:List[str],
                 roi_center_ratio:float=0.5, roi_width_ratio:float=0.3):
        self.model = YOLO(model_path)
        self.callbacks: List[Callable[[DetectionResult], None]] = []
        self.tracked_objects: Dict[int, TrackedObject] = {}
        self.next_object_id = 0

        self.good_list = good_list
        self.bad_list = bad_list

        self.roi_center_ratio = roi_center_ratio
        self.roi_width_ratio = roi_width_ratio
        self.roi: tuple[int, int, int, int] | None = None

        self.max_missing_times = 30
        self.min_frames_for_decision = 20
        self.iou_threshold = 0.3

        self.frame_width: int | None = None
        self.frame_height: int | None = None

    def register_callback(self, fn: Callable[[DetectionResult], None]) -&gt; None:
        self.callbacks.append(fn)

    def _setup_roi(self, w: int, h: int) -&gt; None:
        rw = int(w * self.roi_width_ratio)
        cx = int(w * self.roi_center_ratio)
        x1 = max(0, cx - rw // 2)
        x2 = min(w, cx + rw // 2)
        self.roi = (x1, 0, x2, h)

    def _is_outside_frame(self, obj: TrackedObject) -&gt; bool:
        x1, y1, x2, y2 = obj.bbox
        if x2 &lt; 0:
            return True
        if x1 &gt; self.frame_width:
            return True
        if y2 &lt; 0:
            return True
        if y1 &gt; self.frame_height:
            return True
        return False

    def _calculate_iou(self, b1, b2) -&gt; float:
        x1, y1, x2, y2 = b1
        X1, Y1, X2, Y2 = b2
        inter_x1 = max(x1, X1)
        inter_y1 = max(y1, Y1)
        inter_x2 = min(x2, X2)
        inter_y2 = min(y2, Y2)

        if inter_x2 &lt; inter_x1 or inter_y2 &lt; inter_y1:
            return 0.0

        inter = (inter_x2 - inter_x1) * (inter_y2 - inter_y1)
        area1 = (x2 - x1) * (y2 - y1)
        area2 = (X2 - X1) * (Y2 - Y1)
        return inter / (area1 + area2 - inter)

    def _is_in_roi(self, box) -&gt; bool:
        if not self.roi:
            return False
        x1, y1, x2, y2 = box
        rx1, _, rx2, _ = self.roi
        cx = (x1 + x2) / 2
        return rx1 &lt;= cx &lt;= rx2

    # ============================================================
    # 트래킹 업데이트
    # ============================================================
    def _update_tracks(self, detections, out_list: List[bool]) -&gt; None:
        matched: set[int] = set()
        to_remove: List[int] = []

        # 모든 객체 missing 증가 (finalized 포함)
        for obj in self.tracked_objects.values():
            obj.add_missing()

        # IOU 매칭 (finalized 포함, bbox 업데이트용)
        for bbox, cls, conf in detections:
            best_id = None
            best_iou = self.iou_threshold

            for oid, obj in self.tracked_objects.items():
                iou = self._calculate_iou(obj.bbox, bbox)
                if iou &gt; best_iou:
                    best_iou = iou
                    best_id = oid

            if best_id is not None:
                obj = self.tracked_objects[best_id]
                obj.clear_missing()
                obj.bbox = bbox

                if not obj.finalized:
                    obj.add_detection(cls, conf)
                    obj.in_roi = self._is_in_roi(bbox)

                matched.add(best_id)
            else:
                new_obj = TrackedObject(self.next_object_id, bbox, self.good_list)
                new_obj.add_detection(cls, conf)
                new_obj.in_roi = self._is_in_roi(bbox)
                self.tracked_objects[self.next_object_id] = new_obj
                matched.add(self.next_object_id)
                self.next_object_id += 1

        # 삭제 / finalize 처리
        for oid, obj in list(self.tracked_objects.items()):

            # finalized 객체: 화면 밖이면 삭제
            if obj.finalized and self._is_outside_frame(obj):
                to_remove.append(oid)
                continue

            # finalized 객체: 일정 시간 이상 미검출 시 삭제
            if obj.missing_time &gt; self.max_missing_times:
                to_remove.append(oid)
                continue

            # 비-finalized: 짧게 감지되었다가 사라지면 삭제
            if (not obj.finalized) and obj.frame_count &lt; self.min_frames_for_decision and oid not in matched:
                to_remove.append(oid)
                continue

            # 비-finalized: 오래 미검출이면 삭제
            if (not obj.finalized) and oid not in matched and obj.missing_time &gt; self.max_missing_times:
                to_remove.append(oid)
                continue

            # ROI 내부 + 프레임 수 충족 + 아직 finalize 안 됨 → 단 한 번 finalize
            if (not obj.finalized) and obj.in_roi and obj.frame_count &gt;= self.min_frames_for_decision:
                self._finalize(obj, out_list)

        for oid in to_remove:
            del self.tracked_objects[oid]

    def _finalize(self, obj: TrackedObject, out_list: List[bool]) -&gt; None:
        if obj.finalized:
            return

        decision = obj.get_final_decision()
        if not decision:
            return

        is_good, avg_conf = decision
        is_def = not is_good

        result = DetectionResult(
            timestamp=datetime.now(),
            object_id=obj.object_id,
            is_good=is_good,
            is_defective=is_def,
            confidence_avg=avg_conf,
            frame_count=obj.frame_count
        )

        obj.finalized = True

        # 내부용 bool 결과 (True = Good, False = Bad)
        out_list.append(is_good)

        # 상위 콜백들 호출 (DetectionResult 단위)
        for cb in self.callbacks:
            cb(result)

    # ============================================================
    # 그래픽 표시
    # ============================================================
    def _draw_roi(self, frame):
        if self.roi:
            x1, y1, x2, y2 = self.roi
            cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 255), 2)
        return frame

    def _draw_tracks(self, frame):
        for oid, obj in self.tracked_objects.items():
            x1, y1, x2, y2 = map(int, obj.bbox)

            if obj.finalized:
                color = (0, 255, 0) if obj.is_good else (0, 0, 255)
                label = &quot;Good&quot; if obj.is_good else &quot;Bad&quot;
            else:
                color = (128, 128, 128)
                label = f&quot;{oid}({obj.frame_count})&quot;

            cv2.rectangle(frame, (x1, y1), (x2, y2), color, 2)
            cv2.putText(frame, label, (x1, y1 - 10),
                        cv2.FONT_HERSHEY_SIMPLEX, 0.6, color, 2)
        return frame

    # ============================================================
    # 프레임 처리 API
    # ============================================================
    def process_frame(self, frame):
        h, w = frame.shape[:2]
        self.frame_width = w
        self.frame_height = h

        if self.roi is None:
            self._setup_roi(w, h)

        results = self.model(frame, conf=0.85, verbose=False)
        detections = []

        if len(results[0].boxes) &gt; 0:
            boxes = results[0].boxes
            names = results[0].names

            for box in boxes:
                x1, y1, x2, y2 = box.xyxy[0].cpu().numpy()
                cls_id = int(box.cls[0])
                conf = float(box.conf[0])
                cls_name = names[cls_id]

                if cls_name in self.good_list or cls_name in self.bad_list:
                    detections.append(((x1, y1, x2, y2), cls_name, conf))

        out_list: List[bool] = []
        self._update_tracks(detections, out_list)

        disp = frame.copy()
        disp = self._draw_roi(disp)
        disp = self._draw_tracks(disp)

        return disp, out_list


# ============================================================
# 품질 검사 &amp; 로그 (원하면 사용)
# ============================================================
class QualityInspector:
    def __init__(self, name=&quot;CAM&quot;):
        self.name = name
        self.good = 0
        self.bad = 0

    def on_detection(self, r: DetectionResult):
        if r.is_defective:
            self.bad += 1
        else:
            self.good += 1
        print(f&quot;[{self.name}] → {r.is_good} (conf={r.confidence_avg:.2f})&quot;)


class DataLogger:
    def __init__(self, fname: str):
        self.fname = fname
        with open(self.fname, &quot;w&quot;) as f:
            f.write(&quot;=== LOG START ===\n&quot;)

    def on_detection(self, r: DetectionResult):
        with open(self.fname, &quot;a&quot;) as f:
            f.write(str(r.to_dict()) + &quot;\n&quot;)


# ============================================================
# 실행부 — 카메라 0, 1 독립 처리 + 시작 신호/콜백 컨트롤러 예시
# ============================================================
if __name__ == &quot;__main__&quot;:
    cam = CameraStream([0, 1])
    cam.start()

    vision0 = VisionAI(model_path, good_list=good_prod0, bad_list=bad_prod0)
    vision1 = VisionAI(model_path, good_list=good_prod1, bad_list=bad_prod1)

    inspector0 = QualityInspector(&quot;CAM0&quot;)
    inspector1 = QualityInspector(&quot;CAM1&quot;)

    logger0 = DataLogger(&quot;cam0_log.txt&quot;)
    logger1 = DataLogger(&quot;cam1_log.txt&quot;)

    # 시작 신호 + bool 콜백 컨트롤러 (카메라별 1개)
    signal0 = DetectionSignalController(&quot;CAM0&quot;)
    signal1 = DetectionSignalController(&quot;CAM1&quot;)

    # VisionAI 결과(DetectionResult)를 → bool로 변환해서 컨트롤러에 전달
    def bridge_cam0(res: DetectionResult):
        is_good = not res.is_defective
        signal0.handle_detection(is_good)

    def bridge_cam1(res: DetectionResult):
        is_good = not res.is_defective
        signal1.handle_detection(is_good)

    # VisionAI 콜백 등록 (순서: 인스펙터, 로거, 신호컨트롤러 브릿지)
    vision0.register_callback(inspector0.on_detection)
    vision0.register_callback(logger0.on_detection)
    vision0.register_callback(bridge_cam0)

    vision1.register_callback(inspector1.on_detection)
    vision1.register_callback(logger1.on_detection)
    vision1.register_callback(bridge_cam1)

    # PLC와 실제 연결될 콜백 예시 (bool -&gt; void)
    def plc_cam0_callback(is_good: bool):
        print(f&quot;[PLC CAM0] WRITE: {&#39;GOOD&#39; if is_good else &#39;BAD&#39;}&quot;)

    def plc_cam1_callback(is_good: bool):
        print(f&quot;[PLC CAM1] WRITE: {&#39;GOOD&#39; if is_good else &#39;BAD&#39;}&quot;)

    signal0.set_result_callback(plc_cam0_callback)
    signal1.set_result_callback(plc_cam1_callback)

    while True:
        f0 = cam.get_frame(0)
        f1 = cam.get_frame(1)

        if f0 is not None:
            out0, _ = vision0.process_frame(f0)
            cv2.imshow(&quot;CAM0&quot;, out0)

        if f1 is not None:
            out1, _ = vision1.process_frame(f1)
            cv2.imshow(&quot;CAM1&quot;, out1)

        key = cv2.waitKey(1)

        # 예시: 키보드 &#39;s&#39; 입력 시 두 카메라 모두 다음 검출 1회만 허용
        # 실제 환경에서는 PLC 코드에서 signal0/1.request_start()를 호출하면 됨.
        if key == ord(&#39;s&#39;):
            signal0.request_start()
            signal1.request_start()

        if key == 27:  # ESC
            break

    cam.stop()
    cv2.destroyAllWindows()</code></pre>
<p>위 코드는 그런 결정들을 바탕으로 만들어진 코드로 ChatGPT와 Claude의 도움 + 내 파이썬 지식을 토대로 만들어졌다. 가독성이 나쁘긴 하지만 다른 조원들한테 전체 코드를 쉽게 전송하고, 노션에 쉽게 정리하기 위해 한 가지 파일로만 작성했다.</p>
<p> 어차피 코드만으론 설명하기 어려우니 데이터클래스와 클래스별 역할 요약본을 아래 적어두었다.</p>
<hr>
<h3 id="데이터클래스dto">데이터클래스(DTO)</h3>
<h3 id="detectionresult">DetectionResult</h3>
<ul>
<li><strong>양불량 판정이 끝난 객체 1개에 대한 결과 데이터</strong></li>
<li>good/bad 여부, confidence 평균, 감지 프레임 수, 시간 등 로그 및 상위 시스템 통신용 DTO.</li>
</ul>
<h3 id="trackedobject">TrackedObject</h3>
<ul>
<li><strong>이동하는 객체 추적을 위한 데이터</strong></li>
<li>bbox, 감지된 클래스/확률 리스트, ROI 진입 여부, missing 카운트, finalized 여부 등 관리</li>
<li><strong>일정 조건을 만족하면 get_final_decision()으로 Good/Bad 판정을 계산함 (중요*)</strong></li>
</ul>
<hr>
<h3 id="클래스">클래스</h3>
<h3 id="camerastream">CameraStream</h3>
<ul>
<li>여러 카메라를 동시에 읽기 위한 <strong>스레드 기반 입력장치 제어 클래스</strong></li>
<li>항상 찍고 있는 실시간 영상의 <strong>마지막 1프레임(최신 프레임)</strong>만 관리하기에 렉은 유발되지 않음</li>
</ul>
<h3 id="detectionsignalcontroller">DetectionSignalController</h3>
<p><del>이게 제일 손이 많이 갔다</del></p>
<ul>
<li><strong>PLC에 신호를 보내기 위해 사용하는 양불량 결과 송신기</strong></li>
<li>request_start() → 양불량 결과를 단 1회만 통과시키는 &quot;armed&quot; 상태를 만들어줌</li>
<li>양불량 판정할 때 handle_detection() 호출 → armed 상태에서만 <strong>PLC에 신호를 보내는 콜백 실행 후 자동 해제</strong></li>
<li>여러 프레임을 토대로 결론을 내린 단발성 결과를 활용하기 위한 클래스</li>
</ul>
<h3 id="visionai-제일-중요">VisionAI (제일 중요*)</h3>
<ul>
<li><strong>YOLO 추론 + 객체 트래킹 + ROI 기반 단발 판정(finalize) 엔진</strong></li>
<li>YOLO로 객체 감지</li>
<li>IOU 기반 트래킹</li>
<li>ROI(Region of Interest, 관심 영역) 진입 + 최소 프레임 수 → 단 1회 finalize</li>
<li>Good/Bad 여부 계산</li>
<li>finalize(양불량 판정) 시 DetectionResult 생성해 콜백 전달</li>
<li>화면 디버깅용 ROI/트랙 박스 그리기</li>
<li>내부적으로 트래킹 규칙, 사라진 객체 삭제 규칙 등을 모두 처리하는 독립 AI 엔진</li>
</ul>
<h3 id="qualityinspector">QualityInspector</h3>
<ul>
<li>VisionAI의 DetectionResult를 받아 good/bad 카운트하며 콘솔에 출력</li>
<li><strong>디버깅 및 현장 검사 결과 모니터링용</strong></li>
</ul>
<h3 id="datalogger">DataLogger</h3>
<ul>
<li>DetectionResult를 파일에 기록하는 로그 저장 클래스</li>
</ul>
<hr>
<p>위 클래스의 흐름은 구조는 다음과 같이 나타난다.</p>
<p><strong>Camera →
VisionAI(YOLO + Tracking + Finalize) →
DetectionResult →
(Inspector, Logger, SignalController) →
DetectionSignalController(PLC 콜백)</strong></p>
<hr>
<p>원래는 DigitalTwin에 관해서도 쓰려고 했는데, 생각보다 좀 글이 길어져서 다음에 하기로 했다.
아마 다음 주 주중에 DigitalTwin에 대한 경과를 작성하지 않을까 싶다.</p>
<p>아래는 현재 작업 중인 Unity로 만든 DigitalTwin의 작동 영상인데, 완전히 초기 버전이라 만들 부분이 많다. 아마 비전 검사가 다음 주에 성공적으로 끝나면 완성할 수 있지 않을까라는 생각이 든다.</p>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/487c7486-1e1f-4212-849e-7b735ab03424/image.gif" alt=""></p>
<p>코드에서 하드코딩을 없애고 확장성 있는 프로그램을 개발하려고 생각하고 있기에, 정말 갈 길이 멀다. 어쩌면 완성 못할 수도 있다. 물론 어떻게든 되도록 영혼을 갈아넣을 거지만.
그러니 조금 더 완성된 프로그램으로 다음 주에 적도록 해야겠다.</p>
<p>일단 2025-12-06 복습 끝</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[로봇활용 첨단 생산시스템 전문가 양성 교육기 (메카트로닉스) - 28]]></title>
            <link>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-28</link>
            <guid>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-28</guid>
            <pubDate>Sat, 15 Nov 2025 04:40:32 GMT</pubDate>
            <description><![CDATA[<p>25.11.10부터 25.11.14까지 뭔가 많이 하긴 했는데 글로 쓰려니
구구절절 설명하기 애매한 부분이 많다.</p>
<p>그래서 간단한 진행 상황을 브리핑하고
진행하고자 하는 계획을 설명하고자 한다.</p>
<hr>
<h1 id="0-노션">0. 노션</h1>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/0cd78f87-2c97-43cf-b031-1bac07886e0f/image.png" alt=""></p>
<p><a href="https://www.notion.so/2a0432d8688b8013a839d61c001a5cad?v=2a0432d8688b805aad37000cbcd03c7c">노션 주소</a></p>
<p><strong>PLC 작업</strong>과 <strong>비전검사</strong>를 진행하게 되었다.
래더 작업과 </p>
<h1 id="1-진행상황">1. 진행상황</h1>
<h2 id="1-1-plc환경설정은-내-담당">1-1. PLC(환경설정은 내 담당)</h2>
<p>
    <img src="https://velog.velcdn.com/images/_roadhobo/post/4e259a97-4e3d-4114-977b-0c870b780a53/image.png" width=600 />
</p>

<blockquote>
<p>△ CC-Link 설정법</p>
</blockquote>
<h3 id="20251111">2025.11.11</h3>
<ul>
<li>I/O 신호 결선안 1차 결정</li>
<li>테스트용 래더 작성 중<h3 id="20251112">2025.11.12</h3>
</li>
<li>PC-PLC간 입출력 상호전송 확인</li>
<li>CC-Link 연결 시도 중<h3 id="20251113">2025.11.13</h3>
</li>
<li>CC-Link 연결 완료</li>
</ul>
<h2 id="1-2-하드웨어-배치">1-2. 하드웨어 배치</h2>
<p>
    <img src="https://velog.velcdn.com/images/_roadhobo/post/1cd64475-ff87-4fa0-9aeb-590170e328e0/image.jpg" width=600 />
</p>

<blockquote>
<p>△ CC-Link 설정법</p>
</blockquote>
<h3 id="20251111-1"><strong>2025.11.11</strong></h3>
<ul>
<li>연마기 모터 측 조립 완료<h3 id="20251112-1">2025.11.12</h3>
</li>
<li>연마기 및 분사기 측 고정구 조립 예정</li>
<li>연마기 고정구 측 파손으로 지연<h3 id="20251113-1">2025.11.13</h3>
</li>
<li>모터 측 결선</li>
<li>분사기 센서 거치대 조립 완료</li>
</ul>
<h2 id="1-3-비전검사내-전담">1-3. 비전검사(내 전담)</h2>
<h3 id="20251111-2">2025.11.11</h3>
<ul>
<li>카메라 2대 설치 후 다양한 환경에서 교육 예정</li>
<li>모양 및 색깔 구별은 <code>빨간색_모양_웨이퍼</code> 같이 <strong>라벨 이름</strong>으로 구별<h3 id="20251114">2025.11.14</h3>
</li>
<li>다크넷 기반 비전AI - Yolov4 사용 예정</li>
<li>과제 2025.11.20까지 - 양품, 불량품 10개씩 이미지 확보</li>
</ul>
<h2 id="1-4-3d-모델링">1-4. 3D 모델링</h2>
<p>
    <img src="https://velog.velcdn.com/images/_roadhobo/post/5e76adce-982d-446e-baea-1fb1c9873796/image.jpg" width=600 />
</p>

<h3 id="20251111-3">2025.11.11</h3>
<ul>
<li>웨이퍼 최종안 결정 및 제작 완료</li>
<li>웨이퍼 배출구 최종안 결정 및 제작 완료</li>
<li>연마기 모터 받침대 제작 완료<h3 id="20251112-2">2025.11.12</h3>
</li>
<li>연마기 &amp; 분사기 고정구 프린팅</li>
<li>분사기의 센서 고정구 배치</li>
<li>연마기의 센서 고정구 설계<h3 id="20251113-2">2025.11.13</h3>
</li>
<li>연마기의 센서 고정구 배치</li>
</ul>
<h2 id="1-5-전장설계-및-결선eplan">1-5. 전장설계 및 결선(EPLAN)</h2>
<p>
    <img src="https://velog.velcdn.com/images/_roadhobo/post/211cd16a-993f-4898-8141-e8c888ebd426/image.png" width=600 />
    <img src="https://velog.velcdn.com/images/_roadhobo/post/bcc7ce44-7619-4fb3-93a3-e3ac7439ed53/image.gif" width=600 />
</p>

<h3 id="20251110"><strong>2025.11.10</strong></h3>
<ul>
<li>배전반 배선 시작<h3 id="20251111-4"><strong>2025.11.11</strong></h3>
</li>
<li>PLC를 제외한 배전반 배선 완료</li>
<li>실배치에 따라 배전반 배선도 수정 중</li>
<li>테이블 배선도 제작 중<h3 id="20251112-3">2025.11.12</h3>
</li>
<li>PLC를 포함한 배전반 배선 완료</li>
<li>테이블 측 배선에 CC Link 사용 예정 → 배선도 수정<h3 id="20251113-3">2025.11.13</h3>
</li>
<li>모터&amp;공압 측 배선 완료</li>
<li>실린더 1개 작동 확인</li>
</ul>
<h2 id="1-6-로봇제어">1-6. 로봇제어</h2>
<p>
    <img src="https://velog.velcdn.com/images/_roadhobo/post/211cd16a-993f-4898-8141-e8c888ebd426/image.png" width=600 />
</p>

<h3 id="20251113-4">2025.11.13</h3>
<ul>
<li>로봇-PLC간 연결 상태 확인 (Python 사용)</li>
<li>허브 사용하여 네트워크 연결 확인</li>
</ul>
<h1 id="2-해보고-싶은-거">2. 해보고 싶은 거</h1>
<h2 id="2-1-unity로-digitaltwin-만들기">2-1. Unity로 DigitalTwin 만들기</h2>
<p>
    <img src="https://velog.velcdn.com/images/_roadhobo/post/e475f448-293c-4b74-95fd-1f3e31bdf300/image.png" width=600 />
</p>

<p><a href="https://unity.com/kr/topics/digital-twin-definition">https://unity.com/kr/topics/digital-twin-definition</a></p>
<p>&nbsp;우리와 같은 공정의 후반을 담당하는 4조에서 <strong>Unity 게임엔진으로 DigitalTwin를 만들자고 하는 제안</strong>이 있었다.</p>
<p>
&nbsp;실제로 꽤 많은 외국계 회사들이나 솔루션 회사에서 DT를 만드는 듯했고, 나도 교육 초반부터 이를 조사해서 알고 있었다.<br>
&nbsp;근데 시간도 많이 걸릴 게 분명하고 내 기술 수준이 못 미칠 수도 있을 거 같아서 따로 제안하지 않았었다. 시간 소모가 큰 작업에 한 명이 빠져버리면 팀원들한테 미안하게 될 게 분명하니 더 그런 것도 있었다. 그런데 4조에서 먼저 제안해주니 시도해볼 용기가 나기 시작했다.
</p>

<p>&nbsp;아직은 초안을 만드는 중이라 제작 계획이 확정이라 할 수는 없다. 다만 만들게 된다면 경력에 좋은 한 줄이 될 거 같다. 재밌을 거 같기도 하고.</p>
<h2 id="2-2-mqtt-활용">2-2. MQTT 활용</h2>
<p>
    <img src="https://velog.velcdn.com/images/_roadhobo/post/36f18b25-d730-42fc-93fe-b19579d28d87/image.png" width=600 />
</p>

<p>
&nbsp;이건 아직 내용을 잘 몰라서 구체적으로 설명하기는 힘들다.<br>
&nbsp;그래도 설명하자면 <strong>저대역폭 환경에서 기기 간 통신을 위해 설계된 가벼운 게시-구독 기반 메시징 프로토콜</strong>, 즉 <strong>가벼운 메시지 전용 프로토콜</strong>이다.<br>
&nbsp;MQTT 프로토콜을 소프트웨어 측에 활용하여 공정과 즉각적인 상호통신을 구축하자는 얘기가 나왔다. 실제로 Unity를 다룰 때도 <strong>현재 공정의 상태를 게임에 즉각적으로 반영할 수 있다는 점</strong>은 유용한 내용이라서 시도해보려는 참이다.<br>
</p>

<hr>
<p>하드웨어 조립 및 배치 위주로 진행된 1주라서
소프트웨어는 다음 주에 차근차근 진행될 것 같다.</p>
<p>그럼 2025-11-15 복습 끝</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[로봇활용 첨단 생산시스템 전문가 양성 교육기 (메카트로닉스) - 27]]></title>
            <link>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-27</link>
            <guid>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-27</guid>
            <pubDate>Sat, 08 Nov 2025 05:19:51 GMT</pubDate>
            <description><![CDATA[<p>프로젝트 1주차이다만......
난 사실상 월~수요일동안 부품 정리하고 공정 조립만 했다.
하드웨어 쪽 머리 쓰는 부분들은 조원분들이 다 해주셨다.
그리고 목요일은 박람회, 금요일은 감기가 도져서 쉬었다.</p>
<p>난 소프트웨어 &amp; 문서 작성 담당이라서 지금은 보조말고는 할 게 없다.
나중에 네트워크나 커스텀 AI 설정할 때나 내가 필요해질 거 같다.</p>
<p>어쨌든 오늘은 사진만 몇장 올리고 상황 설명만 할 예정이다.</p>
<hr>
<h1 id="0-span-id0노션span">0. <span id="0">노션</span></h1>
<p>
    <img src="https://velog.velcdn.com/images/_roadhobo/post/11d52278-e557-44d0-b38f-2dc3e7b21232/image.png" width=600 />
</p>

<p><a href="https://www.notion.so/2a0432d8688b8013a839d61c001a5cad?v=2a0432d8688b805aad37000cbcd03c7c">바로가기</a></p>
<p>이건 내가 프로젝트 진행하면서 독자적으로 작성하고 있는 문서이다. 초반에 노션에 진행사항 적어달라고 말하기도 했는데, 다들 그냥 잊어버려서 내가 수시로 체크하면서 작성하려고 한다. <span style="font-size:12px">다들 포트폴리오에 쓸 게 많은 건가?</span></p>
<p>덕분에 <strong>좋은 점</strong>도 있다. 프로젝트 일지를 매일 써야해서 <strong>조원들의 진행상황을 어차피 파악</strong>해야 한다는 상황이고, 그 때문에 조장님에게 <strong>필요한 사항을 빠르게 전달하고 조치</strong>할 수 있기 때문이다. 추가로 <strong>불만사항도 접수</strong>하고 말이다.
&#39;각자 알아서 잘하겠지&#39;라고 믿고는 있지만 조원 간 <strong>소통이 빠른 쪽이 아무래도 일이 더 수월</strong>한 건 사실이니까.</p>
<p>단점은 생각보다 훨씬 귀찮다는 거다. 계획 관리자나 PM이 돈을 많이 받는 이유가 확실히 있긴 있다.</p>
<h1 id="1-전장설계">1. 전장설계</h1>
<p>
    <img src="https://velog.velcdn.com/images/_roadhobo/post/e31b4079-886e-4f09-95b9-c22f8eb5527b/image.png" width=600 />
    <img src="https://velog.velcdn.com/images/_roadhobo/post/41dbe654-49fb-4030-9d5a-6dd0894fecc8/image.png" width=600 />
</p>

<p>전장설계는 크게 두 파트로 나뉘어져있다. <strong>배전반</strong>과 <strong>테이블</strong>이다.
우선순위를 따져 배전반 &gt; 테이블 &gt; 공정 순으로 전장을 설계해야 했다. 이 설계는 다음 주 초까지는 진행돼야 한다. 아니면 한달도 안되는 프로젝트의 절반을 전장설계에 써버리니깐 말이다.
다행히도 위 사진을 보다시피 전장을 담당하신 조원분이 열심히 해주시고 계셨다.</p>
<p>사진을 보고 나도 <a href="#0">노션</a>에 뭐라고 적으려면 배선도를 이해해야겠다고 생각했다. <strong>공정 조립 보조</strong>이기도 하니까 알아두는 편이 좋기도 하고.</p>
<p>구성은 <strong>AC랑 DC로 나눠지는 전원 공급부</strong>와 DC에 연결된 <strong>HMI, PLC</strong>로 이루어져 있었다. 장비마다 차단기가 설치되어있어서 구분하기 좋았던 거 같다.
F2와 F3(차단기)가 왜 한 전선에 연결되어있는지 모르겠지만 아마 확장하는 데에 사용될 거라고 추측만 했다.</p>
<p>배전반 부분은 거의 끝난 거 같고, 테이블 + 공정 부분은 다음 주에 진행될 예정인듯 하다.
구체적인 사항은 금요일에 안 나와서 잘 모른다. 다음 주에 더 자세히 물어볼 예정이다.</p>
<h1 id="2-로봇제어">2. 로봇제어</h1>
<p>
    <img src="https://velog.velcdn.com/images/_roadhobo/post/4802474b-58aa-4402-a2a7-f82b3fdb3048/image.png" width=600 />
</p>

<p>6축 로봇 제어 자체는 현재 중요사안은 아니다.
다만 본격적으로 테스트를 시작하기에 앞서 준비가 되어있어야 더 빠르기에 준비를 다른 조원분이 맡아주셨다.</p>
<p>들은 문제점은 <strong>Python, Dobot, PLC를 동시에</strong> 사용해야 하기 때문에 <strong>서로 SW를 호환시키는 부분</strong>에서 애를 먹었다고 하셨다. 아무래도 파이썬 버전이 다르거나 네트워크 설정이 잘못되면 작동을 안하게 되니까 말이다.</p>
<p>두번째 문제점은 Python으로 제어할 시에 나타나는 <strong>위치 제어 오류</strong>라고 들었다. 추측하기로는 로봇의 동작 원점과 파이썬의 동작 원점이 달라서 생기는 문제였다. 조원분이 이 문제를 해결하셨는지는 모르겠다.</p>
<h1 id="3-3d-모델링">3. 3D 모델링</h1>
<p>
    <img src="https://velog.velcdn.com/images/_roadhobo/post/eb407d4e-5e0c-4fca-9ed1-f029d7b0edc2/image.jpg" width=600 />
</p>

<p>내가 금요일에 결석하게 될지 몰라서 챙겨온 사진이 이거 하나뿐이다.
담당 조원분들이 해주신 거 많았는데 이것만 올리자니 아깝다.</p>
<p>사진은 없지만 간단히 모델링 담당이 하는 일은 설명하자면 다음과 같다.</p>
<h4 id="1-공정-및-부품-전체-모델링">1. 공정 및 부품 전체 모델링</h4>
<p>공정과 부속기기들의 도면을 전체적으로 디지털화하는 작업이다. 공정을 조금씩 수정하기 전에 먼저 공정 모델을 움직여봄으로써 시간을 절약하고 문제를 예측하는 효과를 노렸다.
우리 프로젝트는 소규모이니 실제로 만들고 손으로 움직여보는 게 빠르겠지만, 현장에서는 그렇게 확인하기 쉽지 않으니 모델링을 만들어보는 게 좋겠다는 결론이 나왔었다.</p>
<h4 id="2-3d-프린팅">2. 3D 프린팅</h4>
<p>교육원에 이미 구비된 물품들이 꽤 있긴 하다. 하지만 웨이퍼 같이 우리만 필요한 부품은 발주를 넣거나 직접 만들 필요가 있었다. 우리 조는 크기가 작은 부품만 필요하기에 3D 프린팅으로 직접 만들게 되었다.
그래서 이 작업도 모델링을 바로 출력해주실 수 있는 모델링 담당분들이 담당해주셨다.</p>
<h1 id="4-하드웨어-조립">4. 하드웨어 조립</h1>
<p style="display:flex;gap:0px">
    <img src="https://velog.velcdn.com/images/_roadhobo/post/624a6c41-9878-4d1d-b240-899beb60c674/image.jpg" width=350 />
    <img src="https://velog.velcdn.com/images/_roadhobo/post/1992e222-d7d2-493d-834d-c678689e8145/image.png" width=350 />
</p>

<p>조장님과 내가 투입해서 조립한 공정이다. 결선도 안하고 중요한 부속기기인 <strong>연마기와 감광액 분사기는 부품이 없어서</strong> 완성되지는 않았지만 배치는 구상한대로 된 모습이다. 다음 주 쯤에는 완전히 조립해서 PLC로 돌려볼 수 있을 거 같다.</p>
<p>
    <img src="https://velog.velcdn.com/images/_roadhobo/post/ccff903d-1f41-4371-9f13-9800ce6a0222/image.jpg" width=500 />
</p>

<p>여담이지만 정리에 하루를 꼬박 써서 그런지 다른 조들보다는 공정의 조립을 빠르게 완성할 수 있었던 거 같다. 지금은 그 정리한 걸 다른 조들도 쓰고 있지만, 조장님이랑 농담삼아 텃세 부리면서 노는 중이다.</p>
<hr>
<p>추가로 OpenCV를 이용한 비전검사도 빠르게 활용하기 위해 사전준비 중이다.
아마 다음 주에는 그 내용도 올릴 수 있을 거 같다.</p>
<p>그럼 2025.11.08 복습 끝</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[로봇활용 첨단 생산시스템 전문가 양성 교육기 (메카트로닉스) - 26]]></title>
            <link>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-26</link>
            <guid>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-26</guid>
            <pubDate>Sun, 02 Nov 2025 07:07:14 GMT</pubDate>
            <description><![CDATA[<p>드디어 최종 프로젝트를 시작했다.
1달 남짓한 시간만 주어져서 빡빡하기 하겠지만, 저번 기수분들의 프로젝트 예시가 남아있어서 맨땅에 헤딩하는 것보단 수월할 거 같다.</p>
<p>일단 중요하지 않은 얘기는 건너뛰고, 오늘부터 이번 프로젝트의 진행과정과 배운 점을 작성하여 블로그에 기록해두려고 한다. 애초에 그거 하려고 블로그 시작했으니까.</p>
<hr>
<h1 id="0-개요">0. 개요</h1>
<h2 id="0-0-개요-속의-개요">0-0. 개요 속의 개요</h2>
<p>!youtube[o7uMBaNp6og]
<strong>△ 작년 기수분들 프로젝트 영상</strong></p>
<p> 작년 프로젝트를 수행하신 분들은 6축 로봇과 여러 기계 구동 장치 등을 활용하여 양품과 불량품을 검사 &amp; 적재하는 공정을 진행하셨다고 한다.</p>
<p>보다보면 단순히 물리적인 공정을 구현한 것뿐만이 아닌 <strong>시뮬레이션, 필요한 부품 설계, 비전 검사</strong>에 대한 내용도 나온다. 그래서 우리 조도 속은 물론이고 겉보기에도 그럴듯한 공정을 만들어보자고 해서 <strong>반도체 공정</strong>에 대한 이야기가 나오게 되었다.</p>
<p>
    <img src="https://velog.velcdn.com/images/_roadhobo/post/97ab77f1-bd84-47e3-a0ee-a674252a1562/image.png" width=600 />
</p>

<p><strong>△ 반도체 8대 공정</strong></p>
<p> 위 그림은 반도체가 원자재로부터 제품이 되기까지의 8가지 공정을 표현한 그림이다.
물론 우리는 실제 반도체처럼 나노미터 단위의 가공은 커녕 로봇 수의 한계로 <strong>한 조당 2가지 공정</strong>만 구현할 수 있으니 가능한 부분만 최대한 따라해보기로 했다.</p>
<p> 그래서 우리 조는 길게 고민하진 않고 <strong>웨이퍼 공정과 포토 공정</strong>을 선정했다.
 길게 고민 안했다고 가볍게 골랐던 건 아닌데 우리가 배운 <strong>기술을 모두 활용</strong>하며, <strong>시각적으로 직관적인 공정</strong>을 고르는 것이 목표였기 때문이다.</p>
<p>한마디로 시연할 때에 <strong>화려하고 자랑하기 좋은 공정</strong>을 골랐다.</p>
<h2 id="0-1-웨이퍼-공정">0-1. 웨이퍼 공정</h2>
<p style="display:flex">
    <img src="https://velog.velcdn.com/images/_roadhobo/post/e6479d01-7d34-48af-9fd0-af121fee572a/image.png" width=400 />
  <img src="https://velog.velcdn.com/images/_roadhobo/post/d600c1b8-4370-4641-a004-d526f6b8f435/image.png" width=400 />
</p>

<p><strong>△ 웨이퍼 가공 세부 공정 (왼쪽) / 웨이퍼 연마기 (오른쪽)</strong></p>
<p> 웨이퍼 공정은 이런 식으로 총 3단계로 구성되어있다. 근데 우리는 하키퍽처럼 생긴 가짜 웨이퍼를 미리 만들어서 사용하기 때문에 <strong>표면 연마만 구현</strong>하기로 했다.</p>
<p> 표면 연마는 총 4가지 단계로 이루어진다. 단계는 <strong>웨이퍼 배치 &gt; 연마기 작동 &gt; 비전 검사 &gt; 불량품 폐기</strong>로 이루지는데 <strong>6축 로봇, AI, 서브모터, 공압, PLC제어</strong>를 모두 사용하는 <strong>가장 핵심적인 공정</strong>이라고 봐도 될 것 같다. 초반부터 좀 어렵겠지만 매도 일찍 맞는 게 낫다고 첫 공정이 핵심 공정인게 오히려 속편할 지도 모르겠다.</p>
<p> 이 단계에서 생길 <strong>문제점</strong>에 대해 추측하자면, 아무래도 <strong>동기화된 신호 교환</strong>이 중요해지지 않을까 싶다. 이 공정에서는 <strong>자재창고</strong>에서 바로 <strong>연마기</strong>에 배치시키는 작업 외에도 여러 가지 작업을 순차적으로 수행해야한다.</p>
<p> 그렇기에 순서가 꼬이면 연마기와 6축 로봇이 서로 부딪히거나 고장날 가능성이 있어 <strong>정확한 PLC 제어가 요구</strong>되게 된다. 거기다 여러 기계와 동시에 신호를 교환해야해서 <strong>다수의 데이터선과 전선 정리</strong>도 필요해진다.</p>
<p> 후반 작업이지만 <strong>OpenCV</strong>도 학습시켜 <strong>AI 기반 비전검사</strong>도 수행해야하기 때문에 초반에 꽤 고생을 하게 될 거 같다.</p>
<h2 id="0-2-포토-공정">0-2. 포토 공정</h2>
<p>
    <img src="https://velog.velcdn.com/images/_roadhobo/post/dadc455a-ecec-4180-9242-4774e2c9af1d/image.png" width=600 />
</p>

<p>사실 포토 공정은 AI가 센서로만 바뀌었을뿐, 큰 차이는 없다.
 굳이 바뀐 게 있다면 <strong>감광액 분사기, 노광기, 후공정용 창고</strong>에의 운송을 1개의 로봇이 작업해야해서 로봇이 좀 바쁘다는 게 차이점이다.</p>
<p>그래서 이 공정은 <strong>동선의 최적화와 센서 활용</strong>이 가장 중요한 쟁점이 될 것으로 보인다. 가능하다면 색깔을 구별할 수 있는 <strong>포토 센서</strong>를 통해 <strong>틀린 색깔의 웨이퍼를 걸러내는 공정도 추가</strong>할 생각이기에 센서 활용도 쟁점으로 삼았다.</p>
<h1 id="1-설계구조">1. 설계구조</h1>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/c6364a7c-dd03-4a4b-ac4a-9b872bd613ee/image.png" alt=""></p>
<p>위의 설명을 바탕으로 최대한 이해가 되도록 그림을 그려봤다만.......
시간이 오래 걸린 것치곤 그닥 직관적인 그림은 아니다. 솔직히 못 그렸다.
참고용으로만 봐주길 바란다.</p>
<p>순서상으로 <strong>자재창고 &gt; 연마기 &gt; 비전검사(불량 검출) &gt; 감광액 분사기 &gt; 포토센서 검사(불량 검출) &gt; 노광기 &gt; 후공정 창고</strong>순으로 진행된다는 것만 이해해주면 될 것 같다.</p>
<br>

<p>우리가 구현하지 않은 후반의 공정은 다른 조가 구현해야하기에 후공정 창고에 물품을 따로 넣는 방식으로 만들고자 계획하고 있다. 또 바뀔 수도 있지만.</p>
<p>그리고 검사를 총 2번 하는데 비전검사는 <strong>모양과 흠집</strong>을 검사하고, 센서 검사는 <strong>색깔</strong>을 검사하는 환경을 구성하려고 한다. 센서 검사는 <strong>감광액의 정상 도포 여부</strong>를 확인한다는 컨셉인데 시간이 된다면 <strong>비전검사로 대체</strong>하는 것을 고려해보고 있다.</p>
<h1 id="2-기술스택">2. 기술스택</h1>
<p>아래는 기술 스택인데 교육과정 내내 배워왔던 걸 활용할 거 같다.
앞으로 쓸 일지 자체에는 엄청 중요한 부분은 아니므로 간단하게 표만 나열해놓겠다.</p>
<table>
<thead>
<tr>
<th>구분</th>
<th>사용 기술 / 도구</th>
</tr>
</thead>
<tbody><tr>
<td>PLC</td>
<td>Mitsubishi</td>
</tr>
<tr>
<td>DB / SQL</td>
<td>Oracle, MySQL (예상)</td>
</tr>
<tr>
<td>부품 도면 설계</td>
<td>SolidWorks</td>
</tr>
<tr>
<td>전장 설계</td>
<td>Eplan</td>
</tr>
<tr>
<td>Digital Twin</td>
<td>S-Prodis (OPC UA 서버 활용)</td>
</tr>
<tr>
<td>SCADA</td>
<td>CIMON</td>
</tr>
<tr>
<td>로봇 제어</td>
<td>DoBot Studio, C#</td>
</tr>
<tr>
<td>비전 검사 AI</td>
<td>OpenCV (Python), C#</td>
</tr>
</tbody></table>
<hr>
<p>기술스택 보다보니까 디지털트윈 복습을 따로 안할 걸 깨달았다.
찝찝하지만 어차피 2주 후 정도에 또 할테니까 그때 글 쓰는 걸로 해야겠다.</p>
<p>그럼 2025-11-02 복습 끝</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[로봇활용 첨단 생산시스템 전문가 양성 교육기 (메카트로닉스) - 25]]></title>
            <link>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-25</link>
            <guid>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-25</guid>
            <pubDate>Sat, 18 Oct 2025 10:50:15 GMT</pubDate>
            <description><![CDATA[<p>지난 주에 산업용 로봇에 관해서 글을 올렸었다.
프로그램 같은 소프트웨어에 관한 내용은 기업마다 천차만별이라 안 썼었는데
활용분야나 국가별 활용계획 같은 건 조사해봤어야 됐나 싶었다.</p>
<p>그래서 오늘 쓰려고 한다.</p>
<hr>
<h1 id="3-산업용-로봇6축-실활용-사례">3. 산업용 로봇(6축) 실활용 사례</h1>
<h2 id="1-용접-도장-조립">1. 용접, 도장, 조립</h2>
<p>
  <img src="https://velog.velcdn.com/images/_roadhobo/post/c260b5bf-6f02-4b35-896a-52dde32e5f78/image.png" width=400>
</p>

<p>6축 로봇은 <strong>조선업</strong>이나 <strong>자동차, 항공우주, 중장비, 가공</strong> 산업 등에서 활용되고 있다. 주로 <strong>아주 정밀한 작업을 필요</strong>로 하거나, <strong>인간에게 해롭거나 위험한</strong> 환경에서 사용되고 있다고 한다.</p>
<p>산업용 로봇의 특성상 <strong>반복 노동</strong>에 아주 효과적이므로 <strong>동일한 제품을 다량생산</strong>할 때에 경제적이라고 한다. 건설 현장이나 야외 작업에는 약하다고 하지만, 시장이 폭발적으로 성장하고 있어서 자동으로 건물을 지어주는 건축 시스템에 활용하는 등의 아이디어도 나오고 있는 모양이다.</p>
<p>당연하게도 AI와의 연계도 나날이 발전하고 있어서 센서로 면의 굴곡 등을 파악해서 자동적으로 용접 경로를 설정하는 게 가능하도록 만들어졌다고 한다. 앞으로는 다품종 소량생산에 맞는 AI활용 프로그램이 만들어지지 않을까 예상된다.</p>
<p><strong>▽ 2019년에 파이프 용접 경로를 자동적으로 탐색하는 프로그램을 만들었다는 소식</strong>
<a href="https://www.universal-robots.com/news-and-media/news-center/launching-new-artificial-intelligence-pipe-welding-system/">https://www.universal-robots.com/news-and-media/news-center/launching-new-artificial-intelligence-pipe-welding-system/</a></p>
<h2 id="2-연삭-연마">2. 연삭, 연마</h2>
<p>
  <img src="https://velog.velcdn.com/images/_roadhobo/post/ef843d07-ce6c-4d8b-afee-264f9d8d80af/image.png" width=400>
</p>

<p><strong>연삭과 연마</strong>에도 6축 로봇이 활용되고 있다. 다만 1의 사용 사례에서 나온 <strong>정밀한 작업</strong>뿐이 아닌 <strong>복잡함과 강한 부하</strong>가 동반되는 곳에도 활용되는 사례다.</p>
<p>목재와 같이 약한 재료의 내부 가공이나 사포질은 인간의 손으로 해도 괜찮은 편이지만, 금속 등의 강한 재료는 인간의 힘이나 신체 능력으로는 거의 불가능하다. 특히 <strong>복잡하고 세밀한 무늬, 내부 형상 가공</strong>을 해야하거나 <strong>좁은 곳에서의 가공</strong>은 CNC나 밀링 머신보다도 6축 로봇의 장점을 극대화시킬 수 있다.</p>
<p><del>물론 엔지니어들은 이런 고생할 바에는 여러 부품을 조립하는 형태로 만들겠지만</del></p>
<h2 id="3-팔레타이징-피킹-앤-플레이스운반">3. 팔레타이징, 피킹 앤 플레이스(운반)</h2>
<p>
  <img src="https://velog.velcdn.com/images/_roadhobo/post/5bd8c9a9-c368-4103-afc8-d9dd40c4f698/image.png" width=400>
</p>

<p><strong>팔레타이징</strong>은 물건을 <strong>팔레트 위에 쌓는</strong> 작업을 의미한다. <strong>피킹 앤 플레이스</strong>도 물건을 <strong>집어다 옮겨놓는</strong> 작업을 의미하기에 <strong>운반 및 적재</strong> 작업이라고 생각하면 된다. 이러한 작업들은 공장 생산성 향상에 큰 영향이 없지만 제대로 안되면 엄청난 악영향을 미치는 작업들이다.
그래서 가능한 한 계속 일할 수 있는 6축 로봇은 <strong>운반과 적재에 관련된 작업에 가장 많이 활용</strong>되고 있다.</p>
<p>거기다가 무거운 운반 작업에 힘이 좋은 기계가 사용되니 <strong>안전성과 작업 효율성</strong>도 증가되는 장점이 있다. 정해진 방법대로만 쌓으니 하역 과정도 자동화를 하기 좋다는 장점은 덤이다.</p>
<h2 id="4-품질검사">4. 품질검사</h2>
<p>
  <img src="https://velog.velcdn.com/images/_roadhobo/post/ed5e2d11-9940-4c68-96b7-4c5ac8c29122/image.png" width=400>
</p>

<p>반복 작업에 특화되어 있는 6축 로봇의 특징답게 <strong>반복적인 검사</strong>에도 강력한 성능을 발휘한다. 특히 불량품 검사는 실수가 나올 시에 기업 이미지에 치명적일 수 있으니 자동화가 좀 더 유리한 면이 있다.
물론 기계도 조금씩 오류가 생길 수 있기 때문에 복잡한 검사 작업은 인간 전문가와 협업해서 하는 경우가 많다고 한다.</p>
<h1 id="2-로봇-산업의-양상---피지컬-ai">2. 로봇 산업의 양상 - 피지컬 AI</h1>
<p><a href="https://www.impactive-ai.com/insight/physical-ai-will-transform-the-future-of-manufacturing">https://www.impactive-ai.com/insight/physical-ai-will-transform-the-future-of-manufacturing</a>
△ 참조 기사</p>
<p>
  <img src="https://velog.velcdn.com/images/_roadhobo/post/0710ec43-b9cf-4275-9e7d-c018b987ae0b/image.png" width=600>
</p>


<p>최근 AI 기술이 충분히 발전하며 난립하던 개념들이 정립되고 있다.
세계적으로 AI 열풍이 불고 AI 버블이 끝나간다는 소리가 나오고 있으니 당연한 결과인지도 모르겠다. 이 흐름 속에서 엔비디아의 CEO 젠슨 황은 AI를 총 4단계로 정의했다.</p>
<blockquote>
</blockquote>
<ol>
<li>인식 AI(Perception AI) : 이미지 &amp; 음성을 인식해 데이터로 변환하는 AI</li>
<li>생성형 AI(Generative AI) : ChatGPT 같이 주어진 데이터에 대한 대응을 생성하는 AI</li>
<li>에이전틱 AI(Agentic AI) : 자율적으로 의사결정을 내리는 AI</li>
<li>피지컬 AI(Physical AI) : 물리적인 세계에 대응해 즉각적으로 행동하는 AI</li>
</ol>
<p>현재 AI의 수준은 에이전틱 AI라고 부를 수 있는 수준에 도달했고, 발전 목표는 피지컬 AI의 시대로 넘어가고 있다. 상황의 변화와 갑작스레 발생하는 일이 많은 물리적 세계에서 활동할 수 있는 AI를 만드는 것은 <strong>생명체가 본능적으로 취하는 사고와 행동들을 로봇의 구조와 역할에 맞게 강화시켜 학습</strong>시키는 것이 최종적인 목표이기에 매우 어려운 일이다.</p>
<p>그래서 현재의 목표는 <strong>창의적 문제 해결, 복잡한 판단, 예외 상황 대응에 뛰어난 인간</strong>과 정밀하고 <strong>반복적인 작업, 위험한 환경에서의 작업, 대량의 데이터 처리에 뛰어난 로봇</strong>이 <strong>상호 보완하는 협업 모델</strong>을 만드는 데에 있다.
즉, 인간과 로봇을 감독관과 노동자의 관계로 만들어 인간의 의도대로 정확히 움직이는 <strong>로봇을 통해 개인의 능력을 증강</strong>시키는 것이 목표인 것이다.</p>
<p>이런 목표에 따라 해당 분야의 유명 기업인 <strong>테슬라, BMW, 현대자동차그룹</strong> 등은 자율적으로 행동하는 휴머노이드 및 사족보행 로봇의 시스템을 확장하여 피지컬 AI에 적용하기 위한 준비를 하고 있다.</p>
<p style="display: flex;">
  <img src="https://velog.velcdn.com/images/_roadhobo/post/005a4bb8-f395-47f8-9a50-6d09f2d613ae/image.png" width=400>
  <img src="https://velog.velcdn.com/images/_roadhobo/post/1790ad2e-38e2-4478-95e6-16479925023e/image.png" width=400>
</p>

<p>예시로 현대 자동차는 <strong>로봇의 강인한 하드웨어와 더불어 AI를 활용한 모빌리티+로보틱스</strong>를 추구하고 있으며, 테슬라의 휴머노이드 옵티머스는 <strong>섬세한 AI 비전과 손 동작을 앞세워 단순노동을 대부분 해내는 로봇</strong>을 만들고 있다. <del>진짜 대단하긴 하다</del></p>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/fbca419a-0f01-4e92-94c3-009c33cc5848/image.png" alt=""></p>
<p>그리고 이러한 기조는 산업에도 적용되어 발전하고 있다. 특히 대한민국처럼 인구가 크게 줄거나 미국처럼 제조업의 인기가 적은 국가는 산업 분야의 자동화가 나라의 운명을 가를 수준이 되었다.</p>
<p>2026년 예산에 현 대한민국 정부는 거의 5000천억원의 예산이 피지컬 AI에 할당했고, AX-Sprint 300이라는 중소기업의 제조 AI 개발 가속화 프로젝트에도 많은 예산을 배치했다. 미국, EU의 여러 국가들, 중국도 이미 해당 분야에서 앞서나가는 기업을 다수 보유하고 있기에 공업이 강한 대한민국 입장에선 발등에 불이 떨어진 상황이라고 한다.</p>
<p>여러모로 불안한 상황을 잘 극복할 수 있을지는 모르겠지만 어쨌든 자동화 분야를 공부하고 있는 내 입장에서는 고마운 이야기이다. 취직을 시켜줄 지는 모르겠지만 말이다.</p>
<hr>
<p>이 글 쓰면서 전체 수출 &amp; 수입액의 20% 정도를 중국에 의존하고 있다는 사실에 좀 놀랐다. 높다는 건 알았는데 인구 수는 정말 무시를 못하는구나 싶었다. 중국과의 관계에 조심스러운 게 확실히 이해가 된다.</p>
<p>6축 로봇도 대부분 중국이 공급하고 있어서 해당 분야의 기술력은 우리나라가 꽤 밀리는 게 아닌가 싶다. 솔직히 중국에 그다지 좋은 인상을 가진 건 아니지만 이런 부분은 무시 못할 거 같다.</p>
<p>어쨌든 2025-10-18 복습 끝</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[로봇활용 첨단 생산시스템 전문가 양성 교육기 (메카트로닉스) - 24]]></title>
            <link>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-24</link>
            <guid>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-24</guid>
            <pubDate>Fri, 10 Oct 2025 05:09:30 GMT</pubDate>
            <description><![CDATA[<p>연휴도 거의 끝나간다.
연휴 중 반은 술 마신 기억 밖에 없어서 뭔가 금방 가버린 느낌이다.
나머지 반은 유튜브 보면서 방에서 뒹굴거려서 그런 것도 있는 거 같다.</p>
<p>어쨌든 지난 주에 블로그를 못 써서 저번 주에 쓰려던 글을 오늘에야 쓴다.
오늘 주제는 산업용 로봇이다.</p>
<hr>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/5ddfbb66-1a39-48a8-afa8-92cb9b27e975/image.jpg" alt=""></p>
<p>▲ Denso 사에서 만든 6축 로봇 ( 들은 바로는 꽤 구형이라고 한다 )</p>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/6a5d92c6-0a6e-4132-bdae-5c42b6beff4f/image.jpg" alt=""></p>
<p>▲ 로봇을 조종하는 펜던트 ( 생각보다 꽤 크다 )</p>
<p>영상 찍는 걸 까먹어서 영상은 다음 글 쓸 때나 올릴 수 있을 거 같다.</p>
<hr>
<h1 id="1-로봇의-종류">1. 로봇의 종류</h1>
<h2 id="1-스카라-로봇-scara">1. 스카라 로봇 SCARA</h2>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/e1cc0c2e-cfea-41c9-929d-da4054ace8f5/image.png" alt=""></p>
<p><strong>선택적 컴플라이언스 조립 로봇 암(Selective Compliance Assembly Robot Arm)</strong>이라는 의미로, Z축이 고정되어 <strong>수평 방향으로 움직이는 다관절 로봇</strong>을 일컫는다.</p>
<p>스카라 로봇의 가장 눈에 띄는 장점은 <strong>유연하고 빠르다는 점</strong>이다. 움직임이 유연한 것은 다관절 로봇들이 모두 공유하는 장점이다. 다만 관절이 비교적 적고 수직 이동이 제한된 스카라 로봇은 복잡한 동작은 못해도 단순동작이 매우 빠르다는 특징을 지녔다. 추가로 <strong>차지하는 공간이 작다</strong>는 점도 좋은 점이다.</p>
<p>단점은 <strong>수직 부하에는 강해도 수평에는 굉장히 취약</strong>하다는 점이다. 거기다 움직임이 제한되어있어 <strong>상하 움직임이 필요하면 사용 불가</strong>하다.</p>
<p>이러한 특징들 덕분에 <strong>평평한 판에서 행해지는 조립 작업이나 운반</strong> 등에 유용하게 활용되고 있다.</p>
<h2 id="2-데카르트-좌표-로봇">2. 데카르트 좌표 로봇</h2>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/c9b5ceaa-6152-4747-af2a-22a1d3e1bf6c/image.png" alt=""></p>
<p>수학 시간에 배웠던 <strong>직교 좌표계</strong>를 이용하는 로봇이다. 일반적으로 이미지처럼 크레인 형태로 만들어지는 경우가 많다. 일반적으로 큰 공장 밖에선 보기 힘든 로봇이지만, 인형뽑기 기계가 데카르트 좌표 로봇과 비슷해서 꽤 친숙한 느낌이 있다.</p>
<p>데카르트 좌표 로봇의 장점은 <strong>강하고 정확하다는 점</strong>이다. 기본적으로 관절이 아닌 철제 프레임을 따라 움직이기 때문에 다른 로봇에 비해 <strong>부하에 굉장히 강하다</strong>. 부하에 강하면 동작에 오류가 적어지기에 자연스럽게 정밀한 작업에 용이해진다는 결론도 따라온다.</p>
<p>단점은 <strong>복잡한 움직임이 힘들다</strong>는 점이다. 회전과 접는 작업을 못하기 때문에 용접과 조립 같은 복잡한 작업에는 부적절하다. 또 일반적으로 <strong>작업 반경만큼 공간을 차지</strong>하기에 굉장히 크다.</p>
<p>이러한 특징들 때문에 <strong>무거운 물건을 운반하는 작업이나 CNC, 밀링 같은 정밀한 작업</strong>에 사용된다.</p>
<h2 id="3-다관절-로봇">3. 다관절 로봇</h2>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/b181fd53-3b9d-410b-bca0-cd0ea43e72c0/image.png" alt=""></p>
<p><strong>2개 이상의 회전 관절이 있는 로봇</strong>이다. 사실 여기에 해당된다면 모두 다관절 로봇이라고 할 수 있기에 큰 범주에 속하지만, 여기서는 <strong>산업용 로봇팔 중 3축 이상의 로봇</strong>만 언급하겠다.</p>
<p>다관절 로봇의 장점이자 단점은 <strong>유연하다</strong>는 점이다. 관절이 많을수록 복잡한 동작을 수행할 수 있는 방법이 많아지지만, 이를 일일히 제어하기가 번거롭다. 또 관절은 내구성이 좋지 않은 부품이기에 너무 높은 부하를 견디는 작업에는 적합하지 않다.</p>
<p>이러한 특징들 때문에 <strong>용접 같은 복잡한 작업이나 선반 분류 작업</strong>에 적합하다.</p>
<h1 id="2-로봇-팔의-구성요소">2. 로봇 팔의 구성요소</h1>
<p>참조 사이트 : <a href="https://www.evsint.com/ko/parts-and-components-of-industrial-robots/#elementor-toc__heading-anchor-0">https://www.evsint.com/ko/parts-and-components-of-industrial-robots/#elementor-toc__heading-anchor-0</a></p>
<h2 id="1-로봇-팔-매니퓰레이터">1. 로봇 팔 (매니퓰레이터)</h2>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/b6be6854-5807-4c45-a6d4-3fb4b785c969/image.png" alt=""></p>
<p>로봇 팔의 본체이다.
인간의 팔 구조를 유사하게 따라하여 어깨, 팔꿈치, 손목으로 구성되어있다. 각각의 관절이 <strong>수직 &amp; 수평 회전축 쌍</strong>으로 이루어져 있기에 <strong>6축 로봇</strong>이라고 부르기도 한다.
여러 가지 가동축과 베어링, 프레임 등으로 이루어져 실질적으로 움직이는 부분이기도 하기에, <strong>매니퓰레이터(기구부)</strong>라고도 부른다.</p>
<h2 id="2-엔드-이펙터">2. 엔드 이펙터</h2>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/71deb0ad-cc9f-42ed-8e62-4b5dc8dea019/image.png" alt=""></p>
<p>로봇 팔 끝(손목)에 장착되는 도구이다.
로봇 팔은 하나의 고유한 역할을 수행하기보다는 여러 가지 역할을 동시에 수행하는 것이 목적이며, <strong>엔드 이펙터에 따라 수행할 수 있는 역할이 달라</strong>진다.</p>
<h2 id="3-모터-액츄에이터">3. 모터 (액츄에이터)</h2>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/38543d63-26ca-4006-afda-2736148c119c/image.png" alt=""></p>
<p>공압, 유압, 전기 에너지 등으로 <strong>동력을 제공하고 동작을 제어</strong>하는 부분이다.
로봇 팔은 모터가 없으면 스스로 움직일 수 없기 때문에, 모터를 <strong>액츄에이터(작동부)</strong>라고 하기도 한다.</p>
<h2 id="4-센서">4. 센서</h2>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/e836d112-eb8f-49e6-bcb8-ce256de4191e/image.png" alt=""></p>
<p>온도, 각도, 움직임, 무게 등을 감지하거나 측정하는 장치이다. 이를 통해 로봇은 안전하고 정밀하게 움직임을 조정할 수 있다.
<strong>협동 로봇</strong>이라는 개념에서 매우 중요한 장치인데, 로봇이 <strong>인간과 같은 공간에서 협동하여</strong> 작업을 할 때는 상대적으로 취약한 인간의 행동과 위치를 파악하는 게 안전하다. 때문에 센서가 인간을 탐지하고 적절히 반응할 수 있는 시스템은 이런 환경에서 필수적이게 되었다.</p>
<h2 id="5-제어장치">5. 제어장치</h2>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/5096df70-8f44-4519-9ef3-28e3aa7da6dd/image.png" alt=""></p>
<p>위의 모든 구성요소를 통제하는 장치, 즉 <strong>컴퓨터</strong>이다. 명령을 수신하고 이행하는 소프트웨어를 탑재하고 있으며 작동 시에 로봇의 움직임 경로를 계산하는 기능 또한 가지고 있다.
최근 들어서는 AI가 탑재되어 능동적으로 센서와 모터를 운용하는 기능도 정교화되어 만들어지고 있다. 이를 <strong>스마트 로보틱스</strong>라고 부른다고 한다.</p>
<hr>
<p>오랜만에 로봇 가지고 재밌는 수업 받아서 그런지 시간이 금방 갔었다.
PLC와 로봇을 연동하여 활용하는 부분이 공장 자동화에 제일 중요한 부분이라고도 하니 좀 더 자세히 배울 수 있으면 좋겠다.</p>
<p>2025-10-10 복습 끝</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[로봇활용 첨단 생산시스템 전문가 양성 교육기 (메카트로닉스) - 23]]></title>
            <link>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-23</link>
            <guid>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-23</guid>
            <pubDate>Sat, 27 Sep 2025 14:43:40 GMT</pubDate>
            <description><![CDATA[<p>지난 주에 친구랑 노느라 블로그를 까먹어버렸다.
요즘에 점점 게을러지는 느낌이 드는게 조금씩이라도 초심으로 돌아와야겠다는 생각이 든다.
그래도 내용을 너무 길게 써버리면 지쳐버리니까 짤막하게 쓰는 건 유지해야겠다.</p>
<p>어쨌든 복습할 내용을 말하자면, SCADA 수업을 배우면서 SQL을 좀 활용하게 되었다. 물론 프로그래밍하면서 DB, DBMS, SQL은 자주 사용해보기는 했다.
그래도 이번에 수업을 하면서 MSSQL, MySQL 등의 차이에 대해서는 아직 잘 모르고 있다는 생각이 들었다. 오늘은 그 내용에 대해 복습하려고 한다.</p>
<p>시작한다.</p>
<hr>
<h1 id="0-개요">0. 개요</h1>
<p>현재 수업에서 배우고 있는 두 가지 DBMS가 있다.
바로 MSSQL과 MySQL인데 요약부터 하자면, 이 둘의 차이점은 아래와 같다.</p>
<table>
<thead>
<tr>
<th>항목</th>
<th>MSSQL (Microsoft SQL Server)</th>
<th>MySQL</th>
</tr>
</thead>
<tbody><tr>
<td>개발사</td>
<td>마이크로소프트</td>
<td>오라클(구 Sun, MySQL AB)</td>
</tr>
<tr>
<td>운영체제</td>
<td>윈도우 중심, 최근 리눅스도 지원</td>
<td>윈도우, 리눅스, macOS 등 범용</td>
</tr>
<tr>
<td>라이선스</td>
<td>상용(엔터프라이즈급), 무료 에디션 있음 (Express)</td>
<td>GPL 오픈소스, 상용 에디션도 있음</td>
</tr>
<tr>
<td>기본 스토리지 엔진</td>
<td>자체 엔진(페이지 구조 기반)</td>
<td>InnoDB(기본), MyISAM 등 선택 가능</td>
</tr>
<tr>
<td>트랜잭션 처리</td>
<td>강력, 복잡한 트랜잭션 처리에 최적화</td>
<td>InnoDB는 지원하나 성능/기능은 MSSQL보다 단순</td>
</tr>
<tr>
<td>동시성 제어</td>
<td>주로 <strong>행 수준 잠금</strong> + 다양한 Isolation Level</td>
<td>InnoDB는 <strong>행 수준 잠금</strong>, MyISAM은 <strong>테이블 잠금</strong></td>
</tr>
<tr>
<td>확장성</td>
<td>대용량 엔터프라이즈 환경 최적</td>
<td>웹 서비스·중소규모에 적합, 최근엔 확장성도 개선</td>
</tr>
<tr>
<td>표준 SQL 호환성</td>
<td>T-SQL 사용 (SQL 확장)</td>
<td>MySQL SQL 방언, 일부 표준 미지원</td>
</tr>
<tr>
<td>도구/관리</td>
<td>SQL Server Management Studio(SSMS) 등 GUI 풍부</td>
<td>MySQL Workbench 제공, 상대적으로 단순</td>
</tr>
<tr>
<td>보안/권한</td>
<td>AD 통합, 세밀한 권한 설정</td>
<td>기본 사용자/권한 관리, MSSQL보다 단순</td>
</tr>
</tbody></table>
<p>솔직히 이렇게 봐서는 한눈에 장단점을 파악하기 힘들다. 그래서 조금 풀어서 설명해보고자 한다.</p>
<h1 id="1-mssql">1. MSSQL</h1>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/9ff246b1-ff34-4388-b95f-245af10c77d4/image.png" alt=""></p>
<p>마이크로소프트에서 제작한 DBMS이다.
마이크로소프트답게 <strong>Windows 환경에 최적화</strong>되어있다. 최근에는 <strong>리눅스 환경</strong>에서도 작동한다는 이야기를 보면 운영체제간 유동성도 좋은 편이다.</p>
<p>자체적인 엔진을 사용하기에 <strong>기능, 성능, 호환성 관리가 용이</strong>하고 <strong>기업을 염두에 둔 고급 기능을 탑재</strong>하고 있기에 <strong>퍼포먼스 자체가 강력</strong>하다.</p>
<p>거기에 더해 <strong>외부 플러그인이나 엔진 교체에 따른 위험없이</strong> 업데이트와 내부 기능으로 여러 작업을 수행할 수 있는만큼 DB와 프로그램 그 자체의 보안성이 아주 뛰어나다. 사실상 대기업 등에서 MSSQL를 사용하는 주된 이유라고도 할 수 있겠다.</p>
<p>마지막으로 사족을 더하자면, 사용 경험에 의해 판단한 바로는 <strong>마이크로소프트가 개발한 C#을 이용한 프로그램과 같이 사용하기에 좋은 DBMS</strong>라는 생각이 들었다.
C#의 클래스 중에서는 <strong>.NET Framework와 MSSQL의 연동을 염두</strong>한 <code>Microsoft.Data.SqlClient</code>도 존재하여 강력한 연동성을 자랑한다.</p>
<p>이런 이유들로 <strong>Windows, Linux 시스템 기반의 대규모 프로젝트에 사용할 시에 유리</strong>하다.</p>
<h1 id="2-mysql">2. MySQL</h1>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/440050bd-ecad-4a13-b579-319650874a91/image.png" alt=""></p>
<p>Oracle에서 개발한 DBMS이다.
위의 MSSQL이 마이크로소프트에서 개발한 C#과 훌륭한 연동성과 비슷한 장점을 공유하듯이, MySQL은 <strong>JAVA와 상당 부분 장점을 공유</strong>한다.</p>
<p>일단 <strong>뛰어난 범용성</strong>으로 Windows, MacOS, Linux 등 <strong>대부분의 환경에서 작동</strong>할 수 있다. 이 장점은 서로 운영체제가 달라도 동일한 작동 결과를 보장하는 JAVA의 JVM을 이용하는 이유와 일맥상통한다.</p>
<p>또한, MySQL은 <strong>오픈소스 기반</strong>이라는 점이 강점이다. <strong>다양한 오픈소스 프레임워크에서 기본 지원</strong>을 하고 있으며 <strong>무료로 모든 기능을 사용</strong>할 수 있는만큼 접근성이 아주 뛰어나다.
이런 접근성 덕분에 사실상 표준으로 자리잡게 된 MySQL은 <strong>클라우드나 오픈스택 등에도 기본값</strong>으로 활용되는 경우가 많다.</p>
<p>거기에 많은 기능이 탑재되지 않아 <strong>경량성과 단순성이 뛰어나서</strong> 복잡한 초기 세팅이 부담되는 <strong>소규모 개발자들이나 초보자들</strong>에게는 오히려 기능이 적은 게 매력적인 부분이다.</p>
<p>여담이지만, 내가 개인적으로 느낀 제일 좋은 점은 <strong>사용하는 사람이 많아서 문제 해결이 빠른 점</strong>이다. 이게 정말 압도적인 장점이라서 대학생일 때에는 MySQL 같은 DBMS 외에는 잘 사용하지 않았다.
<del>ODBC 설정이 잘 나와있어서 너무 편했다</del></p>
<p>그래서 결론으로 MySQL은 <strong>JAVA &amp; 웹 기반의 소규모 프로젝트에 사용할 시에 편리</strong>하다.</p>
<hr>
<p>오늘 결혼식 갔다와서 피곤하니 이정도만 하고 일찍 자야겠다.
2025-09-27 복습 끝</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[로봇활용 첨단 생산시스템 전문가 양성 교육기 (메카트로닉스) - 22]]></title>
            <link>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-22</link>
            <guid>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-22</guid>
            <pubDate>Sat, 13 Sep 2025 05:30:26 GMT</pubDate>
            <description><![CDATA[<p>오늘은 프로젝트에서 사용하거나 다른 곳에 활용할 수도 있는 파이썬 패키지에 관해 간단히 적어두려고 한다.</p>
<p>최근에 프로그래밍 수업이 있었다. 대부분은 아는 내용이라서 좀 심드렁하게 들었는데 패키지는 실습 위주의 내용이 많아서 잠깐 적어둬도 나쁠 것 없겠다는 생각이 들었다.</p>
<hr>
<h1 id="1-fastapi">1. FastAPI</h1>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/3645cbb7-7f2b-4bbf-b82d-5b97409f17d5/image.png" alt="">
공식문서 : <a href="https://fastapi.tiangolo.com/ko/">https://fastapi.tiangolo.com/ko/</a></p>
<p> <strong>FastAPI</strong>는 <strong>소규모 프로젝트</strong>에 주로 사용되는 API 생성용 웹 프레임워크다. 파이썬으로 만들어지는 프로그램들은 언어의 특성상 대부분 소규모로 만드는 데에 유용하기 때문에, 그에 맞는 현대적인 웹 프레임워크라고 할 수 있겠다.</p>
<h2 id="django--drfdjango-rest-framework와-비교">Django + DRF(Django Rest Framework)와 비교</h2>
<h4 id="빠른-개발-성능-중시--fastapi">빠른 개발, 성능 중시 =&gt; FastAPI</h4>
<h4 id="안정성-대규모-팀-기존-django-활용--django--drf">안정성, 대규모 팀, 기존 Django 활용 =&gt; Django + DRF</h4>
<table>
<thead>
<tr>
<th></th>
<th>FastAPI</th>
<th>Django + DRF</th>
</tr>
</thead>
<tbody><tr>
<td>개발속도</td>
<td>간결하고 빠름</td>
<td>꽤 장황한 코드, 개발 느림</td>
</tr>
<tr>
<td>성능</td>
<td>비동기 지원하여 좋은 데이터 로딩 성능</td>
<td>동기 기반이라 성능 떨어짐</td>
</tr>
<tr>
<td>난이도</td>
<td>편의 기능이 많아 쉬움</td>
<td>상대적으로 어려움</td>
</tr>
<tr>
<td>안정성</td>
<td>*ORM/관리도구 없어 안정성 낮음</td>
<td>Django ORM, Admin, 인증/권한 시스템 등 풀스택 제공</td>
</tr>
<tr>
<td>교육접근성</td>
<td>생태계 작으나 러닝 커브 원만함</td>
<td>생태계가 커 자료가 많음</td>
</tr>
<tr>
<td>##### *ORM(Object-Relational Mapping, 객체-관계 매핑) : 객체지향 언어와 관계형 DB 연결하는 기능</td>
<td></td>
<td></td>
</tr>
</tbody></table>
<h2 id="예시">예시</h2>
<pre><code class="language-python">from typing import Union

from fastapi import FastAPI

app = FastAPI()


@app.get(&quot;/&quot;)
def read_root():
    return {&quot;Hello&quot;: &quot;World&quot;}
&gt;&gt;&gt; root 주소에서는 {&quot;Hello&quot;: &quot;World&quot;} json파일을 반환한다.
&gt;&gt;&gt; https://(도메인 주소)/


@app.get(&quot;/items/{item_id}&quot;)
def read_item(item_id: int, q: Union[str, None] = None):
    return {&quot;item_id&quot;: item_id, &quot;q&quot;: q}
&gt;&gt;&gt; /items/{item_id} 주소에서는 {&quot;item_id&quot;: 아이템의 아이디, &quot;q&quot;: q} json파일을 반환한다.
&gt;&gt;&gt; https://(도메인 주소)/items/아이템의 아이디?(여러가지 파라미터)</code></pre>
<h1 id="2-streamlit">2. Streamlit</h1>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/53f47367-8b8e-4c33-a873-228bfbcca3ef/image.png" alt=""></p>
<p> <strong>Streamlit</strong>은 파이썬 코드만으로 대화형 웹 앱을 빠르게 만드는 오픈소스 라이브러리 패키지다. 해당 패키지를 활용하면 기존의 Qt 패키지를 쓰거나, 백엔드 측면에서만 쓰던 방식과는 다르게 파이썬으로 빠르고 간결하게 UI를 만들어볼 수 있다.</p>
<h2 id="장점">장점</h2>
<ul>
<li>데이터 과학·ML 모델 시각화에 특화</li>
<li>HTML/CSS/JS 몰라도 사용 가능</li>
<li>위젯(슬라이더, 버튼 등)으로 인터랙션 제공</li>
<li>코드 수정 시 자동 리로드</li>
<li>배우기 쉽고 개발 속도 빠름</li>
<li>배포 간단 (Streamlit Cloud 등)</li>
</ul>
<h2 id="단점">단점</h2>
<ul>
<li>복잡한 웹 기능에 한계 (특히 데이터 통신과 애니메이션 등)</li>
<li>UI 커스터마이징 제약 많음</li>
<li>대규모 사용자 트래픽 처리엔 부적합</li>
</ul>
<p>트래픽이 요구되는 대형 커뮤니티 &amp; 독자적인 UI가 필요한 사이트에는 적합하지 않지만 <strong>포트폴리오, 데이터 분석 사이트</strong> 등의 <strong>간략한 사이트 혹은 프로토타입</strong>에 한해서 특화된 패키지라고 할 수 있다. 그래서 백엔드의 개발이 우선될 시에 테스트용으로 정말 유용하다.</p>
<h2 id="예시-1">예시</h2>
<pre><code class="language-python">import streamlit as st

st.title(&quot;간단한 Streamlit 예시&quot;)

name = st.text_input(&quot;이름을 입력하세요&quot;)
age = st.number_input(&quot;나이를 입력하세요&quot;, min_value=0, max_value=120, step=1)

if st.button(&quot;확인&quot;):
    st.write(f&quot;안녕하세요 {name}님, 나이는 {age}세입니다.&quot;)</code></pre>
<blockquote>
<p>if st.button(&quot;확인&quot;):</p>
</blockquote>
<p>다른 언어들과는 다르게 UI 객체의 배치와 값 반환이 별개의 구문으로 나뉘어지지 않는다. 덕분에 빠른 개발이 가능하며 가독성이 좋은 사이트를 쉽게 만들 수 있다.</p>
<h1 id="3-opencv">3. OpenCV</h1>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/96ac1e1c-bbaa-4758-a4bb-b0f2618caa64/image.png" alt=""></p>
<p> <strong>OpenCV</strong>는 이미지 및 동영상을 처리하는 컴퓨터 비전 라이브러리이다. 이미지와 동영상을 파이썬 코드로 제어할 수 있고 이를 머신러닝에 활용할 수 있는 데이터로 가공하는 기능 또한 가지고 있다.</p>
<h2 id="장점-1">장점</h2>
<ul>
<li>방대한 기능, 다양한 언어 바인딩(Python, C++, Java 등)</li>
<li>무료, 커뮤니티 크고 자료 많음</li>
<li>실시간 처리 가능</li>
</ul>
<h2 id="단점-1">단점</h2>
<ul>
<li>고급 기능은 직접 구현 필요</li>
<li>파라미터 튜닝 난이도 높음</li>
<li>ML/DL 최신 모델은 제한적 (PyTorch, TensorFlow와 함께 쓰는 경우 많음)</li>
</ul>
<p>현재는 미디어 파일을 데이터로 변환해주고, 다른 머신러닝 패키지와 병행하여 사용하는 케이스가 많다고 한다. 파이썬 패키지이기 때문에 다른 언어를 사용할 필요가 없어 나름 일관화된 코드를 만들수 있다.
 <strong>얼굴 인식, 자율주행, 로보틱스, 증강현실, 스마트팩토리</strong> 등 4차 산업 분야에 널린 쓰이고 있다.</p>
<hr>
<p> 확실히 파이썬은 언어 특유의 범용성과 편의성 때문인지 데이터 처리에 관련해서는 큰 생태계를 가지고 있는 것 같다. 그리고 활용방법이 쉽고 가벼워서 선호하게 되기도 하고.</p>
<p> 어쨌든 이런 거 활용해서 다른 프로젝트도 한번 만들어볼까하는 생각도 든다. 여기 강사님들이 AI 관련 경진대회 나가는 걸 강력하게 추천하는데, 그 정도는 아니라도 재밌는 거 하나는 만들어볼 수 있지 않을까.</p>
<p> 그럼 2025-09-13 복습 끝.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[로봇활용 첨단 생산시스템 전문가 양성 교육기 (메카트로닉스) - 21]]></title>
            <link>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-21</link>
            <guid>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-21</guid>
            <pubDate>Fri, 05 Sep 2025 13:21:30 GMT</pubDate>
            <description><![CDATA[<p>지난번에 이어서 SCADA 시뮬레이션 얘기를 하려고 한다. 근데 검색해봐도 별로 나오는 게 없었다. </p>
<p>그래서 그냥 gif 몇개 가져왔다.</p>
<hr>
<p><img src="https://equinoxce.com/img/anim/web.gif" alt="">
출처) <a href="https://equinoxce.com">https://equinoxce.com</a></p>
<p>유체 펌프 배관을 시뮬레이션 하는 기능이다.
0, 1을 기반으로 한 Digital Data와 실수값인 Analog Data를 활용해서 시뮬레이션을 돌리게 된다.</p>
<p>중간에 나오는 그래프들은 Trend라고 하는데, 한국어로 번역된 SCADA 프로그램에서는 <strong>경향</strong>이라고도 한다.
 <strong>데이터의 변동을 측정해서 보여주는 기능</strong>으로 사실상 알람과 함께 <strong>원격감시 프로그램의 핵심</strong>이라고 할 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/b44fd2be-aada-4214-84a3-79ce4744b18a/image.png" alt="">
<img src="https://velog.velcdn.com/images/_roadhobo/post/ecf9920e-03ab-4931-8e7b-c1e40408b1fc/image.png" alt=""></p>
<p>이런 SCADA 시뮬레이터 중 3D 환경을 표시하는 고급형도 있다고 한다.</p>
<p>다만 3D vs 2D 프로그램 이야기에서 꼭 나오는 <strong>비용, 복잡도, 프로그램 속도</strong>를 고려하여 결정해야 한다.
시뮬레이터는 많은 연산을 필요로 하기에 국내에 보급되는 SCADA는 <strong>2D</strong>를 선택하는 경우도 많은 것 같다.</p>
<hr>
<p>오늘은 그냥 이쯤해야겠다.
다음 주에 컴퓨터 프로그래밍 수업하니까 Streamlit이랑 FastAPI 정보 올려야겠다.</p>
<p>2025년 09월 05일 복습 끝</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[로봇활용 첨단 생산시스템 전문가 양성 교육기 (메카트로닉스) - 20]]></title>
            <link>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-20</link>
            <guid>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-20</guid>
            <pubDate>Sun, 31 Aug 2025 03:28:35 GMT</pubDate>
            <description><![CDATA[<p>설비보전기사 필기는 지난 주에 무사히 합격했다.
블로그 쓰는 걸 깜빡해서 한주 건너뛰긴 했지만 일단은 적어두고 싶었다.</p>
<p>이제 실기 준비를 해야하지만, SCADA를 새로 배우기 시작했으므로 그에 관해 간단히 적어보자 한다.</p>
<p>물론 GPT 쓸 거다.</p>
<hr>
<h1 id="1-scada란">1. SCADA란?</h1>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/4b680396-533c-4142-b979-6add8e657497/image.png" alt=""></p>
<p> 산업 설비나 인프라를 <strong>원격에서 모니터링하고 제어</strong>하기 위한 시스템이다. 공장에 일일히 접근하지 않고, 여러 센서와 프로그램을 통해 효율적인 관리보전을 하기 위해 만들어졌다.</p>
<h4 id="주요-기능">주요 기능</h4>
<ol>
<li>실시간 데이터 수집 (온도, 압력, 전류, 유량 등)</li>
<li>상태 모니터링 및 알람 (이상 감지, 경보 발생)</li>
<li>제어 명령 전송 (밸브 개폐, 스위치 제어, 모터 동작 등)</li>
<li>데이터 기록 및 분석 (이력 관리, 보고서 생성)</li>
<li>원격 제어 및 자동화 지원</li>
</ol>
<p>이런 기능에 의해 <strong>인력과 비용 절감, 데이터 기록 및 분석, 효율성과 안전성 증가</strong>라는 효과를 볼 수 있게 된다.</p>
<p>다만, 프로그램에 의해 운영되기에 <strong>해킹 등의 사이버 공격</strong>에 취약하다는 단점도 있다.</p>
<h1 id="2-scada와-dcs">2. SCADA와 DCS</h1>
<table>
<thead>
<tr>
<th>구분</th>
<th><strong>SCADA (Supervisory Control And Data Acquisition)</strong></th>
<th><strong>DCS (Distributed Control System)</strong></th>
</tr>
</thead>
<tbody><tr>
<td><strong>주요 목적</strong></td>
<td>원격 감시·제어 (광범위한 설비 관리)</td>
<td>공정 제어 (실시간/연속 제어)</td>
</tr>
<tr>
<td><strong>사용 범위</strong></td>
<td>발전소, 송배전망, 상하수도, 가스·송유관 등 <strong>넓은 지역 분산 시스템</strong></td>
<td>화학, 제약, 정유, 발전소 내부 등 <strong>하나의 플랜트나 공정</strong></td>
</tr>
<tr>
<td><strong>제어 방식</strong></td>
<td>중앙 SCADA 서버(HMI)에서 RTU/PLC를 통해 원격 제어</td>
<td>제어 기능이 각 **분산 컨트롤러(Controller)**에 내장되어 로컬 제어</td>
</tr>
<tr>
<td><strong>데이터 처리</strong></td>
<td>데이터 수집·모니터링 위주, 이벤트/알람 관리 중심</td>
<td>정밀한 실시간 제어와 폐루프(Feedback) 제어 가능</td>
</tr>
<tr>
<td><strong>구성 장치</strong></td>
<td>HMI, SCADA 서버, RTU, PLC, 통신 네트워크</td>
<td>HMI, DCS 서버, I/O 모듈, 컨트롤러(Controller)</td>
</tr>
<tr>
<td><strong>통신 구조</strong></td>
<td>종종 WAN, 무선, 인터넷 기반 (보안 중요)</td>
<td>주로 LAN, 산업용 전용 네트워크 기반</td>
</tr>
<tr>
<td><strong>확장성</strong></td>
<td>대규모, 지리적으로 분산된 시스템에 적합</td>
<td>공장/플랜트 내부 단위 확장에 적합</td>
</tr>
<tr>
<td><strong>예시</strong></td>
<td>전력망 모니터링, 송유관 제어, 상수도 관리</td>
<td>화학 반응 제어, 보일러 제어, 터빈 제어</td>
</tr>
</tbody></table>
<h1 id="3-취업처-링크만">3. 취업처 (링크만)</h1>
<p><a href="https://www.jobkorea.co.kr/Search/?stext=SCADA">https://www.jobkorea.co.kr/Search/?stext=SCADA</a></p>
<p> SCADA를 활용하는 직업은 기본적으로 기술관리직에 속하고 경력과 무관하게 채용을 하는 일도 드물지 않은 것 같다.</p>
<p> 아무래도 해당 분야로 취업을 하려는 사람이 드물어서 생기는 일 같은데 실제로는 어떤지 모르겠다.</p>
<hr>
<p>간단하게 SCADA에 대해서 조사해보니 은근히 시뮬레이션에 관련된 내용도 나왔었다.
아마 다음 주에는 그에 대해 적어놓지 않을까 싶다.</p>
<p>그럼 2025-08-31 복습 끝</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[로봇활용 첨단 생산시스템 전문가 양성 교육기 (메카트로닉스) - 19]]></title>
            <link>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-19</link>
            <guid>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-19</guid>
            <pubDate>Fri, 15 Aug 2025 08:49:11 GMT</pubDate>
            <description><![CDATA[<p>저번에 이어서 설비보전기사 2023년 복원문제들 오답노트한다.</p>
<hr>
<h1 id="제-1과목--설비진단의-계측">제 1과목 : 설비진단의 계측</h1>
<h3 id="1번-문제">1번 문제</h3>
<p>사람이 들을 수 있는 최저가청음압으로 옳은 것은?</p>
<p>정답) 2 * 10⁻⁵ N/m²</p>
<h3 id="3번-문제">3번 문제</h3>
<p>2개의 작음 은원이 있다. 각각 음향출력 W의 비율이 1:25일 때, 이 2개 음원의 음향 파워 레벨의 차이는?</p>
<blockquote>
<p><strong>PWL = 10log P / P0</strong> =&gt; <strong>10 log 25 / 1</strong> =&gt; <strong>약 14dB</strong></p>
</blockquote>
<p>정답) 14dB</p>
<h3 id="08번-문제">08번 문제</h3>
<p>회전기계의 언밸런스인 경우 나타나는 진동특성과 대처방안이 아닌 것은?</p>
<p>1) 수평, 수직 방향에서 최대의 진폭이 발생한다.
<strong>2) 수집된 진동신호는 포락선 처리 후 분석을 실시한다.</strong>
3) 회전 주파수의 1f 성분에서 탁월 주파수가 나타난다.
4) 언밸런스의 양과 회전수가 증가할수록 진동값이 높게 나타난다.</p>
<ul>
<li>포락선 : 주어진 곡선등의 집합에서 각 곡선에 접하는 곡선
<img src="https://velog.velcdn.com/images/_roadhobo/post/c9ee067b-7776-4f87-affe-da4a92af2332/image.png" alt=""></li>
<li>포락선 분석은 베어링, 기어박스 손상 등에서 오는 고주파대역 진동신호 추출을 위해 사용</li>
</ul>
<h3 id="18번-문제">18번 문제</h3>
<p>설비관리를 수행할 때 기능적으로 구분하면 일반관리기능, 기술기능, 실시기능 및 지원기능으로 구분할 수 있다. 이때 일반관리기능에 해당하는 것은?</p>
<p><strong>1) 외주관리</strong>
2) 설비성능분석 =&gt; 기술기능
3) 보전도 향상 연구 =&gt; 기술기능
4) 설비진단기술 이전 및 개발 =&gt; 기술기능</p>
<h1 id="제-2과목--설비관리">제 2과목 : 설비관리</h1>
<h3 id="27번-문제">27번 문제</h3>
<p>유용도 함수를 정확히 나타낸 수식은?</p>
<ul>
<li>MTTR = Mean Time To Repair = 평균수리시간</li>
<li>MTBF = Mean Time Between Failure = 평균고장간격 = 정상작동시간</li>
</ul>
<p>정답) A = MTBF / MTBF + MTTR</p>
<ul>
<li>정상 작동 시간 / 전체 작동 시간</li>
</ul>
<h3 id="29번-문제">29번 문제</h3>
<p>설비효율화 저해손실에 해당하는 것은?</p>
<p><strong>1) 고장손실</strong>
2) 관리손실
3) 에너지손실
4) 보수유지손실</p>
<ul>
<li>설비효율 저해 6대 로스<ul>
<li>고장로스</li>
<li>작업준비조정로스</li>
<li>일시정체로스</li>
<li>속도로스</li>
<li>불량수정로스</li>
<li>초기수율로스</li>
</ul>
</li>
</ul>
<h3 id="31번-문제">31번 문제</h3>
<p>자주보전 7단계의 순서로 옳은 것은?</p>
<p>정답) 초기 청소 =&gt; 발생원인 곤란 개소 대책 =&gt; 점검 급유기준 작성 =&gt; 총점검 =&gt; 자주점검 =&gt; 자주보전의 시스템화 =&gt; 자주관리의 철저</p>
<h3 id="32번-문제">32번 문제</h3>
<p>불량품, 결점, 클레임, 사고 건수 등을 현상이나 원인별로 데이터 처리 후 데이터가 높은 순서부터 나열하고 막대그래프로 나타낸 현상분석방법은?</p>
<p>1) 체크시트 : 체크리스트를 적으며 스스로 체크
2) 히스토그램 : 어떤 값을 중심으로 산포하고 있는가를 조사
<strong>3) 파레토도</strong>
4) 관리도 : 시계열적으로 산포하고 있는 정도를 조사</p>
<h3 id="34번-문제">34번 문제</h3>
<p>레이놀즈는 유체의 흐름이 층류인지 난류인지 구분할 수 있도록 레이놀즈수를 개발하였다. 레이놀즈수에 대한 설명으로 옳지 않은 것은?</p>
<p>1) 레이놀즈수는 무차원 수이다.
2) 레이놀즈수는 속도가 커질수록 커진다.
3) 레이놀즈수는 관지름이 커질수록 커진다.
<strong>4) 레이놀즈수는 동점성계수가 커질수록 커진다. =&gt; 반비례 관계임</strong></p>
<h3 id="38번-문제">38번 문제</h3>
<p>윤활 담당자와 급유원의 직무를 나눌 때 윤활 담당자의 직무로 적당하지 않은 것은?</p>
<p>1) 윤활제 사용 예산
2) 구매 요구 작성 및 의뢰
3) 사용유 정기분석계획표 작성
<strong>4) 급유장치의 관리 및 보수</strong></p>
<ul>
<li>윤활담당자
예산, 표준, 계획, 교육 등</li>
<li>급유원
점검, 보수, 교환, 기초사항 및 소비량 작성 등</li>
</ul>
<h1 id="제-3과목--기계일반-및-기계보전">제 3과목 : 기계일반 및 기계보전</h1>
<h3 id="41번-문제">41번 문제</h3>
<p>그리스의 급지(급유)에 관한 내용으로 틀린 것은?</p>
<p>1) 그리스의 충전량이 너무 많으면 마찰손실이 크고, 온도 상승의 원인이 된다.
2) 그리스 건을 사용하므로 마찰면에서 급유에 대한 신뢰성을 높일 수 있다.
<strong>3) 베어링의 경우 그리스의 일반적인 충전량은 베어링 내부 공간에 3/4이 적당하다.</strong>
=&gt; 1/2이 적당함
4) 그리스를 교체할 때는 전에 사용하던 그리스를 완전히 제거하고 깨끗이 청소하여야 한다.</p>
<h3 id="47번-문제">47번 문제</h3>
<p>설비조전 효과를 측정하는 식으로 틀린 것은?</p>
<p><strong>1) 제품 단위당 보전비 = 생산량 / 생산비</strong>
=&gt; 제품당 보전비 = 보전비 총액 / 생산량
2) 고장 도수율 = 고장 횟수 / 부하시간 * 100 
3) 설비 가동률 = 가동시간 / 부하시간 * 100
4) 고장 강도율 고장 정지시간 / 부하시간 * 100</p>
<h3 id="50번-문제">50번 문제</h3>
<p>다음 중 기어 윤활에 관한 설명으로 틀린 것은?</p>
<p>1) 고속기어에는 저점도의 윤활유가 적합하다.
2) 웜 기어는 미끄럼 속도가 빠르고, 운전온도도 높아지므로 일반적으로 산화 안정성이 우수한 순관유가 사용된다.
3) 기어는 높은 하중을 받아 미끄러질 때 마찰면 마모를 방지하기 위하여 내하중성이 있는 극압유가 요구된다.
<strong>4) 하이포이드 기어는 일반적으로 중하중을 받으므로 불활성 극압 윤활유가 적당하다.</strong>
=&gt; 활성 극압 윤활유가 적당함</p>
<ul>
<li>하이포이드 기어
<img src="https://velog.velcdn.com/images/_roadhobo/post/22928ade-f74d-461d-9044-f05ed8cfe336/image.png" alt=""></li>
<li>활성 vs 불활성 =&gt; 금속 표면에 화학적 반응을 일으키면 활성, 아니면 불활성</li>
<li>활성은 마모 보호막을 생성함, 불활성은 산화와 부식을 방지함</li>
</ul>
<h3 id="53번-문제">53번 문제</h3>
<p>기어 손상의 분류에서 이 면의 열화에 대하여 소성항복에 해당하는 것은?</p>
<p>1) 피팅(Pitting)
<strong>2) 피닝(Peening)</strong>
3) 스폴링(Spalling)
4) 스코어링(Scoring)</p>
<h3 id="56번-문제">56번 문제</h3>
<p>왕복동 공기압축기는 윤활조건이 가장 가혹하다. 이러한 윤활조건을 만족시키기 위한 내부유가 갖추어야 할 성능으로 틀린 것은?</p>
<p>1) 열 / 산화 안정성이 양호할 것
<strong>2) 생성탄소가 경질이고, 제거가 용이할 것</strong>
3) 적정 점도를 가질 것
4) 금속 표면에 대한 부착성이 좋을 것</p>
<h3 id="57번-문제">57번 문제</h3>
<p>기계의 축, 기어, 캠 등 부품에 강도 및 인성, 접촉부의 내마멸성을 증대시키기 위한 표면경화 열처리법이 아닌 것은?</p>
<p>1) 침탄법 : 탄소 침투로 경도 향상
2) 질화법 : 암모니아를 이용하여 내마모성과 내식성 부여, 고온 경화
3) 화염경화법 : 불꽃을 염사해 경화, 국부적으로 활용
<strong>4) 항온 열처리법</strong></p>
<h1 id="제-4과목--공유압-및-자동화">제 4과목 : 공유압 및 자동화</h1>
<h3 id="63번-문제">63번 문제</h3>
<p>무재해 3대 원칙 중 다음 보기에서 설명하는 원칙은?</p>
<blockquote>
<p>단순히 사망재해나 휴업재해만 없으면 된다는 소극적인 사고가 아닌 사업장 내의 모든 잠재 위험요인을 적극적으로 사전에 발견하고 파악 / 해결함으로써 산업재해의 근원적인 요소들을 없앤다는 것을 의미한다.</p>
</blockquote>
<p><strong>1) 무의 원칙</strong>
2) 안전제일의 원칙
3) 참여의 원칙
4) 위험 회피의 원칙</p>
<h3 id="64번-문제">64번 문제</h3>
<p>실리카겔과 같은 물질을 사용하여 압축공기 속의 수분을 제거하는 방식은?</p>
<p>1) 고온 건조
2) 저온 건조
3) 흡수식 건조
<strong>4) 흡착식 건조</strong></p>
<h3 id="65번-문제">65번 문제</h3>
<p>다음 보기에서 설명하는 기계설비의 위험점은?</p>
<blockquote>
<ul>
<li>고정 부분과 회전하는 동작 부분이 함께 만드는 위험점이다.</li>
</ul>
</blockquote>
<ul>
<li>회전 풀리와 베드 사이, 연삭숫돌과 작업대 사이 등에서 발견된다.</li>
</ul>
<p>1) 협착점 : 왕복운동을 하는 부분과 고정부
<strong>2) 끼임점</strong>
3) 절단점 : 회전하는 운동부나 기계 자체의 위험
4) 물림점 : 두 회전부</p>
<h3 id="68번-문제">68번 문제</h3>
<p>일반적인 공압 발생장치의 기기 순서로 옳은 것은?</p>
<p>정답은 좀 다르지만 아래가 순서</p>
<ol>
<li>전동기</li>
<li>압축기</li>
<li>냉각기</li>
<li>탱크
5, 5&#39;. 청정기, 건조기</li>
<li>압력제어밸브</li>
<li>주유기</li>
<li>방향제어밸브</li>
<li>유량제어밸브</li>
<li>액추에이터</li>
</ol>
<h3 id="73번-문제">73번 문제</h3>
<p>다음 중 고속에서 효율이 가장 좋은 펌프는?</p>
<p>1) 기어펌프
2) 베인펌프
3) 트로코이드 펌프
<strong>4) 회전 피스톤 펌프 =&gt; 회전운동과 왕복운동의 힘을 모두 사용</strong></p>
<h3 id="79번-문제">79번 문제</h3>
<p>공기압 작업요소의 설명 중 틀린 것은?</p>
<p><strong>1) 격판 실린더는 격판에 부착된 피스톤로드가 미끄럼 실링되어 있다.</strong>
=&gt; 격판의 오목함과 볼록함으로 작동함, 미끄럼 실링 불필요
2) 회전 실린더는 피니언과 랙 구조를 이용하여 회전운동을 할 수 있다.
3) 텐덤 실린더는 2개의 복동 실린더가 1개의 실린더 형태로 된 것이다.
4) 다위치 제어 실린더는 2개 도는 그 이상의 복동 실린더로 구성된다.</p>
<hr>
<p>다음 주 목요일이면 필기시험이다.
단단히 준비하고 좋은 결과 받아야지.</p>
<p>2025-08-15 복습 끝.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[로봇활용 첨단 생산시스템 전문가 양성 교육기 (메카트로닉스) - 18]]></title>
            <link>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-18</link>
            <guid>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-18</guid>
            <pubDate>Sat, 09 Aug 2025 07:16:32 GMT</pubDate>
            <description><![CDATA[<p>어제 금요일이었는데 깜빡하고 글 쓰는 걸 까먹었다.
게임이 너무 재밌었다.</p>
<p>그래서 그런데 개념 정리하는 건 조금 미뤄두고 2023년 설비보전기사 기출문제에서 틀렸던 문제들을 오답노트로 정리하고자 한다.</p>
<p>절대 개념 정리하기 귀찮아서가 아니다. 공부를 안해서 기출을 많이 틀려서 그렇다.
일단 너무 외우기 어려울 거 같은 문제 빼고 1회만 오답노트 쓰려고 한다.</p>
<hr>
<h1 id="2023년-1회">2023년 1회</h1>
<h2 id="1과목--설비진단-및-계측">1과목 : 설비진단 및 계측</h2>
<h3 id="1번-문제">1번 문제</h3>
<p>접음원에서 발생되는 소음이 <strong>10m 떨어진 지점에 음압 레벨이 100dB일 때</strong> 이 음원에서 <strong>25m 떨어진 지점</strong>에서의 음압 레벨은?</p>
<ul>
<li><strong>음압</strong> : 매질(예: 공기) 내에서 음파가 지날 때 발생하는 압력 변화</li>
<li>SPL = 20 * log₁₀ (P / P₀)</li>
<li>( 음압레벨 차 ) = 20 * log₁₀ ( 측정된 음원의 거리 / 기준 음원의 거리 )</li>
</ul>
<p>따라서 <strong>7.96 = 20 * log₁₀ ( 25 / 10 ) 그리고 기준점에서 100dB이므로 100 - 7.96 = 92.04</strong></p>
<p>답 : 약 92dB</p>
<h3 id="4번-문제">4번 문제</h3>
<p>다음 보기에서 설명하는 원리와 거리가 먼 것은?</p>
<blockquote>
<p>둘 또는 그 이상의 같은 성질의 파동이 동시에 어느 한 점을 통과할 때 그 점에서의 진폭은 개개의 파동의 진폭을 합한 것과 같다.
=&gt; <strong>간섭</strong>에 대한 설명, 특히 <strong>보강간섭</strong></p>
</blockquote>
<p>1) 맥놀이
<strong>2)음향 임피던스</strong>
3) 소멸간섭
4) 보강간섭</p>
<ul>
<li><strong>음향 임피던스</strong> : 음압을 입자 속도로 나눈 값, <strong>매질 사이에 임피던스 차이가 클수록 음파의 반사가 커짐</strong></li>
</ul>
<h3 id="8번-문제">8번 문제</h3>
<p>댐핑(감쇠)처리를 하는 경우 효과가 적은 진동시스템은?</p>
<p>정답) <strong>1) 시스템의 고유 진동수를 변경하고자 하는 경우</strong>
=&gt; 진동 에너지를 감소시킬 뿐이고, 고유 진동수를 변경하지는 않는다.</p>
<h3 id="10번-문제">10번 문제</h3>
<p>다음 그림과 같이 스프링 k1, k2, k3를 직렬로 연결했을 때 등가스프링의 정수 Ke는?</p>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/ef22017b-636f-44af-b3d1-99ebbd6387b2/image.jpg" alt=""></p>
<p>정답) 1/Ke = 1/k1 + 1/k2 + 1/k3</p>
<ul>
<li>직렬 강성 : 1/Kr = 1/k1 + 1/k2 + ...</li>
<li>병렬 강성 : Kr = k1 + k2 + ...</li>
</ul>
<h3 id="13번-문제">13번 문제</h3>
<p>측온저항체에서 공칭저항값은 몇 ℃에서의 저항값인가?</p>
<p>정답) 0℃</p>
<ul>
<li>백금온도센서(측온저항체 온도계) : 외부온도 1℃당 0.4Ω 정도의 저항변화가 나타난다. 0℃에서는 저항이 100Ω으로 나타나기에 이를 공칭저항값으로 사용하고 있다.</li>
<li>공칭저항값 : 저항기의 규격에 표시된 저항값으로, 실제 저항값의 기준이 되는 값</li>
</ul>
<h3 id="14번-문제">14번 문제</h3>
<p><strong>프로세스</strong> 제어계에서 제어량을 검출부에서 검지하여 조절부에 가하는 신호는?
<del>이걸 틀렸네</del></p>
<p>1) SV(Setting Value) : 설정값
<strong>2) PV(Process Variable)</strong> : 과정변수, 검출한 값을 저장해 이후 제어에 적용하는 변수
3) DV(Differential Variable) : 미분변수
4) MV(Manipulated Variable) : 조작변수, 제어하는 사람이 개입 가능한 변수</p>
<h3 id="15번-문제">15번 문제</h3>
<p>공정별 배치에서 관련된 기계들이 모여 있는 시스템은?</p>
<p>1) 갱시스템 : 동일한 기종을 모아둔 시스템
2) 라인시스템 : 생산에 필요한 기준으로 순서대로 모아둔 시스템
<strong>3) 블록시스템</strong> : 관련 기계를 모아둔 시스템
4) 혼합형 시스템 : 대부분 공정별 + 제품별</p>
<h3 id="17번-문제">17번 문제</h3>
<p>계획보전의 일종으로 특정 운전 상태를 계속 유지시키는 방법으로 실시하는 보전은?</p>
<p>1) 사후보전 : 사고나면 처리
<strong>2) 예방보전</strong> : 계획보전의 일종, 운전상태 유지하면서 주기적인 검사
3) 생산보전 : 생산성(최소 비용, 최고 성능)을 확보하기 위해 예방보전 시기 설정
4) 종합적 생산보전 : 전 직원 참여</p>
<h3 id="19번-문제">19번 문제</h3>
<p>설비관리를 수행할 때 기능적으로 구분하면 일반관리기능, 기술기능, 실시기능 및 지원기능으로 구분할 수 있다. 이때 일반관리기능에 해당하는 것은?</p>
<p><strong>1) 공급망 관리</strong>
2) 설비성능분석
3) 보전도 향상 연구
4) 설비진단기술 이전 및 개발</p>
<ul>
<li>일반관리기능 : 직접 실행 외의 모든 것</li>
<li>나머지는 기술기능이다.</li>
</ul>
<h3 id="20번-문제">20번 문제</h3>
<p>다음 설비를 목적에 따라 분류할 때 해당되는 설비의 분류는?</p>
<blockquote>
<p>증기발생장치, 배수배관설비, 원수취수설비, 수처리설비, 펌프설비, 냉동설비, 질소발생설비, 연료의 저장-수송-압축-건조설비</p>
</blockquote>
<p>1) 생산설비 : 생산 관련에 필요한 기계 설비
2) 관리설비 : 본사, 식당 등 관리자에게 필요한 설비
3) 수송설비 : 수송에 필요한 건물이나 기계 설비
<strong>4) 유틸리티 설비</strong> : 생산이나 수송설비 등에 필요한 잡다한 설비</p>
<h2 id="2과목--설비관리">2과목 : 설비관리</h2>
<h3 id="24번-문제">24번 문제</h3>
<p>보전에 사용하는 시간 중 조업시간에서 생산계획 상의 휴지시간, 계획보전을 위한 휴지시간, 관리상 필요한 조회시간, 기타 돌발적 상황에 의한 휴지시간 등의 관리 외 제외시간을 뺀 것은?</p>
<p><strong>1) 부하시간</strong>
2) 가동시간
3) 실질가동시간
4) 가치가동시간</p>
<ul>
<li>캘린더시간</li>
<li>조업시간 = 캘린더시간 - 휴일 등</li>
<li>부하시간 = 조업시간 - 계획휴지시간</li>
<li>가동시간 = 부하시간 - 정지시간</li>
<li>실질가동시간 = 가동시간 - 성능저하시간</li>
<li>가치가동시간 = 실질가동시간 - 불량으로 인한 손실시간</li>
</ul>
<h3 id="31번-문제">31번 문제</h3>
<p>TPM 활동에서 실천주의 개념 중 3현주의에 속하지 않는 것은?</p>
<p>1) 현장
2) 현물
3) 현실
<strong>4) 현상</strong></p>
<p><strong>장실물</strong>로 위우자.</p>
<h3 id="35번-문제틀린-건-아님">35번 문제(틀린 건 아님)</h3>
<ul>
<li>쿨롱 아몽톤의 법칙 : 마찰력은 마찰계수와 마찰면의 수직력에 비례하고, 접촉 면적의 크고 작음에는 상관 없음</li>
</ul>
<h3 id="36번-문제">36번 문제</h3>
<p>나프텐계와 비교한 파라핀계 기유의 특징으로 옳은 것은?</p>
<p>1) 낮은 점도
2) 낮은 인화점
3) 낮은 유동점
<strong>4) 낮은 밀도</strong></p>
<ul>
<li>나프텐은 아스팔트계 성분이 많아 밀도가 높다. 반면 파라핀은 의학용으로 쓰이는 젤도 있는만큼 끈적한 젤 같은 느낌이 더 강하다.</li>
</ul>
<h3 id="37번-문제">37번 문제</h3>
<p>윤활관리의 4원칙이 아닌 것은?</p>
<p>1) 적유
2) 적량
3) 적법
<strong>4) 적소</strong></p>
<ul>
<li>적절한 윤활유(적유)를 적절한 양(적량)으로 제때(적기)에 규정에 맞춰(적법) 넣는다.</li>
</ul>
<h3 id="40번-문제">40번 문제</h3>
<p>윤활제의 중화가를 측정하는 방법으로 옳은 것은?</p>
<p>정답) 전위차 측정법</p>
<h2 id="3과목--기계일반-및-기계보전">3과목 : 기계일반 및 기계보전</h2>
<h3 id="42번-문제">42번 문제</h3>
<p>다음 중 비순환 급유방법이 아닌 것은?</p>
<p>1) 손 급유법
<strong>2) 유욕 급유법</strong>
3) 적하 급유법
4) 사이펀 급유법</p>
<ul>
<li>수동 급유법, 적하 급유법( 사이펀 급유법 포함 ), 가시 부상 유적 급유법은 비순환 급유법이다.</li>
</ul>
<h3 id="45번-문제">45번 문제</h3>
<p>윤활제의 오염도를 분석하기 위한 오염 정도 측정법이 아닌 것은?</p>
<p>1) 중량법
<strong>2) 연소법</strong>
3) 계수법
4) 오염지수법</p>
<h3 id="46번-문제">46번 문제</h3>
<p>원심식 압축기의 장점에 대한 설명으로 틀린 것은?</p>
<p>1) 압력맥동이 없다.
2) 윤활이 용이하다.
<strong>3) 고압 발생에 적합하다.</strong>
4) 설치면적이 비교적 작다.</p>
<ul>
<li>용적형 압축기가 더 적절하다.</li>
</ul>
<h3 id="49번-문제">49번 문제</h3>
<p>기어 손상에서 이 부분이 파손되는 주원인이 아닌 것은?</p>
<p><strong>1) 마모</strong> : 파손이 아닌 표면 손상
2) 균열
3) 피로파손
4) 과부하 절손</p>
<h3 id="51번-문제">51번 문제</h3>
<p>구름 베어링의 손상에 대한 설명으로 옳지 않은 것은?</p>
<p>1) 베어링과 축 사잉에 모래, 금속 칩 등 미립자가 섞여 마멸이 발생한다.
2) 전해물과 유기산물 등에 의해 화학적 반응이 일어나서 부식이 발생한다.
<strong>3) 베어링 링에 조립할 때 중심 간 불일치 또는 기울어진 상태의 큰 힘에 의해 피팅이 발생한다.</strong>
4) 베어링면에 축 전압에 의한 아크가 발생하여 전기적 피팅이 일어난다.</p>
<ul>
<li>피팅 : 여러 사유로 인해 작은 홈이 생기는 것</li>
<li>큰 힘이면 보통 피팅보다 심각한 수준의 파손이 발생함</li>
</ul>
<h3 id="52번-문제">52번 문제</h3>
<p>수평 배관용으로 사용되며 유체의 역류를 방지하는 밸브는?</p>
<p>정답) 스윙 체크밸브</p>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/cb68bd4a-56d6-4852-95b6-4bbe90ab19d3/image.png" alt=""></p>
<ul>
<li>개폐 형태에 따라 비슷한 형태의 나비형 밸브가 존재</li>
</ul>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/dcbf297f-a360-4a4a-9bcc-62b70fc478e5/image.png" alt=""></p>
<h3 id="53번-문제">53번 문제</h3>
<p>다음 중 웜 기어(Worm Gear)에 대한 특징으로 틀린 것은?</p>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/36fb4118-d4b9-4d14-9035-96287f9e579f/image.png" alt=""></p>
<p>1) 효율이 낮다.
<strong>2) 역전을 방지할 수 없고, 소음이 크다.</strong>
3) 작은 용량으로 큰 감속비를 얻을 수 있다.
4) 웜 휠의 정밀 측정이 곤란하며, 가격이 비싸다.</p>
<h3 id="54번-문제">54번 문제</h3>
<p>다음 중 화물을 올릴 때는 제동작용을 하지 않고, 화물을 내릴 때는 자중에 의한 제동작용을 하는 브레이크는?</p>
<p>정답) 나사 브레이크</p>
<h3 id="55번-문제">55번 문제</h3>
<p>피복아크용접에서 용접 결함과 그 원인이 잘못 연결된 것은?</p>
<p>1) 오버랩 - 용접 전류가 낮고, 용접봉의 선택이 불량할 때
<strong>2) 스패터 - 용접 전류가 낮고, 아크 길이를 짧게 했을 때</strong> : 반대임
3) 언더컷 - 용접 전류가 높고, 아크 길이가 너무 길 때
4) 용입 불량 - 용접 전류가 낮고, 용접 속도가 너무 빠를 때</p>
<ul>
<li>오버랩 : 금속이 용접 부위를 덮기만 함</li>
<li>스패터 : 용접 모재가 주변에 튐</li>
<li>언더컷 : 용접 부위가 파임</li>
<li>용입 불량 : 금속이 용접 부위에 얕게 녹아듬</li>
</ul>
<h3 id="56번-문제">56번 문제</h3>
<p>강의 표면경화법이 아닌 것은?
<del>이걸 틀려?2</del></p>
<p><strong>1) 연화법</strong>
2) 질화법 : 암모니아 쓰는 방법
3) 침탄법 : 탄소강 만드는 방법
4) 금속침투법 : 필요한 금속 쓰는 방법</p>
<h2 id="4과목--공유압-및-자동화">4과목 : 공유압 및 자동화</h2>
<h3 id="66번-문제">66번 문제</h3>
<p>다음 보기에서 설명하는 기계 설비의 위험점은?</p>
<blockquote>
<ul>
<li>고정 부분과 운동 부분이 만드는 위험점이 아니다.</li>
</ul>
</blockquote>
<ul>
<li>회전하는 운동 부분 자체의 위험이나 운동하는 기계부분 자체의 위험에서 초래되는 위험점이다.</li>
<li>목공용 <strong>띠톱 부분, 밀링 커터</strong> 부분 등에서 발견된다.</li>
</ul>
<p>정답) 절단점</p>
<h3 id="71번-문제">71번 문제</h3>
<p>베르누이 정리를 식으로 옳게 표현한 것은?</p>
<ul>
<li>V : 유체의 속도</li>
<li>g : 중력가속도</li>
<li>p : 유체의 압력</li>
<li>γ : 비중량</li>
<li>Z : 유체의 위치</li>
</ul>
<p>정답) (V² / 2g) - (p / γ) - Z = 일정</p>
<h3 id="73번-문제">73번 문제</h3>
<p>일반적인 줄 작업에 대한 설명으로 옳지 않은 것은?</p>
<p>정답) 보통 줄의 사용 순서는 중목 &gt; 황목 &gt; 세목 &gt; 유목의 순으로 작업한다.</p>
<ul>
<li>황목 &gt; 중목 &gt; 세목 &gt; 유목</li>
</ul>
<h3 id="79번-문제">79번 문제</h3>
<p>고장이 발생하지 않도록 설비를 설계, 제작, 설치하여 운용하는 보전방법은?</p>
<p>1) 개량 정비
2) 사후 정비
3) 예방 정비
<strong>4) 보전예방</strong></p>
<hr>
<p>아 손가락 아프다.
맥주 마셔야지.</p>
<p>일단 2025-08-09 복습 끝</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[로봇활용 첨단 생산시스템 전문가 양성 교육기 (메카트로닉스) - 17]]></title>
            <link>https://velog.io/@_roadhobo/apdfadsfasdf</link>
            <guid>https://velog.io/@_roadhobo/apdfadsfasdf</guid>
            <pubDate>Fri, 01 Aug 2025 12:12:45 GMT</pubDate>
            <description><![CDATA[<p>지난 번에 이어서 계속 복습한다.</p>
<hr>
<h1 id="1-설비진단-및-계측">1. 설비진단 및 계측</h1>
<h2 id="1-진동-측정-센서">1. 진동 측정 센서</h2>
<ul>
<li>트랜스듀서 : 외부 정보가 전기적 신호가 아닐 때 <strong>전기적 신호로 바꿔</strong>주는 장치<ul>
<li>비접촉식 변위 변환기 ( 와전류 Probe )<ul>
<li><strong>변위(m)로 측정</strong></li>
<li><strong>저주파</strong>에 탁월한 효과</li>
<li>축의 진동 측정에 사용</li>
</ul>
</li>
<li>속도 검출기 ( <strong>패러데이의 전자 유도 법칙 이용</strong> )<ul>
<li>속도(m/s)로 측정</li>
<li>크기와 질량이 상대적으로 큼</li>
<li>안정적 감도, 영구 자석에 의해 신호 발생 가능</li>
</ul>
</li>
<li>가속도계 : 압전형을 많이 사용<ul>
<li>가속도(m/s^2)로 측정</li>
<li>소형이고 경량임</li>
<li>고감도</li>
<li>중, 고주파에 사용</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="2-회전-측정-센서">2. 회전 측정 센서</h2>
<ul>
<li>태코미터</li>
<li><em>각속도*</em>를 직접 측정하는 계측기</li>
<li>자이로센서
회전 시 발생하는 회전축을 이용한 <strong>각도</strong> 측정, 회전속도를 이용한 측정 =&gt; 충격도 측정 가능</li>
<li>퍼텐쇼미터</li>
<li><em>변위 &gt; 전기저항 &gt; 전압, 전류*</em>로 변환 / <strong>회전체의 각도를 검출, 볼륨 조절 용도</strong></li>
<li>비접촉형 퍼텐쇼미터
섭동 잡음 X, 고속 응답, 마찰 거의 없음, 스파크 우려 없음 (섭동에 의한 아크 X)</li>
</ul>
<h2 id="3-진동방지">3. 진동방지</h2>
<ul>
<li><p><strong>감쇠 (댐핑, Damping)</strong> : 진동의 진폭이 점차 감소하여 가는 과정</p>
<ul>
<li>진동에너지의 전달 감소</li>
<li>고유진동수에 의한 공진 시 진동진폭 감소</li>
<li>충격 시 진동 감소</li>
</ul>
</li>
<li><p>2단계 진동제어</p>
<ul>
<li>바닥 진동제어 + 진동 보호제</li>
<li>고주파는 <strong>감쇠</strong>, 저주파엔 <strong>역효과</strong></li>
</ul>
</li>
<li><p>진동차단기</p>
<ul>
<li>하중을 견딜 수 있어야함</li>
<li>온도, 습도, 화학적 변화 등에 의해 견딜 수 있어야함</li>
<li>차단하려는 진동의 <strong>최저 주파수보다 작은 고유진동수</strong>를 가져야함</li>
<li>패드는 <strong>강성이 가능한 낮아</strong>야함</li>
</ul>
</li>
<li><p>동적배율 : 동적 스프링 정수 / 정적 스프링 정수</p>
</li>
</ul>
<h2 id="4-회전기계의-진단">4. 회전기계의 진단</h2>
<ul>
<li>언밸런스 <strong>Unbalance</strong><ul>
<li>균형이 안 맞을 때 회전</li>
<li>수평과 수직 방향에서 최대 진폭 발생</li>
<li>회전 주파수의 1f 성분에서 탁월 주파수 발생 =&gt; 1f 이상이면 언밸런스로 판정 어려움</li>
<li>언밸런스양과 회전수가 크면, 진동값도 큼</li>
</ul>
</li>
<li>미스얼라인먼트 <strong>Misalignment</strong><ul>
<li>정렬 불량 상태</li>
<li>회전, 회전체에서 구동부와 피구동부를 커플링으로 ...</li>
<li><strong>회전 중심선이 어긋난 상태</strong></li>
</ul>
</li>
<li>풀림 : 체결된 곳이 풀림</li>
<li>편심 : 무게 중심이 맞지 않을 때 회전 ( 언밸런스랑 뭐가 다른거지 )</li>
<li>오일 휩 : 강제 급유되는 미끄럼 베어링을 축이 맞지 않는 상태에서 회전</li>
<li>공진 : 고유진동수와 강제진동수가 일치하여 진폭이 증폭됨</li>
<li>공동현상 ( 캐비테이션, Cavitation =&gt; Cave가 생긴다는 뜻 ) : 압력 저하로 유관에 빈 공간이 생김</li>
</ul>
<h2 id="5-음의-구성">5. 음의 구성</h2>
<ul>
<li>음의 3요소<ul>
<li>음의 높이 : 소리의 높낮이</li>
<li>음의 색 : 배음 구조의 차이</li>
<li>음의 세기 : 진폭에 의한 소리량, 즉 dB(데시벨)</li>
</ul>
</li>
<li>음의 구성<ul>
<li>파동 : 에너지의 움직임</li>
<li>음파 : 매질을 통해 전달되는 음에너지</li>
<li>파면 : 파동의 위상이 같은 점을 연결한 면</li>
<li>음선 : 파면에 수직한 선</li>
<li>파장 : 위상이 같은 두 곳을 이은 길이 / <strong>파장 = ( 파의 전달속도 ) / ( 소음 주파수 )</strong></li>
</ul>
</li>
<li>주파수 : 초당 진동수</li>
<li>음의 세기<ul>
<li>음의 세기 레벨(SIL) : 10log( <strong>[음의 세기] / [최저가청음세기]^2</strong> )</li>
<li>음향 파워레벨(PWL) : 10log( <strong>[음원의 세기] / [10^12]</strong> )<ul>
<li><strong>SPL = PWL - 20log(거리)</strong> =&gt; 보통 이걸로 계산</li>
</ul>
</li>
</ul>
</li>
<li>음압<ul>
<li>음압레벨 : SPL = 20log( <strong>[대상의 음압실횻값] / [2 * 10^-5]</strong> )</li>
<li>P0 = 최저 가청 음압 = 2 * 10^-5</li>
</ul>
</li>
</ul>
<h2 id="6-소리의-물리적-성질">6. 소리의 물리적 성질</h2>
<ul>
<li>음파<ul>
<li>평면파 : 파면이 평면</li>
<li>발산파 : 거리가 멀수록 퍼짐</li>
<li>구면파 : 구 모양으로 퍼짐</li>
<li>진행파 : 진행방향으로 퍼짐</li>
<li>정재파 : 두 음파가 간섭함</li>
</ul>
</li>
<li>소리의 굴절 : 서로 다른 매질을 지날 때, 소리는 굴절됨, 속도도 달라짐</li>
<li>소리의 간섭<ul>
<li>보강 간섭 : 간섭돼서 소리가 증폭됨</li>
<li>소멸 간섭 : 간섭돼서 소리가 감쇠됨</li>
<li>맥놀이 : 보강 &amp; 소멸이 번갈아가며 규칙적으로 나타남</li>
</ul>
</li>
<li>마스킹 효과 : 큰 소리 나면 작은 소리 묻히는 거<ul>
<li>다른 두소리의 주파수가 <strong>비슷하면 효과 증대</strong> / <strong>같으면</strong> 맥놀이 생겨서 <strong>효과 감소</strong></li>
</ul>
</li>
<li>소리의 회절 : 장애물 뚫고 소리 전달됨<ul>
<li>곡률이 작은 구멍에 부딪치면 더 크게 회절 =&gt; 즉 곡률 크게 하면 <strong>흡음</strong>됨</li>
<li>음의 파장이 길면 회절이 잘 일어남</li>
</ul>
</li>
<li>하위헌스 원리
파동이 전파되어 나갈 때, 단면의 각 점은 점음원이 되어 <strong>새로운 파면을 만드는</strong> 현상</li>
<li>도플러 효과
음이 가까이 오면 높게 들리고, 멀어지면 낮게 들림</li>
</ul>
<h2 id="7-소음의-발생">7. 소음의 발생</h2>
<ul>
<li>기류음(기체음)<ul>
<li>난류음 : 와류에 의해 발생 ex) 선풍기</li>
<li>맥동음 : 맥동현상에 의해 발생 ex) 펌프</li>
</ul>
</li>
<li>고체음<ul>
<li>1차 고체음 : 기계 진동 + 지반 진동</li>
<li>2차 고체음 : 기계 본체 진동</li>
</ul>
</li>
</ul>
<h2 id="8-소음-방지">8. 소음 방지</h2>
<ul>
<li>방음 : 회절감쇠 이용<ul>
<li>흡음 : 소리 흡음<ul>
<li>공명형 : 저음 / 다공질형 : 중고음</li>
</ul>
</li>
<li>차음 : 소리 차단 ex) 밀폐벽, 중공벽</li>
</ul>
</li>
</ul>
<hr>
<p>소음 감소 장치와 소음 측정은 PASS
양에 비해서는 기출 문제를 몇 개 못 봄
나중에 해야지</p>
<hr>
<h2 id="9-압력-계측">9. 압력 계측</h2>
<ul>
<li><p>압력 : 일정한 면적에 작용하는 힘, 즉 <strong>N/m^2 ==&gt; Pa(파스칼)</strong>로도 쓰임</p>
</li>
<li><p>절대 압력 = 계기 압력 + 대기압</p>
<ul>
<li>진공 : 1/1,000mmHg 이하의 대기압 상태</li>
<li>절대 압력 : 완전한 진공을 0으로 하여 계측한 압력값</li>
</ul>
</li>
<li><p><strong>기계식(탄성식)</strong> 압력센서 =&gt; 과거에 자주 나옴</p>
</li>
<li><p><em>압력을 계측 가능한 다른 값*</em>으로 전환</p>
<ul>
<li>부르동관 : 압력을 변위로</li>
<li>벨로스 : 압력차를 이용</li>
<li>다이어프램 : 다이어프램(판스프링)이 변형됨을 이용</li>
</ul>
</li>
<li><p>피에조효과( 압전효과 ) : 압전 결정에 힘주면 전하 발생 =&gt; 압전식 센서 원리</p>
</li>
<li><p>스트레인 게이지</p>
<ul>
<li>금속체를 잡아당기면 금속 두께가 줄어 저항값 감소 <strong>압력 =&gt; 전하량</strong></li>
<li>로드셀 : 스트레인 게이지로 하중 변환 계측</li>
</ul>
</li>
</ul>
<h2 id="10-온도의-계측">10. 온도의 계측</h2>
<ul>
<li>접촉식 온도 계측기<ul>
<li>서미스터 : 온도가 상승하면 저항값이 변화하는 걸 이용한 계측기
( 정특성, 부특성, 특성 저항 존재 )</li>
<li>열전쌍, 열전대( Themocouple, 서모커플 )<ul>
<li>서로 다른 금속의 기전력( 전류를 움직이는 힘 ) 이용</li>
<li>구조가 간단하고 저렴하고 내구성 있음</li>
<li>제베크 효과 : 온도차가 생기면 열전류가 흐름</li>
<li>펠티엘 효과 : 전류가 흐르면 열이 흐름, 제베크 효과와 반대</li>
<li>톰슨 효과 : 온도 기울기가 있으면 전류로 열이 흐름</li>
</ul>
</li>
</ul>
</li>
<li>비접촉식 온도 계측기<ul>
<li>초전형 온도센서</li>
<li>서모파일</li>
<li>볼로미터</li>
<li>양자형 온도센서</li>
<li>서미스터도 씀</li>
</ul>
</li>
</ul>
<h2 id="11-유량계의-종류">11. 유량계의 종류</h2>
<ul>
<li>체적 유량계<ul>
<li>실측식<ul>
<li>용적식 : 회전차형</li>
</ul>
</li>
<li>추측식<ul>
<li>차압식 : 벤투리, 노즐, 오리피스 =&gt; 시험에 잘 나옴</li>
<li>면적식 : 플로트, 피스톤 =&gt; <strong>단순한 구조, 맥동류에서 오차 큼</strong> / 로터미터(차압 아님)</li>
<li>그 외 : 와류식, 전자식, 초음파식, 위어(둑)식</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<p>일단 오늘은 여기까지만 하려고 한다.
술 마셔야 한다.</p>
<p>그럼 2025-08-01 복습 끝</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[로봇활용 첨단 생산시스템 전문가 양성 교육기 (메카트로닉스) - 16]]></title>
            <link>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-16</link>
            <guid>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-16</guid>
            <pubDate>Fri, 25 Jul 2025 12:28:36 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/_roadhobo/post/31533165-10c5-4c36-b429-e117f6e42b07/image.PNG" alt=""></p>
<p>이번 주는 EPlan과 Solidworks 했다.
거의 실습 위주라서 시간이 순식간에 간 것 같다.</p>
<p>그 외에는 설비보전기사 시험 준비를 시작했다.
그래서 이번 주 블로그에는 개념을 정리한 글을 올리려고 한다.</p>
<hr>
<h1 id="설비진단-및-계측">설비진단 및 계측</h1>
<h2 id="설비진단-기술의-필요성">설비진단 기술의 필요성</h2>
<ul>
<li>고장손실의 증대 방지</li>
<li>설비의 수명 연장</li>
<li>점검자의 기술 수준에 따른 (관리) 격차 해소</li>
<li>설비의 규모와 비용이 커지고 고도화됨에 따른 사후 비용 절감</li>
</ul>
<p>=&gt; 튼튼하고, 오래 가고, 확실하고, 간편하게</p>
<h2 id="설비진단-기법">설비진단 기법</h2>
<ul>
<li>진동법<ol>
<li>설비에서 발생하는 진동 신호를 분석하여 설비의 상태를 진단하는 방법</li>
<li>대부분의 설비에서 사용 가능</li>
<li>고장난 설비는 정상적일 때와 진동이 다르다</li>
</ol>
</li>
<li>오일분석법 : 오일에 들어있는 금속량, 형태, 성분을 파악하는 기법<ul>
<li>페로그래피법 : <strong>자성 입자</strong>를 분석하여 윤활 계통의 마모 상태를 진단</li>
<li>SOAP ( Spectrometric Oil Analysis Program ) : <strong>윤활유</strong> 내의 금속입자 진단<ul>
<li>원자흡광법</li>
<li>회전전극법</li>
<li>ICP법</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="진동의-실횻값">진동의 실횻값</h2>
<blockquote>
<p>RMS = √( (1/T) * ∫[0,T] x(t)² dt )
실횻값 = ( [ 시간 단위 ] * [ 진동 신호 값²의 적분 ] )의 루트
시간 단위당 진동 세기들의 합</p>
</blockquote>
<h2 id="진동-크기의-3요소">진동 크기의 3요소</h2>
<ul>
<li>변위</li>
<li>속도</li>
<li>가속도</li>
</ul>
<h2 id="스프링-강성">스프링 강성</h2>
<ul>
<li>병렬연결 (k1 + k2)</li>
<li>직렬연결 k1k2 / (k1 + k2)</li>
</ul>
<h2 id="진동의-종류">진동의 종류</h2>
<ul>
<li>자유진동</li>
<li>강제진동</li>
<li>그 외<ul>
<li>비틀림</li>
<li>배경</li>
<li>대상</li>
<li>정성</li>
<li>선형</li>
<li>비평형</li>
</ul>
</li>
</ul>
<hr>
<p>오늘은 이정도만 하겠다
내일도 공부해서 조금 더 정리해둬야지.</p>
<p>2025-07-25 오늘 복습 끝</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[로봇활용 첨단 생산시스템 전문가 양성 교육기 (메카트로닉스) - 15]]></title>
            <link>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-15-2w3tnr9v</link>
            <guid>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-15-2w3tnr9v</guid>
            <pubDate>Fri, 18 Jul 2025 11:01:44 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/_roadhobo/post/eeab72fe-5da3-4770-9e0a-30a56bbf5be5/image.png" alt=""></p>
<p>이번 주는 EPlan, CAD, 공유압, PLC를 골고루 배웠다. 그렇다보니 오히려 뭘 쓸지 모르겠다.
솔직히 해왔던 거라 복습하는 게 의미가 있을까 싶은 게 많아서 따려는 자격증 관해서 내용 적어놓으려고 한다.</p>
<hr>
<h1 id="1-설비보전기사">1. 설비보전기사</h1>
<p>생산시스템이나 설비(장치)의 설비보전에 관한 전문적인 지식을 가지고, <strong>생산설비 등을 최적의 상태로 효율적으로 유지</strong>하기 위해 일상점검 및 정기점검을 통한 설비진단을 하고 고장부위를 정비하거나 <strong>유지, 보수, 관리 및 운용 등을 수행</strong>하는 직무를 위한 자격증이다.</p>
<p>요컨대, <strong>설비 엔지니어</strong> 자격증이다. 기계공학 관련해서는 제일 쉬운 자격증이라고 한다.</p>
<p>합격률 이전에 지원자의 수 자체가 적은 것 같아서 고민을 많이 하긴 했지만, 국민취업지원제도 상담에서 자격증을 따놓는 게 좋다는 말을 듣고 일단 배우고 있는 내용과 겹치는 게 많아서 해보기로 했다.</p>
<p>아래는 관련 공부 과목이다.</p>
<h4 id="필기-과목">필기 과목</h4>
<ul>
<li>공유압 및 자동제어</li>
<li>용접 및 안전관리</li>
<li>기계설비 일반</li>
<li>설비진단 및 관리</li>
</ul>
<p>다른 것도 충분히 공부를 해야겠지만 용접 및 안전관리가 꽤 어렵다고 들었다.
아마 새로 추가된 과목이라 생소해서 어렵다고 하는 것 같은데 좀 걱정이 드는 건 사실이다.
그래도 실기보단 덜 걱정된다. 거긴 실전이니까.</p>
<h4 id="실기-과목">실기 과목</h4>
<ul>
<li>필답형 : 1시간</li>
<li>작업형 : 2시간 40분<ul>
<li>공기압회로</li>
<li>유압회로</li>
<li>보수용접 및 누수 시험</li>
</ul>
</li>
</ul>
<p>필답형은 괜찮다. 외우면 되니까.</p>
<p>회로도 상관없다. 자주 했던 거니까.</p>
<p>용접은...... 지금 다니는 인력개발원에 장비있던데 훔쳐서라도 해봐야하나?
커뮤니티에서 실기는 쉬운 편이라고 하지만 </p>
<p>개발원에 물어봐서 좀 알아봐야겠지만, 일단 용접학원이나 용접연습장도 고려해보고 있다.
연습장은 1회 비용이 만원 이하라서 괜찮을 거 같다.</p>
<h1 id="2-전기산업기사-or-기사">2. 전기산업기사 or 기사</h1>
<p>발전소, 변전소, 전기공작물시설업체, 건설업체, 한국전력공사 및 일반사업체나 공장의 전기부서,
가정용 및 산업용 전기 생산업체, 부품제조업체 등에 취업하여 전기와 관련된 제반시설의 관리 및 검사업무 보조 및 담당할 수 있다.
라고 일단은 적혀있는데.......</p>
<p>솔직히 전기는 고민이 좀 많다.
자격증이 굳이 필요하지도 않은데 &#39;전기 전공도 아닌 사람이 따야할까&#39;라고 생각하고 있다.
일단 적어만 놓자.</p>
<p><del>근데 굳이 딸 거면 설비보전기사 합격하고, 취업 후에 공부하는 게 더 낫잖아</del></p>
<h4 id="필기-과목-1">필기 과목</h4>
<ul>
<li>전기자기학 </li>
<li>전력공학</li>
<li>전기기기</li>
<li>회로이론</li>
<li>전기설비기술기준</li>
</ul>
<h4 id="실기-과목-1">실기 과목</h4>
<ul>
<li>주관식 필답 서술형</li>
</ul>
<p>실기 과목이 계산 문제 때문에 지옥이라고 한다.
근데 전기공학 관련 학과도 아닌 내가 다른 학생들만큼 할 수 있을 리도 없다.
실기 때문에 사실상 포기다.</p>
<p>따보고는 싶지만.</p>
<hr>
<p>두 자격증 모두 2025년 정기시험 신청기간이 <strong>2025.07.21 ~ 2025.07.24</strong>이니까, 설비보전기사부터 공부하고 전기 쪽은 천천히 고민해봐야겠다.
무시하다간 큰 코 다치고 돈만 날린다.</p>
<p>2025-07-18 회고 끝</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[로봇활용 첨단 생산시스템 전문가 양성 교육기 (메카트로닉스) - 15]]></title>
            <link>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-15</link>
            <guid>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-15</guid>
            <pubDate>Fri, 11 Jul 2025 10:21:17 GMT</pubDate>
            <description><![CDATA[<p>블로그 쓸려니까 힘들어서 그냥 금요일에만 몰아쓰기로 했다.
매일 블로그 쓰는 사람들은 보통 근성이 아닌 거 같다.</p>
<p>아님 AI거나.</p>
<p>일단 이번 주도 실습 위주의 활동만 해서 사진만 몇 장 올릴려고 한다.</p>
<hr>
<h4 id="플리커-회로-깜빡거리는-회로">플리커 회로 (깜빡거리는 회로)</h4>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/93249d01-e403-4481-b1d0-049f13f48564/image.png" alt=""></p>
<h4 id="비교문-사용-회로">비교문 사용 회로</h4>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/a4e76f1e-84f4-4a39-8ab9-df89bfa3bd6f/image.png" alt=""></p>
<hr>
<p>맥주 마셔서 피곤하니까 놀아야겠다.
2025-07-11 블로그 작성 끝</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[로봇활용 첨단 생산시스템 전문가 양성 교육기 (메카트로닉스) - 14]]></title>
            <link>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-14</link>
            <guid>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-14</guid>
            <pubDate>Mon, 07 Jul 2025 12:19:33 GMT</pubDate>
            <description><![CDATA[<p>
    <img src="https://velog.velcdn.com/images/_roadhobo/post/987436c0-8b84-4b6a-8584-a1887b4933e2/image.jpg" width="600px" />
</p>

<p>오늘도 실습했다.
인터록 회로와 자기유지 회로를 전선으로 구현하는 법을 배웠다.
좀 많이 해서 슬슬 손가락이 아픈 것 같은데, 주변에서 선 정리를 정말 예쁘게
하는 걸 보고 그냥 하기로 했다.</p>
<p>어쨌든 오늘 배운 건 복습해야겠지. 시작한다.</p>
<hr>
<h1 id="1-eocr">1. EOCR</h1>
<h4 id="슈나이더-일렉트릭제-eocr">슈나이더 일렉트릭제 EOCR</h4>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/e5ff5bb7-9dfb-4b64-85bb-dfae5ee3b59f/image.png" alt=""></p>
<p><strong>Electronic Over Current Relays, 즉 과전류 계전기</strong>는 주로 <strong>모터를 과전류로부터 보호</strong>하기 위해 사용된다.
근데 왜 굳이 차단기나 퓨즈를 쓰지 않고 과전류 계전기를 쓰는지 이해를 못해서 따로 찾아봤다.</p>
<p>모터는 시작하는 몇 초간은 매우 많은 전류를 필요로 한다. <strong>즉, 일정 시간동안은 과전류 상태여야만 정상 작동</strong>한다는 것이다. 그런데 <strong>오래 과전류 상태가 지속되면 전선들이 파손</strong>되어 버린다.</p>
<p>과전류를 필요로 하면서, 너무 오래 받으면 파손된다니 골때리는 상황이다.</p>
<p>그렇기에 혼자서는 금방 과전류를 차단하는 MCCB(배선차단기)와 함께 EOCR를 사용하여 <strong>모터에 일시적인 과전류를 흘린 후에 스스로 트립한 후</strong> 안정적으로 전류를 공급한다.</p>
<h1 id="2-3상-델타--y-결선">2. 3상 델타 &amp; Y 결선</h1>
<p>정말 어려운 내용이었다.
솔직히 필요없는 내용이라고는 하지만, 복습은 해야겠지?</p>
<h2 id="1-3상-전력">1. 3상 전력</h2>
<p>일단 아래는 GPT 설명이다.</p>
<blockquote>
<p>발전기에서 <strong>120도씩 위상이 다른 교류 전압 3개를 동시에 만들어 공급하는 전력 시스템</strong>을 이르는 말이다.
각 위상(R, S, T)은 동일한 주파수·크기를 가진다. <strong>위상만 120도 차이</strong>가 나며, 이 3개의 위상이 조합되어 연속적이고 일정한 전력 공급이 가능하다.</p>
</blockquote>
<h4 id="이게-대체-뭔-소리일까-한숨부터-나온다">이게 대체 뭔 소리일까? 한숨부터 나온다.</h4>
<p>이 설명으로는 AC 전원이 3개라는 것만 알겠다. 그 외엔 모르겠다.
일단 Y결선과 델타 결선을 알아보면서 차근차근 알아보자.</p>
<h2 id="2-y-결선">2. Y 결선</h2>
<p>
    <img src="https://velog.velcdn.com/images/_roadhobo/post/590c14cf-ae1b-47d4-8c3f-f4f3c9221e83/image.png" width="600px" />
</p>

<h5 id="출처--httpsblognavercomsomang8991221916506560">출처 : <a href="https://blog.naver.com/somang8991/221916506560">https://blog.naver.com/somang8991/221916506560</a></h5>
<p>Y 결선은 <strong>변압기, 송배전 시스템</strong>에 유리한 회로이다. <strong>중성선(N)</strong>이라는 전선으로 <strong>단상, 즉 하나의 교류전원</strong>을 공급하는 역할을 하게 된다.</p>
<p>일반적으로 하나의 교류전원을 이용하는 것보다 송전 효율이 좋다고 한다.
그 이유가 <strong>상전압 &lt; 선간전압 (√3배 차이)가 나기 때문에</strong>라고 하는데, <strong>상전압은 3상과 N선과의 전압</strong>, <strong>선간전압은 3상 간의 전압</strong>이라고 한다.</p>
<p>결론적으로, <strong>220V의 √3배인 380V를 보냄으로써 대규모 설비나 먼 지역의 송전</strong>에 유리하게 만드는 것이다.</p>
<h2 id="3-3상-델타-결선">3. 3상 델타 결선</h2>
<p>
    <img src="https://velog.velcdn.com/images/_roadhobo/post/768c36a6-d0e6-4625-abbb-7dfe791b786d/image.png" width="600px" />
</p>

<p><strong>모터 내부, 저압 3상 부하</strong>에 유리한 회로이다.
Y 결선과 마찬가지로 일정하고 강한 전압을 제공하는 회로이며, 중성선이 없어서 <strong>모터</strong>같은 곳에 사용하기가 더 유리하다고 한다.</p>
<p>거기다 부하 불평형이 적다고 하는데, <strong>각도에 따라 가해지는 전압이 Y 결선보다 더 일정하다</strong>는 걸 의미한다고 한다.</p>
<hr>
<p>전기공학 너무 어렵다.
이거 설명 찾아서 간단히 쓰는 것도 1시간 넘게 걸린 것 같다.
이것들 찾아서 정리하려다가 밤 다 지나갈 거 같아서 쫄아서 간단히 썼다.</p>
<p>나도 좀 쉬어야지.</p>
<p>어쨌든 2025-07-07 복습 끝</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[로봇활용 첨단 생산시스템 전문가 양성 교육기 (메카트로닉스) - 13]]></title>
            <link>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-13</link>
            <guid>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-13</guid>
            <pubDate>Fri, 04 Jul 2025 13:32:04 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/_roadhobo/post/f3c59687-bce6-4f3d-8dd9-5c068ffe8abe/image.png" alt=""></p>
<p>목요일와 금요일은 원래 EPlan 교육으로 예정돼있었는데,
교수님이 전기공학 기초부터 가르쳐주시면서 기초 이론과 
합판에 배선하는 방법 등을 공부했다</p>
<p>전기공학을 공부하는 게 어찌보면 당연하다는 생각과
그래도 학점은행제 수업에서도 힘들었던 수학은 다시 하기 싫다는 내적 갈등이
고통스러웠던 일주일이었다.</p>
<p>어쨌든 배운 건 복습해야지.</p>
<hr>
<h1 id="1-허용전류">1. 허용전류</h1>
<p>
    <img src="https://velog.velcdn.com/images/_roadhobo/post/7185d116-59ed-4275-bdf1-788224e4b136/image.png" width="600px" />
</p>

<p>이 게임은 <strong>&lt;산소미포함 Oxygen not included&gt;</strong>라는 게임이다.
<strong>메카트로닉스와 전기공학, 논리회로를 통한 자동화</strong>를
버무리고 간추려 놓은 기지건설의 재미가 개성적인 작품이다.</p>
<p>사진에 나오는 노란색 선은 <strong>헤비와트 와이어</strong>다.
전기를 대량으로 공급하는 <strong>굵은 전선</strong>인데 <strong>최대 20kW</strong>를 전달할 수 있다.</p>
<p>이 <strong>20kW</strong>를 전기공학에서는 <strong>전선이나 케이블에 흘릴 수 있는 전류의 최대값</strong>, 즉 <strong>허용전류</strong>라고 부른다.</p>
<p>이 허용전류를 넘으면 전선이 파손되기 시작하니 <strong>전류량을 줄이거나, 변압기 혹은 차단기로 전류를 제한</strong>해야한다. 그리고 이건 실제 전선도 마찬가지다.</p>
<p>그래서 실무에서는 <strong>전선 &gt; 차단기 &gt; 기기</strong> 순으로 허용전류를 고려하여 안전하게 전류량을 조절한다고 한다.</p>
<h1 id="2-줄의-법칙-h--i2rt">2. 줄의 법칙 (H = I^2RT)</h1>
<blockquote>
<p>열 = 전류의 제곱 * 저항 * 시간</p>
</blockquote>
<p>이 공식은 저항을 통과하는 <strong>전류에 의해 발생하는 열</strong>을 계산하는 데 활용된다.</p>
<p>&quot;전류를 제곱하는 이유는 면적 단위로 계산하기 위함일까?&quot;라고 생각했었는데
<strong>전류가 전하를 이동시킬 때, 전류가 커지면 전기장이 하는 일이 제곱으로 커진다고 한다.</strong></p>
<p>정확히는 전류가 2배가 됨에 따라, 전위차를 2배로 만들어야하는 과정에서 들어가는 전력이 4배가 된다고 한다. 추측이 아주 빗나가지는 않은 거 같기도 하다.</p>
<h1 id="3-회로의-고장원인">3. 회로의 고장원인</h1>
<h2 id="1-단락short-circuit">1. 단락(Short Circuit)</h2>
<p>전기장치 고장났을 때에 자주 들을 수 있는 <strong>쇼트</strong>다.</p>
<p><strong>원래 설계의도와는 다른 경로로 전류가 흘렀을 때</strong> 발생하는 현상으로, 저항이 매우 낮은 다른 경로로 갑자기 흐르게 되어 전류량이 과도하게 증가하여 고장을 일으킨다.</p>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/955dd5cc-cf5a-4416-a5dc-2678b859f195/image.png" alt=""></p>
<p><strong>세수하는데 물이 수도꼭지로 안 나오고
하수구 바로 위의 천장에서 내 뒷통수에 엄청난 수압이 꽂히고 있다고 생각해보자.</strong>
정상이라고 보긴 힘들 것이다.</p>
<p>이런 연유로 쇼트는 전선만 손상되면 차라리 다행이고
<strong>심한 발열과 함께 기기고장</strong>을 일으키기 때문에
우리가 반드시 <strong>퓨즈</strong>를 사용해야하는 이유를 여기서 알 수 있다.</p>
<h2 id="2-과전류과부하">2. 과전류(과부하)</h2>
<p>이건 아까 설명한 <strong>허용전류</strong>보다 큰 전류가 흐르는 상태다.
굳이 설명할 필요도 없이 고장을 유발하는 상황이기에 주의해야한다.</p>
<p>이를 위해 <strong>MCCB, Mold Case Circuit Breaker</strong>라고 불리는 차단기를 사용해
과전류를 방지한다.</p>
<p>이렇게만 놓고보면 차단기나 퓨즈 중 하나만 써도 될 것 같다는 생각이 든다.
하지만 이 둘에는 중요한 차이점이 있다.</p>
<p><strong>MCCB는 차단기라서 재사용이 가능하다는 점과
퓨즈는 차단기에 비해 속도가 빠르다는 점이다.</strong></p>
<p>짧은 시간 내에 회로를 빠르게 정지해야하는 쇼트 현상에는 퓨즈를
허용전류를 넘어서 장기적으로 영향을 미치는 과전류에는 차단기를
동시에 사용하는 것이 가성비와 안전성 면에서 탁월한 선택이다.</p>
<hr>
<p>원래 더 많이 배웠는데 짤막하게 조금씩 올릴 거다.
조금씩 오래 해야지 한번에 많이 하면 하기 싫으니까.
2025-07-04 복습 끝</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[로봇활용 첨단 생산시스템 전문가 양성 교육기 (메카트로닉스) - 12]]></title>
            <link>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-12</link>
            <guid>https://velog.io/@_roadhobo/%EB%A1%9C%EB%B4%87%ED%99%9C%EC%9A%A9-%EC%B2%A8%EB%8B%A8-%EC%83%9D%EC%82%B0%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%84%EB%AC%B8%EA%B0%80-%EC%96%91%EC%84%B1-%EA%B5%90%EC%9C%A1%EA%B8%B0-%EB%A9%94%EC%B9%B4%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4-12</guid>
            <pubDate>Wed, 02 Jul 2025 10:27:28 GMT</pubDate>
            <description><![CDATA[<p>오늘도 실습만 했다
슬슬 설비보전 기능사나 기사 준비라도 해야할 것 같다</p>
<hr>
<h4 id="🔃공압-속도-조절-감압-밸브-사용">🔃공압 속도 조절 (감압 밸브 사용)</h4>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/855e30b7-ed32-495d-94cc-7e477c51641b/image.gif" alt=""></p>
<h4 id="🛢️유량-조절-밸브">🛢️유량 조절 밸브</h4>
<p><img src="https://velog.velcdn.com/images/_roadhobo/post/f414b5bf-c652-4a83-9d14-d64d9f224df8/image.gif" alt=""></p>
<hr>
<p>맨날 실습 영상만 올리니까 편하기는 한데......
내일부터 <strong>Eplan</strong> 수업하니까 다시 이론 관련 내용을 올릴 것 같다.</p>
<p>그럼 2025-07-02 업로드 끝</p>
]]></description>
        </item>
    </channel>
</rss>