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

Arduino RC 비행기 | 100% DIY

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

이 튜토리얼에서는 Arduino 기반 RC 비행기를 만드는 방법과 이전 비디오 중 하나에서 만든 맞춤형 빌드 Arduino 송신기를 사용하여 제어하는 ​​방법을 보여 드리겠습니다.

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

개요

따라서 비행기는 완전히 스티로폼으로 만들어집니다. 모양을 만들기 위해 나는 이미 이전 비디오에서 어떻게 제작했는지 보여 주었던 Arduino CNC 폼 절단기를 사용했습니다. 이 Arduino RC 비행기를 만들기 위해 CNC 기계를 사용하고 있지만 CNC 기계도 DIY 빌드이기 때문에 여전히 100% DIY라고 말할 수 있습니다.

게다가 비행기 조종도 100% DIY로 아두이노와 무선통신용 NRF24L01 모듈을 기반으로 하고 있습니다.

송신기의 오른쪽 조이스틱을 사용하여 비행기의 에일러론과 엘리베이터를 제어할 수 있고 왼쪽 조이스틱을 사용하여 방향타와 스로틀을 제어할 수 있습니다.

그 외에도 오른쪽 전위차계를 사용하여 제어 응답성을 조정하거나 서보 이동량을 줄일 수 있으며 왼쪽 조이스틱을 사용하여 방향타를 하위 트리밍하거나 서보 암의 중립 위치를 조정할 수 있습니다.

아, 그리고 이 아두이노 RC 비행기의 주요 특징은 날아간다는 말을 거의 잊어버렸습니다. 네, 날아갈 수 있습니다.

RC 비행기 설계 – 3D 모델

저는 3D 모델링 소프트웨어인 Fusion 360을 사용하여 비행기를 디자인하는 것으로 시작했습니다. 저는 상업용 RC 비행기를 보고 모델 비행기 매개변수에 대한 몇 가지 기본 지침이나 경험 법칙에 따라 디자인을 만들었습니다.

출발점은 날개 폭이고 저는 80cm를 선택했습니다. 거기에서 우리는 일반적으로 날개 폭의 75%인 동체 길이를 얻습니다. 에어포일 또는 날개 단면의 경우 RC 비행기에 널리 사용되는 CLARK Y 에어포일을 선택했습니다.

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

수평 및 수직 안정판도 이러한 기본 지침에 따라 크기가 지정됩니다. 다음은 기본적인 RC 모델 비행기 설계 매개변수입니다.

비행기의 동체는 두 개의 10mm 측면과 50mm 코어로 만들어지며 전자 장치를 수용하기 위해 속이 비어 있습니다.

위의 링크에서 3D 모델을 다운로드할 수 있습니다. 비행기에는 두 가지 버전이 있습니다. 버전 1은 여기 이미지에 표시된 버전이고 버전 2는 노즈가 조금 더 작으며 공기 흐름을 개선하기 위해 모터를 앞쪽에 더 배치할 수 있습니다.

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

이제 내 Arduino CNC Foam Cutting Machine 작업 영역은 45cm로 제한되고 동체의 길이는 60cm이므로 동체를 두 부분으로 만들어야 했습니다.

그래서 동체를 정면에서 34cm 잘라서 모양을 투영하고 그 근처에 점을 추가하는 스케치를 새로 만들었습니다. 다음으로 Fusion 360의 제조 탭에서 모양을 자르기 위한 G 코드를 생성할 수 있습니다.

여기서 먼저 스케치를 모델로 선택하고 이전에 추가한 점을 설정의 원점으로 선택하고 X 및 Y 축을 적절하게 조정하는 새 설정을 만들었습니다.

그런 다음 2D 윤곽 작업을 선택하고 직경 3mm의 새 도구를 선택하거나 생성했습니다. 스티로폼을 통과할 때 열선이 만드는 대략적인 절단 크기이기 때문입니다. 여기에서 열선 자체와 스티로폼의 경도에 따라 절단 이송 속도를 설정할 수도 있습니다. 150mm/m로 설정했습니다.

