산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

완전 3D 프린팅 탱크: 다용도 궤도 로봇 플랫폼 만들기

이 튜토리얼에서는 무선 조종 궤도 차량, 로봇 플랫폼, 또는 탱크라 부르든 아주 멋진 것을 처음부터 설계해 완전 3D 프린팅 가능하게 만들었습니다. 모든 것을 쉽게 출력해 직접 만들어보실 수 있습니다.

다음 영상을 시청하거나 아래의 텍스트 튜토리얼을 읽어보세요.

개요

이 프로젝트 목표는 다양한 지형을 횡단하고 여러 용도로 쓸 수 있는 다용도 플랫폼을 만드는 것이었습니다. 최적의 선택은 연속 궤도 시스템. 궤도가 차량 무게를 더 넓은 면적에 분산시켜 뛰어난 접지력과 부드러운 지면, 진흙, 눈에서 빠질 확률을 낮춰줍니다.

로봇 플랫폼이 진흙에서 꽤 잘 달립니다. 아쉽게도 눈에서 테스트할 기회가 없었는데, 향후 로봇 팔이나 터렛을 얹는 영상에서 테스트해보려 합니다. 로봇 팔을 얹으면 물체 잡기/이동, 카메라 장착으로 시각 검사 등 다양한 작업 가능. 또는 네르프 다트 발사 터렛과 이미 장착한 심플하지만 멋진 LED 조명과 결합해 재미있게 놀 수도 있습니다.

서스펜션엔 탱크에서 수년간 쓰인 크리스티 서스펜션 시스템을 채택했습니다. 각 로드휠마다 개별 서스펜션(스프링과 쇼크 업소버)이 있습니다.

덕분에 울퉁불퉁한 지형에서도 부드럽게 주행하고 장애물을 넘으면서 궤도와 지면의 접촉면을 잘 유지합니다.

3D 프린팅 탱크 제어에는 저렴한 상용 RC 송신기를 사용해 플랫폼에 명령을 보냅니다.

플랫폼엔 적절한 RC 수신기가 있어 명령을 받아 마이크로컨트롤러로 보냅니다. 플랫폼의 두뇌는 Atmega2560 마이크로컨트롤러 기반 보드이며, 모든 것을 쉽게 연결하기 위해 보드 위에 장착하는 커스텀 PCB를 제작했습니다.

자, 이제 설계, 3D 프린팅, 조립, 전자 부품 연결, 마이크로컨트롤러 프로그래밍까지 이 로봇 플랫폼 제작 전 과정을 안내해드리겠습니다.

로봇 플랫폼 설계

이 로봇 플랫폼은 SOLIDWORKS로 설계했으며, 이 영상의 후원사이기도 합니다.

— 후원 섹션 —

“업계 최고 전문가급 설계 도구가 이제 모든 메이커에게 연 $99 또는 월 $9.99라는 놀라운 저렴한 가격으로 제공됩니다. 맞습니다, 3DEXPERIENCE SOLIDWORKS for Makers는 무역을 배우는 사람, DIY 프로젝트 등에 좋습니다.

이번 혜택엔 3DEXPERIENCE SOLIDWORKS Professional(혜택 중 가장 수요 많은 CAD 툴, PC에서 로컬 실행), 파일 로컬 또는 3DEXPERIENCE 플랫폼 클라우드 저장.

"xDesign", 브라우저 기반 CAD, 3DEXPERIENCE SOLIDWORKS와 함께 쓰거나 단독 사용. 언제 어디서나 어떤 기기에서든 모델링 가능.

"xShape", 브라우저 기반 자유형 CAD, 어떤 기기에서든 표면 모델링 쉽게 가능.

"Visualize Connected", 사진급 이미지, 애니메이션, 인터랙티브 웹 콘텐츠 등 쉽게 제작해 청중 감동.

"NC Shop Floor Programmer", 3축 밀링과 와이어 EDM 지능형 가공 전략 CAM, 사용하기 쉬운 패키지.

아래 링크 클릭하면 특별 20% 할인 – 지금 최고의 툴로 만들기 시작하세요! 교육 콘텐츠 후원과 지원에 큰 감사드립니다, SOLIDWORKS.”

