拙者とPDR-C その09

  • 2016.12.28 18:00
  • Cat:PDR-C

Ardiunoは電動ガンの夢を見るか?


今回は拙者の妄想メモ書きである。まあいつものことだが。

風呂には入ながらふと考えた。FETをマイコンで制御出来ないか?
昔はマイコンといえばPICだったが今時のトレンドはラズベリーパイやArdiunoらしい。
LinuxベースのPCであるラズベリーパイは環境としてGUIベースでブイブイいぢるのが主流だ。
こうした組み込み機器には不向きであろう。なのでArdiunoで、と言うことになる。

Ardiunoで制御出来ないか考える。
やりたいことを列挙してみた。
・プリコック制御
・スピードコントロール(必要に応じてダウンさせる)
・残弾カウンタ
・バーストコントロール
・バッテリーチェック


それぞれ何が必要になるか考えてみる。

<基本動作とその検知>
プリコックはエアライフルでいうコッキング作業である。電動ガンの場合トリガーONで電気駆動が始まり、ピストンをコックし、リリース、弾が出るまでが1サイクルとなる。
これをピストンコックで待機し、トリガーONでリリース、再度コッキングして待機、としたい。

無論その為にはギア位置を知る必要があり、何らかのセンサーが必要になる。

ぱっと考えられるのが
・フォトセンサ
・マイクロスイッチ
・ホールセンサ
である。

フォトセンサ(フォト・マイクロセンサ)は光センサの一種で物体がそのセンサの間を通過する事を計測する。発射サイクルで稼働する部位(セクターギア・ピストン・タペットプレート等)を挟む形で設置する必要があり、オイルによる汚れで動作不良を起こす事が懸念される。

マイクロスイッチは市販のFETでも利用されている確度の高い検出方法だがメカボックスの形により設置場所が制限され汎用性に乏しい。PDR用のそれが有れば即購入したのだが。個人が使うだけなので汎用性はいらないのだが、上記と同じでオイルの掛らないようスイッチの設置場所を検討するのが一番大変になる。タペットプレートの動きを検知するようにするのが良さそうだがその場所があるだろうか?

ホールセンサ(磁気センサ)は磁石の特定極の接近を感知し動作する。一番現実的だがギアにホールセンサで検知するための磁石を仕込むと必ずギアの重心が狂う。シム調整と受け軸で何処までこれを吸収出来るか?という問題があるように思えるが、そもそもピストンを引くために負荷が掛るシステムでそこまで気にすることではないのかもしれない。
ホールセンサを仕込む際にメカボックス内部に収まればいいがそうでないと面倒なことになる。幸いPDRはピストン下、ギア後方に余裕があるのでそちらに仕込むことは出来そうだ。問題はどこまで強力な磁石を仕組む必要があるか、と言う点とモーターへの影響である。

メカボックス側にセンサを設置する方法はこのように難点が多い。センサで確実に動作を拾えるがなんせPDRが海外製で部品調達もままならないことから極力メカボックスへの工作は避けたい。

そこで次に考えたのが電流センサを仕込む手である。
これはモーターの電流負荷を計測し、ベベルギアがピストンを後退させる際のの負荷が掛った時間を確認する。
次に負荷が掛り始めた際に、計測した時間からn秒をマイナスした時間で動力をカットするとベベルギアの逆転防止ラッチでギアがとまり、プリコック状態になるという手法だ。

これが出来るとメカボックスに手を入れなくても済む。
プリコックタイミングをよりシビアに見たければさらに微調整が効くよう、そのn秒マイナスをアナログ抵抗から±でいじれるようにするとイケルのでは?

だが、この場合最初のプリコック用の負荷が掛る時間を計測する必要が生じる。バッテリー特性やモーターが変わるとこのタイミングも変わるはずなので、バッテリー接続時に毎回計測し直す必要がある。

またこの負荷が掛った時間=利用弾数と考えるとこれをカウントすることでバースト制御も出来る。

さらに利用弾数をカウントさせれば残弾カウンタもできるだろう。


<スピードコントロールの方法について>
次にスピードコントロールであるがコレがまた難しい。単純に電流を弱くすればいいのだがその方法として可変レギュレーターをいれるとなると、これ自体での電流損失も加味せねばならない。
制限時には単純に制限のゲタになると考えればいいが無制限にしたいときでもこの電流損失はついて回る。その為バッテリーの能力100%での運用が出来なくなってしまうのだ。
また廃熱も問題だ。電動ガン程度の発熱であればそこまで高くはならないと思われるが、それでも放熱は必須となる。当然ヒートシンクなんて銃にそのまま乗ってたらかっこわるくて仕方ないので設置場所も考えなければならない。
しいて言うなら制限時にスイッチングで回路を使い、通常利用時はバイパスさせてその回路を回避するのがいいかもしれない。

