工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

ArduinoRC飛行機| 100%DIY

このチュートリアルでは、ArduinoベースのRC飛行機を構築する方法を示します。また、以前のビデオの1つで構築したカスタムビルドのArduino送信機を使用してそれを制御する方法も示します。

次のビデオを見るか、以下のチュートリアルを読むことができます。

概要

したがって、飛行機は完全に発泡スチロールで作られています。形状を作成するために、前のビデオでどのように作成したかをすでに示したArduinoCNCフォーム切断機を使用しました。このArduinoRC飛行機の製造にはCNCマシンを使用していますが、CNCマシンもDIYビルドであるため、100%DIYであると言えます。

さらに、飛行機の制御も100%DIYであり、Arduinoと無線通信用のNRF24L01モジュールに基づいています。

送信機の右のジョイスティックを使用して、エルロンと飛行機のエレベーターを制御でき、左のジョイスティックを使用して、ラダーとスロットルを制御できます。

それに加えて、右のポテンショメータを使用して、コントロールの応答性を調整したり、サーボの移動量を減らしたり、左のジョイスティックを使用して、ラダーをサブトリムしたり、サーボアームの中立位置を調整したりできます。

ああ、そして私はほとんど言及を忘れました、このArduino RC飛行機の主な特徴は飛んでいるので、ええ、それは飛ぶことができます。

RC飛行機の設計–3Dモデル

私は、3Dモデリングソフトウェア(この場合はFusion 360)を使用して飛行機を設計することから始めました。私はいくつかの商用RC飛行機を見て、模型飛行機のパラメーターに関するいくつかの基本的なガイドラインまたは経験則に従って設計を行いました。

出発点は翼幅で、80cmを選びました。そこから胴体の長さを取得します。これは通常、翼幅の75%です。翼型、つまり翼の断面については、RC飛行機で人気のあるCLARKYエアフォイルを選びました。

翼の形状をairfoiltools.comから.SVGファイルとしてダウンロードし、Fusion 360にインポートしました。翼の弦、つまり翼の流れ方向の長さが約1/5になるように、サイズを適切に調整しました。翼幅の。

水平尾翼と垂直尾翼も、これらの基本的なガイドラインに従ってサイズ設定されています。これらの基本的なRCモデル飛行機の設計パラメータのいくつかを次に示します。

飛行機の胴体は、2つの10mmの側面と50mmのコアで構成され、電子機器を収容するために中空になります。

上記のリンクから3Dモデルをダウンロードできます。飛行機には2つのバージョンがあります。バージョン1はここに画像で示されているものであり、バージョン2は少し小さいノーズを持ち、空気の流れを改善するためにモーターをより前方に配置することができます。

DIYCNCフォームカッターのGコードを生成する

現在、Arduino CNCフォームカッティングマシンの作業領域は45cmに制限されており、胴体の長さは60cmであるため、胴体を2つの部分で作成する必要がありました。

そこで、胴体を前点から34cmでカットし、形状を投影してその近くに点を追加した新しいスケッチを作成しました。次に、Fusion 360の[製造]タブで、形状をカットするためのGコードを生成できます。

ここでは、最初にスケッチをモデルとして選択し、前に追加した点をセットアップの原点として選択し、X軸とY軸を適切に調整する新しいセットアップを作成しました。

次に、2D輪郭操作を選択し、直径3mmの新しいツールを選択または生成しました。これは、発泡スチロールを通過するときに熱線が作成するカットのおおよそのサイズだからです。ここでは、熱線自体と発泡スチロールの硬度に応じて、切削送り速度を設定することもできます。 150mm/mに設定しました。

次に、ジオメトリタップで、カットする必要のある輪郭または形状を選択できます。フォームカッターマシンにはZ軸の動きがないため、高さはすべて1mmに設定しました。最後に、[リンク]タップで、原点の近くにあるエッジとなるエントリ位置を選択しました。

これにより、ツールパスが生成され、[シミュレーション]ボタンをクリックして確認できます。ツールパスは閉ループのシングルパスである必要があります。その場合は、最終的にGコードを生成できます。そのためには、後処理に移動し、GRBLファームウェアを選択し、出力フォルダーを選択し、ファイルに名前を付けて、投稿ボタンをクリックします。

次に、ファイルを保存すると、ワードパッドエディタなどでGコードを確認できます。