구매: https://www.solidworks.com/makers20

자세히: https://discover.solidworks.com/3dexperience-solidworks-makers

— 본론으로 돌아가기 —

로봇 플랫폼 설계를 어떻게 구상했는지 설명하겠습니다. 첫 설계 입력 파라미터는 제가 가진 RC 쇼크 업소버와 그 치수였습니다.

8개 있었으니 양쪽에 로드휠 4개씩, 신장 시 길이 41mm에 트래블 11mm. 이 치수에 맞춰 로드휠 수직 트래블 거리를 좀 더 늘리고 싶어 16mm 수직 트래블을 내는 메커니즘을 고안했습니다.

쇼크 업소버와 로드휠 링크 조인트를 로드휠 링크 피봇 포인트 쪽으로 더 옮기면 더 큰 트래블을 얻지만, 스프링 힘을 잃거나 플랫폼을 제대로 지탱할 더 강한 스프링이 필요합니다.

SOLIDWORKS로 간단한 시뮬레이션을 돌려 여러 메커니즘에서 스프링 반력을 확인하고, 전체 콤팩트함도 좋은 이 메커니즘을 선택했습니다.

전방 로드휠을 자세히 보면 아이들러 휠과 연결돼 궤도 동적 장력을 제공합니다. 로드휠이 올라가면 궤도 둘레가 작아져 장력이 느슨해지는데, 이 연결로 아이들러 휠이 앞으로 밀려나 궤도를 팽팽하게 당깁니다. 볼트와 거리 너트 조절로 정적 장력 조절도 가능.

후면엔 세 부분으로 구성된 스프로킷이 있습니다. 샤프트 커플러와 좌우 스프로킷 섹션이 M3 볼트 세 개로 연결.

스프로킷 핵심 치수는 피치. 트랙 링크 피치와 맞아야 합니다. 피치 11mm, 톱니 12개로 스프로킷 피치 직경 약 42mm.

11mm 피치는 트랙 링크 설계에서 정해졌습니다. 트랙 링크 목표: 최대한 콤팩트하게, 추가 부품(핀) 하나로 다음 링크와 연결되면서 3D 프린터로 출력할 수 있을 만큼 강하게. 게다가 3D 프린팅 시 서포트 재료 전혀 안 쓰게 하고 싶었는데 이 설계로 달성했습니다.

트랙 링크 연결용 핀은 2mm 직경 계획. 한 쪽 2mm(타이트 핏), 다른 쪽 2.3mm(루즈 핏)로 치수 잡아 링크 자유 회전 가능하게.

스프로킷 톱니는 핀이 형성된 이 개구부(8.8mm 직경)에 맞물리며, 스프로킷 직경 9.1mm로 루즈 핏.

이 모든 부품이 정해지면 어셈블리 환경에서 스케치, 스프로킷/아이들러 휠/로드휠을 감싸는 폐곡선 스케치를 그렸습니다.

이 스케치로 SOLIDWORKS Chain Component Pattern 기능을 써서 그 윤곽을 따라 모든 트랙 링크를 생성했습니다.

나머지 로봇 플랫폼(모든 것 연결되는 베이스, LED 수용 측면, 탑 커버)은 현대적이고 멋진 스타일로 설계했습니다. 전체 치수 약 400x300mm로 대부분 3D 프린터보다 커서 모든 부품을 두 섹션으로 나눠 거의 모든 3D 프린터에서 출력 가능하게 했습니다. 브라켓과 M3 볼트로 연결.

전체 로봇 플랫폼 조립엔 다양한 M3, M4 볼트/너트, 나사 인서트, 베어링 필요. 전체 부품 목록은 아래 조립 섹션에.

3D 모델 및 STL 다운로드 파일

이 RC 탱크/로봇 플랫폼의 3D 모델과 3D 프린팅용 STL 파일은 Cults3D에서 다운로드할 수 있습니다.

3D 프린팅

3D 프린팅 시 치수 정확한 부품을 얻으려면 슬라이싱 소프트웨어의 수평 확장(Horizontal Expansion)과 구멍 수평 확장(Hole Horizontal Expansion) 설정을 써야 합니다. 기본값으로 두면 출력물 외곽 치수와 구멍이 원래 모델보다 작게 나옵니다.

