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

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

이 튜토리얼에서는 아두이노 기반 RC 비행기를 만드는 방법과, 이전 영상에서 만든 커스텀 아두이노 송신기로 제어하는 방법을 보여드리겠습니다.

아래 영상을 시청하거나 작성된 튜토리얼을 읽어보세요.

개요

비행기는 완전히 스티로폼으로 만들어졌습니다. 모양 제작에 이전 영상에서 보여드린 아두이노 CNC 폼 커팅 머신을 사용했습니다. CNC 머신을 사용해 이 아두이노 RC 비행기를 만들지만, 그 CNC 머신도 DIY 제작이므로 여전히 100% DIY라고 할 수 있습니다.

또한 비행기 제어도 아두이노와 NRF24L01 모듈을 이용한 무선 통신 기반으로 100% DIY입니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

송신기 오른쪽 조이스틱으로 비행기 에일러론과 엘리베이터를, 왼쪽 조이스틱으로 러더와 스로틀을 제어합니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

여기에 더해 오른쪽 포텐셔미터로 조작 반응성을 조절하거나 서보 이동량을 줄일 수 있고, 왼쪽 조이스틱으로는 러더 서브트림이나 서보 암 중립 위치를 조정할 수 있습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

아, 거의 잊을 뻔했는데 이 아두이노 RC 비행기의 메인 기능은 비행이니까, 네, 날 수 있습니다.

RC 비행기 설계 – 3D 모델

3D 모델링 소프트웨어인 Fusion 360으로 비행기 설계를 시작했습니다. 상용 RC 비행기들을 참고하고 모델 비행기 파라미터에 대한 기본 가이드라인이나 경험칙들을 따라 설계했습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

출발점은 날개 폭으로 80cm로 정했습니다. 여기서 동체 길이는 일반적으로 날개 폭의 75%입니다. 에어포일(날개 단면)로는 RC 비행기에 인기 있는 CLARK Y 에어포일을 선택했습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

airfoiltools.com에서 에어포일 모양을 .SVG 파일로 다운로드해 Fusion 360으로 가져왔습니다. 날개 현(스트림 방향 날개 길이)이 날개 폭의 약 1/5이 되도록 크기를 적절히 조정했습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

수평 및 수직 안정판도 그 기본 가이드라인들에 따라 크기가 정해집니다. 기본 RC 모델 비행기 설계 파라미터들 일부:

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

비행기 동체는 두 개의 10mm 측면과 전자 부품을 수용할 수 있도록 속이 빈 50mm 코어로 만들어집니다.

위 링크들에서 3D 모델을 다운로드할 수 있습니다. 비행기 두 버전이 있습니다. 버전 1은 여기 이미지에 나온 것이고, 버전 2는 코가 좀 더 작고 모터를 더 앞쪽에 배치해 기류를 개선할 수 있습니다.

DIY CNC 폼 커터용 G-코드 생성

내 아두이노 CNC 폼 커팅 머신 작업 영역이 45cm로 제한되고 동체 길이가 60cm라 동체를 두 부분으로 만들어야 했습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

앞쪽 지점에서 34cm 지점에서 동체를 자르고, 모양을 투영하고 근처에 점을 추가한 새 스케치를 만들었습니다. 다음으로 Fusion 360 제조 탭에서 모양 절단용 G-코드를 생성할 수 있습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

여기서 먼저 새 설정을 만들어 스케치를 모델로 선택하고, 앞서 추가한 점을 설정 원점으로 선택하고, X와 Y축을 적절히 조정했습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

그런 다음 2D 컨투어 작업을 선택하고 지름 3mm의 새 툴을 생성하거나 선택했습니다. 핫 와이어가 스티로폼을 통과할 때 만드는 절단 크기가 대략 3mm이기 때문입니다. 여기서 절단 피드레이트도 설정할 수 있는데, 핫 와이어 자체와 스티로폼 경도에 따라 달라집니다. 150 mm/min로 설정했습니다.