これで、Gコードファイルを取得したら、それをユニバーサルGコードセンダーにロードし、GコードをCNCマシンに送信して形状を作成できます。

私が今お見せしたプロセスは、おそらく最高のプロセスではないか、まったく専門的ではありませんが、それでも、Gコードを私のDIYCNCフォームカッティングマシンで機能させるための仕事をしています。もちろん、このDIY CNCマシンの詳細については、私の特定のチュートリアルを確認できます。リンクはビデオの説明にあります。

ここからGコードファイルをダウンロードできます:

私が言ったように、私は側面に1cmのダニの発泡スチロールを使用し、中央に5cmのダニの発泡スチロールを使用しました。

翼は10cmティックの発泡スチロールを使用しましたが、これは私の熱線機が切断できる最大スパンであるため、幅約30cmで切断しました。 2つの翼プロファイルを1つのGコードファイルに配置し、そのうちの2つをカットしました。

翼幅80cmにするために、27cmを3枚接着し、まっすぐにするために、手作業で端を切り取って垂直にします。

RC飛行機の組み立て

これがCNCマシンでカットした発泡スチロールのピースです。フロントに3個、バックに3個、ウィングに3個。これで組み立てを開始できます。

フロント部分から始めます。ピースを接着するためにグルーガンを使用しています。ホットグルーは発泡スチロールを少し溶かしていましたが、それでもこの方法で接着することができました。

発泡スチロールを接着するもう1つの良い方法は、5分間のエポキシを使用することです。反対側を接着する前に、モーターのホルダーを作ります。そのために、かなり軽量な30mm幅のアルミプロファイルを使用しています。プロファイルを約18cmにカットし、モーターを取り付けるための穴に印を付け、3mmのドリルビットを使用してドリルで穴を開けました。次に、プロファイルを90度に曲げました。 M3ボルトを使ってモーターをホルダーに固定しました。

このアセンブリを使用して、発泡スチロールの前部に穴を開けました。次に、カッターナイフを使用して、モーターの直径と同じ直径30mmの穴に拡大しました。

次に、モーターホルダーの反対側に、ホルダーを所定の位置に固定し、着陸装置を取り付けるための4つの穴を開けました。胴体にこれらの穴の位置をマークし、4mmのドリルビットを使用して、発泡スチロールに手動で穴を開けました。同じ穴で長さ約7cmの別のアルミ片を作り、モーターホルダーの固定に使用できるようになりました。

M4ボルトを使用すると、発泡スチロールを損傷することなく、モーターホルダーを簡単に所定の位置に固定できます。ただし、後でそれを行うので、それらを削除して、反対側を接着し続けました。同じ方法で、後ろの部分も接着しました。

次のステップは結婚、または胴体の前部と後部を接続することです。つながりを強くするために、間にシンプルなバーベキュースティックを追加します。

飛行機が墜落するとここで簡単に壊れてしまうかもしれないので、もっと大きな棒を使うことをお勧めします。接続サイトに適度な量のホットグルーを追加し、それらを一緒に絞りました。これで、胴体の準備が整いました。かなりかっこいいと思います。

次に、万能ナイフを使用して、水平尾翼と垂直尾翼になる10mmのスティック発泡スチロールを2つ切断します。エッジを面取りして見栄えを良くし、空力性能も少し高めました。スタビライザーは胴体の裏側に直接接着されますが、その前に、まずコントローラーの表面を作成します。

そのために、長さの約3分の1をカットしました。これが、水平尾翼の操縦翼面またはエレベーター、垂直尾翼の舵になります。スタビライザーの操縦翼面をヒンジで固定できるようにするには、接触面を斜角にする必要がありました。繰り返しになりますが、私は万能ナイフを使用してそれを行いました。実際、これらのカットをきれいにするには、かなり鋭いナイフが必要です。

スタビライザーをもう少し空力的にし続けました。そのために、サンドペーパーを使用して、前縁を丸くしました。後縁も少し研磨しました。

発泡スチロールは非常に壊れやすいので、スタビライザーとその操縦翼面の全領域を簡単な梱包テープで包みます。これにより、パーツが強化されるだけでなく、テープが発泡スチロール自体よりもはるかに滑らかになるため、空力が向上します。

包んだ後、エレベーターが自由に動くスペースを作るために、舵の底部を45度にカットしました。

ついに、蝶番を作ることができました。梱包テープを使ってそれをやり直しています。それで、2つのパーツをテープで接続しただけで、非常に強力なヒンジになります。

