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

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

このチュートリアルでは、ArduinoベースのRCホバークラフトの作り方を学びます。ホバークラフト部品(プロペラ含む)の設計・3Dプリントから、電子部品の接続、Arduinoプログラミングまで全工程を紹介します。

以下の動画を見るか、書面チュートリアルをお読みください。

概要

ホバークラフトの制御には、以前の動画で作ったDIY ArduinoベースRC送信機を使用。右ジョイスティックで後部ラダー(推進モーター後方の舵)を制御するサーボを操作、ポテンショメーターの1つでリフトプロペラ(ブラシレスDCモーター駆動)を制御、左ジョイスティックで推進を制御します。ではこのRCホバークラフトの製作を見ていきましょう。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

ホバークラフトの3Dモデル

3Dモデリングソフトでホバークラフトを設計しました。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

Thangsで3Dモデルを探索・ダウンロードできます。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

アセンブリ3Dモデルのダウンロード(Thangs)

STLファイル(3Dプリント用):

ホバークラフトの作動原理

ホバークラフトの基本原理は、エアクッションで機体を浮上させることです。中央のプロペラが機体下部に空気を送り込み、柔らかい素材で作られたスカートを膨らませます。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

スカート内の空気圧が十分に高まると機体が浮上。常時供給される空気がスカートと地面の間の隙間から漏れ出し、追加の揚力を生むとともに、ホバークラフトと地面の摩擦を低減させます。

浮上後、第2のプロペラで推力を発生させ前進します。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

推進プロペラの後部にはシンプルなラダー(舵)があり、これで操向します。

3Dプリント

設計完了後、3Dプリントを開始。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

ホバークラフトの船体(ハル)が最大のプリントパーツで、私のCreality CR-10 3Dプリンター(造形エリア30×30cm)に収まるよう設計しました。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

この3Dプリンターのリンクはこちら。

プリント完了後、後処理を行います。メインボディ(コックピット)が最長で約18時間。曲面設計で一体成型のため、大量のサポート材が使用されました。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

しかしサポート材は簡単に除去でき、仕上がりは完璧。ハルは逆さまにプリントし、サポート材はわずか。中央のブロワーハウジングから一部材料を削り取り、スカートホルダーがうまく嵌まるように調整しました(3Dモデルはすでに修正済み)。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

一部の丸み部分が荒かったため、サンドペーパーで磨きました。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

プロペラは後処理不要で、プリント直後の状態でよく機能しました。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

ホバークラフトの塗装

3Dプリントパーツを塗装します。プライマーは使わず、アクリルスプレー塗料を直接吹き付けました。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

最初のコートはチョコレートブラウン。装飾用の小さなパーツにはライトブラウンを使用。

よりカッコよく見せるため、最初のコートが乾いたらさらに2色を追加。紙にランダムなパターンを描き、それを型紙にしてストライプとスポットをライトブラウンとブラックで描きました。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

Arduino RCホバークラフトの組み立て

パーツの仕上がりに満足したら、乾燥後に組み立てを開始。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

まず推進ブロワーハウジングにラダー制御用サーボを取り付け(M2ボルト・ナット2本)。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

次にブラシレスモーター。使用したのはD2830(直径28mm、長さ30mm)で、ハウジングはこのモーター専用設計です。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

モーター挿入時、まず配線を開口部を通します。少しきついですが通せます。裏側からM3ボルトでモーターをハウジングに固定。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

推進ハウジングとメインボディを合体。このパーツには開口部があり、サーボとBLDCモーターの配線が通ります。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

M3ボルト4本でしっかり固定。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

続いてハルに第2のブラシレスモーターを取り付け。同じ要領で配線を通し、裏側からM3ボルト4本で固定。

回路図

電子部品はハルとメインボディの間に配置します。その前に回路図で接続方法を確認しましょう。

このホバークラフトの頭脳はArduinoボード。Arduinoでサーボと2つのブラシレスモーター(ESC経由)を簡単に制御できます。BLDCモーター用電源は3S Li-Poバッテリー(約11V)、Arduino用電源はESCのBEC機能から供給される5Vを使用。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