지오메트리 탭에서 절단할 컨투어나 모양을 선택합니다. 높이는 제 폼 커터 머신에 Z축 이동이 없으므로 모두 1mm로 설정했습니다. 마지막으로 Linking 탭에서 원점 근처에 있는 가장자리를 진입 위치로 선택했습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

이로써 툴패스가 생성되고 Simulation 버튼을 클릭해 확인할 수 있습니다. 툴패스는 닫힌 루프 단일 패스여야 하며, 그렇다면 마침내 G-코드를 생성할 수 있습니다. Post Processes로 가서 GRBL 펌웨어를 선택하고 출력 폴더와 파일명을 정한 후 Post 버튼을 클릭합니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

파일을 저장하면 워드패드 같은 에디터에서 G-코드를 볼 수 있습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

이제 G-코드 파일이 있으니 Universal G-code Sender에 불러와 CNC 머신에 G-코드를 보내 모양을 만들 수 있습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

방금 보여드린 과정이 아마 최고나 전문적이지 않을 수 있지만, 내 DIY CNC 폼 커팅 머신용 G-코드를 작동시키는 데는 여전히 제 역할을 합니다. 이 DIY CNC 머신에 대한 자세한 내용은 영상 설명의 링크인 해당 튜토리얼을 참고하세요.

G-코드 파일은 여기서 다운로드할 수 있습니다:

앞서 말했듯 측면에는 1cm 두께 스티로폼, 중간에는 5cm 두께 스티로폼을 사용했습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

날개에는 10cm 두께 스티로폼을 사용해 제 핫 와이어 머신이 자를 수 있는 최대 폭인 약 30cm 폭으로 잘랐습니다. 단일 G-코드 파일에 날개 프로파일 두 개를 배치해 여러 개를 잘랐습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

80cm 날개 폭을 얻기 위해 27cm 조각 세 개를 접착할 것이고, 직선이 되도록 조각 끝들을 수동으로 잘라 수직으로 만들었습니다.

RC 비행기 조립

자, CNC 머신으로 자른 모든 스티로폼 조각들입니다. 앞부분 세 조각, 뒷부분 세 조각, 날개 세 조각. 이제 조립을 시작할 수 있습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

앞부분부터 시작하겠습니다. 글루건으로 조각들을 접착합니다. 핫 글루가 스티로폼을 약간 녹이지만 그래도 이 방법으로 접착할 수 있었습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

스티로폼 접착에 또 다른 좋은 방법은 5분 에폭시입니다. 다른 쪽을 접착하기 전에 모터 홀더를 만들겠습니다. 30mm 폭 알루미늄 프로파일을 사용했는데 꽤 가볍습니다. 약 18cm 길이로 자르고 모터 장착용 구멍 위치를 표시한 후 3mm 드릴 비트로 뚫었습니다. 그런 다음 프로파일을 90도 구부렸습니다. M3 볼트들로 모터를 홀더에 고정했습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

이 어셈블리를 사용해 스티로폼 앞부분에 구멍을 뚫었습니다. 그런 다음 유틸리티 나이프로 구멍을 지름 30mm로 확대했습니다(모터 지름과 동일).

다음으로 모터 홀더 반대쪽에 네 구멍을 뚫어 홀더 고정과 랜딩 기어 부착용으로 쓰겠습니다. 이 구멍 위치를 동체에 표시하고 4mm 드릴 비트로 스티로폼을 관통해 수동으로 구멍을 뚫었습니다. 같은 구멍들이 있는 약 7cm 길이의 알루미늄 조각을 하나 더 만들었고, 이제 이걸로 모터 홀더를 고정할 수 있습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

M4 볼트들로 스티로폼 손상 없이 모터 홀더를 쉽게 고정할 수 있습니다. 하지만 나중에 할 거라 일단 빼두고 다른 쪽 접착을 계속했습니다. 같은 방법으로 뒷부분들도 접착했습니다.