그런 다음 형상 탭에서 절단해야 하는 윤곽이나 모양을 선택할 수 있습니다. 높이에 관해서는 폼 커터 기계에서 Z 축 움직임이 없기 때문에 모두 1mm로 설정했습니다. 마지막으로 Linking 탭에서 진입 위치를 원점 근처에 위치한 가장자리로 선택했습니다.

이를 통해 도구 경로가 생성되고 시뮬레이션 버튼을 클릭하여 볼 수 있습니다. 도구 경로는 폐쇄 루프 단일 패스여야 하며, 그렇다면 최종적으로 G 코드를 생성할 수 있습니다. 이를 위해 Post Processes로 이동하여 GRBL 펌웨어를 선택하고 출력 폴더를 선택하고 파일 이름을 지정하고 게시 버튼을 클릭합니다.

그런 다음 파일을 저장할 수 있으며 워드패드 편집기 또는 이와 유사한 것에서 G 코드를 볼 수 있습니다.

이제 G 코드 파일이 있으면 범용 G 코드 전송기에 로드하고 G 코드를 CNC 기계로 보내 모양을 만들 수 있습니다.

방금 보여드린 프로세스가 아마도 최고의 프로세스가 아니거나 전혀 전문적이지 않을 수 있지만 여전히 내 DIY CNC 폼 커팅 머신과 함께 작동하도록 G 코드를 가져오는 작업을 수행합니다. 물론, 이 DIY CNC 기계에 대한 자세한 내용은 내 특정 자습서에서 확인할 수 있습니다. 링크는 비디오 설명에 있습니다.

여기에서 G 코드 파일을 다운로드할 수 있습니다.

말했듯이 옆면은 1cm 간격의 스티로폼을 사용했고 가운데는 5cm 간격의 스티로폼을 사용했습니다.

날개는 10cm 눈금의 스티로폼을 사용했는데 열선 기계가 자를 수 있는 최대 스팬이기 때문에 30cm 정도 너비로 자릅니다. 하나의 G 코드 파일에 두 개의 날개 프로필을 배치하고 그 중 몇 개를 잘라냈습니다.

80cm 날개 길이를 얻기 위해 27cm 조각 3개를 붙이고, 직선을 만들기 위해 조각의 끝을 손으로 잘라 수직이 되도록 합니다.

RC 비행기 조립

여기 CNC 기계로 자른 모든 스티로폼 조각이 있습니다. 앞면 3개, 뒷면 3개, 날개 3개. 이제 조립을 시작할 수 있습니다.

앞부분부터 시작하겠습니다. 나는 조각을 함께 붙일 때 글루건을 사용하고 있습니다. 뜨거운 글루가 스티로폼을 조금 녹였지만 그래도 이 방법으로 붙일 수 있었습니다.

스티로폼을 접착하는 또 다른 좋은 방법은 5분 에폭시를 사용하는 것입니다. 다른 쪽을 붙이기 전에 모터용 홀더를 만들어 보겠습니다. 이를 위해 상당히 가벼운 30mm 너비의 알루미늄 프로파일을 사용하고 있습니다. 프로파일을 약 18cm로 자르고 모터 장착용 구멍을 표시하고 3mm 드릴 비트를 사용하여 구멍을 뚫습니다. 그런 다음 프로파일을 90도로 구부렸습니다. M3 볼트 몇 개를 사용하여 모터를 홀더에 고정했습니다.

이 어셈블리를 사용하여 스티로폼의 앞부분에 구멍을 만들었습니다. 그런 다음 만능칼을 사용하여 모터 직경과 동일한 직경 30mm로 구멍을 확대했습니다.

다음으로, 모터 홀더의 다른쪽에 홀더를 제자리에 고정하고 랜딩 기어를 부착하는 역할을 할 4개의 구멍을 만들었습니다. 나는 동체에 이 구멍의 위치를 ​​표시하고 4mm 드릴 비트를 사용하여 스티로폼에 수동으로 구멍을 만들었습니다. 같은 구멍으로 약 7cm 길이의 다른 알루미늄 조각을 만들었고 이제 모터 홀더를 고정하는 데 사용할 수 있습니다.