無線通信にはNRF24L01トランシーバーモジュールを使用。増幅アンテナ付きなら開放地で最大700mの安定通信が可能。制御用RC送信機は以前のチュートリアルで自作したものを使用(詳細はそちらを参照)。NRF24L01モジュールとブラシレスモーターArduino制御の詳細チュートリアルもあります。基本原理は、送信機がジョイスティック/ポテンショメーターのデータを送信し、レシーバーがブラシレスモーターの回転数とサーボ位置を制御するというものです。

回路図にはもう1つ小さな詳細があります:バッテリーモニター。2つの抵抗で簡易分圧回路を作り、バッテリーに直接接続、出力をArduinoのアナログ入力に接続。分圧で11Vを約4Vに下げ、5V許容のArduinoピンで読み取れるようにしています。これでバッテリー電圧を監視し、11V未満でインジケーターLEDを点灯させられます。

このArduinoチュートリアルに必要なコンポーネント:

  • NRF24L01トランシーバーモジュール
  • NRF24L01 + PA + LNA
  • ブラシレスモーター
  • ESC 30A
  • Li-Poバッテリー
  • XT60 2メス-1オス分岐コネクター
  • XT60コネクター
  • サーボモーター
  • Arduinoボード

説明通りに部品を接続。2つのESCを1つのバッテリーに接続するため、XT60タイプの並列バッテリーコネクター分岐ケーブルを使用。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

電源スイッチを追加するため、もう1つのXT60コネクターの片側配線を切り、そこにトグルスイッチをはんだ付け。一方をY分岐ケーブル、他方をバッテリーに接続。

ESCをメインボディに入れ、ハルとの間に挟み込み、M3ボルト4本で2パーツを締結。ボディ上部の開口部からバッテリーをコックピットエリアに挿入。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

部品をArduinoに接続するため、ArduinoにGNDと5V用のピンヘッダーを2本追加。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

すべてをArduinoに接続後、NRF24L01アンテナ、インジケーターLED、電源スイッチをコックピットのトップカバーの穴に通します。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

すべてをコックピットに押し込みます。Arduino UNOを使用したため少しきつかった(Arduino Nanoの方が良かったかも)。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

しかし何とか収まり、小さな装飾パーツをカバーに取り付け、クリップでコックピットボディに固定。

ステアリングシステムを取り付け。サーボホーンに小さなリンクをM2ボルト・ナットで接続。第1ラダーを挿入し、2mm金属ワイヤーで本体を貫通させて固定(このワイヤーを中心にラダーが回転)。第2ラダーも同様。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

第2ラダーには追加スロットがあり、先ほど取り付けたリンクと接続。M2ボルト・ナットで固定。最後に2つのラダーをもう1つのリンクで連結し、ステアリングシステム完成。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

ホバークラフト側面に小さな装飾パーツを取り付け。ドリルで穴を開け、ネジ1本でハルに固定。両側に取り付け、全体の外観にマッチしています。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

スカートの製作。スカートホルダーにはハル取り付け用の穴が周囲にあります。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

ナット用スロットもあり、M3ボルトでスカートホルダーをハルに簡単に固定できます。全ナットを固定後、スカート材としてゴミ袋(ビニール袋)を使用。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

まずホルダー中央に瞬間接着剤を塗り、ビニール袋を貼り付け。ホルダー外周から約6cmオフセットした位置を数点マークし、それらを結んで切断ラインを決めます。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

カッターナイフでビニール袋を適切なサイズにカット。裏返し、以前接着した中央部分に追加のホルダーを貼り付け。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

袋の外周をホルダー上部に接着。再び瞬間接着剤で慎重に固定。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

スカート完成時の様子。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

ボルトが通る位置でビニール袋に穴を開けます。スカートホルダーはハルよりわずか1mm小さいため、ビニール袋と合わせてハルにぴったり嵌まります。M3ボルトを全周にわたって締めてスカートを固定。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

スカートにもう1つ必要な作業:中央部分のビニール袋を切り抜きます。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

これで空気の半分が直接スカートを膨らませ、残りがこの開口部から抜けて中央に追加のエアバブルを作ります。

最後にプロペラをブラシレスモーターに取り付け。付属のコレットを使い、モーターシャフトにプロペラを固定。シンプルで効果的な方法です。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

もう1つのモーターのコレットを紛失したため、モーターシャフト(3.15mm)に直接嵌まるバージョンのプロペラをプリント。接着剤なしで完璧に嵌まり固定できました。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