다음 단계는 결혼(결합), 즉 동체 앞부분과 뒷부분 연결입니다. 연결을 더 튼튼하게 하기 위해 중간에 간단한 바비큐 꼬치들을 넣겠습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

비행기 추락 시 여기 쉽게 부러질 수 있으니 더 큰 꼬치들을 쓰는 것도 추천합니다. 연결 부위에 적당량의 핫 글루를 바르고 꽉 짜맞췄습니다. 자, 동체가 준비됐고 꽤 멋져 보입니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

다음으로 유틸리티 나이프로 10mm 두께 스티로폼 두 조각을 잘라 수평 및 수직 안정판으로 만들겠습니다. 가장자리를 베벨링해 더 보기 좋고 공기역학적으로도 조금 더 낫게 만들었습니다. 안정판들은 동체 뒷면에 직접 접착되지만, 그 전에 조종면들을 먼저 만들겠습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

이를 위해 길이의 약 1/3을 잘라냈고, 이것이 수평 안정판의 엘리베이터, 수직 안정판의 러더가 될 조종면입니다. 조종면들을 안정판에 힌지하기 위해 접촉면을 베벨링해야 했습니다. 다시 유틸리티 나이프로 했고, 이 컷들을 깔끔하게 하려면 꽤 날카로운 게 필요합니다.

안정판들을 좀 더 공기역학적으로 만들었습니다. 샌드페이퍼로 앞전(리딩 에지)을 둥글게 만들었습니다. 뒷전(트레일링 에지)도 조금 샌딩했습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

스티로폼이 꽤 약하므로 안정판들과 조종면 전체 영역을 심플한 포장 테이프로 감싸겠습니다. 이는 부품들을 더 튼튼하게 할 뿐 아니라 테이프가 스티로폼보다 훨씬 매끄러워 공기역학도 향상시킵니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

테이프 감싸기 후 러더 하단을 45도 각도로 잘라 엘리베이터가 자유롭게 움직일 공간을 만들었습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

이제 힌지를 만들 차례인데, 역시 포장 테이프로 합니다. 두 부분을 테이프로 연결하면 꽤 튼튼한 힌지가 됩니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

수평 안정판도 같은 과정으로 반복했습니다. 힌지를 더 튼튼하게 하려면 반대쪽에도 테이프를 붙일 수 있습니다. 같은 테이프로 측면들도 감싸 두 안정판이 완성되었습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

핫 글루로 수평 안정판을 동체에 접착했습니다. 수직 안정판 고정을 위해 먼저 바비큐 꼬치 세 개를 수평 안정판과 동체 관통해 끼우고 접착했습니다. 그런 다음 핫 글루를 바르고 수직 안정판을 꽉 눌러 고정했습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

이로써 안정판들이 완성되었고 날개 제작으로 넘어갑니다.

앞서 말했듯 날개는 내 DIY CNC 폼 커팅 머신 작업 영역 제한으로 세 조각으로 만듭니다. 다시 바비큐 꼬치들로 접착 시 추가 강도를 제공합니다. 정확하게 일렬로 붙이기 위해 조각들을 슬라이드시킬 수 있는 직선 나무 막대를 사용했습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

이게 끝나면 날개는 길고 얇아 꽤 약합니다. 그래서 나무 막대를 추가해 보강하겠습니다. 막대를 크기에 맞게 자르고 날개에 포켓을 만들 위치를 표시했습니다. 유틸리티 나이프로 천천히 조심스럽게 포켓을 만들었습니다. 핫 글루를 좀 바르고 에어포일 모양을 너무 해치지 않으면서 고정했습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

이제 나무 막대가 있어 날개가 훨씬 튼튼해졌습니다. 그래도 땅에 부딪히면 쉽게 부서질 수 있으므로 안정판들처럼 포장 테이프로 전체를 감싸겠습니다. 날개 뒤쪽(트레일링 에지)에서 앞쪽(리딩 에지) 방향으로 테이핑을 시작했습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