M4 볼트를 사용하면 스티로폼을 손상시키지 않고 모터 홀더를 제자리에 쉽게 고정할 수 있습니다. 그러나 나중에 할 것이므로 제거하고 다른 쪽을 계속 붙였습니다. 같은 방법으로 뒷부분도 붙였습니다.

다음 단계는 결합 또는 동체의 앞부분과 뒷부분을 연결하는 것입니다. 연결을 더 강하게 만들기 위해 그 사이에 간단한 바베큐 스틱을 추가합니다.

비행기가 추락할 때 쉽게 부러질 수 있기 때문에 더 큰 막대기를 사용하는 것이 좋습니다. 나는 연결 부위에 적당한 양의 뜨거운 접착제를 추가하고 함께 압착했습니다. 자, 이제 동체가 준비되었고 꽤 멋진 것 같습니다.

다음으로 만능 칼을 사용하여 수평 및 수직 안정판이 될 10mm 스틱 스티로폼 두 조각을 자릅니다. 모서리를 비스듬하게 하여 더 보기 좋게 하고 공기역학적으로도 조금 더 좋게 했습니다. 스태빌라이저는 동체 뒷면에 직접 접착되지만 그 전에 먼저 컨트롤러 표면을 만듭니다.

이를 위해 길이의 약 1/3을 자르고 수평 안정 장치의 경우 제어 표면 또는 엘리베이터, 수직 안정 장치의 방향타가 될 것입니다. 스태빌라이저에 컨트롤 표면을 힌지할 수 있으려면 접촉 표면을 경사지게 해야 했습니다. 다시 말하지만, 나는 다용도 칼을 사용하여 그 작업을 했으며, 실제로 이 칼날을 깨끗하게 하려면 꽤 날카로운 칼이 필요합니다.

나는 계속해서 스태빌라이저를 좀 더 공기역학적으로 만들었습니다. 이를 위해 사포를 사용하고 앞 가장자리를 둥글게 만들었습니다. 또한 후행 가장자리를 약간 샌딩했습니다.

이제 스티로폼은 매우 약하기 때문에 안정판 전체와 제어 표면을 간단한 포장 테이프로 감쌀 것입니다. 이렇게 하면 테이프가 스티로폼 자체보다 훨씬 부드럽기 때문에 부품이 더 강해질 뿐만 아니라 공기역학도 증가합니다.

감싼 후 승강기가 자유롭게 움직일 수 있는 공간을 만들기 위해 러더 바닥 부분을 45도로 절단했습니다.

이제 마침내 경첩을 만들 수 있고 다시 포장 테이프를 사용하여 하고 있습니다. 그래서 그냥 테이프로 두 부분을 연결했는데 아주 튼튼한 힌지가 만들어졌습니다.

수평 안정 장치에 대해서도 이 과정을 반복했습니다. 경첩을 더 강하게 만들기 위해 반대쪽에 테이프를 추가할 수도 있습니다. 같은 테이프를 사용하여 측면을 감싸고 두 개의 고정 장치가 완성되었습니다.

나는 뜨거운 접착제를 사용하여 수평 안정판을 동체에 붙이기로 했습니다. 수직 안정판을 고정하기 위해 먼저 수평 안정판과 동체를 통해 3개의 바베큐 스틱을 삽입하여 접착했습니다. 그런 다음 접착면과 접촉면에 뜨거운 접착제를 바르고 안정 장치를 단단히 아래로 누릅니다.

이것으로 우리는 안정 장치를 끝냈고 날개 만들기를 계속할 수 있습니다.

그래서 이미 말했듯이 날개는 DIY CNC 폼 절단기의 작업 영역이 제한되어 있기 때문에 3개의 조각으로 만들어집니다. 다시 말하지만, 나는 조각을 붙일 때 추가 강도를 제공하기 위해 바베큐 스틱을 사용하고 있습니다. 일렬로 정확하게 부착하기 위해 조각을 밀어 넣을 수 있는 직선형 나무 스트립을 사용하고 있습니다.

