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

DIY Mars Perseverance Rover Replica – Arduino 기반 프로젝트

<메인 클래스="사이트 메인" id="메인">

이 튜토리얼에서는 Mars Perseverance Rover의 복제본을 만드는 방법을 보여 드리겠습니다. 물론 현재 화성을 탐사하고 있는 실제 로버에서 영감을 받아 이 기술을 사랑하는 학생, 메이커, 메카트로닉스, 로봇 매니아 등 누구나 쉽게 이 영상의 지시를 따를 수 있고, 자신의 화성 탐사선을 구축합니다.

다음 비디오를 보거나 아래에 작성된 튜토리얼을 읽을 수 있습니다.

개요

이 로버의 주요 기능을 살펴보겠습니다. 로커 보기 서스펜션을 사용하여 로버가 고르지 않은 지형에서 원활하게 달릴 수 있고 6개의 바퀴가 항상 지면과 접촉하도록 유지하면서 바퀴 직경의 최대 2배인 바위와 같은 장애물을 오를 수 있습니다. 각 바퀴에는 로버를 앞뒤로 구동하는 독립적인 DC 모터가 있습니다.

4개의 코너 휠에는 개별 스티어링 서보 모터가 있습니다. 로버를 효율적으로 조종하고 커브를 돌 때 타이어가 미끄러지는 것을 방지하기 위해 Ackermann 스티어링 지오메트리를 구현하고 있습니다. 이 지오메트리를 사용하여 회전 반경에 따라 각 바퀴의 속도와 각도를 계산할 수 있습니다.

즉, 회전할 때 내부 스티어링 휠이 외부 휠에 비해 더 큰 각도를 갖게 됩니다. 동시에 내부 바퀴는 외부 바퀴에 비해 속도가 더 느립니다.

로버를 제어하기 위해 로버에 명령을 보내는 저렴한 상업용 RC 송신기를 사용하고 있습니다. 로버에는 명령을 수신하고 Arduino 보드로 보내는 적절한 RC 수신기가 있습니다. 네, 이 화성 탐사선의 두뇌는 실제로 Arduino MEGA 보드이며 모든 것을 쉽게 연결할 수 있도록 Arduino MEGA 보드 위에 간단히 부착할 수 있는 맞춤형 PCB를 만들었습니다.

로버에는 카메라 장치에 있는 FPV 카메라도 있습니다. 스테퍼와 서보모터로 제어하고 스마트폰으로 실시간 영상을 받고 있다.

여기에서 많은 부품이 실제로 작동하지 않거나 실제 로버의 모양과 일치시키기 위해 존재한다는 점에 주목하고 싶습니다. 그리고 로봇팔이 빠졌는데 앞으로 영상에서 팔을 만들어 이 로버에 더 많은 기능을 추가할 계획입니다.

그럼에도 불구하고 이제 로버 설계부터 시작하여 전자 부품 연결 및 Arduino 보드 프로그래밍에 이르기까지 제작 과정을 안내해 드리겠습니다.

DIY 화성 탐사선 3D 모델

실제로 이 동영상의 후원자인 3D EXPERIENCE Solidworks를 사용하여 이 화성 탐사선을 디자인했습니다.

3DEXPERIECE Solidworks는 3DEXPERIECE 플랫폼을 통해 얻을 수 있는 클라우드 기능이 있는 Solidworks 버전입니다. 여기에서 모든 것이 클라우드를 통해 작동하므로 귀하 또는 귀하의 팀의 모든 사람이 언제 어디서나 전 세계 어디에서나 데이터 또는 모델에 액세스할 수 있습니다. 3DEXPERIECE 플랫폼에는 유용한 생산성 및 데이터 관리 앱도 많이 포함되어 있습니다.

예를 들어, 프로젝트 계획 앱은 작업을 정리하고, 마감일을 설정하고, 진행 상황을 추적하는 좋은 방법입니다. 3D Markup 앱을 사용하면 노트북, 태블릿 또는 스마트폰과 같은 모든 장치에서 모델을 보고 탐색하고 메모할 수 있습니다.