もう一つはラジコンで使われるPWM制御と呼ばれる電流を途切れ途切れに通して見かけ減圧する方法である。
自転車でブレーキを掛けて減速するのがレギュレーターだとすると、こちらは滑走時間を挟むことで減速する感じだ。
PWM制御を実際にするにはモードラ(モータードライバIC)が必要になる。が、Ardiunoならそれも可能になりそうだ。


電流センサでのFET制御
まず必要なモノを列挙しよう。
<プリコック><バースト制御>
・電流センサ
 LiPoバッテリの出力に耐えうるもの。
・ピストンを引く際の電流値
 いわゆるこの値を超えたらピストンを動かしていると分かる閾値。
・Ardiuno
 もってない。触ったこともない。

ここまでが基礎。で、こっからが拡張。

<残弾カウンタ>いわゆるプリセットダウンカウンタ
・表示装置
 7セグメントLED4つで検討。
・プリセット値の設定
 固定にするか、設定変更可能にするかでエライ手間が変わる。

<スピコン部分>
・PWM制御IC 
タイマICのNE555Pを使うのが主流らしい。秋月でもキットが500円で売ってる。
これの中にFETが使われている。…これ、そのままFETスイッチに組み込めないか?

要するにこのタイマを用いてPWM制御の信号を生成してるんだから、Ardiunoの出力先をこいつにして、これ経由する形でFET繋げばいいんじゃないか?

では、基本的な仕様を検討しよう

<定義>
トリガ1  T1  セミオートのトリガ。マイクロスイッチで検出
トリガ2  T2  フルオート位置の第二スイッチ。
セレクタ  SL フルオート時の3点バースト/5点バースト/フルオート/設定 の切替え
          ディップスイッチ2個のHI/LOWで検出。>ロータリスイッチ化検討
電流センサ PM パワーモニタINA226利用予定
閾値    PT セクターギアがピストンを弾き始めた際の電流値ここに達したところから
          タイマカウントでリリースまでの時間を計測


<プリコック>
PDRをプリコックするため、電流センサで計った閾値を越えた瞬間をピストンの弾き始めと考え、その瞬間から閾値以下に戻るまでの間を計測する。<暫定的にこの時間をPullTimeとする>
2発目以降は閾値を超えた時点からPullTimeをカウント。この終了マイナスn秒の通電でモーターをOFFにし、プリコックする。
・PullTimeの計測をどのタイミングで行えるようにするか?
 何らかのタイミングでサンプリングするようにする? セレクタHH?
・n秒に対し、誤差修正出来るよう半固定抵抗を設置したい。

<バーストコントロール>
セレクタ(ディップスイッチ2個?)で以下のように定義する
3点バースト LH
5点バースト HL
フルオート  LL
トリガ2がONになった時点から電流センサの閾値越えをカウント。規定回数になったらモーターOFF。トリガ-1OFFでリセット。
フルオート時はトリガ1でのモーターON OFFのみ。

IF文を用いてタクトスイッチを押した数で機能が切り替わる形も有りだと思うが
その場合はLED等で現在の設定がどうなってるかを確認出来るようにする必要がある。
http://n.mtng.org/iArduino/ja/sample43.html
ここのプログラムを使えば単純なタクトスイッチの押し数で変更も可能と思われる。


<スピードコントロール>
前述の通りN555Pを用いたタイマーユニット経由で用いる。
具体的にはトリガ2がONになった時だけ、こちらを経由してFETを制御することでモーター速度を調整する。また調整速度は可変抵抗ボリュームで調整出来るようにする。


<プリセットダウンカウンタ>
カウント数定義をI2C制御下で行う。
999/300/150/120/50/20から選択
閾値越えで-1カウントをしていく
0になったらカウントを止める。
光センサやマイクロスイッチでマガジン脱着でリセット出来ると面白そうである。
マイクロスイッチを複数設置出来るならONになる位置でプリセット値を指定しておくとかも出来そうだがArdiunoの入力が足らんか。


<バッテリー電圧監視>
リポバッテリーは3.3V以下でつかうと充電出来なくなるらしい。なのでそれ以下で使わないよう、セーフティ機能を持たせたい。
要はバッテリーチェッカで指定電圧以下になった際に警告を発し、モーターへの給電をOFFにする機能。
市販の検査装置(警告ブザー付)があるので、そのブザー電圧をスイッチにしてArdiunoに拾わせ、キルスイッチとして使用する事を考えている。安いし。


これら全てをArdiuno単体でこなすことが出来れば幸いである。
設計として問題になりそうなのは実装の大きさとプログラムによる負荷である。
最悪ArdiunoProMINIを2つ用いて、機能を二つに分けて実装することも検討する。

まあ、諸君、ブルパップはいいぞ!(@w@)
スポンサーサイト

Comment

Comment Form
公開設定

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。