ドローン

Arduinoを使ったパラシュート射出システムで、ドローンの安全性を高めよう!

まず初めに
自分のドローンを事故や落下による破損から守るための方法をお伝えする前に、ドローンを飛ばす際に注意すべき点をいくつか挙げさせていただきます。
200g以上のドローンを飛ばす場合、許可申請が必要になります。また自作ドローンや、今回ご紹介するような改造を施したドローンは、改造概要や写真と共に情報を追記して申請を行う必要があります。200g以下の小型ドローンや海外から輸入されたドローンを飛ばす際に注意すべき点として「電波法」があります。使用できる電波帯とできない電波帯があり、海外製のドローンを操作するのに用いられる電波帯は国内では許可されていない場合があるので注意しましょう。
最後に、これらの条件をクリアすればどこでもドローンを飛ばしていいわけではありません。他人の所有地で飛行させたい場合は、必ず許可を取る必要があります。本記事では自分のドローンだけでなく、人や物への被害も抑えるための方法も紹介していますが、決してこれらを過信せず、下記の国土交通省の定めるルールに必ず目を通した上で、安全な飛行を心がけてください。
http://www.mlit.go.jp/koku/koku_tk10_000003.html

 

目的
この記事では、飛行用やレース用といった目的を問わず、小型・中型のドローンで利用できるパラシュートシステムの作成方法をご紹介します。誤動作もしくはバッテリー切れを起こしているドローンは安全に着陸できないことがあり、これは電気の代わりに化学燃料を使用しているUAVにも同じことが言えます。UAVはこれまでは到達できなかったようなエリアにもアクセスできるため、無人飛行機の愛好家や撮影の専門家の両方から絶賛されていますが、同時に事故で失うにはあまりに高額です。 ドローンが事故で落下する様子を見たことがないという方はこちらの動画をご覧いただくとイメージが沸くかもしれません。

Drone Rescue Systemsが販売しているドローン用のパラシュートシステム

Drone Rescue Systemsが販売しているドローン用のパラシュートシステム

ご紹介するのはパラシュートシステムでハードウェアを保護する方法と、ドローン全体もしくはローターのみの電力を停止する方法です。重力によって発生する衝突はさておき、懸念すべきはローターによる被害です。特にドローンの制御が効かなくなった後もローターが回転を続けている場合、物や人への危害やローター自体の破損の可能性があります。本製品の緊急停止装置を実装することによって、人や物への破損のリスクを抑えることができます。

今回ご紹介するバージョンではバッテリー残量検知の機能はありませんが、定電圧ダイオード、抵抗、NPN/PNPトランジスタのペアを使用することで簡単に実装することができます。ドローンに元から実装されているリレー式緊急停止装置と合わせて使用すると、充電が必要な際のサインとなるバッテリーの急速な放電の検知が可能となります。残念ながら、全てのドローンに緊急停止機能が備わっているわけではないため、工夫が必要な場合があります。

降下コントロールシステムを組み込んだドローン

これからご紹介することは、ドローンファンやカメラマンを含むドローンを使用している全ての人向けの内容です。もちろん、農業などで産業用のドローンを活用している/活用を考えている方にもおすすめです。

どちらかと言うと中型ドローン向けの工作ではありますが、小型のドローンを所有している方でも十分試す価値はあります。

 

概要
本製品は自分で組み立てることができます。電子工作の経験が少ない場合は並行して作業を行おうとせず、一つずつ作業を進めてください。今回の例で使用する加速度計は ADXL345 で、自動のダブルタップ検出、シングルタップ検出、割り込みなどの機能を搭載しています。Arduinoが読み取るのは加速度のみのため、割り込み機能は必須ではありません。Arduinoを使用してX軸、Y軸、Z軸の加速度を計測します。物体が落下する時、物体にかかる重力は1gから徐々に0gに近づいて行きます。観測値が閾値に達した場合(例えば0.35g以下が75ms以上観測された場合)、物体は急速に落下していると断定することができます。これをトリガーとし、サーボ駆動式の腕でパラシュートの入ったバネ式シリンダのふたの固定具を外します。パラシュートが開いてすぐに空気が埋まりパラシュートを飛行させてくれるので、ドローンの降下をコントロールできます。

パラシュート射出装置

ここではこれを「降下コントロール装置」と呼びます。今回のゴールとしては、システムの根幹として自由落下を検出した際にサーボ駆動式の腕と緊急停止装置のみを制御することを念頭においてください。テストに使用するサーボは安価で構いませんが、実際に搭載するものは金属のアームとギアが搭載された、信頼できるものを選びましょう。シリンダーの準備(3D印刷で作ることも出来ますが、PLAプラスチックが望ましいです)とシリンダー内部に設置するスチールバネ並びにパラシュートは自由に工夫してください。

 