브라우저 내에서 실행되는 SOLIDWORKS xDesign이라는 별도의 클라우드 기반 3D 모델러도 있습니다. Solidworks와 함께 사용하거나 단독으로 사용할 수 있으며 언제 어디서나 모든 기기에서 모델링에 적합합니다.

그럼에도 불구하고 여기 계신 많은 분들에게 가장 흥미로운 소식은 아마도 올해 하반기부터 연간 $99에 구입할 수 있는 3DEXPERIECE Solidworks의 메이커 버전이 있다는 것입니다. 이와 같은 교육 콘텐츠를 후원해 주신 Solidworks에 큰 감사를 드립니다.

SOLIDWORKS와 3DEXPERIENCE 플랫폼이 귀하에게 적합한지 알고 싶다면 아래 링크를 확인하십시오.

내 특별 링크로 3DEXPERIENCE를 무료로 사용해 보세요: www.solidworks.com/HMTryNow

3DEXPERIENCE SOLIDWORKS에 대해 자세히 알아보기: www.solidworks.com/HTMLearnMore

메이커용 3DEXPERIENCE SOLIDWORKS:www.solidworks.com/htm

자, 이제 모델로 돌아가서 제가 로버를 어떻게 설계했는지 설명하겠습니다. 내 목표는 이 로버를 실제 화성 퍼시버런스 로버와 최대한 비슷하게 보이게 하는 것이었습니다. NASA 공식 웹사이트에 Mars Perseverance Rover의 3D 모델이 있어 블렌더에서 다운로드하여 열었습니다.

로버의 정면, 상면, 측면을 3장 찍어서 솔리드웍스로 불러왔습니다. 바퀴의 크기를 직경 130mm로 하고 싶었기 때문에 이 치수에 따라 사진의 크기를 조정했습니다.

그런 다음 여기에서 너비, 길이, 높이, 바퀴 사이의 거리, 로커 보기 서스펜션의 치수 등과 같은 모든 주요 치수를 가져왔습니다.

이제 이러한 치수와 사용하려고 계획한 DC 모터 및 서보에 따라 외관을 최대한 원본에 가깝게 유지하면서 쉽게 3D 인쇄 및 조립할 수 있는 방식으로 로버 부품을 설계했습니다.

로커 보기 서스펜션에는 20mm 원형 알루미늄 프로파일을 사용하고 베이스 프레임에는 20mm T 슬롯 알루미늄 프로파일을 사용합니다.

이 3D 모델을 찾아 다운로드할 수 있을 뿐만 아니라 Thangs의 브라우저에서 탐색할 수도 있습니다.

3D 프린팅에 필요한 STL 파일은 다음과 같습니다.

화성 탐사선 복제 부품의 3D 인쇄

부품을 3D 인쇄하기 위해 기존 Creality CR-10과 새로운 CR-10 V3 3D 프린터를 사용했습니다. 유연한 재료로 휠을 인쇄하려면 CR-10 V3과 같은 직접 압출기가 있는 프린터가 반드시 필요합니다.

이 3D 프린터는 모두 비교적 저렴하면서도 우수한 인쇄 품질을 제공합니다. 관심이 있는 경우 확인할 수 있는 링크가 있습니다.

참조:초보자와 초보자를 위한 최고의 예산 오실로스코프 – 2021년 업데이트

부품을 3D 프린팅할 때 슬라이싱 소프트웨어에서 수평 확장 기능을 사용하는 것이 중요합니다. -0.1mm 값을 사용했습니다. 인쇄 시 필라멘트 팽창을 보정하는 기능입니다.

예를 들어 사용하지 않으면 부품에 직경 20mm의 구멍이 있는 경우 실제 3D 인쇄 부품의 구멍은 약 19.8mm가 되어 조립할 수 없습니다.

그럼에도 불구하고 여기에 모든 3D 인쇄 부품이 있습니다.