수평 확장을 0.02mm, 구멍 수평 확장을 0.04mm로 설정했습니다. 본인 3D 프린터에서 테스트 프린트로 최적 값 찾아보세요. 부품끼리, 베어링/볼트 등 다른 부품과 쉽게 조립하려면 정확한 치수가 필요합니다.

트랙 링크 출력 시 베드 접착용 래프트 사용. 베드 플레이트와 접촉 면적이 작아 프린터 베드 접착이 안 좋으면 잘 안 붙을 수 있음. 특히 대량 출력 시 래프트가 더 안전.

3D 프린팅 탱크 조립 – 궤도 로봇 플랫폼

자, 로봇 플랫폼용 모든 3D 프린팅 부품이 준비됐습니다. 솔직히 출력에 꽤 시간 걸렸습니다.

예를 들어 베이스 각 섹션 약 22시간, 156개 트랙 링크 약 96시간. 총 약 200시간 소요. 운 좋게 3D 프린터 두 대라 약 100시간 걸렸습니다.

부품 목록

이 3D 프린팅 탱크 – 로봇 플랫폼 프로젝트 조립에 필요한 부품 목록. 전자 부품 목록은 아래 회로도 섹션에.

공개: 위 링크는 제휴 링크입니다. 아마존 어소시에이트로서 자격 있는 구매로부터 수익을 얻습니다.

베이스 조립부터 시작. 두 섹션이 브라켓과 M3 볼트/너트로 연결됩니다.

사이드 브라켓 고정엔 M3, 5mm 나사 인서트를 베이스 측면 벽에 박아 사용. 이렇게 하면 벽 외부가 볼트/너트 없이 깔끔해 궤도가 근처를 지나갈 수 있습니다.

쇼크 업소버 장착 브라켓을 M3 볼트로 고정.

로드휠 암이 피봇할 베어링 장착. 베어링 13mm 외경, 4mm 내경, 로드휠당 2개 필요.

핀으로는 M4 볼트 30mm 사용. 베어링과 암 사이에 와셔 넣고 안쪽에서 셀프 록 너트로 고정. 이 조인트 조임 정도 주의: 너무 조이지도, 너무 헐겁지도 않게.

쇼크 업소버 장착. 패키지에 동봉된 M1.4 볼트로 고정. 작은 드라이버가 없어 플라이어로 조였습니다. 지금까지 메커니즘 완벽 작동.

암 하단에 로드휠 장착. 로드휠은 서포트 없이 출력하려고 두 섹션으로 나눴습니다. 단일 파트로 출력 가능할지 모르지만 시도 안 해봤습니다.

두 섹션 연결용으로 2mm 강철 봉 사용. 트랙 링크 연결용과 같은 것. 사실은 납땜용 황동봉이라 좀 부드럽고 플라이어로 쉽게 자를 수 있습니다. 휠당 약 23mm 길이 3개 삽입, 양쪽에 앞서 쓴 베어링 2개 장착. 다시 M4 볼트, 와셔, 셀프 록 너트로 로드휠 고정.

휠은 자유 회전하면서 샤프트에 유격 없어야 함.

다른 로드휠들도 같은 과정 반복. 전방 로드휠은 동적 장력 제공용 레버가 달린 살짝 다른 암이지만 장착법 동일.

아이들러 휠 메커니즘 조립. 3D 프린팅 부품 3개, 볼트, 거리 너트로 구성.

첫 링크 고정 전 후면에 M4 셀프 록 너트 박아 나중에 아이들러 휠 부착용으로 씀.

같은 2mm 구리봉으로 이 조인트들 핀 연결. 두 번째 링크 아이들러 휠 쪽에 M3 거리 너트 15mm를 M3 볼트로 고정. 다른 쪽에 M3 볼트 20mm와 너트, 거리 너트로 들어감. 이 셋업으로 아이들러 휠과 로드휠 암 거리 조절 가능, 정적/동적 궤도 장력 조절. 아이들러 휠 M4 볼트로 고정하면 장력 시스템과 전체 서스펜션 시스템 완료.