이렇게 하면 앞쪽에서 들어오는 공기가 테이프를 뜯어내려 하지 않습니다. 이 과정이 꽤 쉬워 보이지만 손이 떨리거나 인내심이 없으면 좀 성가실 수 있습니다. 날개가 완벽하게 나왔습니다. 이제 훨씬 튼튼하고 공기역학적으로도 좋고 꽤 좋아 보입니다.

자, 다음 단계는 날개 조종면들인 에일러론 만들기입니다. 폭 22cm, 날개 현의 약 1/4 길이로 만들겠습니다. 자유롭게 움직이게 하기 위해 약 0.5cm 잘라냈습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

물론 컷으로 노출된 모든 가장자리를 테이프로 감쌌습니다. 다음으로 에일러론 하단을 45도 베벨링하고 앞서 보여준 같은 방식으로 날개에 힌지했습니다. 동체에 맞고 날개를 동체에 쉽게 부착할 수 있게 날개 중간에 리세스 하나를 더 만들었습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

다음으로 에일러론 제어용 서보 모터들을 설치합니다. 9g 마이크로 서보를 사용합니다. 설치될 위치를 표시하고 유틸리티 나이프로 서보가 들어갈 구멍을 조심스럽게 만들었습니다. 한편 서보 마운팅 브라켓들을 제거해 모양을 단순화했습니다. 서보에 글루를 좀 바르고 구멍에 끼웠습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

유틸리티 나이프로 서보에서 날개 중앙까지 작은 그루브를 만들어 서보 배선을 끼울 수 있게 했습니다. 마지막으로 테이프 조각으로 모든 것을 덮었습니다. 다른 쪽도 같은 과정으로 반복했습니다.

컨트롤 혼 만들기로 이어갔습니다. 모터 홀더 만들 때 쓴 알루미늄 프로파일로 만들겠습니다. 서보 혼 높이와 대략 맞고 힌지 포인트 위로 걸치도록 손으로 모양을 그렸습니다. 톱으로 모양을 잘랐습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

컨트롤 로드로 2mm 강선을 쓸 거라 2.5mm 드릴로 혼에 구멍을 뚫었습니다. 에일러론에 작은 그루브를 만들고 혼을 글루로 고정했습니다. 그런 다음 컨트롤 로드 길이를 측정하고 펜치로 2mm 강선으로 만들었습니다. 컨트롤 로드 측정과 삽입 시 서보 모터들이 중립 위치에 있어야 합니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

수동으로 동작 범위 중간쯤에 놓거나 서보 테스터나 아두이노로 중립 위치를 맞출 수 있습니다. 다른 쪽도 같은 과정으로 반복해 날개가 완전히 완성되었습니다.

다음으로 러더와 엘리베이터 제어용 서보들을 설치합니다. 여기서도 같은 9g 마이크로 서보들을 사용하며, 설치 과정은 방금 설명한 것과 거의 같습니다. 먼저 위치를 표시하고 유틸리티 나이프로 구멍을 만들고 두 모터를 글루로 고정했습니다. 여기선 나란히 있지만 출력 축이 반대쪽입니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

다시 동체에 작은 그루브를 만들어 서보 배선들을 전자 부품 칸으로 연결했습니다. 서보들을 테이프 조각으로 덮고 서보 혼용 구멍들을 만들었습니다. 앞서 보여준 같은 방식으로 컨트롤 혼들을 만들고 글루건으로 고정했습니다. 마지막으로 적절한 컨트롤 로드들을 만들어 설치했습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

좋습니다, 다음으로 동체에 날개를 고정할 8mm 나무 봉 두 개를 설치하겠습니다. 6mm 드릴 비트로 수동으로 구멍을 뚫었습니다. 봉들은 양쪽에 약 1cm 정도 나와야 합니다. 핫 글루로 동체에도 고정했고 실제 작동 방식은 이렇습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