얼마나 많은 인쇄가 있는지 솔직히 조금 미쳤지만 로버의 독특한 모습을 얻을 수있는 유일한 방법입니다. 하지만 이 로버의 기능적인 부분만 인쇄하도록 선택하면 인쇄 시간을 절반으로 줄일 수 있습니다.

DIY 화성 탐사선 부품 목록

다음은 이 DIY 화성 탐사선을 조립하는 데 필요한 구성 요소 목록입니다. 전자 부품 목록은 아래 기사의 회로도 섹션에서 찾을 수 있습니다.

또한 다양한 길이의 M4, M5 및 M6 볼트가 필요합니다. 필요한 볼트와 너트의 전체 목록은 아래에서 확인할 수 있습니다.

지역 철물점에서 볼트와 너트를 구입할 수도 있습니다.

로버 조립

자, 이제 로버 조립을 시작할 수 있습니다. 먼저 알루미늄 프로파일을 준비해야 합니다. 금속 손톱을 사용하여 크기에 맞게 자릅니다.

다음 치수의 로커 보기 서스펜션을 위한 베이스용 T 슬롯 프로파일 10개와 원형 프로파일 8개가 필요합니다.

T-슬롯 프로파일 프레임을 조립하기 위해 적절한 T-슬롯 코너 브래킷과 일부 볼트 및 너트를 사용하고 있습니다. 상단 및 하단 프레임이 준비되면 측면에 로커 조인트 3D 인쇄 부품을 삽입하고 전면과 후면에 3D 인쇄 브래킷을 삽입하여 베이스를 완성할 수 있습니다. 제자리에 고정하려면 M3 볼트와 T 슬롯 너트가 필요합니다.

로커 조인트에는 M5 볼트와 너트를 사용했습니다. 전면 프로파일에서 로커 조인트까지의 거리는 134mm가 되어야 합니다.

로커 보기 서스펜션 조립

다음으로 로커 보기 서스펜션용 메인 베어링을 제자리에 삽입할 수 있습니다. 그런 다음 M8 볼트를 사용하여 베이스에 부착할 로커 조인트 샤프트가 있습니다.

샤프트에는 베이스에 고정하는 데 사용되는 M8 너트를 삽입할 수 있는 슬롯이 있습니다. 샤프트의 구멍은 7.5mm이므로 볼트와 샤프트가 단단히 연결됩니다. 이러한 방식으로 우리는 볼트 자체가 로버의 무게 중 일부를 지탱할 것이기 때문에 실제로 3D 인쇄된 샤프트를 강화합니다. 이것은 로버의 전체 무게가 로커 샤프트로 지지되기 때문에 전체 어셈블리에서 가장 스트레스를 받는 부분입니다. 부품을 인쇄하는 방식은 부품의 강도에 있어 매우 중요합니다.

처음에는 지지 재료가 필요 없는 이 샤프트를 더 쉽게 인쇄했지만 인쇄가 실패했습니다.

<그림 클래스="aligncenter">

이러한 방식으로 주 응력은 그다지 강하지 않은 레이어에 작용하지만 응력이 벽 윤곽에 작용하는 부품을 옆으로 인쇄하면 부품이 훨씬 더 강해지며 실패하지 않습니다.

그럼에도 불구하고 이제 우리는 휠 조인트 및 모터 마운트와 함께 로커 보기 서스펜션을 계속 조립하고 나중에 이 하위 어셈블리를 로커 샤프트에 부착할 것입니다.

20mm 원형 프로파일이 들어가는 부품의 구멍은 꼭 맞는 치수로 되어 있으므로 경우에 따라 걸쇠나 샌딩 페이퍼를 사용하여 끼워야 합니다.

이제 이러한 부품을 올바르게 조립하려면 정확한 위치에 원형 프로파일에 구멍을 만들어야 합니다. 이를 위해 먼저 프로필에 직선을 표시합니다.

다음으로, 부품의 구멍을 통과하는 마킹 라인이 있는 3D 인쇄 부품에 프로파일을 삽입할 수 있습니다. 그런 다음 해당 부품의 양쪽에 프로필을 드릴링해야 하는 위치를 표시할 수 있습니다.

