제조공정
튜토리얼에서는 제가 어떻게 아주 멋진 무선 조종 추적 차량, 로봇 플랫폼, 탱크 등을 제작했는지 보여드리겠습니다. 처음부터 완전히 3D 프린팅이 가능하도록 디자인했기 때문에 모든 것을 쉽게 프린트하고 직접 만들 수 있습니다.
다음 비디오를 보거나 아래에 작성된 튜토리얼을 읽어보실 수 있습니다.
이 프로젝트의 나의 목표는 다양한 유형의 지형을 횡단할 수 있고 다양한 애플리케이션에 사용할 수 있는 다용도 플랫폼을 만드는 것이었습니다. 이를 위한 최선의 방법은 연속 트랙 시스템을 사용하는 것이었습니다. 트랙은 차량의 무게를 더 넓은 표면에 분산시켜 뛰어난 접지력을 제공하고 부드러운 땅, 진흙 또는 눈에 갇힐 확률을 낮춥니다.
로봇 플랫폼은 진흙에서도 꽤 잘 주행하는데, 눈 위에서 테스트할 기회가 없었던 것이 아쉽습니다. 앞으로는 로봇 팔이나 포탑을 설치할 계획이 있는 비디오를 제작할 예정입니다. 플랫폼 위에 있는 로봇 팔을 사용하여 무언가를 잡고 옮기는 등 다양한 작업을 수행할 수 있으며, 여기에 카메라를 장착하여 육안 검사 등에 사용할 수도 있습니다. 또는 예를 들어 NERF 다트를 발사할 수 있는 포탑을 만들 수 있고 이 플랫폼에 이미 설치한 간단하지만 멋진 LED 조명과 결합하여 꽤 재미있게 놀 수 있습니다.
서스펜션은 오랫동안 탱크에 사용된 Christie 서스펜션 시스템을 사용했습니다. 이 설정을 사용하면 각 로드휠에 개별 서스펜션이나 스프링 및 충격 흡수 장치가 있습니다.
이를 통해 차량은 트랙과 지형 사이의 양호한 접촉 표면을 유지하면서 고르지 않은 지형에서도 원활하게 주행하고 장애물을 오를 수 있습니다.
3D 프린팅된 탱크를 제어하기 위해 플랫폼에 명령을 보내는 값싼 상용 RC 송신기를 사용하고 있습니다.
플랫폼에는 명령을 수신하여 마이크로컨트롤러로 보내는 적합한 RC 수신기가 있습니다. 이 플랫폼의 핵심은 Atmega2560 마이크로 컨트롤러 기반 보드이며 모든 것을 쉽게 연결하기 위해 보드 상단에 간단히 부착할 수 있는 맞춤형 PCB를 만들었습니다.
그럼에도 불구하고, 디자인, 3D 프린팅, 조립, 전자 부품 연결, 마이크로컨트롤러 프로그래밍을 시작으로 이 로봇 플랫폼을 구축하는 전체 과정을 안내해 드릴테니 이제 버클을 채우세요.
이 영상의 후원사이기도 한 SOLIDWORKS를 사용하여 이 로봇 플랫폼을 설계했습니다.
— 후원 섹션 —
"업계를 선도하는 전문가 수준의 이러한 디자인 도구를 이제 연간 99달러 또는 월 9.99달러라는 매우 저렴한 가격으로 모든 제조업체에서 사용할 수 있다는 점은 주목할 가치가 있습니다. 그렇습니다. 3D SOLIDWORKS for Makers를 경험해 보세요. 기술을 배우고 DIY 프로젝트를 만드는 등 모든 사람에게 적합합니다.
이 혜택에는 3D가 포함됩니다. 제품 내에서 가장 수요가 많은 CAD 도구이자 PC에서 로컬로 실행되는 SOLIDWORKS Professional을 경험해 보세요. 3D를 사용하여 로컬이나 클라우드에 파일을 저장할 수 있습니다. 경험 플랫폼.
브라우저 기반 CAD인 'xDesign'을 3D와 함께 사용할 수 있습니다. SOLIDWORKS를 직접 경험해 보세요. 언제 어디서나 어떤 장치에서든 모델링하는 데 적합합니다.
모든 기기에서 표면 모델링에 쉽게 사용할 수 있는 브라우저 기반 자유 형식 CAD인 "xShape".
"연결된 시각화"를 통해 사진 품질의 이미지, 애니메이션, 대화형 웹 콘텐츠 등을 쉽게 만들어 청중에게 깊은 인상을 남길 수 있습니다.
3축 밀링과 와이어 EDM을 위한 지능형 가공 전략을 위한 CAM인 "NC Shop Floor Programmer"를 사용하기 쉬운 패키지로 제공합니다.
아래 링크를 클릭하시면 특별 20% 할인을 받으실 수 있습니다. 오늘부터 최고의 제품을 만들어 보세요! 이와 같은 교육 콘텐츠를 후원하고 지원해 주신 SOLIDWORKS에 깊은 감사를 드립니다. ”
지금 구입: http://www.solidworks.com/makers20
자세히 알아보기: https://discover.solidworks.com/3dexperience-solidworks-makers
— 주제로 돌아가기 —
제가 어떻게 로봇 플랫폼을 디자인하게 되었는지 설명하겠습니다. 디자인을 위한 첫 번째 입력 매개변수는 제가 가지고 있는 RC 충격 흡수 장치와 그 크기였습니다.
나는 그것들 중 8개를 가지고 있었는데, 이는 각 측면에 4개의 로드휠이 있다는 것을 의미하며, 11mm 이동으로 확장했을 때 길이는 41mm였습니다. 이러한 치수에 따라 저는 로드휠의 수직 이동 거리를 조금 더 늘리고 싶었기 때문에 로드휠의 수직 이동 거리가 16mm가 되는 이 메커니즘을 생각해냈습니다.
즉, 쇼크 업소버와 로드휠 링크의 연결부를 로드휠 링크의 회전점에 더 가깝게 이동하면 훨씬 더 큰 이동 거리를 얻을 수 있지만 그렇게 되면 스프링의 힘을 잃게 되거나 플랫폼을 제대로 고정하려면 더 강한 스프링이 필요하게 됩니다.
다양한 메커니즘으로 스프링에 대한 반력을 확인하기 위해 SOLIDWORKS로 몇 가지 간단한 시뮬레이션을 수행했기 때문에 전반적으로 컴팩트함도 좋은 이 메커니즘을 선택했습니다.
앞쪽 로드휠을 자세히 살펴보면 트랙의 동적 장력을 제공하는 아이들러 휠과 어떻게 연결되어 있는지 확인할 수 있습니다. 로드휠이 올라가면 트랙 둘레가 작아지고 장력이 느슨해집니다.
여기서 이렇게 연결하면 그런 일이 발생하면 아이들러 휠이 앞으로 밀려 트랙에 장력이 가해집니다. 이 연결을 사용하면 이 볼트와 거리 너트를 조정하여 트랙을 정적으로 장력을 가할 수도 있습니다.
뒷면에는 세 부분으로 구성된 스프라켓이 있습니다. 샤프트 커플러와 스프라켓 좌우측이 M3 볼트 3개로 모두 연결되어 있습니다.
여기 스프로킷의 주요 치수는 트랙의 피치와 일치해야 하기 때문에 피치입니다. 여기서 피치는 11mm이고 저는 12개의 톱니를 갖는 스프라켓을 선택하여 스프라켓의 피치 직경이 약 42mm가 되었습니다.
11mm 피치는 실제로 트랙 링크의 디자인에 의해 정의되었습니다. 트랙 링크에 대한 나의 목표는 최대한 컴팩트하고 추가 부품이나 핀 하나만으로 다음 링크에 연결할 수 있으면서도 3D 프린터로 제작할 수 있을 만큼 튼튼하게 만드는 것이었습니다.
게다가 3D 프린팅을 할 때 부품에 서포트 재료를 전혀 사용하지 않으려고 했고, 실제로 이 디자인을 통해 이를 달성할 수 있었습니다.
트랙 링크를 서로 연결하기 위해 직경 2mm의 핀을 사용할 계획이어서 트랙 링크가 자유롭게 회전할 수 있도록 한쪽은 2mm로 꽉 끼고 다른 쪽은 2.3mm로 느슨하게 끼워 맞추었습니다.
이 구멍에는 스프라켓 톱니가 들어가고 트랙 링크의 핀은 직경 8.8mm로 형성되어 있으며, 스프라켓 직경은 9.1mm로 루즈핏으로 제대로 작동됩니다.
이러한 부품을 모두 정의한 후 조립 환경에서 스프로킷, 아이들러 휠 및 로드휠 주위의 닫힌 윤곽선 스케치를 그렸습니다.
그런 다음 SOLIDWORKS 체인 부품 패턴 기능과 함께 이 스케치를 사용하여 해당 윤곽선을 따라 모든 트랙 링크를 생성했습니다.
나머지 로봇 플랫폼, 모든 것이 연결되는 베이스, 일부 LED를 수용하는 측면 및 상단 커버를 현대적이고 멋진 스타일로 디자인했습니다. 플랫폼의 전체적인 크기는 대부분의 3D 프린터보다 크기 때문에 약 400mm x 300mm로 모든 부품을 두 부분으로 나누어 거의 모든 3D 프린터에서 인쇄할 수 있습니다. 브라켓 몇 개와 M3 볼트로 서로 연결되어 있습니다.
전체 로봇 플랫폼을 조립하려면 다양한 M3 및 M4 볼트와 너트는 물론 일부 나사형 인서트와 베어링도 필요합니다. 아래 조립 섹션에서 이 프로젝트에 필요한 모든 구성 요소의 전체 목록을 찾을 수 있습니다.
Cults3D에서 이 RC 탱크/로봇 플랫폼의 3D 모델과 3D 프린팅용 STL 파일을 얻을 수 있습니다.
3D 프린팅 시 정확한 치수의 3D 프린팅 부품을 얻으려면 슬라이싱 소프트웨어에서 수평 확장 및 구멍 수평 확장 설정을 사용해야 합니다. 이러한 설정을 기본으로 두면 일반적으로 인쇄되는 외부 치수와 구멍이 원래 모델보다 작습니다.
수평 확장을 0.02mm로 설정하고 구멍 수평 확장을 0.04mm로 설정했습니다. 물론 3D 프린터에서 어떤 값이 최상의 결과를 제공하는지 확인하려면 몇 가지 테스트 인쇄를 수행해야 합니다. 부품을 서로 쉽게 조립하거나 베어링 및 볼트와 같은 다른 구성요소와 쉽게 조립하려면 부품의 정확한 치수가 필요합니다.
트랙 링크를 3D 프린팅할 때 빌드 플레이트 접착으로 래프트를 사용했습니다. 베드 플레이트와의 접촉 표면이 약간 작고 프린터의 베드 접착력이 좋지 않으면 잘 붙지 않을 수 있기 때문입니다. 특히 대량 인쇄 시에는 래프트를 사용하는 것이 더 안전합니다.
자, 여기 로봇 플랫폼에 대한 모든 3D 프린팅 부품이 있습니다. 솔직히 말해서 모든 것을 인쇄하는 데 꽤 시간이 걸렸습니다.
예를 들어, 각 기본 섹션을 인쇄하는 데 약 22시간이 걸렸고, 156개의 트랙 링크를 모두 인쇄하는 데 약 96시간이 걸렸습니다. 모든 것을 인쇄하려면 대략 200시간이 필요합니다. 다행히 3D 프린터가 2대 있어서 100시간 정도 걸렸습니다.
3D 프린팅 탱크 – 로봇 플랫폼 프로젝트를 조립하는 데 필요한 구성 요소 목록은 다음과 같습니다. 전자 부품 목록은 아래 기사의 회로도 섹션에서 확인할 수 있습니다.
공개:제휴 링크입니다. Amazon Associate로서 저는 적격 구매를 통해 수입을 얻습니다.
베이스 조립부터 시작했어요. 제가 말했듯이, 브라켓과 M3 볼트 및 너트를 사용하여 서로 연결되는 두 부분으로 구성됩니다.
측면 브래킷을 고정하기 위해 베이스 측벽에 들어가는 5mm 길이의 나사산 인서트인 M3를 사용하고 있습니다. 이렇게 하면 벽 바깥쪽이 볼트나 너트 없이 깨끗해져서 선로가 근처에서 달릴 수 있게 됩니다.
그런 다음 M3 볼트를 사용하여 충격 흡수 장치를 부착하기 위한 브래킷을 제자리에 고정했습니다.
다음으로 로드휠 암이 회전할 베어링을 설치합니다. 베어링의 외부 직경은 13mm이고 내부 직경은 4mm이며 각 로드휠마다 2개가 필요합니다.
핀으로는 길이 30mm의 M4 볼트를 사용하고 있습니다. 베어링과 암 사이에 와셔를 배치하고 자동 잠금 너트를 사용하여 내부에서 제자리에 고정해야 합니다. 이 연결부를 얼마나 조이는지 주의해야 합니다. 너무 빡빡하지도, 너무 느슨하지도 않게 말이죠.
다음으로 충격 흡수 장치를 설치할 수 있습니다. 패키지와 함께 제공되는 M1.4 볼트를 사용하여 제자리에 고정합니다.
저 작은 드라이버가 없어서 펜치를 이용해서 볼트를 조였어요. 현재까지는 메커니즘이 완벽하게 작동하는 것 같습니다.
다음으로, 암 하단 끝에 로드휠을 설치할 수 있습니다. 로드휠은 서포트 재료로 인쇄하는 것을 방지하기 위해 두 부분으로 구성됩니다. 어쩌면 단품으로 인쇄할 수도 있겠지만, 어떻게 나올지는 시험해 보지 않았습니다.
이런 방식으로 우리는 두 부분을 연결해야 하며, 저는 그 목적을 위해 트랙 링크를 함께 연결하는 데 사용할 것과 동일한 2mm 강철 막대를 사용하기로 결정했습니다. 실제로는 용접에 사용되는 황동봉인데, 다소 부드러워서 펜치만 있으면 쉽게 잘라낼 수 있습니다.
각 바퀴에 약 23mm 길이의 로드 3개를 삽입한 다음, 바퀴 양쪽에 이전에 사용했던 것과 동일한 베어링 2개도 설치했습니다. 이전과 마찬가지로 M4 볼트, 와셔 및 자동 잠금 너트를 사용하여 로드휠을 제자리에 고정했습니다.
휠은 샤프트에 유격이 없으면서 자유롭게 회전할 수 있어야 합니다.
이제 다른 로드휠에 대해서도 이 과정을 반복하면 됩니다. 앞 로드휠의 경우 트랙에 동적 장력을 제공하는 레버가 있는 약간 다른 암이 있지만 설치는 동일합니다.
다음으로 아이들러 휠의 메커니즘을 조립할 수 있습니다. 3D 프린팅된 부품 세 개, 볼트 몇 개, 거리 너트 한 개로 구성되어 있습니다.
첫 번째 링크를 제자리에 고정하기 전에 뒷면에 M4 자동 잠금 너트를 추가해야 하며 나중에 아이들러 휠을 부착할 것입니다.
저는 이 접합부에 핀으로 동일한 2mm 구리 막대를 사용하고 있습니다. 이제 아이들러 휠 측의 두 번째 링크에서 M3 볼트를 사용하여 15mm 길이의 M3 거리 너트 1개를 고정할 수 있습니다.
반대편에는 20mm 길이의 M3 볼트와 너트를 넣어 거리 너트에 넣습니다. 이제 이 설정을 사용하여 아이들러 휠과 로드 휠 암 사이의 거리를 조정할 수 있으므로 정적으로나 동적으로 트랙에 장력을 가할 수 있습니다. 그런 다음 M4 볼트를 사용하여 아이들러 휠을 제자리에 고정하면 전체 서스펜션 시스템뿐만 아니라 이 장력 시스템도 완성됩니다.
좋습니다. 다음으로 스프로킷을 조립할 수 있으며 이를 위해 먼저 모터를 설치해야 합니다. 저는 중심축이나 오프셋 축을 사용하여 직경 37mm의 모터를 수용할 수 있는 기본 플랫폼을 설계했습니다.
물론 로봇 플랫폼의 적용에 따라 RPM 범위가 20~1000RPM인 12V DC 모터를 설치할 수 있지만 이에 대해서는 나중에 동영상에서 설명하겠습니다. 모터는 6개의 M3 볼트로 제자리에 고정되어 있습니다.
스프로킷을 모터 샤프트에 부착하려면 먼저 샤프트 커플러를 준비하거나 그 안에 나사산 인서트를 설치해야 합니다.
그런 다음 커플러를 제자리에 삽입하고 M3 그러브 나사로 고정할 수 있습니다.
그런 다음 스프로킷의 두 부분을 삽입하고 M3 볼트 3개를 사용하여 고정합니다.
이제 플랫폼 구동렬이 완성되었으며 이제 트랙을 조립하는 즐거움을 누릴 시간입니다. 그렇죠, 트랙을 조립하는 과정이 꽤 재미있었어요.
트랙 링크를 자세히 살펴보면 링크가 얼마나 단순하고 깔끔한지 확인할 수 있습니다.
3D 프린팅 시 어떠한 지원도 사용하지 않기 때문에 3D 프린터에서 바로 사용할 수 있습니다. 연결하려면 2mm 핀만 있으면 됩니다. 이미 말했듯이 2mm 황동 용접봉으로 쉽게 얻을 수 있습니다.
링크의 바깥쪽 구멍은 꼭 맞아서 삽입하려면 약간의 힘을 가해야 하지만 그래야 빠지지 않습니다. 링크의 내부 구멍은 헐렁하게 끼워져 있어 트랙 링크 사이의 자유로운 회전이 보장됩니다.
이제 우리는 차나 커피 한 잔을 끓여서 몇 시간 동안 조립을 즐기기만 하면 됩니다. 여러 개를 연결하고 트랙이 얼마나 멋진지 확인하면 그 재미를 깨닫게 됩니다. 단일 트랙을 조립하려면 총 78개의 트랙 링크가 필요합니다. 로드 길이는 각 핀의 길이가 약 43mm이므로 트랙당 약 3.5m가 필요합니다.
트랙이 준비되면 간단히 스프로킷, 로드휠 및 아이들러 휠 주위를 감싸고 현장에서 또 다른 2mm 핀으로 루프를 닫을 수 있습니다. 여기에서 78개의 트랙 링크를 사용하면 마지막 로드휠이 약간 위로 움직이더라도 트랙의 장력은 딱 맞습니다.
실제로는 스프링이 충분히 강하지 않기 때문에 그렇습니다. 쇼크 업소버의 이 너트를 조정하여 스프링 장력을 약간 조정할 수 있지만 그것만으로는 충분하지 않습니다. 그래서 저는 쇼크 업소버와 함께 제공되는 원래 스프링을 더 강한 것으로 교체하기로 결정했습니다.
스프링 교체는 매우 쉽습니다. 쇼크 업소버의 한쪽 끝을 풀고 더 강한 스프링을 삽입한 다음 로드를 다시 조이기만 하면 됩니다. 제가 가지고 있던 스프링이 원래 것보다 조금 넓어서 하단에 M4 와셔를 사용해야 했습니다. 이제 이 스프링에는 78개의 링크가 있는 트랙을 설치할 때 로드휠을 제자리에 고정할 수 있는 충분한 힘이 있습니다.
나는 결국 모든 충격 흡수 장치의 스프링을 교체했습니다. 왜냐하면 그것이 전체 플랫폼의 무게를 지탱할 만큼 강하지 않다는 것을 깨달았기 때문입니다. 이로써 플랫폼의 전체 구동 시스템이 완성되었는데, 꽤 훌륭하다고 생각됩니다.
필요한 경우 이제 아이들러 휠의 거리 너트를 사용하여 트랙 장력을 조정할 수 있습니다. 물론, 제대로 작동하려면 트랙이 약간 느슨해도 괜찮습니다. 트랙의 느슨한 상단 부분은 충격 흡수 장치 브래킷에 지지됩니다.
모터가 어떻게 작동하는지 확인하기 위해 전원에 연결했습니다. 나에게는 완벽해 보였습니다. 그렇게 많은 3D 프린팅 부품을 사용하여 만든 작품을 실제로 보는 것은 정말 기분 좋은 일입니다.
당연히 반대쪽도 조립하려면 같은 과정을 반복해야 합니다. 이 작업이 완료되면 로봇 플랫폼은 80% 완성된 것 같습니다. 다음으로 시각적인 외관을 위해 주로 여기에 있는 측면 패널을 설치하겠습니다.
일부 브래킷과 M3 볼트를 사용하여 제자리에 고정합니다. 상단에는 플랫폼을 둘러싸는 덮개가 있습니다. 이번 영상에서는 단지 시각적인 모습을 위해 이렇게 디자인했습니다.
앞서 언급한 것처럼 향후 일부 동영상에서는 이 플랫폼 위에 로봇 팔이나 터렛을 추가할 계획이며, 이는 상단을 적절하게 디자인해야 함을 의미합니다.
이제 우리는 이 프로젝트의 전자 장치를 계속 진행할 수 있습니다. 말씀드린 대로 ATmega2560 마이크로컨트롤러 기반 보드를 사용하겠습니다.
아래 링크에서 이 프로젝트에 필요한 구성요소를 얻을 수 있습니다:
공개:제휴 링크입니다. Amazon Associate로서 저는 적격 구매를 통해 수입을 얻습니다.
두 모터를 구동하기 위해 PWM 제어와 최대 3.6A 피크 전류를 지원하는 DRV8871 DC 모터 드라이버 두 개를 사용하겠습니다. DC 모터 작동 전압은 12V이며, 약 12V를 제공하는 3S LiPo 배터리로 모든 것에 전원을 공급합니다. 또한 서보 모터를 연결하는 등 향후 다른 용도를 위한 전용 5V 전원을 확보하기 위해 5V 전압 조정기인 LM350 IC를 포함시켰습니다. 이 비디오에서는 이 5V를 RC 수신기와 일부 LED에 전원을 공급하는 데 사용합니다.
이 프로젝트에 제가 사용하는 LED는 흰색과 빨간색의 단순한 5mm LED입니다. 저는 다음과 같이 정리했습니다:
후면에는 미등 역할을 하는 빨간색 LED 2개가 양쪽에 있고, 헤드라이트 역할을 하는 흰색 LED 3개가 전면에 있습니다. 또한 상단 커버에는 하이빔 조명으로 사용되는 6개의 LED가 있습니다. 이러한 LED가 제대로 켜지려면 전류를 제한하는 저항기를 포함하는 적절한 회로가 필요합니다. 나는 그들의 연결을 병렬과 직렬로 결합했습니다.
예를 들어, 전면 헤드라이트의 경우 12V의 두 개의 평행선을 사용하여 왼쪽과 오른쪽에 각각 3개씩 직렬로 연결된 6개의 LED에 전원을 공급합니다. LED의 순방향 전압과 전류에 따라 각 라인에 필요한 저항 값을 계산했는데 이 경우에는 150Ω이었습니다. LED를 활성화하기 위해 200mA 정격의 범용 NPN 트랜지스터를 사용하고 있습니다.
마지막으로 배터리 전압을 모니터링하는 데 사용할 간단한 전압 분배기를 만들었습니다. 간단히 말해서 배터리의 12V가 5V 미만으로 떨어지므로 마이크로컨트롤러의 아날로그 입력으로 들어갈 수 있습니다. 프로그램에서 값을 실제 전압 값으로 다시 변환하고 이를 RC 수신기에서 RC 송신기로 보내 디스플레이에서 값을 볼 수 있습니다.
실제로 연결이 너무 많아서 혼란을 피하기 위해 이 프로젝트를 위한 맞춤형 PCB를 디자인해야 했습니다.
PCB는 ATmega2560 마이크로컨트롤러 기반 보드와 호환되어 그 위에 직접 장착됩니다.
해당 모듈로 플랫폼을 제어하려는 경우를 대비해 3.3V 전압 조정기와 NRF24L01 트랜시버 모듈에 대한 연결을 포함시켰습니다. 또한 서보 모터를 연결하기 위해 배열된 디지털 핀 연결이 있는 12V 레일과 5V 및 6V 레일을 포함했습니다. 6V 레일은 외부 벅 컨버터를 통해 전원을 공급받을 수 있습니다.
PCBWay에서 PCB를 주문했습니다. 여기에서는 간단히 Gerber 파일을 업로드하고 PCB의 속성을 선택한 후 합리적인 가격으로 주문할 수 있습니다.
흰색으로 선택한 PCB 색상을 제외하고는 기본 속성을 변경하지 않았습니다. PCBWay 프로젝트 공유 커뮤니티에서 Gerber를 찾아 다운로드할 수도 있으며 PCB를 직접 주문할 수도 있습니다.
또한 여기에서 Gerber 파일을 다운로드할 수 있습니다:
그럼에도 불구하고 며칠 후 PCB가 도착했습니다. PCB 품질도 훌륭하고 모든 것이 디자인과 똑같습니다.
PCB 조립은 모든 라벨이 붙어 있으므로 매우 간단합니다. ATmega2560 연결을 위해 PCB 하단의 핀 헤더 납땜부터 시작한 다음 위쪽부터 계속했습니다. 편의를 위해 먼저 저항기, 트랜지스터 등 작은 구성요소를 납땜한 다음 LED 및 전원 커넥터와 같은 큰 구성요소를 납땜해야 합니다.
모든 연결에 핀 헤더를 사용했습니다. 뭔가 제대로 작동하지 않을 경우 변경할 수 있는 유연성을 제공하기 때문입니다. 외부 벅 컨버터와 해당 레일, 3.3V 전압 레귤레이터용 커넥터는 지금은 사용하지 않을 것이기 때문에 납땜하지 않았습니다. 저는 이 PCB가 화이트 색상으로 얼마나 멋지고 깨끗하게 나오는지 정말 좋아합니다.
자, 먼저 M3 볼트로 마이크로 컨트롤러 보드를 제자리에 고정한 다음 그 위에 맞춤형 PCB를 놓습니다.
이제 LED를 설치할 차례입니다. 5mm LED를 수용하는 홀더를 사용하여 측면 패널에 장착됩니다. 회로도에 설명된 대로 각 LED 라인을 직렬로 납땜해야 합니다.
음극에는 검은색 선이, 양극에는 빨간색 선이 연결됩니다. PCB로 연결되는 측면 패널의 작은 구멍을 통해 이 전선을 통과시킵니다.
LED 홀더 부분은 측면 패널과 꼭 맞도록 디자인되어 있어 일단 삽입하면 깔끔하고 보기 좋습니다.
하이빔 LED는 상단 전면 커버에 직접 배치됩니다.
LED를 연결하기 위해 XH2.54mm 듀폰 수 커넥터를 PCB에 납땜했기 때문에 전선에 적합한 듀폰 암 커넥터를 설치해야 했습니다. 그 지갑에는 압착 펜치가 필요하지만 이 프로젝트를 만들 당시에는 집게가 없었습니다.
나는 그 일을 하기 위해 보통의 작은 펜치를 사용했는데, 연결이 잘 되었습니다. 각 LED 라인은 PCB에 표시된 적절한 커넥터에 연결되어야 합니다.
모터의 경우 적합한 커넥터가 없어서 전선을 모터에 직접 납땜했습니다. 모터 연결은 DRV8871 드라이버 보드로 들어간 다음 PCB로 들어갑니다.
무선 통신을 위해 저는 정말 저렴하고 성능이 뛰어난 FLYSKY RC 송신기와 수신기를 사용하고 있습니다.
수신기를 마이크로 컨트롤러에 연결하기 위해 점프 와이어를 사용할 수 있습니다. 수신기는 I-BUS 및 직렬 포트를 통해 마이크로컨트롤러와 통신하므로 VCC, GND 및 신호 핀 세 개의 전선만 있으면 됩니다.
배터리 전압을 모니터링하기 위해 수신기에서 송신기로 데이터를 다시 전송하려면 수신기의 센서 I-BUS를 다른 직렬 포트에 연결해야 합니다.
마지막으로 LiPo 배터리를 연결할 수 있습니다. 배터리에 따라 적합한 커넥터가 필요합니다. 이는 12V 커넥터로 들어가고 바로 옆에는 플랫폼의 전원을 켜고 끄는 스위치를 연결하는 ON/OFF 커넥터가 있습니다.
보드에 전원을 공급하기 전에 먼저 RC 수신기를 전원에서 제거하고 트리머를 사용하여 LM350 IC의 가변 전압을 5V로 조정해야 합니다.
이제 상단 후면 커버를 제자리에 끼우기만 하면 이 프로젝트가 완료됩니다.
이제 3D 프린팅된 탱크/로봇 플랫폼을 프로그래밍해야 합니다. 이 로봇 플랫폼의 Arduino 코드는 다음과 같습니다.
/*
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 (2ooo 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);
}Code language: PHP (php) 따라서 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 beamCode language: JavaScript (javascript) 오른쪽 조이스틱인 채널 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);Code language: JavaScript (javascript) AnalogWrite() 함수를 적절하게 사용하여 드라이버와 모터에 PWM 값을 보냅니다.
// 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
}Code language: JavaScript (javascript) 전체적으로 로봇 플랫폼 자체에는 복잡한 기능이 없기 때문에 코드는 그리 복잡하지 않습니다.
코드를 업로드하면 테스트를 위해 로봇 플랫폼과 RC 송신기의 전원을 켤 수 있습니다. 송신기 디스플레이에서 LiPo 배터리 전압과 수신기 및 송신기 전압을 확인할 수 있습니다.
그리고 거기에 우리가 있습니다. 오른쪽 조이스틱을 사용하여 플랫폼의 동작을 제어할 수 있습니다. 왼쪽 로커 스위치로 헤드라이트와 미등 LED를 제어하고, 오른쪽 3방향 로커 스위치로 하이빔 LED를 제어합니다. 하이빔 LED에는 항상 켜짐 모드와 깜박임 모드의 두 가지 모드가 있습니다.
여기서 제가 설치한 모터는 실제로 이 플랫폼에 비해 출력이 약간 부족하다는 점을 알 수 있습니다.
트랙이 움직이기 시작하려면 조이스틱이 거의 맨 위에 있어야 한다는 것을 알 수 있습니다. 게다가 손으로 아주 쉽게 트랙을 멈출 수 있어요. 서스펜션 시스템과 트랙 자체가 모터에 많은 장력과 저항을 유발합니다. 이 모터는 888RPM으로 속도 측면에서는 괜찮지만 정격이 500mA 미만인 소형 모터입니다.
그래서 제가 가지고 있던 다른 더 큰 모터로 교체했지만 실제로는 거의 동일한 결과를 얻었습니다. 더 강력한 모터이지만 속도 감소가 더 작거나 RPM이 1280으로 더 높아서 동일한 결과를 얻었습니다.
사실 그렇게 나쁘지는 않습니다. 로봇 플랫폼은 이들과 매우 잘 작동합니다.
솔직히 말해서, 특히 LED가 깜박이고 번아웃이나 도넛을 만드는 경우 이 장치를 운전하는 것은 정말 재미 있습니다.
하지만 일단 밖으로 가져가면 정말 빨리 작동이 멈췄기 때문에 재미는 오래 가지 못했습니다. 문제는 저전력 모터입니다. 맞습니다. 하지만 트랙 링크의 디자인도 문제입니다. 스프로킷 톱니가 있는 곳에 먼지가 쉽게 쌓입니다.
그래서 반대편에 구멍이 있어서 먼지가 통과할 수 있도록 다시 디자인했습니다. 또한 스프라켓과 트랙 사이를 더 느슨하게 맞추기 위해 스프라켓을 0.2mm 오프셋하여 조금 더 작게 만들었습니다.
이러한 업데이트로 모든 것을 재조립했고 이제 플랫폼은 외부에서 운전할 수 있게 되었습니다. 저전력 모터가 다시 문제가되었지만. 플랫폼은 수시로 쌓여서 오르막길을 올라갈 수 없었습니다. 그래서 제가 제안하는 것은 500RPM 이하의 모터를 구입하고 정격 전류가 1A 또는 2A 이상인 더 강한 모터를 사용하는 것입니다.
실제로 더 강한 모터가 장착된 플랫폼을 사용해 보았습니다. 속도는 20RPM에 불과해 재미를 느끼거나 도넛을 즐기기에는 너무 느렸지만 이제 플랫폼은 실제 탱크와 같았습니다. 말 그대로 어디든 갈 수 있습니다.
20RPM 모터는 어떤 장애물도 오를 수 있을 만큼 강력했습니다. 정말 느렸지만 일부 특정 응용 프로그램에는 괜찮을 수도 있습니다. 내 제안은 약 50RPM의 모터에 더 느린 속도가 필요한지, 약 500RPM의 더 빠른 속도가 필요한지 여부입니다.
이 영상을 즐기시고 새로운 것을 배우셨기를 바랍니다. 아래 댓글 섹션에 질문을 남겨주세요. 향후 업데이트를 구독하고 내 Arduino 프로젝트 컬렉션을 확인하는 것도 잊지 마세요.
제조공정
철 또는 강철 표면의 녹을 보면 경보가 울릴 수 있습니다. 말할 필요도 없이, 자동차의 일부가 철이 산화되는 과정에서 발생하는 변화인 적갈색의 뚜렷한 음영으로 변하기 시작하면 정비사에게 출장을 갔기 때문일 수 있습니다. 자동차 대리점이 아니라면... 그러나 모든 산화가 나쁜 것은 아닙니다. 사실 알루미늄이 그토록 유용하고 다재다능한 재료인 이유 중 하나는 바로 그것이 산소에 노출되는 즉시 산화되기 때문입니다. 이 산화는 화학적으로 철의 녹과 유사하지만 실제로는 보호합니다. 확산을 방지하는 내구성 있는 외부 표면을 형성하여 알루미늄
오늘 우리 블로그에 중요성이 점점 더 커지고 있는 자료 유형을 소개합니다. 바로 형상 기억 자료입니다. 이러한 물질은 변형이 가능하고 나중에 외부 자극(보통 온도)을 가하면 원래의 형태로 회복되는 특성을 가지고 있습니다. 얼마 전 다른 게시물에서 언급했듯이 , 스마트한 자료입니다. . Como ejemplo, ¿a quién no se le ha doblado un cubierto o un alfiler? ¿Os imagináis que con dejarlos en el radiador recuperaran su forma o