고무줄로 날개를 동체에 고정합니다. 이렇게 하면 날개를 쉽게 탈착할 수 있고 추락 시 고무줄이 날개에 가해지는 충격을 크게 줄여줍니다. 동시에 조립은 충분히 튼튼합니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

다음으로 랜딩 기어를 만들겠습니다. 다시 알루미늄 프로파일과 스티로폼으로 만든 바퀴들을 사용하겠습니다. 바퀴들은 앞서 보여준 대로 CNC 머신으로 만들었습니다. 알루미늄 프로파일에 작은 그루브들을 만들어 쉽게 구부릴 수 있게 했습니다. 랜딩 기어는 실제 이렇게 보여야 합니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

바퀴를 프로파일에 고정하기 위해 M5 볼트와 안지름 6mm 알루미늄 튜브를 사용합니다. 튜브는 M5 볼트와 너트로 브라켓에 고정되고, 양쪽에 M5 와셔들을 추가해 바퀴가 튜브 주위로 자유롭게 회전할 수 있게 했습니다. 같은 방법으로 비행기 뒷쪽 바퀴도 만들었습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

자, 이제 모든 구성품이 준비됐고 전자 부품을 보기 전에 조립을 마무리해보겠습니다.

아두이노 RC 비행기 전자 부품 – 회로도

앞서 말했듯 이 RC 비행기는 송신기와 수신기 모두 아두이노 프로 미니 보드 기반 커스텀 빌드로 완전히 아두이노 기반입니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

송신기와 수신기 제작 및 작동 원리에 대한 자세한 튜토리얼이 이미 있으니 더 자세한 내용은 그걸 참고하세요. 여기서는 이 아두이노 RC 비행기의 회로도와 작동 원리, 모든 연결 방법을 설명하겠습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

이 프로젝트에 필요한 구성품은 아래 링크에서 구할 수 있습니다:

무선 통신은 NRF24L01 모듈들 기반입니다. 좀 복잡해 보일 수 있지만 이 DIY 아두이노 송신기는 사실 꽤 단순합니다. 조이스틱들, 포텐셔미터들, 몇몇 버튼 등 여러 컨트롤러들이 있고, 이들의 데이터를 끊임없이 수신기로 보냅니다. 수신기는 NRF24L01 모듈로 이 데이터를 무선으로 수신해 서보들과 브러시리스 모터에 적절한 명령들을 출력해 비행기를 제어합니다.

아두이노로 서보들과 브러시리스 모터 제어하는 것도 꽤 단순하므로 이 전체 아두이노 RC 비행기 컨셉이 그리 어렵지 않다고 생각합니다. 이 프로젝트에 사용하는 브러시리스 모터는 1000KV 정격에 30A ESC가 필요합니다. ESC가 모터를 구동하고 Battery Eliminator Circuit 기능으로 아두이노와 서보들에 5V 전원도 공급합니다. ESC와 브러시리스 모터 전원은 3S 리포 배터리에서 옵니다.

배터리 잔량 표시용 심플 LED 기능을 하나 더 추가했습니다. 간단한 전압 분배기로 리포 배터리에서 오는 12V를 약 5V로 낮춰 아두이노 아날로그 입력으로 읽어 배터리가 11V 아래로 떨어질 때 알 수 있게 했습니다. 수신기에 아직 여유 채널들이 있어 스트로브 라이트, 플랩, 투하 메커니즘 등 더 많은 기능들을 추가할 수 있습니다.

조립 마무리

어쨌든 이제 조립을 마무리하겠습니다. 회로도 설명대로 모든 것을 연결했습니다. 채널 1은 러더, 채널 2는 엘리베이터, 채널 3과 4는 에일러론, 채널 6은 LED입니다. LED를 한쪽에, 파워 스위치를 다른 쪽에 글루로 붙였습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