일단 그것으로 끝나면 날개는 길고 주석이기 때문에 실제로 매우 취약합니다. 따라서 나무 막대기를 추가하여 보강하겠습니다. 나는 막대기를 크기에 맞게 자르고 막대기를 넣을 수 있도록 주머니를 만들어야 할 날개를 표시했습니다. 만능칼을 이용하여 천천히 조심스럽게 주머니를 만들었습니다. 나는 그것에 뜨거운 접착제를 추가하고 날개 모양을 너무 많이 방해하지 않고 제자리에 고정했습니다.

이제 날개는 나무 막대기를 제자리에 고정하면 훨씬 더 강해집니다. 비록 더 강하지만 땅에 떨어지면 쉽게 부서지므로 안정제와 마찬가지로 포장 테이프로 모두 감쌀 것입니다. 나는 날개의 뒤쪽이나 뒤쪽 가장자리에서 앞쪽이나 앞쪽 가장자리까지 테이프를 추가하기 시작했습니다.

이런 식으로 전면에서 들어오는 공기가 테이프를 떼어내는 경향이 없습니다. 이 과정은 매우 쉬워 보이지만 꾸준한 손과 충분한 인내심이 없으면 다소 성가실 수 있습니다. 날개가 딱 적당하게 나온 것 같아요. 이제 훨씬 더 강력하고 공기역학적이며 보기에도 좋습니다.

좋습니다. 다음 단계는 날개 또는 에일러론의 제어 표면을 만드는 것입니다. 너비는 22cm, 길이는 날개 현의 약 1/4로 만들 것입니다. 자유롭게 움직일 수 있도록 반센티미터 정도 잘라냈습니다.

그리고 물론 컷팅으로 노출된 모든 모서리를 감쌌습니다. 다음으로 에일러론의 하단 부분을 45도 경사지게 했고, 앞서 보여드린 것과 같은 방법으로 날개에 경첩을 걸 수 있습니다. 동체에 맞고 날개를 동체에 쉽게 부착할 수 있도록 날개 중앙에 홈을 하나 더 만들어야 했습니다.

다음으로 에일러론을 제어하기 위한 서보 모터를 설치할 차례입니다. 9g 마이크로 서보를 사용하고 있습니다. 나는 그들이 놓을 위치를 표시하고 만능 칼을 사용하여 서보가 맞을 수 있도록 날개에 조심스럽게 구멍을 만들었습니다. 그 사이에 서보 장착 브래킷을 제거하여 모양을 더 간단하게 만들었습니다. 서보에 접착제를 바르고 구멍에 삽입했습니다.

만능칼을 사용하여 서보에서 날개 중앙까지 작은 홈을 만들어 서보 배선이 들어갈 수 있도록 했습니다. 마지막으로 테이프로 모든 것을 덮었습니다. 반대쪽도 같은 과정을 반복했습니다.

계속해서 컨트롤 혼을 만들었습니다. 이전에 모터 홀더를 만들 때 사용한 알루미늄 프로파일로 만들 것입니다. 서보 모터의 혼 높이에 거의 맞도록 모양을 손으로 그리고 힌지 지점에 걸도록 그립니다. 쇠톱으로 모양을 잘라요.

2mm 강선을 제어봉으로 사용할 것이므로 2.5mm 드릴을 사용하여 혼에 구멍을 만들었습니다. 나는 에일러론에 작은 홈을 만들고 제자리에 혼을 붙였습니다. 그런 다음 컨트롤 로드의 길이를 측정하고 펜치를 사용하여 2mm 강철 와이어로 만들었습니다. 제어봉을 측정하고 삽입할 때 서보 모터가 중립 위치에 있어야 한다는 점에 유의해야 합니다.

수동으로 동작 범위 중간에 배치하거나 서보 테스터에 연결하거나 Arduino를 사용하여 수행할 수 있습니다. 다른 쪽에도 이 과정을 반복했는데 이제 날개가 완전히 완성되었습니다.

다음으로 방향타와 엘리베이터를 제어하기 위한 서보를 설치해야 합니다. 여기에서도 동일한 9g 마이크로 서보를 사용하고 있으며 설치 과정은 방금 설명한 것과 거의 동일합니다. 먼저 위치를 표시하고 다용도 칼을 사용하여 구멍을 만들고 두 개의 모터를 제자리에 붙였습니다. 여기에서는 서로 옆에 있지만 출력 샤프트가 반대쪽에 있습니다.