이제 스프로킷 조립. 모터부터 장착. 베이스 플랫폼은 중앙/오프셋 축 37mm 지름 모터 수용 설계.

20~1000 RPM 범위 12V DC 모터 아무거나 장착 가능(로봇 플랫폼 용도에 따라 다름). 모터는 M3 볼트 6개로 고정.

스프로킷을 모터 샤프트에 연결하려면 샤프트 커플러 준비, 나사 인서트 박기.

커플러 끼우고 M3 그럽 스크류로 고정.

스프로킷 두 섹션 끼우고 M3 볼트 3개로 고정.

플랫폼 구동계 완료. 이제 트랙 조립하며 재미 볼 차례.

트랙 링크 클로즈업. 얼마나 심플하고 깔끔한지 보세요.

3D 프린터에서 바로 사용 가능. 서포트 안 쓰니까요. 2mm 핀만 있으면 연결됩니다. 앞서 말했듯 2mm 황동 용접봉으로 쉽게 구합니다.

링크 바깥 구멍은 타이트 핏이라 힘줘 끼워야 하지만 그게 빠지지 않게 해줍니다. 안쪽 구멍은 루즈 핏으로 링크 간 자유 회전 보장.

차나 커피 한 잔 마시며 몇 시간 즐겁게 조립하세요. 몇 개 연결하면 트랙이 얼마나 멋지게 나오는지 깨닫게 됩니다. 한쪽 트랙당 78개 링크 필요. 핀 길이 약 43mm씩, 트랙당 약 3.5m 봉 필요.

트랙 준비되면 스프로킷, 로드휠, 아이들러 휠 감싸고 다른 2mm 핀으로 루프 마감. 78개 링크로 장력이 딱 맞는데 마지막 로드휠이 살짝 올라갑니다.

스프링이 약해서 그렇습니다. 쇼크 업소버 너트 조절로 스프링 장력 조금 조절 가능하지만 부족. 그래서 순정 스프링을 더 강한 걸로 교체.

스프링 교체 쉽습니다. 쇼크 업소버 한쪽 풀고 강한 스프링 넣고 다시 조이면 됩니다. 제 스프링이 순정보다 좀 넓어 아래쪽에 M4 와셔 넣었습니다. 이제 78개 링크로 트랙 장착 시 로드휠 제자리에 잘 고정됩니다.

모든 쇼크 업소버 스프링 교체. 전체 플랫폼 무게 감당 못 할 것 같아서. 전체 구동 시스템 완료, 꽤 잘 나왔습니다.

필요시 아이들러 휠 거리 너트로 트랙 장력 조절. 궤도 위쪽 느슨한 부분은 쇼크 업소버 브라켓이 받쳐줍니다.

모터에 전원 연결해 작동 확인. 완벽해 보입니다. 직접 만든 수많은 3D 프린팅 부품이 동작하는 걸 보니 정말 기분 좋습니다.

반대쪽도 같은 과정 반복. 이쯤 되면 로봇 플랫폼 80% 완료. 이제 사이드 패널 장착. 주로 시각적 외관용.

브래킷과 M3 볼트로 고정. 위엔 탑 커버로 플랫폼 감쌉니다. 이번 영상에선 시각적 외관용으로 이렇게 설계.

앞서 말했듯 향후 영상에서 로봇 팔이나 터렛을 얹을 계획이라 그때 탑 부분을 적절히 재설계할 예정.

전자 장치 – 로봇 플랫폼 회로도

이제 이 프로젝트 전자 장치로 넘어갑니다. ATmega2560 마이크로컨트롤러 기반 보드 사용.

필요한 부품은 아래 링크에서 구매 가능:

공개: 위 링크는 제휴 링크입니다. 아마존 어소시에이트로서 자격 있는 구매로부터 수익을 얻습니다.

두 모터 구동용으로 DRV8871 DC 모터 드라이버 2개 사용. PWM 제어 지원, 최대 3.6A 피크 전류. DC 모터 동작 전압 12V, 3S 리포 배터리(약 12V)로 전체 전원 공급. 향후 서보 모터 연결 등 다른 용도로 쓸 전용 5V 공급용 5V 전압 레귤레이터 LM350 IC 포함. 이 영상에선 이 5V로 RC 수신기와 일부 LED 전원 공급.