水平尾翼についてもこのプロセスを繰り返しました。ヒンジをさらに強くするために、反対側にテープを追加することもできます。同じテープを使用して、側面を包み、それで2つのスタビライザーが完成しました。

ホットグルーを使用して水平尾翼を胴体に接着しました。垂直尾翼を固定するために、最初に水平尾翼と胴体に3本のバーベキュースティックを挿入して接着しました。次に、それらと接触面にホットグルーを塗り、スタビライザーをしっかりと押し下げました。

これでスタビライザーが完成し、翼の作成に進むことができます。

ですから、すでに述べたように、私のDIY CNCフォーム切断機の作業領域が限られているため、翼は3つの部品で構成されます。繰り返しになりますが、私はバーベキュースティックを使用して、ピースを接着するときに追加の強度を提供しています。それらを正確に一列に並べるために、私はピースをスライドさせることができるまっすぐな木製のストリップを使用しています。

それが完了すると、翼は長くて錫なので、実際には非常に壊れやすくなっています。そこで、木の棒を付けて補強します。スティックをサイズに合わせてカットし、ポケットを作成する必要がある場所にウィングにマークを付けて、スティックをその中に収められるようにしました。カッターナイフを使って、ゆっくりと丁寧にポケットを作りました。ホットグルーを追加して、翼の形状をあまり乱さずに固定しました。

これで、木の棒が所定の位置にあると、翼がはるかに強くなります。強度はありますが、地面にぶつかると壊れやすいので、スタビライザーと同じように梱包テープで包みます。翼の裏側または後縁から前側または前縁にテープを追加し始めました。

このようにして、正面から入ってくる空気がテープを剥がす傾向がありません。このプロセスは非常に簡単に見えますが、安定した手と十分な患者がいない場合は少し面倒になる可能性があります。翼は完璧に出てきたと思います。今でははるかに強く、空力的になり、見た目もかなり良くなっています。

次のステップは、翼またはエルロンの操縦翼面を作成することです。幅22cm、翼弦の長さの約1/4にします。自由に動くことができるように、0.5センチくらい切り落としました。

そしてもちろん、カッティングで露出したすべてのエッジをラップしました。次に、エルロンの下部を45度に面取りし、前に示したのと同じように、翼にヒンジで固定できるようになりました。胴体にフィットし、翼を胴体に簡単に取り付けることができるようにするには、翼の中央にもう1つくぼみを作る必要がありました。

次に、エルロンを制御するためのサーボモーターを取り付けます。 9gのマイクロサーボを使用しています。それらを配置する場所に印を付け、万能ナイフを使用して、サーボがそれに合うように翼に慎重に開口部を作りました。そんな中、サーボ取付金具を外して形状をシンプルにしました。サーボに接着剤を塗り、開口部に挿入しました。

カッターナイフを使って、サーボから翼の中央に向かって小さな溝を作り、サーボの配線をはめ込むことができるようにしました。最後に、すべてをテープで覆いました。反対側でも同じプロセスを繰り返しました。

コントロールホーンを作り続けました。以前にモーターホルダーを作るために使用したアルミニウムプロファイルからそれらを作ります。サーボモーターのホーンの高さにほぼ一致し、ヒンジポイントにぶら下がるように手で形を描きます。弓のこを使って形を切りました。

制御棒として2mmの鋼線を使用するので、2.5mmのドリルを使用してホーンに開口部を作りました。エルロンに小さな溝を作り、ホーンを所定の位置に接着しました。次に、制御棒の長さを測定し、ペンチを使って2mmの鋼線で作りました。制御棒を測定して挿入するときは、サーボモーターがニュートラル位置にある必要があることに注意する必要があります。

これを行うには、手動でモーション範囲の中央に配置するか、サーボテスターに​​接続するか、Arduinoを使用します。反対側でも同じ手順を繰り返しましたが、これで翼は完全に完成しました。

次に、舵とエレベータを制御するためのサーボを取り付ける必要があります。ここでも同じ9gマイクロサーボを使用していますが、それらをインストールするプロセスは、実際には今説明したものとほとんど同じです。まず、場所に印を付け、万能ナイフを使用して開口部を作り、2つのモーターを所定の位置に接着します。ここでは、それらは互いに隣接していますが、出力シャフトは反対側にあります。