프로필의 반대쪽에서 동일한 절차를 반복해야 합니다.

2.5mm 드릴을 사용하여 구멍을 뚫고 M3 볼트를 사용하여 부품을 조이는 데 사용할 프로필에 나사산을 만들었습니다.

알루미늄 프로파일은 볼트보다 부드러워서 볼트 자체로 나사산을 만들기 쉽습니다. 구멍을 뚫는 이 방법을 따르는 것이 매우 중요하므로 끝에 모든 부품이 서로에 대해 상대적으로 위치해야 합니다.

보기 조인트의 경우 베어링 2개와 M8 볼트도 사용합니다.

로커 보기 서스펜션 배열이 완료되면 스티어링 휠 조인트 조립을 계속할 수 있습니다. 스티어링 휠 조인트 부분은 볼트로 결합된 두 부분으로 구성됩니다.

실제 조인트 또는 서보 마운트 부품과 DC 모터 마운트 부품 사이의 연결을 위해 두 개의 베어링과 M6 볼트를 사용합니다.

볼트의 상단 또는 머리 부분에 서보 혼을 부착해야 하며 이 3D 인쇄 커플러와 일부 M3 볼트를 사용하여 이를 수행합니다.

커플러에는 서보 모션이 볼트로 전달되는 육각 슬롯이 있습니다. 아래쪽에서 조인트의 다른 부분을 조일 수 있습니다.

이 연결을 M6 너트로 고정합니다. 이렇게 하면 스티어링 휠 조인트가 완성되지만 나중에 실제로 하단에 다른 M6 너트를 추가하고 다른 너트에 조여야 한다는 것을 알게 될 것입니다.

이 작업을 해야 하는 이유는 서보의 움직임이 너트 자체를 사용하여 DC 모터 마운트 부분으로 전달되고 다른 너트로 조이지 않으면 전체 조인트가 풀리기 때문입니다.

다른 모서리 조인트에도 동일한 절차가 적용됩니다. 이 어셈블리를 평평한 표면에 놓고 세 개의 모터 마운트가 모두 평평하게 놓이거나 모두 서로 평행하면 모든 것이 제대로 연결된 것입니다.

<그림 클래스="aligncenter">

물론 반대쪽도 같은 방법으로 조립하고 있습니다. 그러나 여기서 우리는 일부 부품이 동일해 보이지만 동일한 부품이 아니라 실제로 미러링된다는 점에 유의할 수 있습니다.

다음으로 이러한 하위 어셈블리를 베이스 프레임 또는 섀시의 로커 조인트 샤프트에 삽입해야 합니다. 하지만 그 전에 샤프트에 나사산이 있는 황동 인서트를 삽입해야 합니다.

<그림 클래스="aligncenter">

납땜 인두를 사용하여 쉽게 제자리에 삽입할 수 있으므로 서스펜션 하위 어셈블리를 고정하기 위한 훌륭하고 안정적인 나사 구멍을 얻을 수 있습니다. 이를 위해서는 4개의 M4 볼트가 필요합니다.

양쪽에 설치하면 섀시가 자유롭게 떨어지거나 회전하는 것을 알 수 있습니다. 따라서 로커 보기 서스펜션이 제대로 작동하도록 하기 위해 실제로 누락된 것이 있는데 이것이 바로 차이점입니다.

차동 장치를 사용하면 두 개의 로커가 서로 연결되고 로버 섀시에 연결됩니다. 이 구성을 사용하면 한 쪽이 회전할 때 다른 쪽이 반대 방향으로 회전하여 거의 동일한 휠 접촉을 제공합니다.

섀시는 두 로커의 평균 피치 각도를 갖습니다.

다음은 차동 장치를 조립하는 데 필요한 모든 부품입니다.

디퍼렌셜 바가 꽤 길기 때문에 3개의 볼트로 결합하여 더 작은 3D 프린터에서도 3D 인쇄할 수 있도록 했습니다. 차동 막대는 2개의 베어링과 1개의 M8 볼트로 구성된 조인트로 섀시 중앙에서 회전합니다.