이 프로젝트용 LED는 심플한 5mm 흰색/빨간색 LED. 배치:

후면 양쪽에 빨간 LED 2개씩 테일라이트, 전면 양쪽에 흰색 LED 3개씩 헤드라이트. 추가로 탑 커버에 6개 LED 하이빔 라이트. LED 정상 점등용 적절한 회로(전류 제한 저항) 필요. 연결을 병렬/직렬 혼합.

예: 전면 헤드라이트는 12V 두 병렬 라인, 각 라인에 좌우 3개씩 직렬 연결. LED 순방향 전압/전류 기준으로 라인당 필요 저항 계산, 이 경우 150옴. LED 활성화용 범용 NPN 트랜지스터(200mA 정격) 사용.

배터리 전압 모니터링용 간단 분압 회로 추가. 배터리 12V를 5V 미만으로 낮춰 마이크로컨트롤러 아날로그 입력으로. 프로그램에서 실제 전압값으로 환산해 RC 수신기→송신기로 보내 디스플레이에 표시.

커스텀 PCB 설계

연결이 꽤 많아 엉키지 않게 커스텀 PCB 설계.

PCB는 ATmega2560 마이크로컨트롤러 기반 보드와 호환돼 바로 위에 장착.

NRF24L01 트랜시버 모듈 연결용 3.3V 전압 레귤레이터와 연결부 포함(원하면 그 모듈로 제어 가능). 12V 레일, 5V/6V 레일과 서보 모터 연결용 디지털 핀 배치. 6V 레일은 외부 벅 컨버터로 전원 공급 가능.

PCBWay에서 주문. 거버 파일 업로드, PCB 속성 선택, 합리적 가격 주문.

기본 속성 유지, 색상만 흰색으로. 거버 파일은 PCBWay 프로젝트 공유 커뮤니티에서 다운로드 및 직접 주문 가능.

여기서도 거버 파일 다운로드 가능:

며칠 후 PCB 도착. 품질 훌륭, 설계와 정확히 일치.

PCB 조립은 모든 게 라벨링돼 있어 직관적. PCB 바닥면 아두이노 메가 연결용 핀 헤더 납땜부터 시작, 윗면 계속. 편의상 작은 부품(저항, 트랜지스터) 먼저, 큰 부품(LED, 파워 커넥터) 나중에. 모든 연결에 핀 헤더 사용(유연성 위해). 외부 벅 컨버터/레일 커넥터, 3.3V 전압 레귤레이터는 지금 안 쓰니 납땜 안 함. 흰색 PCB가 정말 깔끔하고 예쁘게 나왔습니다.

3D 프린팅 탱크 조립 마무리

자, 먼저 마이크로컨트롤러 보드 M3 볼트로 고정, 위에 커스텀 PCB 올립니다.

이제 LED 장착. 사이드 패널에 5mm LED 수용 홀더에 끼웁니다. 회로도대로 각 LED 라인 직렬 납땜.

캐소드에 검은 선, 아노드에 빨간 선. 사이드 패널 작은 구멍으로 전선 통과해 PCB로.

LED 홀더 파트는 사이드 패널과 타이트 핏으로 끼워져 깔끔한 외관.

하이빔 LED는 전면 탑 커버에 직접 배치.

LED 연결용 PCB에 XH2.54mm 듀폰 수 커넥터 납땜했으니 암 커넥터를 전선에 크림핑. 크림핑 플라이어 필요하지만 당시 없어 일반 작은 플라이어로 했는데 연결 잘 나왔습니다. 각 LED 라인은 PCB 라벨에 맞춰 적절한 커넥터에 꽂습니다.

모터는 적절한 커넥터 없어 직접 납땜. 모터 연결 → DRV8871 드라이버 보드 → PCB.

무선 통신용 FLYSKY RC 송신기/수신기 사용. 저렴하고 잘 작동.

수신기-마이크로컨트롤러 연결은 점퍼 와이어. 수신기는 I-BUS와 시리얼 포트로 마이크로컨트롤러와 통신, VCC, GND, Signal 핀 3선만 필요.