目次
1. 備品
2. 回路を理解する
3. コードの編集とセッティングの微調整

備品
新調しなくてはならない備品の数にもよりますが、大体6,000円~7,000円程度で全ての備品が揃うはずです。

Arduino Nano
ADXL345加速度計
1N5819ショットキーダイオード
18650 Li-Ionバッテリー
18650 バッテリーホルダー
5V 1A Micro USB 18650リチウムバッテリーチャージボード
LED複数(色は問わない)
ピンヘッダー複数
ジャンパーワイヤー
ブレッドボード
レジスター複数
5Vリレー
レベルシフター 2- もしくは 4-チャンネル
ソリッドコアワイヤー
90x70mm PCB電子回路基板ブレッドボード
IRLZ24N N-MOSFET
2N7000 N-MOSFET
SG90サーボ
~300pFセラミックコンデンサ(任意)
もし持っている場合は使用してください

今回パラシュートは画像の36インチのものを使いましたが、ドローンの重さによって落下速度を十分に減速させるのに必要なパラシュートのサイズが違うので、自分のドローンに合ったものを選ぶようにしましょう。

パラシュート

 

回路を理解する
降下コントロール装置の根幹はArduinoによって加速度を計測し、一定の条件を満たしたときにリレーとサーボを操作するという、単純なものです。

 

電源
過放電保護機能を備えたTP4056バッテリーICは3.7V以下の電圧を小型昇圧コンバータに出力し、小型昇圧コンバータは5.2Vを出力します。この時に予想されるロスはおおよそ10~15%です。DW01A を備えたTP4056モジュールには2組の出力端子(+/-OUTとBAT+/-)があり、1つはバッテリーに接続され、もう1つは昇圧コンバータに接続されているということを留意してください。これは低電圧をカットし、バッテリーへのダメージを防ぎます。TP4056と昇圧コンバータの間にスライドスイッチ(SPSTタイプ)を配置し、ワイヤーにある程度の長さを持たせておけば、プロジェクトBOXに取り付けることができます。OUT+をスイッチのピン1に接続し、ピン2を昇圧モジュールのIN+に接続します。

バッテリーと昇圧モジュールはそれぞれ1Aまで通電可能で、約70mAのリレー、100〜250mAの小型サーボ、35〜40mAのArduinoに対応するには充分です。昇圧コンバータのOUT+ピンと使用する5Vレールの間に順方向バイアスに、1N5819のショットキーバリアダイオードを接続するのを忘れないようにしてください。これは回路に接続されたままのArduinoに誤ってUSBを刺した際に発生する逆流からの保護に使用します。逆流により一時的にUSBポートが無効化にされるか、最悪の場合は全てのUSBポートが破壊されてしまいますので注意してください。通電中の回路に接続されている間にArduinoを点滅させるには、新しいファームウェアをアップロードする直前にUSB-TTL (TXからArduino RX、RXからArduino TX、GNDからArduino GND、5Vは未接続)を使用し、「リセット」を押します。5Vの基準点となる箇所にArduinoや他の機器(下図参照)と接続し、同様にGNDの基準点となる箇所を探します。

バッテリーの接続

 

ADXL345 加速度計
ADXL345加速度計は用途が多数ありますが、Arduinoが自由落下検出にリソースを使用しているだけの場合は、割り込み処理は不要です。データロギングを目的にビルド、GPS、及び/またはmicroSD ICに高度計を含める場合は、割り込みの使用がおすすめです。このコードでは、単にライブラリを切り替えるだけでも任意の加速度計を使用することが可能です。コンセプト的には、自由落下状態を確実に検出し、それに反応するということだけです。ADXL345はVCCで2~3.6Vを消費し、I2Cモードで使用する場合は、CSピンのHIGHを10Ωの抵抗を介して3V3にプルアップする必要があります。日頃技術的な面でGoogleを信頼できるのと同じように、レベルシフタは更に信頼度の高いものとなっているので、SDA信号とSCL信号をArduino Nanoとの間で確実にレベルシフトさせましょう。とても簡単なので心配は要りません。ここで使用しているレベルシフタは、HVピンで5V、3V3ピンで3V3、それ以外では各A4(SDA)ピンとA5(SCL)ピンをHV1とHV2に配線するだけです。もう一方ではLV1をADXL345のSDAに、LV2をSCLに接続します。Arduinoの5V出力とA4とA5それぞれの間に4700Ωのプルアップ抵抗を忘れずに使用してください。これを忘れると取り返しのつかないことになりかねないので気を付けましょう。

ADXL345加速度計の接続・配線

 

ソフトのリセット
何らかの理由でArduinoがハードウェアを正しく初期化しないということが断続的に発生し、原因が誤った接続ではない場合は、ボードをリセットしましょう。2N700のような小型のTO-92パッケージ N-FETを使用すると簡単です。ピン配置はソース・ゲート・ドレインで、ソースをArduino GNDに、ゲートをArduino D8に接続した上で4700Ωのプルダウン抵抗を介してArduino GND接続し、最後にドレインをArduino RSTピンに接続するだけです。