전자 부품에 서보 배선을 하기 위해 다시 동체에 작은 홈을 만들었습니다. 나는 테이프 조각으로 서보를 덮고 서보 혼을 위한 구멍을 만들었습니다. 앞에서 설명한 것과 같은 방식으로 컨트롤 뿔을 만들고 글루건을 사용하여 제자리에 붙였습니다. 마지막으로 적절한 컨트롤 로드를 만들어 그에 맞게 설치했습니다.

자, 다음으로 날개를 동체에 고정하는 역할을 할 2개의 8mm 나무 막대를 설치하겠습니다. 6mm 드릴 비트를 사용하여 수동으로 구멍을 만들었습니다. 막대는 양쪽에서 약 1cm 이상 매달려 있어야 합니다. 또한 핫 글루로 동체에 고정했으며 실제로 작동하는 방법은 다음과 같습니다.

날개를 동체에 고정하기 위해 고무 밴드를 사용합니다. 이렇게 하면 날개를 쉽게 제거할 수 있으며 고무 밴드가 부서지는 경우 날개에 가해지는 충격을 크게 줄일 수 있습니다. 동시에 어셈블리는 충분히 강력합니다.

다음으로 랜딩기어를 만들어 보겠습니다. 이를 위해 다시 알루미늄 프로파일과 스티로폼으로 만든 바퀴를 사용하겠습니다. 앞에서 본 것처럼 CNC 기계를 사용하여 만들었습니다. 쉽게 구부릴 수 있도록 알루미늄 프로파일에 작은 홈을 만들었습니다. 랜딩 기어의 실제 모습은 다음과 같습니다.

프로파일에 바퀴를 부착하기 위해 M5 볼트와 내경 6mm의 알루미늄 튜브를 사용합니다. 튜브는 브라켓에 M5볼트와 너트로 고정하고 측면에는 M5와셔를 추가하여 휠이 튜브를 중심으로 자유롭게 회전할 수 있도록 했습니다. 같은 방법으로 비행기 뒷면의 바퀴를 만들었습니다.

자, 이제 모든 구성 요소가 준비되었으며 조립하기 전에 이 프로젝트의 전자 장치를 살펴보겠습니다.

Arduino RC 비행기 전자 제품 – 회로도

그래서 이미 말했듯이 이 RC 비행기는 전적으로 Arduino를 기반으로 하며 송신기와 수신기 모두 Arduino Pro Mini 보드를 기반으로 한 맞춤형 빌드입니다.

나는 이미 구축 방법과 송신기와 수신기가 작동하는 방법에 대한 자세한 자습서를 가지고 있으므로 자세한 내용을 확인할 수 있습니다. 여기에서는 이 Arduino RC 비행기의 회로도와 작동 원리, 그리고 모든 것이 어떻게 연결되어야 하는지 설명하겠습니다.

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

따라서 무선 통신은 NRF24L01 모듈을 기반으로 합니다. 다소 복잡해 보일 수 있지만 이 DIY Arduino 송신기는 실제로 매우 간단합니다. 여러 컨트롤러, 조이스틱, 전위차계 및 일부 버튼이 있으며 지속적으로 데이터를 수신기로 보냅니다. 수신기는 NRF24L01 모듈을 통해 무선으로 이 데이터를 수신하고 비행기를 제어하기 위한 서보와 브러시리스 모터에 적절한 명령을 출력합니다.

Arduino로 서보와 브러시리스 모터를 제어하는 ​​것도 매우 간단하므로 이 전체 Arduino RC 비행기 개념은 이해하기 어렵지 않다고 생각합니다. 이 프로젝트에서 사용하는 브러시리스 모터의 정격은 1000KV이며 30A ESC가 필요합니다. ESC는 모터를 구동하고 5V를 출력하는 배터리 제거 회로 기능을 통해 Arduino와 서보에 전원을 공급합니다. 그리고 ESC와 브러시리스 모터의 전원은 3S Li-Po 배터리에서 나옵니다.