차동 장치를 로커와 연결하려면 로드 엔드 볼 조인트가 필요합니다. 저는 M8 로드 엔드 볼 조인트를 사용하고 있으며 길이가 50mm인 M8 스레드 로드도 필요합니다. 나사산 막대는 한쪽에 M8 너트가 있는 3D 인쇄 부품에 들어가고 다른 쪽에는 막대 끝 볼 조인트로 들어갑니다.

여기에서 섀시가 수평을 유지하기 위해 3D 인쇄된 차동 링크와 로드 끝 사이의 거리를 약 20mm로 조정해야 합니다. 로커 레버와 차동 링크를 연결하기 위해 두 개의 베어링과 M5 볼트를 사용합니다.

다른 쪽에도 이 절차를 반복하면 로커 보기 서스펜션이 완성됩니다. 한쪽이 올라가면 다른 쪽이 내려가고 그 반대도 마찬가지입니다.

이것은 모든 바퀴가 항상 지면과 접촉할 수 있도록 합니다. 섀시는 다리 동작의 절반만 이동하거나 섀시는 두 로커의 평균 피치 각도를 갖습니다.

참조: Arduino 로봇 암 및 메카넘 휠 플랫폼 자동 작동

화성 탐사선용 모터 조립

좋습니다. 다음으로 DC 모터 설치로 넘어갈 수 있습니다. 내가 사용하는 모터는 직경 37mm, 12V에서 작동하고 50RPM 출력의 기어박스가 있습니다.

<그림 클래스="aligncenter">

나중에 50RPM은 이 로버에 비해 너무 많다는 것을 깨달았지만 20 또는 10RPM 버전을 선택하는 것이 좋습니다.

바퀴를 모터에 부착하기 위해 샤프트 커플러를 만들었습니다.

여기에 커플러를 샤프트에 고정하는 데 사용할 M3 나사산 인서트와 휠을 커플러에 고정하기 위한 M4 너트를 설치해야 합니다. 너트를 삽입할 때 단단히 고정되도록 접착제를 추가하거나 대신 나사산 인서트를 사용해야 합니다.

다음으로 바퀴를 부착할 수 있습니다. 바퀴는 두 부분으로 구성됩니다. 하나는 플렉서블 필라멘트로 프린팅한 휠인데 꼭 그럴 필요는 없고, 다른 하나는 일반 PLA로 프린팅한 림입니다.

<그림 클래스="aligncenter">

림에는 바퀴에 맞는 슬롯이 있어 모터의 동력이 바퀴로 전달됩니다. 슬롯에 접착제 몇 방울을 추가하여 더 안전하게 고정할 수 있습니다. 마지막으로 4개의 M4 볼트를 사용하여 샤프트 커플러 또는 DC 모터에 바퀴를 부착할 수 있습니다.

<그림 클래스="aligncenter">

좋습니다. 이제 스티어링 서보 모터를 설치할 수 있습니다. 저는 25kgcm 토크와 4.8~6.8V의 작동 전압을 가진 고토크 디지털 서보를 사용하고 있습니다. 서보를 제자리에 고정하기 위해 서보 마운트 3D 인쇄 부품의 M3 나사 인서트에 들어가는 4개의 M3 볼트를 사용합니다.

카메라 유닛 조립

다음으로 카메라 유닛을 조립할 수 있습니다. 카메라 패닝을 위해 NEMA 17 스테퍼 모터를 사용하기로 결정했지만 여기에서 다른 유형의 모터를 사용하여 변경할 수 있습니다.

모터 동작은 3D 인쇄된 샤프트 커플러로 모터에 연결된 M5 나사 막대를 사용하여 상부로 전달되고, 다른 쪽에서는 베어링과 2개의 너트를 사용하여 나사 막대를 움직이는 요소에 고정합니다. 카메라를 기울이기 위해 핸들에 사용하는 것과 동일한 서보를 사용하고 있습니다.