N-FETの配線

 

リレー & サーボ
ドローン操作の経験が豊富な方であれば、ローターが回転した状態でドローンが正しく着陸できなかった場合、それは動き回るミキサーのようなものだとご存知でしょう。ドローン自身だけでなく、人や物に危害を加えてしまいます。緊急停止装置は必須ではありませんが、そうした最悪の事態を防ぐのに役に立ちます。
ローターに接続されている正のリード線(おそらく4つ以上ですが、ここでは割愛)の接続を外し、リレーの共有接地に接続します。次に、N-C(ノーマルクローズ)をローター電源ラインに接続し直してください。リレーのN-CはN-O(ノーマルオープン)経路に沿って導通するようにリレーに5Vが印加されている場合を除き、常に閉じています。このカットオフによりパラシュートとデラックス降下を使用していても、ローターにスピンを減少させる時間の余裕ができ、接触物への被害を抑えることができます。Arduino 5Vピンをリレーの+端子に接続しましょう。どちらを+端子とするかはご自身で判断してください。反対側が-端子となります。図では左側が+端子となっています。-端子を2N7000 N-FETのドレインに接続し、2N7000のソースをGNDに接続します。2N7000のゲートにはD7を接続し、更に4700Ωのプルダウン抵抗をグラウンドに配線しましょう。

リレー(緊急停止装置)の端子を横切って、1N5819のショットキーバリアダイオードと並列に接続された300pHのセラミックコンデンサを見て不思議に思うかもしれません。これはリレーコイルに通電することで発生するノイズを小さく抑えるのに役立ち、Arduinoの急なリセット動作の発生を抑制します。ダイオードにリレーコイルから発生した磁場の変動によって上昇した電圧が帯電されますが、コンデンサが電圧にかかるノイズを吸収します。

サーボについては以下の図の通りです。小型のビルドでは、全てのmAhがカウントされるため、MOSFETを使用して電力を供給/遮断します。参考までに、私のSG90テストサーボは、アイドル時に~10mAの電流を引き出しましたが、これはサーボによって異なります。コード内のservoPwrPinはMOSFETを制御し、servoPinはPWM信号ピンを指します(3、5、6、9、10もしくは11のいずれかでなければいけません)。IRLZ24Nは5Vサーボの処理を十分な強度を持って行い、ヒートシンクを必要としません。

リレー&サーボ

 

コードの編集とセッティングの微調整
ADXL345ライブラリのサンプルプログラムをご覧ください。落下試験はFallThreshold、freeFallDurationを調整してから行うのが良いでしょう。落下試験には、ブレッドボード、バッテリー、コンポーネント、多くの電気テープと気泡緩衝材を用いることになります。ワイヤーがブレッドボードにぴったりとはまっていることが確認できれば、5mからの落下テストが可能になり、ハードウェアに害を及ぼすことはありません。

X軸、Y軸、Z軸の計測値は常時モニタリング可能です。Arduino IDEのUSBケーブルで接続し、シリアルモニタ(Ctrl+Shift+M)を使用してArduinoに一文字を送信します。すると、このデータと空きSRAMの量などの有用なビットがバイト単位で返信されます。これは較正作業を行うのに特に役立ちます。ただし、USBケーブルを接続すると強制的にリセットされます。USB-TTLケーブルを使用する場合は、RXピンのみをArduino TXに、TXピンをArduino RXに、GNDをArduino GNDに接続します。落下テストの後、降下中に観測した X軸、Y軸、Z軸の値を復元し、装置起動前の加速度計の計測値を確認することができます。デバッグのためにシリアル接続を使用できるとは限らないため、必ず5mm LEDをArduino D13に接続、GNDに220Ωの抵抗を直列に接続し、flipLED()関数またはdigitalWrite (13, HIGH/LOW)を使用してコード内の特定の部分を点滅させてください。

loop()関数のFREE-FALLブロックは、フリーフォール状況で行われたことを調整したい時のための次のステップです。ここでは自由な記述が可能です。高度や加速度のデータロギング結果のmicroSDカードへの出力やGPSなど、降下コントロール装置には更に高度な拡張を施す余地があります。Arduino Nano自体には完全なフライトコントローラーになるほどの力強さはありませんが、そうした実装を施したい場合はRaspberry Pi Zeroがオススメです。

後は冒頭で説明させていただいた通り、このシステムを過信せず、必ずルールを守ってドローンの安全な飛行を心がけましょう!

tello-banner-2
Device Plus編集部

エレクトロニクスやメカトロニクスを愛するみなさんに、深く愛されるサイトを目指してDevice Plusを運営中。

https://deviceplus.jp