이 비행기에 기능을 하나 더 추가했는데 배터리가 비어 있는지 여부를 나타내는 간단한 LED입니다. 간단한 전압 분배기를 사용하여 Li-Po 배터리에서 나오는 12V를 약 5V로 떨어뜨려 Arduino 아날로그 입력으로 읽을 수 있고 배터리가 11V 아래로 떨어질 때를 알 수 있습니다. 수신기에는 여전히 여러 개의 무료 채널이 있으므로 원하는 경우 이 비행기에 스트로브 라이트, 플랩, 낙하 장치 등과 같은 기능을 더 추가할 수 있습니다.

조립 완료

그래도 이제 조립을 마치도록 하겠습니다. 그래서 회로도에 설명된 대로 모든 것을 연결했습니다. 채널 1은 방향타, 채널 2는 엘리베이터, 채널 3과 4는 에일러론, 채널 6은 LED입니다. 한쪽에는 LED를, 반대쪽에는 전원 스위치를 붙였습니다.

여기에서 모터 홀더에 있는 두 개의 볼트를 사용하여 랜딩 기어를 비행기에 부착하는 방법을 확인할 수 있습니다. 간단히 말해서, 이 상단 구멍에서 홀더가 있는 모터를 간단히 삽입하고 앞에서 설명한 것처럼 볼트로 제자리에 고정하고 랜딩 기어도 부착했습니다. 홀더를 삽입할 때 배터리를 제자리에 고정할 수 있도록 고무 밴드도 추가했습니다.

그래서 일단 배터리를 ESC에 연결한 후 모든 것을 쑤셔 넣었습니다. 마지막으로 연장 케이블을 사용하여 날개 에일러론을 수신기에 쉽게 연결한 다음 날개를 동체에 고정할 수 있습니다.

전면에는 프로펠러를 모터에 부착하고 이제 남은 것은 비행기의 CG나 무게중심을 확인하는 일입니다.

CG는 아마도 비행기가 잘 날 것인지, 아니면 아예 날지 않을 것인지를 결정하는 가장 중요한 요소일 것입니다.

비행기는 처음에 꼬리가 무거워서 배터리를 앞쪽으로 옮기고 약간의 무게(볼트와 너트)를 추가했더니 균형이 잡혔습니다.

이제 아두이노 기반 RC 비행기가 완성되었으며 밖으로 나가서 사용해 볼 수 있습니다.

Arduino RC 비행기 테스트

글쎄, 첫 번째 시도 또는 처녀 비행은 그렇게 멋지지 않았습니다. 특히 짝사랑 결과를 보니.

여기서 내 결론은 비행기가 여전히 꼬리가 무거우며 모터에 충분한 힘이 없는 것처럼 느껴진다는 것입니다. 시도할 다른 모터나 프로펠러가 없었기 때문에 비행기의 기수를 조금 더 작게 수정하고 모터를 앞쪽으로 더 이동하여 공기 흐름이 더 좋고 앞쪽 모서리도 둥글게 만들었습니다. 구조에 관해서는 동체 내부에 접착제로 붙인 나무 막대와 알루미늄 프로파일로 보강했습니다.

전자 제품 구획의 바닥에 두 개의 구멍을 만들었습니다. 하나는 전면 개구부에서 나오는 공기가 빠져나가도록 하고 다른 하나는 배터리 범위를 확보하기 위해 NRF24L01 안테나를 외부로 가져오기 위한 것입니다.

자, 여기 두 번째 시도가 있습니다. 다시 말하지만, 지금은 공기 흐름이나 전력이 더 좋아진 것처럼 느껴졌지만 거의 동일했습니다.

동체가 다시 부러졌는데, 이는 이 스티로폼이 이 목적에 매우 약하다는 것을 알려줍니다. 새 동체를 만들었는데 이번에는 보강을 위해 덕트 테이프를 조금 사용했습니다.

3번을 시도해 보세요. 유망해 보였지만 이륙할 지형은 실제로 전혀 좋지 않습니다. 비행기는 오른쪽으로 움직이기 시작했고 도로 가장자리에 부딪쳤다가 다시 부서졌습니다.