카메라 장치에 있는 많은 부품은 작동하지 않으며 실제 로버의 모양과 일치하도록 존재합니다. 이 부품을 조립하려면 다양한 M3 볼트와 나사산 인서트가 필요합니다.

그러나 여기에 실제 FPV 카메라도 설치합니다. 카메라 유닛 하우징에 장착할 수 있도록 커스텀 홀더를 만들었습니다. 스냅 핏 커버로 닫는 상단에서 카메라에 쉽게 접근할 수 있습니다. 카메라 유닛의 최종 모습입니다.

이 전체 카메라 하위 어셈블리를 섀시의 전면 오른쪽 모서리에 장착했습니다.

<그림 클래스="aligncenter">

이 시점에서 우리는 실제로 작동하지 않지만 실제 로버의 모양과 일치시키기 위해 나머지 3D 인쇄 부품을 계속 조립하거나 전자 부품을 연결하고 로버를 작동시킬 수 있습니다. 모든 3D 프린팅 부품을 먼저 조립한 다음 전자 부품을 조립하기로 결정했습니다.

나머지 로버 조립

아까도 말했듯이 다음 부품들은 로버의 외형을 맞추기 위한 것이므로 자세한 조립 방법은 설명하지 않겠습니다. 3D 모델에서 모든 것이 어떻게 연결되어야 하는지 알 수 있습니다.

<그림 클래스="aligncenter">

사실 저는 이 부분을 디자인하는 데 많은 노력을 기울이고 모든 것이 잘 보이도록 세부 사항에 주의를 기울입니다.

이 부품도 상당히 커서 3D 인쇄하는 데 시간이 걸립니다.

다음은 내가 설치한 방법에 대한 간략한 보기입니다.

로버 중앙에 있는 마지막 두 개의 상단 패널은 로버에 스냅 핏되도록 설계되었습니다.

그들은 실제로 전자 부품이 이 영역에 위치하기 때문에 쉽게 제거할 수 있는 후드 역할을 합니다.

전자 부품 홀더는 볼트로 고정된 두 개의 3D 인쇄 부품으로 만들어지며 섀시의 하단 프레임으로 이동합니다.

전자공학

좋습니다. 이제 전자 제품을 계속 사용할 수 있습니다. 먼저 각 모터에 필요한 와이어의 양을 측정해야 합니다. 나는 적절한 모터 커넥터가 없었기 때문에 모터에 직접 전선을 납땜했습니다. 커넥터를 분리하기 위해 열수축 튜브를 사용했습니다.

몇 가지 집타이를 사용하면 전선을 안내하고 깨끗하게 유지할 수 있습니다.

서보 모터의 경우 서보 확장 와이어를 사용하여 와이어를 전자 부품실로 확장할 수 있습니다. 전자 장치 마운트 부분에는 와이어를 통과시켜 로버의 중앙을 얻을 수 있는 슬롯이 있습니다.

<그림 클래스="aligncenter">

전체적으로 배선이 눈에 보이는 부분 뒤로 지나갈 정도로 깔끔하게 잘 나온 것 같아요.

참조: SCARA 로봇 | 나만의 Arduino 기반 로봇을 만드는 방법

DIY 화성 탐사선 회로도

이제 이 로버의 회로도를 살펴보고 모든 것이 어떻게 연결되어야 하는지 알아보겠습니다.

<그림 클래스="aligncenter">

아래 링크에서 이 프로젝트에 필요한 구성 요소를 얻을 수 있습니다.

6개의 DC 모터를 구동하기 위해 PWM 제어와 최대 3.6A의 피크 전류를 지원하는 6개의 DRV8871 DC 모터 드라이버를 사용하고 있습니다. DC 모터 작동 전압은 12V이며 정격 전류는 1A이고 실속 전류는 3A입니다. 로버에 전원을 공급하기 위해 약 12V를 제공하는 3S LiPo 배터리를 사용하고 있습니다.