수신기→송신기 데이터 전송(배터리 전압 모니터링용) 원하면 수신기 센서 I-BUS를 다른 시리얼 포트에도 연결.

마지막으로 리포 배터리 연결. 배터리에 맞는 커넥터 필요. 12V 커넥터로 들어가고 바로 옆 ON/OFF 커넥터에 스위치 연결해 플랫폼 전원 온/오프.

보드 전원 켜기 전 RC 수신기 전원 빼고 LM350 IC 가변 전압을 트리머로 5V로 조정해야 함.

탑 백 커버 끼우면 프로젝트 완료.

로봇 플랫폼 프로그래밍

이제 3D 프린팅 탱크/로봇 플랫폼 프로그래밍. 이 로봇 플랫폼용 아두이노 코드:

/* 3D Printed Tracked Robot Platform - Arduino Code by Dejan, www.HowToMechatronics.com
Libraries: IBusBM: https://github.com/bmellink/IBusBM */
#include <IBusBM.h>
#define motorLeft_IN1 4
#define motorLeft_IN2 5
#define motorRight_IN1 6
#define motorRight_IN2 7
IBusBM IBus;
IBusBM IBusSensor;
int ch0, ch1, ch6, ch8 = 0;
int motorSpeed, steeringValue, leftMotorSpeed, rightMotorSpeed = 0;
int ledBlinkPeriod = 50;
int isOn = LOW;
unsigned long time_now = 0;
void setup() {
  Serial.begin(115200);
  IBus.begin(Serial1, IBUSBM_NOTIMER); // Servo iBUS
  IBusSensor.begin(Serial2, IBUSBM_NOTIMER); // Sensor iBUS
  IBusSensor.addSensor(IBUSS_INTV); // add voltage sensor
  // DC motors control - set them stationary
  // Left track
  digitalWrite(motorLeft_IN1, LOW); // PWM value
  digitalWrite(motorLeft_IN2, LOW); // Forward
  // Right track
  digitalWrite(motorRight_IN1, LOW); // PWM value
  digitalWrite(motorRight_IN2, LOW); // Forward
  digitalWrite(46, LOW);
  digitalWrite(47, LOW);
  digitalWrite(48, LOW);
}
void loop() {
  // Reading the data comming from the RC Transmitter
  IBus.loop();
  // ch0 - left and right; ch1 - forward and backward;
  ch0 = IBus.readChannel(0); // ch0 - left and right;
  ch1 = IBus.readChannel(1); // ch1 - forward and backward;
  ch6 = IBus.readChannel(6); // ch6 - Headlights
  ch8 = IBus.readChannel(8); // ch8 - High beam
  // convert the incoming date into suitable PWM value
  steeringValue = map(ch0, 1000, 2000, -185, 185); // 0 to 185 range because then I add +70 in order to avoid low PWM values as to motors won't start if so
  motorSpeed = map(ch1, 1000, 2000, -185, 185);
  motorSpeed = abs(motorSpeed);
  leftMotorSpeed = 70 + motorSpeed + steeringValue; // 70 + (0-185) + (0 - 185 ) = 70 - 255 so this range from 70 to 255 is used as PWM value
  rightMotorSpeed = 70 + motorSpeed - steeringValue;
  leftMotorSpeed = constrain(leftMotorSpeed, 0, 255); // constrain the PWM value from 0 to 255
  rightMotorSpeed = constrain(rightMotorSpeed, 0, 255);
  // if PWM is lower than 72, set PWM value to 0
  if (leftMotorSpeed < 72) { leftMotorSpeed = 0; }
  if (rightMotorSpeed < 72) { rightMotorSpeed = 0; }
  // if right joystick goes up > move forward
  if (ch1 > 1510 && ch1 < 2000) {
    analogWrite(motorLeft_IN1, leftMotorSpeed); // PWM input
    digitalWrite(motorLeft_IN2, LOW); // Direction - Forward
    analogWrite(motorRight_IN1, rightMotorSpeed); // PWM input
    digitalWrite(motorRight_IN2, LOW); // Direction - Forward
  }
  // if right joystick goes down > move backward
  if (ch1 > 1000 && ch1 < 1420) {
    digitalWrite(motorLeft_IN1, LOW); // Direction - Backward
    analogWrite(motorLeft_IN2, leftMotorSpeed); // PWM input
    digitalWrite(motorRight_IN1, LOW); // Direction - Backward
    analogWrite(motorRight_IN2, rightMotorSpeed); // PWM input
  }
  // if right joystick is in the middle, don't move
  if (ch1 > 1420 && ch1 < 1520) {
    if (leftMotorSpeed < 75 && rightMotorSpeed < 75) {
      digitalWrite(motorLeft_IN1, LOW);
      digitalWrite(motorLeft_IN2, LOW);
      digitalWrite(motorRight_IN1, LOW);
      digitalWrite(motorRight_IN2, LOW);
    }
    // if right joystick move just left or right, without going up or down, move the tank left or right (only 1 motor move)
    else {
      analogWrite(motorLeft_IN1, leftMotorSpeed); // PWM input
      digitalWrite(motorLeft_IN2, LOW); // Direction - Forward
      analogWrite(motorRight_IN1, rightMotorSpeed); // PWM input
      digitalWrite(motorRight_IN2, LOW); // Direction - Forward
    }
  }
  // LEDs control
  // Headlights and Taillights LEDs control
  if (ch6 > 1500) {
    digitalWrite(47, HIGH);
    digitalWrite(48, HIGH);
  } else {
    digitalWrite(47, LOW);
    digitalWrite(48, LOW);
  }
  // High beam LEDs control
  if (ch8 == 1500) {
    digitalWrite(46, HIGH);
  }
  // If rocker switch in position 3 (2000 value) - flasing with the high beam LEDs
  else if (ch8 == 2000) {
    if (millis() >= time_now + ledBlinkPeriod) {
      time_now += ledBlinkPeriod;
      if (isOn == HIGH) { isOn = LOW; }
      else { isOn = HIGH; }
      digitalWrite(46, isOn);
    }
  } else {
    digitalWrite(46, LOW);
  }
  // Monitor the battery voltage
  int sensorValue = analogRead(A0);
  float voltage = sensorValue * (5.00 / 1023.00) * 3.02; // Convert the reading values from 5v to suitable 12V
  // Send battery voltage value to transmitter
  IBusSensor.loop();
  IBusSensor.setSensorMeasurement(1, voltage * 100);
}

