제조공정
이 튜토리얼에서는 깔끔한 올블랙 디자인, 멋진 LED 조명, 그리고 듀얼 스피드 기어박스를 갖춘 3D 프린팅 RC 탱크(무선 조종 궤도 차량) 제작 과정을 보여드리겠습니다. 맞습니다, 이 탱크를 위해 특별히 기어박스를 설계해 지형이나 용도에 따라 저단 또는 고단 기어를 선택할 수 있게 했고, 이를 통해 더 높은 토크나 더 높은 속도를 얻을 수 있습니다.
다음 영상을 시청하거나 아래의 텍스트 튜토리얼을 읽어보세요.
저를 팔로우하신 분들은 아시겠지만, 얼마 전에도 3D 프린팅 RC 탱크를 만든 적이 있습니다. 그건 멋졌지만 출력이 좀 부족했습니다. 그래서 이번에는 각 궤도당 200W DC 모터를 사용하고 이 기어박스와 조합해 어떤 지형이든 정복하거나 번아웃, 도넛 턴 같은 재미있는 주행도 할 수 있을 만큼 충분한 힘을 냅니다.
재미 삼아 주소 지정 가능한 LED 스트립을 장착해 무한한 조명 효과를 연출할 수 있게 했습니다. 이번 영상에서는 경찰차 스트로브 효과를 만들었는데, 특히 야간에 이걸 켜고 주행하면 정말 멋집니다.
서스펜션은 양쪽에 코일 스프링과 쇼크 업소버 3개씩, 각각에 로드휠 2개씩을 달아 구성했습니다. 덕분에 울퉁불퉁한 지형에서도 부드럽게 주행하고 장애물을 넘으면서 궤도와 지면의 접촉면을 잘 유지합니다.
물론 모든 게 3D 프린팅이며, 3D 파일은 다운로드 가능하니 직접 만들어보실 수 있습니다.
탱크 제어에는 저렴한 상용 RC 송신기를 사용합니다. 탱크에는 적절한 RC 수신기가 있어 명령을 받아 마이크로컨트롤러로 보냅니다. 플랫폼의 두뇌는 Atmega2560 마이크로컨트롤러 기반 보드이며, 모든 것을 쉽게 연결하기 위해 보드 위에 장착하는 커스텀 PCB를 제작했습니다.
자, 이제 설계, 3D 프린팅, 조립, 전자 부품 연결, 마이크로컨트롤러 프로그래밍까지 이 RC 탱크 제작 전 과정을 안내해드리겠습니다.
이 탱크는 Onshape로 설계했습니다.
Onshape는 제가 프로젝트에 사용하는 전문가급 클라우드 네이티브 3D CAD 및 PDM 시스템입니다.
기계 엔지니어와 제품 디자이너라면 Onshape를 확인해보세요. 귀하와 귀사의 경우 Onshape.pro/HowtoMechatronics에서 Onshape Professional을 최대 6개월간 무료로 사용할 수 있습니다.
설계의 초기 입력 파라미터는 DC 모터의 치수와 RPM이었습니다. 이 모터들은 꽤 크고 3000 RPM으로, 이 탱크에는 너무 높은 RPM입니다. 그래서 속도를 두 가지 다른 값으로 낮추는 이 기어박스를 설계했습니다.
이 기어박스는 자동차의 수동 변속기처럼 작동합니다. 기어 시프터가 손으로 조작하는 대신 서보 모터로 움직이며, 두 출력 기어 세트 중 어느 것을 최종 출력으로 맞물릴지 선택합니다.
기어박스의 1차 감속비는 1.88:1로 고정되어 있고, 거기서 저단 기어(추가 감속 2.76:1) 또는 고단 기어(1:1)를 선택할 수 있습니다. 따라서 저단에서는 총 감속비가 5.2, 약 570 RPM이고, 고단에서는 1.88 감속으로 약 1600 RPM이 나옵니다.
기어박스 작동 원리는 조립 섹션에서 자세히 다루겠습니다.
다음 설계 입력 파라미터는 구입한 RC 쇼크 업소버였습니다. 신장 시 길이 70mm, 트래블 15mm입니다. 로드휠의 수직 트래블 거리를 좀 더 늘리고 싶어서 이 구성으로 배치해 22mm 수직 트래블을 얻었습니다.
게다가 이것은 보기 시스템이라 한 쌍의 바퀴가 움직이는 축에 연결되어 있는데, 바퀴가 그 축을 중심으로 회전하며 추가 수직 트래블을 만듭니다. 당연히 승차감이 부드러워지고 궤도와 노면의 접촉이 좋아집니다.
전방 로드휠을 자세히 보면 아이들러 휠과 연결돼 궤도의 동적 장력을 제공합니다. 전방 로드휠이 올라가면 궤도 둘레가 작아져 장력이 느슨해지는데, 이때 아이들러 휠이 앞으로 밀려나 궤도를 팽팽하게 당깁니다. 이 연결로 볼트와 거리 너트를 조절해 정적 장력 조절도 가능합니다.
후면에는 세 부분으로 구성된 스프로킷이 있습니다. 샤프트 커플러와 좌우 스프로킷 섹션이 M3 볼트 세 개로 연결돼 있습니다.
스프로킷의 핵심 치수는 피치입니다. 트랙 링크의 피치와 맞아야 하니까요. 여기선 피치 11mm에 톱니 20개를 선택해 피치 직경 약 69mm가 나왔습니다. 스프로킷 크기는 궤도가 탱크 바디 밖으로 벗어나지 않을 만큼 충분히 크게 잡았습니다.
11mm 피치는 트랙 링크 설계에서 정해진 것입니다. 트랙 링크 목표는 최대한 콤팩트하게, 추가 부품(핀) 하나로 다음 링크와 연결되면서 3D 프린터로 출력할 수 있을 만큼 강하게 만드는 것이었습니다.
게다가 3D 프린팅 시 서포트 재료를 전혀 쓰지 않고 출력하고 싶었는데, 이 설계로 달성했습니다.
트랙 링크 연결용 핀은 2mm 직경으로 계획했기에 한 쪽은 2.1mm(타이트 핏), 다른 쪽은 2.4mm(루즈 핏)로 치수를 잡아 링크가 자유롭게 회전하게 했습니다.
스프로킷 톱니는 트랙 링크의 외측 원통 형상에 맞물립니다. 트랙 링크 실린더 반경 4.4mm, 스프로킷 반경 4.9mm로 루즈 핏을 만들었습니다.
모든 것을 연결하는 메인 바디는 두 기어박스가 들어가고 전자 장치와 배터리 공간도 확보해야 해 전체 크기가 547x397mm로 꽤 큽니다. 일반적인 3D 프린터 베드보다 크기 때문에 큰 부품들을 두 섹션으로 나눠 300mm 베드 프린터에서도 출력할 수 있게 했습니다. 220mm 베드 프린터용으로는 4분할 버전도 제공합니다.
탱크 조립에는 다양한 M3, M4 볼트와 너트, 나사 인서트, 베어링이 필요합니다. 전체 부품 목록은 아래 조립 섹션에 있습니다. 물론 3D 모델과 STL 파일도 다운로드 가능합니다.
이 RC 탱크의 3D 모델을 Onshape에서 웹 브라우저로 바로 확인할 수 있습니다.
이 RC 탱크/로봇 플랫폼의 3D 모델과 3D 프린팅용 STL 파일은 Cults3D에서 다운로드할 수 있습니다.
대부분의 부품은 Creality Ender-3 V3 Plus 3D 프린터로 출력했습니다.
3D 프린팅 시 수평 확장 기능, 최신 Creality Print 슬라이서에서는 X-Y 윤곽 보정(X-Y contour compensation)을 사용하는 것이 중요합니다. 기본값으로 두면 출력물 외곽 치수와 구멍이 원래 모델보다 작게 나와 조립에 문제가 생길 수 있습니다.
Creality Print 슬라이서에서 X-Y 윤곽 보정 -0.07, X-Y 구멍 보정 +0.07을 사용했습니다. 물론 본인의 3D 프린터에서 테스트 프린트를 해보며 최적의 값을 찾아야 합니다.
트랙 링크 출력 시 베드 접착용 래프트를 사용했습니다. 베이스 접촉 면적이 작아 베드 접착이 좋지 않으면 잘 안 붙을 수 있기 때문입니다. 특히 대량 출력 시 래프트가 더 안전합니다.
Creality Ender-3 V3 Plus는 300x300mm 베드라 탱크 메인 바디를 두 부분으로 출력할 수 있었습니다. 두 섹션으로 나눴어도 부품이 꽤 커서 프린터의 한계를 시험하는 셈이었지만, Ender-3 V3 Plus가 훌륭하게 소화해냈습니다.
대형 빌드 볼륨과 고속 프린터를 찾는 분께 추천합니다. CoreXZ 방식이라 최대 600mm/s 속도에 견고한 프레임으로 훌륭한 출력 품질을 보여줍니다. 프린터 제공해준 Creality에 감사드립니다.
자, 모든 3D 프린팅 부품이 준비됐으니 탱크 조립을 시작하겠습니다. 솔직히 3D 프린팅 양이 어마어마합니다. 며칠 걸리고 필라멘트도 여러 롤이 필요합니다.
트랙 링크만 해도 총 214개라 약 500g 필라멘트와 30시간이 소요됩니다. 탱크 메인 바디는 두 섹션으로 나눠 약 1kg(각 섹션 500g, 12~18시간) 필요합니다. 많은 부품이 서포트가 필요해 후처리 시간도 꽤 듭니다.
이 RC 탱크 프로젝트 조립에 필요한 부품 목록입니다. 전자 부품 목록은 아래 회로도 섹션에 있습니다.
| 부품 | 수량 | 구매 링크 |
|---|---|---|
| RC 쇼크 업소버 | 8 | Amazon | AliExpress |
| 볼 베어링 686 – 6x13x5mm | 18 | Amazon | AliExpress |
| 볼 베어링 624 – 4x13x5mm | 44 | Amazon | AliExpress |
| 볼 베어링 684 – 4x9x4mm | 6 | Amazon | AliExpress |
| M6 나사봉 | 300mm | Amazon | AliExpress |
| M6 록너트 | 4 | Amazon | AliExpress |
| M3 나사 인서트 | ~20 | Amazon | AliExpress |
| M3 그럽 스크류 | ~30 | Amazon | AliExpress |
| M3, M4 볼트 및 너트 | 아래 명시 | Amazon | AliExpress |
| 2mm 용접봉 | ~12m | Amazon | AliExpress |
| 볼트 | 너트 |
|---|---|
|
M3x8mm – 10 M3x10mm – 10 M3x16mm – 20 M3x20mm – 10 M3x25mm – 10 M3x30mm – 10 M3x16mm 카운터싱크 – 20 M4x16mm – 10 M4x35mm – 20 M4x40mm – 20 M5x40mm – 2 |
M3 록너트 – 50 M4 록너트 – 40 M5 너트 – 6 |
공개: 위 링크는 제휴 링크입니다. 아마존 어소시에이트로서 자격 있는 구매로부터 수익을 얻습니다.
RC 탱크의 전자 장치를 살펴보고 작동 원리를 설명하겠습니다. 이 RC 탱크의 두뇌는 ATmega2560 마이크로컨트롤러 기반 보드입니다.
필요한 부품은 아래 링크에서 구매할 수 있습니다:
| 부품 | 수량 | 구매 링크 |
|---|---|---|
| DC 모터 895 – 12V 200W 3000RPM | 2 | Amazon | AliExpress |
| BTS7960 DC 모터 드라이버 | 2 | Amazon | AliExpress |
| 서보 모터 | 1 | Amazon | AliExpress |
| ATmega2560 – 아두이노 메가 보드 | 1 | Amazon | AliExpress |
| 3S 리포 배터리 – 최소 3000mAh | 1 | Amazon | AliExpress |
| 리포 배터리 커넥터 | 1 | Amazon | AliExpress |
| Flysky FS-i6X – RC 송신기 및 FS-iA6B 수신기 | 1 | Amazon | AliExpress |
| WS2812b 주소 지정 가능 LED 스트립 | 1m | Amazon | AliExpress |
| LM350 전압 레귤레이터 | 1 | Amazon | AliExpress |
| 트리머 포텐쇼미터 – 5k | 1 | Amazon | AliExpress |
| 터미널 블록 커넥터 | 4 | Amazon | AliExpress |
| 전선 ~20AWG | ~3m | Amazon | AliExpress |
| 저항 – 1k x1, 2k x1, 240 x1 | Amazon | AliExpress | |
| 커패시터 – 0.1uF x1, 1uF x1, 400uF x1 | Amazon | AliExpress |
공개: 위 링크는 제휴 링크입니다. 아마존 어소시에이트로서 자격 있는 구매로부터 수익을 얻습니다.
전자 부품 연결이 꽤 복잡해져서 이를 정리하기 위해 커스텀 PCB를 설계했습니다. 이 PCB는 ATmega2560 마이크로컨트롤러 기반 보드와 호환돼 바로 위에 장착할 수 있습니다.
PCBWay에서 주문했습니다. 거버 파일을 업로드하고 PCB 속성을 선택하면 합리적인 가격에 주문할 수 있습니다.
기본 속성은 그대로 두고 PCB 색상만 파란색으로 선택했습니다. 거버 파일은 PCBWay 프로젝트 공유 커뮤니티에서 찾아 다운로드하거나 직접 주문할 수 있습니다.
이 섹션에서는 모든 것을 연결하고 RC 탱크를 완성하는 방법을 설명합니다.
이 섹션은 아직 작성 중입니다.
이 섹션에서는 RC 탱크 뒤의 아두이노 코드 작동 원리를 설명합니다. 코드는 여기서 다운로드할 수 있습니다:
IBusBM 라이브러리를 사용해 RC 송신기에서 들어오는 데이터를 읽습니다.
// RC 송신기에서 들어오는 데이터 읽기
IBus.loop();
ch0 = IBus.readChannel(0); // ch0 - 좌우
ch1 = IBus.readChannel(1); // ch1 - 전진/후진
ch6 = IBus.readChannel(6); // ch6 - 기어 시프터
ch7 = IBus.readChannel(7); // ch7 - 경찰차 스트로브 효과
ch8 = IBus.readChannel(8); // ch8 - 전체 흰색 LED
ch9 = IBus.readChannel(9); // ch9 - 좌우 흰색 LED
오른쪽 조이스틱(채널 0, 1)으로 탱크 움직임을 제어, 왼쪽 로커 스위치(채널 6)로 기어 변속용 서보 제어, 나머지 세 로커 스위치로 LED 제어.
들어오는 데이터를 DC 모터 PWM 제어에 적합한 0~255 값으로 변환합니다.
// 들어오는 데이터를 적절한 PWM 값으로 변환
steeringValue = map(ch0, 1000, 2000, -205, 205); // 0~205 범위, 이후 +50 해 모터가 저 PWM에서 안 돌게 함
motorSpeed = map(ch1, 1000, 2000, -205, 205);
motorSpeed = abs(motorSpeed);
leftMotorSpeed = 50 + motorSpeed + steeringValue; // 50 + (0-205) + (0-205) = 50~255 PWM 범위
rightMotorSpeed = 50 + motorSpeed - steeringValue;
leftMotorSpeed = constrain(leftMotorSpeed, 0, 255);
rightMotorSpeed = constrain(rightMotorSpeed, 0, 255);
// PWM이 52 미만이면 0으로 설정
if (leftMotorSpeed < 52) { leftMotorSpeed = 0; }
if (rightMotorSpeed < 52) { rightMotorSpeed = 0; }
PWM 값을 analogWrite() 함수로 드라이버와 모터에 보냅니다.
// 오른쪽 조이스틱 위(전진)
if (ch1 > 1510 && ch1 < 2000) {
digitalWrite(M1_RPWM, 0);
analogWrite(M1_LPWM, leftMotorSpeed);
digitalWrite(M2_RPWM, 0);
analogWrite(M2_LPWM, rightMotorSpeed);
}
// 오른쪽 조이스틱 아래(후진)
if (ch1 > 1000 && ch1 < 1490) {
analogWrite(M1_RPWM, leftMotorSpeed);
digitalWrite(M1_LPWM, 0);
analogWrite(M2_RPWM, rightMotorSpeed);
digitalWrite(M2_LPWM, 0);
}
// 오른쪽 조이스틱 중앙(정지)
if (ch1 > 1490 && ch1 < 1510) {
if (leftMotorSpeed < 50 && rightMotorSpeed < 50) {
digitalWrite(M1_LPWM, 0);
digitalWrite(M1_RPWM, 0);
digitalWrite(M2_LPWM, 0);
digitalWrite(M2_RPWM, 0);
}
// 조이스틱이 좌우로만 움직이면 제자리 회전
else if (ch0 < 1490 || ch0 > 1510) {
analogWrite(M1_RPWM, rightMotorSpeed);
analogWrite(M1_LPWM, leftMotorSpeed);
analogWrite(M2_RPWM, leftMotorSpeed);
analogWrite(M2_LPWM, rightMotorSpeed);
}
}
서보 모터와 기어 변속은 사용하는 서보에 맞게 값 조정이 필요합니다.
//======= 기어 변속 ====
if (ch6 == 2000) { myservo.write(140); }
if (ch6 == 1000) { myservo.write(40); }
조명 제어는 어느 로커가 켜졌는지 확인하고 해당 LED를 개별적으로 점등시킵니다.
//===== 조명 제어 ===
// 전후방 라이트 LED 제어
if (ch9 == 2000) {
frontLeds[0] = CRGB(255, 255, 255);
// ... (중략) ...
backRightLeds[2] = CRGB(255, 0, 0);
}
if (ch9 != ch9State) {
if (ch9 == 1000) { FastLED.clear(); }
ch9State = ch9;
FastLED.show();
}
// 전후방 라이트 LED 제어
if (ch8 == 1500) {
frontLeds[0] = CRGB(255, 255, 255);
// ... (중략) ...
backRightLeds[2] = CRGB(255, 0, 0);
}
// ... 이하 생략 ...
경찰차 스트로브 효과 코딩에 시간이 좀 걸렸지만 정말 멋지게 나왔습니다.
코드 업로드 후 로봇 플랫폼과 RC 송신기 전원을 켜 테스트합니다. 송신기 디스플레이에 리포 배터리 전압, 수신기 및 송신기 전압이 표시됩니다.
여기서 기어 변속이 움직이는 중에 어떻게 작동하는지 볼 수 있습니다. 왼쪽 로커 스위치로 모터가 돌고 있는 중에 기어를 바꿀 수 있습니다. 정말 멋지죠.
나머지 세 로커 스위치로 탱크 조명을 제어합니다. 4가지 모드가 있습니다. 양쪽 5개씩 흰색 LED, 두 번째 모드 전체 흰색 LED 점등, 세 번째 모드 전체 흰색 LED 점멸, 그리고 가장 멋진 경찰차 스트로브 효과. 탱크는 어떤 조명 모드에서도 움직일 수 있습니다.
한 가지 주의할 점: LED가 LM350 전압 레귤레이터의 5V 출력으로 구동되는데, 전체 흰색 LED 모드 사용 시 꽤 뜨거워질 수 있습니다. 흰색 LED 하나당 약 50-60mA 전류를 쓰니 거의 1A 가까이 됩니다. LM350은 최대 3A까지 감당하지만 그에 맞는 큰 방열판이 필요합니다. 커스텀 PCB에 잘못된 위치에 배치해 제대로 된 방열판을 달 수 없었습니다. 스테퍼 드라이버용 작은 방열판을 붙여봤지만 조금 도움 될 뿐, 전체 흰색 LED를 오래 켜두면 과열됩니다. 다른 모드들은 괜찮아 그냥 뒀습니다. 이 문제를 해결하려면 8A 정격의 별도 벅 컨버터를 추가하면 됩니다. 12V 출력 단자에서 전원받아 5~6V로 설정해 PCB의 6V 단자로 보내고 6V 레일로 LED를 구동하면 됩니다.
어쨌든 이 영상을 즐겁게 보셨고 새로운 것을 배우셨기를 바랍니다. 이 RC 탱크 제작과 주행을 즐기세요. 앞서 말했듯 향후 영상에서 이 탱크에 로봇 팔을 얹거나 제설기 같은 걸 만들 계획입니다. 계속 지켜봐 주세요.
제조공정
유지보수 프로그램은 측정 데이터 품질만큼만 효과적입니다. 부정확하거나 불완전한 데이터는 분석을 오도해 팀이 잘못된 문제에 집중하게 만듭니다. 잘 구성된 데이터 수집 절차는 고품질 데이터를 보장하는 가장 신뢰할 수 있는 방법입니다. 그런데 많은 설비가 명확한 서면 지침의 가치를 간과합니다—심지어 겉보기엔 단순한 작업에서도 말입니다. 이 가이드에서는 정밀한 절차가 왜 중요한지 탐구하고 견고한 표준 유지보수 절차(SMP) 작성을 위한 단계별 프레임워크를 제공합니다. SMP는 유지보수 작업을 정확히 어떻게 실행해야 하는지 단계별로 명시하고
중소 제조업체 관점에서 산업용 로봇 분야에서 가장 중요한 발전 중 하나는 약 10년 전 협동 로봇 또는 코봇(CoBots)이라 불리는 산업용 로봇 하위 집합이 등장한 것입니다. 이들을 표준 산업용 로봇과 다르게 만드는 것은 코봇이 사람 주변에서 안전하게 사용되도록 특별히 설계되었다는 점입니다. 왜 이게 중요할까요? 생각보다 더 중요합니다. 산업용 로봇은 첨단 기술처럼 보이지만 실제로는 멍청합니다(dumb). 프로그래밍된 장소와 속도로 이동하지만, 사람이 가는 길에 우연히 끼어들면 조심하세요! 표준 산업용 로봇은 고속으로 설계되고