반면에 서보는 4.8V에서 6.8V가 필요하므로 12V를 6V로 변환하는 DC-DC 컨버터가 필요합니다. 우리가 사용하는 서보는 매우 강력하고 약 2A의 스톨 전류를 가지므로 변환기는 약 8A의 전류를 처리할 수 있어야 합니다. 카메라 유닛 스테퍼 모터를 구동하기 위해 A4988 또는 DR8825 스테퍼 드라이버를 사용할 수 있습니다. 두 개의 저항을 사용하여 배터리 전압을 모니터링할 수 있는 간단한 전압 분배기를 만들 수 있습니다.

RC 수신기는 벅 컨버터에서 나오는 6볼트의 전원이고 FPV 카메라와 비디오 송신기는 배터리의 12V로 전원이 공급됩니다.

Custom PCB

In order to keep the electronics components organized I designed a custom PCB for this DIY Mars rover.

This PCB will actually act as an Arduino MEGA shield as we will be able to directly connect it on top of the Arduino MEGA board. In addition to the motor drivers, I included a 3.3V voltage regulator and a dedicated NRF24L01 connection in case you want to control the rover using that module, as well as connections for an DHT22 sensor, compass, I2C, serial communication, 12V, 5V, 3.3V and GND connections. Actually, I futureproofed this PCB for upgrading the rover’s functionalities. 

I ordered the PCB from PCBWay. Here we can simply upload the Gerber file, choose the properties of our PCB, and order it at a reasonable price.

I didn’t change any of the default properties except for the PCB color which I chose to be blue in order to match with the Arduino board. You download the Gerber file here below, or from the PCBWay projects sharing community through which you can also directly order the PCB.

Here’s you can download the Gerber file for this DIY Mars Rover PCB:

Nevertheless, after several days the PCB arrived. The quality of the PCB is great, and everything is exactly the same as in the design.

Assembling the PCB is pretty straight forward as everything is labeled. I started with soldering the pin headers at the bottom of the PCB, for the Arduino MEGA connection and then continued with top side. I actually used pin headers for all connections, because it gives flexibility to make changes if something doesn’t work properly. I didn’t solder the 3.3V voltage regulator as well as some free Arduino pins, as I wasn’t going to use them now anyway. 

Once finished with the PCB assembly I secured the Arduino board to the electronics mount part using two bolts and added the PCB to it.

Then I connected each motor to their drivers and put them in place in the PCB. The servos go in their appropriate servo pins, as well as the stepper driver for which I used one jumper for selecting 1/8th stepping resolution.

 

For the radio communication I’m using the FLYSKY RC transmitter and receiver which are really affordable and work great.

For connecting the receiver to the Arduino, we can use servo extension cables as we need three wires, VCC, GND and the Signal pin. The receiver communicates with the Arduino through an I-BUS and the serial port. If we want to send data back from the receiver to the transmitter, in our case for monitoring battery voltage, we also need to connect the sensor I-BUS of the receiver to another Arduino serial port. 

The buck convertor is secured in place using two bolts, and for securing the LiPo battery I’m using two rubber bands so in that way I can easily remove the battery for charging.

The power switch goes in the back right panel of the rover.  I used 20-gauge wires for these connections as the current flow through them might get up to several amps when the rover is fully engaged. Make sure you double check your connections with these wires because if you connect something wrong you might fire up things. 

Lastly, we can connect the FPV camera to a 12V power supply and connect video signal wire to the video transmitter which also needs to be powered with 12V. With this we are done with the electronics.

We can put back the cover panels in place and we are done with this DIY Mars Rover. Actually, we are almost done, as we need to give life to this machine now, or program the Arduino. 

Programming the DIY Mars Rover – Arduino Code

Here you can download the Arduino code for this DIY Mars Rover project:

Code overview

So, using the IBusBM library we read incoming data from the RC Transmitter.

// Reading the data comming from the RC Transmitter
  IBus.loop();
  ch0 = IBus.readChannel(0);
  ch1 = IBus.readChannel(1);
  ch2 = IBus.readChannel(2);
  ch3 = IBus.readChannel(3);
  ch6 = IBus.readChannel(6);Code language: Arduino (arduino)