여기서 랜딩 기어가 모터 홀더의 두 볼트로 비행기에 부착되는 것을 볼 수 있습니다. 간단히 말해 홀더에 모터를 끼워 위에서 넣고 앞서 보여준 대로 볼트로 고정하고 랜딩 기어도 부착했습니다. 홀더 삽입 시 고무줄들도 좀 넣어 배터리를 고정하게 했습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

배터리를 ESC에 연결한 후 모든 것을 안으로 밀어 넣었습니다. 마지막으로 연장 케이블들로 날개 에일러론들을 수신기에 쉽게 연결하고 날개를 동체에 고정했습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

앞쪽에 프로펠러를 모터에 부착하고 남은 건 비행기 CG(무게 중심) 확인뿐입니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

CG는 비행기가 잘 날지, 아예 날 수 있을지 결정하는 가장 중요한 요소일 것입니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

비행기가 처음엔 테일 헤비라 배터리를 앞으로 옮기고 무게추(볼트와 너트들)를 좀 추가해 균형을 맞췄습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

자, 이제 아두이노 기반 RC 비행기가 완성되었고 밖으로 나가 시험해볼 수 있습니다.

아두이노 RC 비행기 테스트

첫 시도(첫 비행)는 그리 좋지 않았습니다. 특히 추락 결과 보고 나니.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

제 결론은 비행기가 여전히 테일 헤비이고 모터 파워가 충분하지 않다는 느낌이었습니다. 다른 모터나 프로펠러가 없어 코를 좀 더 작게 수정하고, 모터를 더 앞쪽으로 옮겨 기류를 개선하고, 앞쪽 가장자리들도 둥글게 만들었습니다. 구조면에서는 나무 막대들과 알루미늄 프로파일들을 동체 내부 공간에 글루로 붙여 보강했습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

전자 부품 칸 바닥에 두 구멍을 뚫었는데, 하나는 앞쪽 개구부에서 들어오는 공기가 빠져나갈 구멍이고, 다른 하나는 NRF24L01 안테나를 밖으로 빼내 수신 범위를 개선하기 위함입니다.

자, 두 번째 시도. 거의 같은 일이었지만 기류나 파워가 좀 더 나아진 느낌이었습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

동체가 또 부러졌는데, 이 스티로폼이 이 목적엔 꽤 약하다는 걸 보여줍니다. 새 동체를 만들었고 이번에는 덕트 테이프로 좀 보강했습니다.

세 번째 시도. 좋아 보였지만 이륙용 지형이 사실 전혀 좋지 않았습니다. 비행기가 오른쪽으로 움직이다 도로 가장자리에 부딪혀 또 부서졌습니다.

수리하고 이번에는 덕트 테이프와 포장 테이프로 동체 거의 전체를 감쌌습니다. 이걸 훨씬 일찍 했어야 했는데, 이게 동체에 적절한 강도를 줘서 이후 여러 번 추락해도 안 부서졌습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

이제 문제는 여러 번 추락 후 가지고 있던 프로펠러 4개가 다 부서져서 이번 시도에선 글루로 붙인 프로펠러를 썼습니다. 당연히 이륙 때 프로펠러가 찢어졌습니다.

이미 부서진 프로펠러 두 개로 또 글루로 붙인 프로펠러를 만들어 시도했는데, 이땐 운이 좋아 비행기가 제대로 이륙했습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

운이 오래가진 않아 공중에서 프로펠러가 또 부서졌습니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

그럼에도 이게 제 첫 RC 비행기 비행 경험이었으니, 완전히 아두이노 기반 시스템으로 RC 비행기를 제어하는 컨셉을 입증했단 점에서 이 프로젝트를 성공적이라 볼 수 있겠습니다.

그 외에 비행에서 알 수 있는 건 송신기에서 오는 조작이 너무 거칠다는 점입니다. 조이스틱이 이 목적엔 전혀 좋지 않아 동작 범위가 작고 반응이 나쁩니다.