ここでも、電子機器コンパートメントにサーボ配線を行うために、胴体に小さな溝を作りました。サーボをテープで覆い、サーボホーン用の開口部を作りました。前に示したのと同じ方法で、コントロールホーンを作成し、グルーガンを使用して所定の位置に接着しました。最後に、適切な制御棒を作成し、それに応じて取り付けました。

次に、翼を胴体に固定するのに役立つ2本の8mm木製ロッドを取り付けます。 6mmのドリルビットを使用して手動で穴を開けました。ロッドは両側で約1cm垂れ下がっている必要があります。ホットグルーで胴体に固定しました。実際の動作は次のとおりです。

翼を胴体に固定するために輪ゴムを使用しています。このようにして、翼を簡単に取り外すことができ、輪ゴムを押しつぶした場合に翼への衝撃を大幅に減らすことができます。同時に、アセンブリは十分に強力です。

次に、着陸装置を作ります。そのためにも、発泡スチロール製のアルミプロファイルとホイールを使用します。前に示したように、CNCマシンを使用して作成しました。アルミプロファイルに小さな溝を入れて、簡単に曲げられるようにしました。着陸装置が実際にどのように見えるかを次に示します。

プロファイルへのホイールの取り付けには、M5ボルトと内径6mmのアルミチューブを使用します。チューブはM5ボルトとナットでブラケットに固定され、側面にはホイールがチューブの周りを自由に回転できるようにM5ワッシャーを追加しました。同じ方法で飛行機の裏側のホイールを作りました。

これで、すべてのコンポーネントの準備が整いました。組み立てる前に、このプロジェクトの電子機器を見てみましょう。

Arduino RC飛行機電子機器–回路図

したがって、すでに述べたように、このRC飛行機は完全にArduinoに基づいており、送信機と受信機の両方がArduinoProMiniボードに基づいたカスタムビルドです。

構築方法と送信機と受信機の仕組みについてはすでに詳細なチュートリアルがありますので、詳細についてはそれらをチェックしてください。ここでは、このArduino RC飛行機の回路図と動作原理、およびすべてを接続する必要がある方法について説明します。

このプロジェクトに必要なコンポーネントは、以下のリンクから入手できます。

  • NRF24L01 + PA+LNA…………..…..……。
  • ArduinoProMini………………..………。…..
  • サーボモーター……………………………………
  • ブラシレスモーター………………………..……
  • ESC30A………………………………。…………
  • Li-Poバッテリー……………………..……………

したがって、無線通信はNRF24L01モジュールに基づいています。少し複雑に見えるかもしれませんが、このDIYArduino送信機は実際にはかなりシンプルです。いくつかのコントローラー、ジョイスティック、ポテンショメーター、およびいくつかのボタンがあり、それらのデータを常に受信機に送信します。受信機はNRF24L01モジュールを介してこのデータをワイヤレスで受け取り、飛行機を制御するための適切なコマンドをサーボとブラシレスモーターに出力します。

Arduinoでサーボとブラシレスモーターを制御することも非常に簡単なので、このArduinoRC飛行機のコンセプト全体を理解するのはそれほど難しいことではないと思います。このプロジェクトで使用しているブラシレスモーターの定格は1000KVで、30AESCが必要です。 ESCはモーターを駆動し、5Vを出力するバッテリーエリミネーター回路機能を介してArduinoとサーボに電力を供給します。また、ESCとブラシレスモーターへの電力は3SLi-Poバッテリーから供給されます。

この飛行機にもう1つの機能を追加しました。これは、バッテリーが空かどうかを示すシンプルなLEDです。単純な分圧器を使用して、Li-Poバッテリーからの12Vを約5Vに下げ、Arduinoアナログ入力でそれらを読み取って、バッテリーが11Vを下回る時期を知ることができます。レシーバーにはまだいくつかの空きチャネルがあるため、必要に応じて、ストロボライト、フラップ、ドロップメカニズムなど、この飛行機に機能を追加できます。

組み立ての終了

それでも、今すぐ組み立てを終了しましょう。そこで、回路図で説明したようにすべてを接続しました。チャネル1にはラダー、チャネル2にはエレベータ、チャネル3と4にはエルロン、チャネル6にはLEDがあります。片側にLEDを、反対側に電源スイッチを接着しました。

ここで、モーターホルダーの2本のボルトを使用して着陸装置が飛行機にどのように取り付けられているかを確認できます。簡単に言うと、この上部の開口部からホルダー付きのモーターを挿入し、前に示したようにボルトで固定し、着陸装置も取り付けました。ホルダーを挿入する際に、バッテリーを固定できるように輪ゴムも追加しました。