これでラジコンホバークラフトがついに完成です。

Arduino駆動RCホバークラフト自作ガイド:全3Dプリント設計とプログラミング

あとはArduinoコードとプログラムの仕組みを見てみましょう。

Arduino RCホバークラフト コード

このDIY ArduinoベースRCホバークラフトプロジェクトのコードはこちら:

/* Arduino based RC Hovercraft == Receiver Code - ESC and Servo Control = 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 10
RF24 radio(8, 9); // nRF24L01 (CE, CSN)
const byte address[6] = "00001";
unsigned long lastReceiveTime = 0;
unsigned long currentTime = 0;
Servo esc1; // create servo object to control the ESC
Servo esc2;
Servo servo1;
int esc1Value, esc2Value, servo1Value;
// 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_LOW);
  radio.startListening(); // Set the module as receiver
  resetData();
  esc1.attach(7);
  esc2.attach(6);
  servo1.attach(5);
  pinMode(led, OUTPUT);
}
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
  }
  // 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 servos
  servo1Value = map(data.j2PotX, 0, 255, 0, 50);
  servo1.write(servo1Value);
  // Controlling brushless motor with ESC
  // Lift propeller
  esc1Value = map(data.pot1, 0, 255, 1000, 2000); // Map the receiving value form 0 to 255 to 0 1000 to 2000, values used for controlling ESCs
  esc1.writeMicroseconds(esc1Value); // Send the PWM control singal to the ESC
  // Thrust propeller
  esc2Value = constrain(data.j1PotY, 130, 255); // Joysticks stays in middle. So we only need values the upper values from 130 to 255
  esc2Value = map(esc2Value, 130, 255, 1000, 2000);
  esc2.writeMicroseconds(esc2Value);
  // Monitor the battery voltage
  int sensorValue = analogRead(A0);
  float voltage = sensorValue * (5.00 / 1023.00) * 3; // Convert the reading values from 5v to suitable 12V i
  Serial.println(voltage);
  // 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 = 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;
}

解説: まずRF24ライブラリ(無線通信)とServoライブラリ(サーボおよびブラシレスモーター制御)をインクルード。無線オブジェクト、サーボオブジェクト、プログラム用変数、自作RC送信機からの着信データ格納用構造体を定義。通信の詳細は専用チュートリアルを参照してください。

setup()では無線通信の初期化と、サーボ/ESC接続ピンの定義を行います。

loop()では送信機からの着信データを読み取り、サーボとブラシレスモーターの制御に使用。ジョイスティックデータ(0〜255)を0〜50に変換し、サーボ位置制御に使用。

ブラシレスモーターも同様にESCで制御。着信データ(0〜255)を1000〜2000に変換し、writeMicroseconds()でESCに制御信号として送信。

バッテリー電圧監視は、分圧回路からのアナログ入力を読み取り、簡単な計算で実電圧に変換。11V未満でインジケーターLEDを点灯。

詳細は他の推奨チュートリアルを参照し、仕組みを完全に理解してください。

このチュートリアルがお役に立てば幸いです。質問はコメント欄でどうぞ。Arduinoプロジェクトコレクションもご覧ください。


製造プロセス

  1. 自作LUMAZOID:Arduino音楽ビジュアライザーDIYガイド
  2. Arduinoとスマホで作るスマート電圧計 – 簡単DIYプロジェクト
  3. Pixie: Arduino Pro Miniで作るNeoPixel腕時計 - アナログとデジタル融合のDIY光る時計
  4. Arduino、Google Cardboard、Bluetoothで作るDIY VRスケートボード
  5. Arduino Nanoと128x64 OLEDで実行するセルラーオートマトン「ライフゲーム」
  6. DIY ArduinoラジオニクスEMR治療デバイスの構築
  7. ArduinoとGoogleスプレッドシート連携 リアルタイムRFID勤怠管理システム
  8. Arduino NanoとSG90サーボで作るDIY 2軸モーションレーシングシミュレータ
  9. Arduino UNOで作る信頼性の高いスマートエネルギーモニター – ステップバイステップガイド
  10. Arduinoで作るセキュリティシステム:超音波センサーとサーボで広範囲監視・アラート
  11. Arduinoで作るポータブルRFIDドアロック - ステップバイステップガイド