완전한 아두이노 기반 RC 비행기 직접 만들기 – 처음부터

이를 해결하기 위해 송신기 오른쪽 포텐셔미터로 조작 반응성을 제어하는 기능을 프로그램에 추가했습니다. 또한 왼쪽 포텐셔미터로 러더 트림하는 기능도 추가했습니다.

아두이노 RC 비행기 코드

자, 마지막으로 이 아두이노 기반 RC 비행기 아두이노 코드를 보고 프로젝트를 마무리하겠습니다. 코드는 이전 튜토리얼에서 설명한 NRF24L01 트랜시버 모듈로 서보들과 브러시리스 모터 제어하는 것과 정확히 같습니다.

이 아두이노 RC 비행기 프로젝트의 전체 코드:

/* Arduino RC Airplane == Receiver Code = by Dejan, www.HowToMechatronics.com Library: TMRh20/RF24, https://github.com/tmrh20/RF24/ */ #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> #include <Servo.h> #define led 9 RF24 radio(3, 2); // nRF24L01 (CE, CSN) const byte address[6] = "00001"; unsigned long lastReceiveTime = 0; unsigned long currentTime = 0; Servo throttle; // create servo object to control the ESC Servo rudderServo; Servo elevatorServo; Servo aileron1Servo; Servo aileron2Servo; int throttleValue, rudderValue, elevatorValue, aileron1Value, aileron2Value, travelAdjust; // Max size of this struct is 32 bytes - NRF24L01 buffer limit struct Data_Package { byte j1PotX; byte j1PotY; byte j1Button; byte j2PotX; byte j2PotY; byte j2Button; byte pot1; byte pot2; byte tSwitch1; byte tSwitch2; byte button1; byte button2; byte button3; byte button4; }; Data_Package data; //Create a variable with the above structure void setup() { Serial.begin(9600); radio.begin(); radio.openReadingPipe(0, address); radio.setAutoAck(false); radio.setDataRate(RF24_250KBPS); radio.setPALevel(RF24_PA_MAX); radio.startListening(); // Set the module as receiver resetData(); throttle.attach(10); rudderServo.attach(4); // CH1 elevatorServo.attach(5); // CH2 aileron1Servo.attach(6); // CH3 aileron2Servo.attach(7); // CH4 pinMode(led, OUTPUT); // CH6 } void loop() { // Check whether we keep receving data, or we have a connection between the two modules currentTime = millis(); if ( currentTime - lastReceiveTime > 1000 ) { // If current time is more then 1 second since we have recived the last data, that means we have lost connection resetData(); // If connection is lost, reset the data. It prevents unwanted behavior, for example if a drone jas a throttle up, if we lose connection it can keep flying away if we dont reset the function } // Check whether there is data to be received if (radio.available()) { radio.read(&data, sizeof(Data_Package)); // Read the whole data and store it into the 'data' structure lastReceiveTime = millis(); // At this moment we have received the data } // Controlling throttle - brushless motor with ESC throttleValue = constrain(data.j1PotY, 80, 255); // Joysticks stays in middle. So we only need values the upper values from 130 to 255 throttleValue = map(throttleValue, 80, 255, 1000, 2000); throttle.writeMicroseconds(throttleValue); // Adjusting the servos responsiveness travelAdjust = map(data.pot2, 0, 255, 0, 25); // Elevator control elevatorValue = map(data.j2PotY, 0, 255, (85 - travelAdjust), (35 + travelAdjust)); elevatorServo.write(elevatorValue); // Ailerons control aileron1Value = map(data.j2PotX, 0, 255, (10 + travelAdjust), (80 - travelAdjust)); aileron1Servo.write(aileron1Value); aileron2Servo.write(aileron1Value); // Rudder trimming function if (data.j1PotX > 127) { rudderValue = data.pot1 + (data.j1PotX - 127); } if (data.j1PotX < 127) { rudderValue = data.pot1 - (127 - data.j1PotX); } // Rudder control rudderValue = map(rudderValue, 0, 255, (10 + travelAdjust), (90 - travelAdjust)); rudderServo.write(rudderValue); // Monitor the battery voltage int sensorValue = analogRead(A3); float voltage = sensorValue * (5.00 / 1023.00) * 3; // Convert the reading values from 5v to suitable 12V i // If voltage is below 11V turn on the LED if (voltage < 11) { digitalWrite(led, HIGH); } else { digitalWrite(led, LOW); } } void resetData() { // Reset the values when there is no radio connection - Set initial default values data.j1PotX = 127; data.j1PotY = 80; // Motors stops // the central point of the joystick is not starting point for the throttle, its at value of 80 instead of 127 data.j2PotX = 127; data.j2PotY = 127; data.j1Button = 1; data.j2Button = 1; data.pot1 = 1; data.pot2 = 1; data.tSwitch1 = 1; data.tSwitch2 = 1; data.button1 = 1; data.button2 = 1; data.button3 = 1; data.button4 = 1; }Code language: Arduino (arduino)