코드 개요

IBusBM 라이브러리로 RC 송신기에서 들어오는 데이터 읽기.

// Reading the data comming from the RC Transmitter
IBus.loop();
// ch0 - left and right; ch1 - forward and backward;
ch0 = IBus.readChannel(0); // ch0 - left and right;
ch1 = IBus.readChannel(1); // ch1 - forward and backward;
ch6 = IBus.readChannel(6); // ch6 - Headlights
ch8 = IBus.readChannel(8); // ch8 - High beam

오른쪽 조이스틱(채널 0, 1)로 플랫폼 움직임 제어, 두 로커 스위치(채널 6, 8)로 LED 제어.

들어오는 데이터를 DC 모터 PWM 제어용 0~255 값으로 변환.

// convert the incoming date into suitable PWM value
steeringValue = map(ch0, 1000, 2000, -185, 185); // 0 to 185 range because then I add +70 in order to avoid low PWM values as to motors won't start if so
motorSpeed = map(ch1, 1000, 2000, -185, 185);
motorSpeed = abs(motorSpeed);
leftMotorSpeed = 70 + motorSpeed + steeringValue; // 70 + (0-185) + (0 - 185 ) = 70 - 255 so this range from 70 to 255 is used as PWM value
rightMotorSpeed = 70 + motorSpeed - steeringValue;
leftMotorSpeed = constrain(leftMotorSpeed, 0, 255); // constrain the PWM value from 0 to 255
rightMotorSpeed = constrain(rightMotorSpeed, 0, 255);

PWM 값을 analogWrite() 함수로 드라이버와 모터에 적절히 보냄.

// if right joystick goes up > move forward
if (ch1 > 1510 && ch1 < 2000) {
  analogWrite(motorLeft_IN1, leftMotorSpeed); // PWM input
  digitalWrite(motorLeft_IN2, LOW); // Direction - Forward
  analogWrite(motorRight_IN1, rightMotorSpeed); // PWM input
  digitalWrite(motorRight_IN2, LOW); // Direction - Forward
}