수리하고 이번에는 거의 동체 전체를 덕트와 패킹테이프로 감쌌습니다. 동체에 적절한 강도를 제공하고 몇 번 더 부숴도 부러지지 않았기 때문에 훨씬 더 일찍 했어야 했습니다.

이제 문제는 여러 번 으스러진 후에 내가 가지고 있던 4개의 프로펠러를 모두 부러뜨렸기 때문에 이 시도에서는 접착된 프로펠러를 사용하고 있다는 것입니다. 물론 이륙할 때 프로펠러가 찢어졌습니다.

이미 부러진 두 개의 프로펠러로 만든 다른 프로펠러를 접착해 보았는데 이번에는 정말 운이 좋았고 마침내 비행기가 제대로 이륙했습니다.

프로펠러가 공중에서 다시 부러지는 바람에 운은 오래가지 못했습니다.

그럼에도 불구하고 이것이 RC 비행기를 조종하는 첫 경험이었기 때문에 RC 비행기를 제어하기 위한 완전히 Arduino 기반 시스템을 만드는 개념을 증명할 수 있었기 때문에 이 프로젝트를 성공적으로 간주할 수 있을 것 같습니다.

그 외에는 비행에서 송신기에서 오는 제어가 실제로 너무 가혹하다는 것을 알 수 있습니다. 조이스틱이 이런 용도로는 전혀 좋지 않고 이동 범위가 작고 반응이 좋지 않기 때문입니다.

이를 해결하기 위해 트랜스미터의 올바른 전위차계를 사용하여 컨트롤의 응답성을 제어할 수 있는 기능을 프로그램에 추가했습니다. 그리고 왼쪽 포텐셔미터를 이용하여 방향타를 다듬는 기능을 추가했습니다.

Arduino RC 비행기 코드

마지막으로 이 Arduino 기반 RC 비행기의 Arduino 코드를 살펴보고 이 프로젝트를 마무리하겠습니다. 코드는 NRF24L01 트랜시버 모듈을 사용하여 서보 및 브러시리스 모터를 제어하기 위해 이전 자습서에서 설명한 것과 정확히 동일합니다.

이 Arduino 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)

설명: I will just quickly explain the main functions of the code and for all other details you can check the previous tutorial. So, after receiving the data coming from the transmitter, we use the Joystick1 Y axis value for controlling the throttle of the airplane. We convert the values from 80 to 255 coming from the transmitter into values from 1000 to 2000 which are used for controlling the brushless motor.

For controlling the elevator, we use the Joystick2 Y axis value which we convert to values from 85 to 35. These values directly set the position of the servo motor in degrees. Right next to them we can note that we have the travelAdjust variables, which value depends on the position of the right potentiometer. We actually use that value to decrease the position or the movement of the servos although the joysticks will go to their maximum position.

The same principle is applied for controlling the ailerons and the rudder.  Additionally, we use the data from the left potentiometer to adjust the neutral point of the rudder.

Lastly, using the analogRead() function and some math we control the battery voltage indicator LED.

So that’s it. I would like to hear your thoughts about this project in the comments section below, especially from you who have experience with building and flying RC airplanes. For those who are beginners and thinking of getting into this, I would suggest to check the FliteTest YouTube channel because it’s an amazing resource for learning about this RC world. I will put a link to it in the description.

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


제조공정

  1. DIY LUMAZOID Arduino 뮤직 비주얼라이저
  2. 집에서 DIY 숙제 작성 기계 만들기
  3. Arduino Nano RP 2040을 사용하는 DIY Photoshop 편집 콘솔
  4. Arduino와 스마트폰을 사용한 DIY 전압계
  5. DIY 가상 현실 스케이트보드
  6. 128x64 LCD 디스플레이의 DIY 10Hz-50kHz 오실로스코프
  7. DIY Arduino RADIONICS 치료 기계
  8. DIY 2D 모션 레이싱 시뮬레이터
  9. 로컬 및 원격 프로그래밍 가능 로봇 팔
  10. RFID를 사용한 DIY 아이디어