설명: 코드 주요 기능들을 빠르게 설명하고, 다른 모든 세부사항은 이전 튜토리얼을 참고하세요. 송신기에서 오는 데이터를 수신한 후 조이스틱1 Y축 값으로 비행기 스로틀을 제어합니다. 송신기에서 오는 80~255 값을 브러시리스 모터 제어용 1000~2000 값으로 변환합니다.

엘리베이터 제어에는 조이스틱2 Y축 값을 사용해 85~35 값으로 변환합니다. 이 값들이 서보 모터 위치(도)를 직접 설정합니다. 바로 옆에 travelAdjust 변수가 있는데, 그 값은 오른쪽 포텐셔미터 위치에 따라 달라집니다. 조이스틱이 최대 위치로 가도 이 값을 사용해 서보 위치나 움직임을 줄입니다.

같은 원리가 에일러론과 러더 제어에도 적용됩니다. 추가로 왼쪽 포텐셔미터 데이터로 러더 중립점을 조정합니다.

마지막으로 analogRead() 함수와 수학으로 배터리 전압 표시 LED를 제어합니다.

이게 다입니다. 이 프로젝트에 대한 여러분 생각을 댓글 섹션에 들려주세요. 특히 RC 비행기 제작과 비행 경험이 있는 분들로부터요. 초보자로서 이 세계에 입문하려는 분들은 FliteTest 유튜브 채널을 확인해보라고 권하고 싶습니다. RC 세계 학습에 놀라운 자원입니다. 영상 설명에 링크를 걸겠습니다.

이 프로젝트를 즐기시고 새로운 것을 배우셨기를 바랍니다. 아래 댓글 섹션에 자유롭게 질문해주시고 제 아두이노 프로젝트 모음도 확인해보세요.


제조공정

  1. 나만의 LUMAZOID 만들기: DIY 아두이노 음악 비주얼라이저
  2. 집에서 직접 만드는 DIY 숙제 작성 머신 (펜 플로터)
  3. 아두이노 나노 RP2040으로 만드는 DIY 포토샵 컨트롤 콘솔
  4. 아두이노와 스마트폰으로 만드는 스마트 전압계 – 초간단 DIY 프로젝트
  5. 아두이노, 구글 카드보드, 블루투스로 DIY VR 스케이트보드 만들기
  6. 아두이노 나노 DIY 오실로스코프 (10Hz~50kHz, 128x64 LCD)
  7. DIY 아두이노 라디오닉스 EMR 치료 기기 제작
  8. 아두이노 나노와 SG90 서보로 만드는 DIY 2축 모션 레이싱 시뮬레이터
  9. 아두이노 메가와 블루투스로 제어하는 프로그래머블 3축 로봇 암 키트
  10. 아두이노로 만드는 휴대용 RFID 도어락 - 단계별 완벽 가이드