전반적으로 로봇 플랫폼 자체에 복잡한 기능이 없어 코드도 그리 복잡하지 않습니다.

3D 프린팅 로봇 테스트 – 궤도 로봇 플랫폼

코드 업로드 후 로봇 플랫폼과 RC 송신기 전원 켜 테스트. 송신기 디스플레이에 리포 배터리 전압, 수신기 및 송신기 전압 표시.

자, 완성됐습니다. 오른쪽 조이스틱으로 플랫폼 움직임 제어. 왼쪽 로커 스위치로 헤드라이트/테일라이트 LED, 오른쪽 3방향 로커 스위치로 하이빔 LED 제어. 하이빔은 상시 점등과 점멸 두 모드.

여기서 장착한 모터가 이 플랫폼엔 좀 부족한 감이 있습니다.

조이스틱을 거의 끝까지 올려야 궤도가 움직이기 시작합니다. 손으로 궤도 쉽게 멈출 수 있을 정도. 서스펜션 시스템과 궤도 자체가 모터에 많은 장력과 저항을 줍니다. 이 모터들은 888 RPM이라 속도면은 괜찮지만 작은 모터라 정격 500mA 미만.

가지고 있던 더 큰 모터로 교체해봤지만 결과 거의 비슷. 더 강력한 모터지만 감속비가 작아(더 높은 RPM 1280) 같은 결과.

사실 그렇게 나쁘진 않습니다. 플랫폼이 이 모터들로 꽤 잘 달립니다.

솔직히 이거 몰고 다니는 거 정말 재미있습니다. 특히 LED 점멸하며 번아웃, 도넛 턴 할 때.

하지만 야외로 나가니 금방 작동 멈춤. 문제는 부족한 모터 출력이지만 트랙 링크 설계 탓도 있습니다. 흙이 스프로킷 톱니 들어가는 곳에 쉽게 쌓입니다.

그래서 반대쪽에 구멍 내 흙이 빠져나가게 재설계. 스프로킷도 0.2mm 오프셋해 트랙과 루즈 핏 되게 작게 만듦.

이 업데이트로 재조립하니 야외 주행 가능. 그래도 부족한 모터 출력이 문제. 가끔 걸리고 오르막 못 올라감. 제 제안: 500 RPM 이하, 최소 1A 또는 2A 정격 전류의 더 강한 모터 쓰세요.

실제로 더 강한 모터로 테스트해봤습니다. 20 RPM이라 재미/도넛 턴엔 너무 느리지만 플랫폼이 진짜 탱크처럼 됨. 말 그대로 어디든 감.

20 RPM 모터는 어떤 장애물도 오를 만큼 강력. 정말 느리지만 특정 용도엔 괜찮을 수도. 제 제안: 느린 속도 필요하면 50 RPM 정도, 빠른 속도면 500 RPM 정도 모터 쓰세요.

이 영상 즐겁게 보셨고 새로운 것 배우셨길 바랍니다. 댓글로 질문 자유롭게, 구독과 미래 업데이트, 제 아두이노 프로젝트 모음도 확인해주세요.

제조공정

  1. 알렉사(Alexa)로 천장 선풍기 제어하기 - 단계별 가이드
  2. 초음파 스마트 안경: 시각 장애인의 이동성 향상
  3. 4달러 태양광 정원등을 스마트 무선 센서 노드로: MSP430 + nRF24L01+ 정원 모니터링
  4. 창고 피킹 효율성 향상: 더 빠르고 정확한 주문 처리를 위한 검증된 전략
  5. 수평 CNC 밀링 머신의 이점 알아보기
  6. 아두이노 터치 브레이크아웃 게임: 2.4" TFT LCD로 클래식 아케이드 구현
  7. 스털링 사이클 엔진: 설계, 효율, 응용 종합 개요
  8. 삐삐(페이저) 기술: 초기 혁신에서 양방향 통신 미래까지
  9. 내연기관 핵심 부품 완벽 가이드: 구조와 기능
  10. 불도저 기술: 설계, 제조 및 미래 혁신