Then we convert these values into a turning radius to right value, turning radius to left value and rover speed from 0 to 100%.

// Convertign the incoming data
  // Steering right
  if (ch0 > 1515) {
    r = map(ch0, 1515, 2000, 1400, 600); // turining radius from 1400mm to 600mm
  }
  // Steering left
  else if (ch0 < 1485) {
    r = map(ch0, 1485, 1000, 1400, 600); // turining radius from 600mm to 1400mm
  }
  // Rover speed in % from 0 to 100
  s = map(ch2, 1000, 2000, 0, 100); // rover speed from 0% to 100%Code language: Arduino (arduino)

We use the turning radius “r” value for calculating the steering wheels angles as well as the speed of the wheels.

void calculateMotorsSpeed() {
  // if no steering, all wheels speed is the same - straight move
  if (ch0 > 1485 && ch0 < 1515) {
    speed1 = speed2 = speed3 = s;
  }
  // when steering, wheels speed depend on the turning radius value
  else {
    // Outer wheels, furthest wheels from turning point, have max speed
    // Due to the rover geometry, all three outer wheels should rotate almost with the same speed. They differe only 1% so we asume they are the same.
    speed1 = s;
    // Inner front and back wheels are closer to the turing point and have lower speeds compared to the outer speeds
    speed2 = s * sqrt(pow(d3, 2) + pow((r - d1), 2)) / (r + d4);
    // Inner middle wheel is closest to the turning point, has the lowest speed
    speed3 = s * (r - d4) / (r + d4);
  }

  // speed value from 0 to 100% to PWM value from 0 to 255
  speed1PWM = map(round(speed1), 0, 100, 0, 255);
  speed2PWM = map(round(speed2), 0, 100, 0, 255);
  speed3PWM = map(round(speed3), 0, 100, 0, 255);
}

void calculateServoAngle() {
  // Calculate the angle for each servo for the input turning radius "r"
  thetaInnerFront = round((atan((d3 / (r + d1)))) * 180 / PI);
  thetaInnerBack = round((atan((d2 / (r + d1)))) * 180 / PI);
  thetaOuterFront = round((atan((d3 / (r - d1)))) * 180 / PI);
  thetaOuterBack = round((atan((d2 / (r - d1)))) * 180 / PI);
}Code language: Arduino (arduino)

As I mentioned earlier, we are using the Ackerman steering geometry for calculating them. These values are then used for controlling the servos using the ServoEasing library which provides smoother servo movements.

// Servo motors
    servoW1.startEaseTo(97 - thetaOuterFront);
    servoW3.startEaseTo(97 + thetaOuterBack);
    servoW4.startEaseTo(94 - thetaInnerFront);
    servoW6.startEaseTo(96 + thetaInnerBack);Code language: Arduino (arduino)

For controlling the DC motors using the analogWrite() function which actually sends PWM signal to the DC motor drivers.

// Motor Wheel 1 - Left Front
      analogWrite(motorW1_IN1, speed2PWM);   // PWM value
      digitalWrite(motorW1_IN2, LOW); // ForwardCode language: Arduino (arduino)

Overall, the code is not that complicated as the rover itself doesn’t have complicated functions. However, I do plan in future videos to add more functions to this rover, like GPS navigation, various sensors, robotic arm, soil collecting mechanism and so on. 

I hope you enjoyed this project and learned something new. Feel free to ask any question in the comments section below and check my Arduino Projects Collection.


제조공정

  1. Rover
  2. 오디오 주파수 감지기
  3. Tech-TicTacToe
  4. Arduino 및 Nokia 5110 디스플레이가 있는 DIY 전압계
  5. Arduino 카운트다운 타이머
  6. RC 포르쉐 자동차(Arduino 프로젝트)
  7. Arduino 기반 스마트 에너지 모니터
  8. RFID를 사용한 DIY 아이디어
  9. Arduino 색상 감지
  10. DIY Arduino 높이 측정기