そのため、バッテリーをESCに接続したら、すべてを押し込みました。最後に、延長ケーブルを使用して、翼のエルロンをレシーバーに簡単に接続し、翼を胴体に固定できます。

前面でプロペラをモーターに取り付けましたが、あとはCGや飛行機の重心を確認するだけです。

飛行機が上手く飛ぶか、まったく飛ばないかは、おそらくCGが最も重要な要素です。

飛行機は最初は尾が重いので、バッテリーを前に移動して重量を追加し(ボルトとナットをいくつか)、バランスを取りました。

これで、ArduinoベースのRC飛行機が完成し、外に出て試してみることができます。

ArduinoRC飛行機のテスト

さて、最初の試みや初飛行はそれほどクールではありませんでした。特にクラッシュの結果を見た後。

ここでの私の結論は、飛行機はまだテールが重く、モーターに十分なパワーがないように感じたということでした。別のモーターやプロペラを試す必要がなかったので、飛行機の機首を少し小さく変更し、モーターをより前方に移動して、空気の流れを良くし、前面のエッジを丸くしました。構造については、胴体の内側に接着した木の棒とアルミのプロファイルで補強しました。

電子機器コンパートメントの下部に2つの穴を開けました。1つは前面の開口部から来る空気を逃がすためのもので、もう1つはバッターレンジを確保するためにNRF24L01アンテナを外に出すためのものです。

では、2番目を試してみましょう。繰り返しになりますが、ほぼ同じことですが、現在はエアフローまたはパワーが向上しているように感じました。

胴体が再び壊れたので、この発泡スチロールはこの目的にはかなり弱いことがわかります。新しい胴体を作りましたが、今回はダクトテープを少し使って補強しました。

3番目を試してください。有望に見えましたが、離陸のための地形は実は全然良くありません。飛行機は右に動き始め、道路の端にぶつかり、再び壊れました。

私はそれを修理し、今回は胴体のほぼ全体をダクトと梱包テープで包みました。これにより胴体に適切な強度が与えられ、さらに数回押しつぶしても壊れなかったので、もっと早くやるべきでした。

問題は、何度か押しつぶした後、持っていた4つのプロペラすべてを壊したことでした。この試みでは、接着したプロペラを使用しています。もちろん、プロペラは離陸時に引き裂かれました。

すでに壊れている2つのプロペラで作られた別の接着プロペラを試してみましたが、今回は実際に幸運で、飛行機はようやく適切に離陸しました。

プロペラが空中で再び壊れたので、運は長く続きませんでした。

それでも、RC飛行機を操縦するのはこれが初めてだったので、RC飛行機を制御するための完全にArduinoベースのシステムを作成するというコンセプトを証明できたので、このプロジェクトは成功したと考えられます。

それ以外に、送信機からの制御が実際には厳しすぎることに飛行から気付くことができます。これは、ジョイスティックがこの目的にはまったく適していないため、移動範囲が狭く、応答が悪いためです。

これを解決するために、送信機の適切なポテンショメータを使用してコントロールの応答性を制御できる機能をプログラムに追加しました。また、左ポテンショメータで舵をトリムできる機能を追加しました。

ArduinoRC飛行機コード

最後に、このArduinoベースのRC飛行機のArduinoコードを見て、このプロジェクトをまとめましょう。 NRF24L01トランシーバモジュールを使用してサーボとブラシレスモーターを制御するためのコードは、前のチュートリアルで説明したものとまったく同じです。

このArduinoRC飛行機プロジェクトの完全なコードは次のとおりです。

/*
   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)

Description: 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 Music Visualiser
  2. 自宅でDIY宿題ライティングマシンを作る
  3. Arduino Nano RP2040を使用したDIYPhotoshop編集コンソール
  4. Arduinoとスマートフォンを使用したDIY電圧計
  5. DIYバーチャルリアリティスケートボード
  6. 128x64LCDディスプレイ上のDIY10Hz-50kHzオシロスコープ
  7. DIY ArduinoRADIONICSトリートメントマシン
  8. DIY2Dモーションレーシングシミュレーター
  9. ローカルおよびリモートのプログラム可能なロボットアーム
  10. RFIDを使ったDIYのアイデア
  11. DIY3軸CNCVMC