2019-01-09
昨年完成していたタイガーⅠをArduino+PS3版に改修します。
改修理由は機能アップです。
砲身上下可動と発光、機銃発光、ヘッドライト点滅、テールランプ点灯、そして速度可変、旋回のコントロールの操作性アップです。
先に、この仕様で製作したT34/85より内部が広いのでユニット搭載は楽です。
使用するArduinoはPro MIni 5V 16MHzです。
Nanoに比べてUSBポートが無いので短いです。
更にミニUSBホストシールドがPro Mini専用なので接続が楽です。
しかし、このミニUSBホストシールドにはVBUS以外は5Vをかけてはいけないとの事です。
とは言え、Nanoとの接続も何とか使えているので、Vccには3.3Vを印可して凌ぐことにします。
(電源は3.7Vリポバッテリなので、3.3Vはダイオードを1個介して接続します。)
換装を進める中で、サーボモータSG90を接続すると電源が落ちます。
小型のRC450の接続では大丈夫そうなので、原因を確定できていませんがRC450で進めます。
モータドライバはDRV8835を使います。
前回、上手く使いこなせかったのですが、何とか速度制御もできるようにスケッチを見直しました。
TB6612よりコンパクトで接続も2本少なくできるので助かります。
赤外線発光LEDはトランジスタを入れて出力アップしました。(射程距離アップです)
スケッチはタイガーⅠ用にカスタマイズします。
走行速度、サーボの可動範囲、回転方向などメカとのマッチングをスケッチ側で調整しました。
記録のためにスケッチと回路図を残します。
(規定以外での使用をしているところもありますので注意が必要です。)
- /* PS3BT_arduino_pro mini_tank_DRX8835_IRw_TIGER1specS
- モータドライバはDRX8835
- 砲撃時のリコイルアクション
- irremote PIN3 赤外線発光(砲撃)システム
- A0ピンに赤外線受光モジュール出力を接続し、被弾処理を追加
- 主砲発光はA1を使用
- IRremote Ver.0.1
- Arduino 1.8.7
- */
- #include <SoftwareSerial.h>
- #include <DFPlayer_Mini_Mp3.h>
- SoftwareSerial mySerial(A2, A3); // DFPlayer TX,RX
- #include <PS3BT.h>
- #include <usbhub.h>
- #ifdef dobogusinclude
- #include <spi4teensy3.h>
- #endif
- //#include <Usb.h> // needed by Arduino IDE
- #include <USB_Host_Shield_GPIO.h> // GPOUTピンで主砲LEDを発光させるため
- MaxGPIO max;
- USB Usb;
- BTD Btd(&Usb);
- PS3BT PS3(&Btd);
- //PS3BT PS3(&Btd, 0x00, 0x1B, 0xDC, 0xF2, 0x54, 0x32); //for Dongke A
- /*シリアルモニタにBluetooth DongleのアドレスがSerial.printされる。
- 書き出された6個のコードをスケッチを変更し、
- ドングルを指した状態でArduinoに書き込む(電源は切らない)
- ドングルを抜いてUSBケーブルでPS3コントローラを接続する(電源は切らない)
- ケーブルを抜いてドングルを指し直す(Arduinoを再起動する)
- PS3コントローラのPS ボタンを押してペアリングする。
- */
- #include <IRremote.h>
- IRsend irsend;
- int RECV_PIN = A0 ; //赤外線受光部をPIN A0に
- IRrecv irrecv(RECV_PIN);
- decode_results results; //受信信号を格納する
- const long sign_hit = 0x4CB0FADD;
- int cnt = 0 ;
- #include <VarSpeedServo.h>
- VarSpeedServo myservo;
- VarSpeedServo myservo_1;
- int servo_pos = 50;
- const int servo_sp = 10;
- const int servo1_sp = 1;
- int ch = 0;
- int pos_y;
- int pos_x;
- int pos_ry;
- int pos_rx;
- int motor_speed;
- int PWMA = 5; // A入力2/AENABLE 左モータ AIN2
- int PWMB = 6; // B入力2/BENABLE 右モータ BIN2
- int AIN1 = 4; // A入力1/APHASE 左モータ AIN1
- int BIN1 = 7; // B入力1/BPHASE 右モータ BIN1
- //const int LED_1 = A2; //主砲
- const int LED_2 = 2; //機銃
- const int LED_3 = A1 ; //ブレーキランプ
- const int LED_8 = 8 ; //ヘッドライト
- const int SVCH1 = A4; //servo 1
- const int SVCH2 = A5; //servo 2
- void setup() {
- irrecv.enableIRIn(); // Start the receiver
- pinMode(RECV_PIN, INPUT) ; // 赤外線受信モジュールに接続ピンをデジタル入力に設定
- pinMode(PWMA, OUTPUT);
- pinMode(PWMB, OUTPUT);
- pinMode(AIN1, OUTPUT);
- pinMode(BIN1, OUTPUT);
- pinMode(LED_2, OUTPUT);
- pinMode(LED_3, OUTPUT);
- pinMode(LED_8, OUTPUT);
- pinMode(SVCH1, OUTPUT);
- pinMode(SVCH2, OUTPUT);
- myservo.attach(SVCH1); //servo1 砲身上下
- myservo.write(servo_pos);
- myservo_1.attach(SVCH2); //servo2 砲塔旋回
- myservo_1.write(90);
- myservo_1.detach();
- Serial.begin (115200);
- mySerial.begin (9600);
- mp3_set_serial (mySerial); //set softwareSerial for DFPlayer-mini mp3 module
- mp3_set_volume (25); //max=30
- while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
- if (Usb.Init() == -1) {
- Serial.print(F("\r\nOSC did not start"));
- while (1); //halt
- }
- Serial.print(F("\r\nPS3 Bluetooth Library Started"));
- }
- void loop() {
- Usb.Task();
- if (irrecv.decode(&results)) { // 受信コードの値が
- if (results.value == sign_hit) { // 0x4CB0FADDだったら被弾
- //Serial.println("HIT!");
- Hit();
- }
- irrecv.resume();
- }
- if (PS3.PS3Connected) {
- pos_ry = PS3.getAnalogHat(RightHatY);
- if (pos_ry < 10 && servo_pos < 100 ) { // UP
- //if (pos_ry > 235 && servo_pos < 179 ) { // UP
- servo_pos++;
- myservo.write(servo_pos, servo_sp, true);
- } else if (pos_ry > 245 && servo_pos > 35 ) { //DOWN
- servo_pos--;
- myservo.write(servo_pos, servo_sp, true);
- } else if (PS3.getButtonClick(SQUARE)) { //CENTER
- servo_pos = 50;
- myservo.write(servo_pos, servo_sp, true);
- }
- //砲塔旋回
- pos_rx = PS3.getAnalogHat(RightHatX);
- if (pos_rx > 245) { //右旋回
- myservo_1.attach(SVCH2); //servo2 砲塔旋回
- myservo_1.write(180, servo1_sp);
- } else if (pos_rx < 10) { //左旋回
- myservo_1.attach(SVCH2); //servo2 砲塔旋回
- myservo_1.write(0, servo1_sp);
- } else { //停止
- myservo_1.write(90, 255);
- myservo_1.detach();
- }
- //砲撃 + リコイル
- if (PS3.getButtonClick(R1) && ch == 0 ) {
- int khz = 38; // 38kHz carrier frequency for the NEC protocol
- unsigned int irSignal[] = {4100, 1000, 2050, 2050, 1000}; // vs BATTLE TANK jr T-72 40MHz
- // AnalysIR Batch Export (IRremote) - RAW
- irsend.sendRaw(irSignal, (sizeof(irSignal) / sizeof(irSignal[0])), khz);
- //irsend.sendRaw(data buf, length, hertz)
- irrecv.enableIRIn(); // 受信を再開する
- mp3_play(15);
- max.write(0, HIGH); //主砲発光
- //delay(220);
- motor_run(200, 1, 200, 1, 1);
- ch = 5000; //約2秒間は砲撃不可
- delay(80);
- motor_run(0, 0, 0, 0, 1);
- delay(60);
- max.write(0, LOW); //主砲消灯
- motor_run(100, 0, 100, 0, 1);
- delay(200);
- motor_run(0, 0, 0, 0, 1);
- delay(140);
- } else {
- if (ch > 0) {
- ch--;
- }
- }
- //銃撃
- if ( PS3.getButtonClick(L1)) {
- mp3_play(10);
- for ( int i = 0; i < 5 ; i++) {
- digitalWrite(LED_2, HIGH);
- delay(80);
- digitalWrite(LED_2, LOW);
- delay(120);
- }
- }
- //ヘッドライト
- if (PS3.getButtonClick(RIGHT)) { //点灯
- digitalWrite(LED_8, HIGH);
- }
- if (PS3.getButtonClick(LEFT)) { //消灯
- digitalWrite(LED_8, LOW);
- }
- //走行コントロール
- pos_y = PS3.getAnalogHat(LeftHatY);
- pos_x = PS3.getAnalogHat(LeftHatX);
- //左スティックがセンター付近は停止(ブレーキ)
- if (pos_x >= 117 && pos_x <= 137 && pos_y >= 117 && pos_y <= 137) {
- motor_run(0, 0, 0, 0, 1);
- }
- //前進
- else if (pos_y < 117 && pos_x > 117 && pos_x < 137) {
- //左スティック中央(127)から最上部(0)の値をモーターのスピード0から255に変換
- motor_speed = map(pos_y, 117, 0, 0, 255);
- motor_run(motor_speed, 0, motor_speed, 0, 0);
- }
- //後進
- else if ( pos_y > 137 && pos_x > 117 && pos_x < 137) {
- motor_speed = map(pos_y, 137, 255, 0, 255) ;
- motor_run(motor_speed, 1, motor_speed, 1, 0);
- }
- //前進右旋回
- else if ( pos_y < 117 && pos_x > 137) {
- motor_speed = map(pos_y, 117, 0, 0, 255);
- motor_run(motor_speed, 0, 0, 0, 0);
- }
- //前進左旋回
- else if ( pos_y < 117 && pos_x < 117) {
- motor_speed = map(pos_y, 117, 0, 0, 255);
- motor_run(0, 0, motor_speed, 0, 0);
- }
- //後進右旋回
- else if ( pos_y > 137 && pos_x > 137) {
- motor_speed = map(pos_y, 137, 255, 0, 255);
- motor_run(motor_speed, 1, 0, 0, 0);
- }
- //後進左旋回
- else if ( pos_y > 137 && pos_x < 117) {
- motor_speed = map(pos_y, 137, 255, 0, 255);
- motor_run(0, 0, motor_speed, 1, 0);
- }
- //右超信地旋回
- else if ( pos_y > 117 && pos_y < 137 && pos_x > 137) {
- motor_speed = map(pos_x, 137, 255, 0, 255);
- motor_run(motor_speed, 0, motor_speed, 1, 0);
- }
- //左超信地旋回
- else if ( pos_y > 117 && pos_y < 137 && pos_x < 117) {
- motor_speed = map(pos_x, 117, 0, 0, 255);
- motor_run(motor_speed, 1, motor_speed, 0, 0);
- }
- }
- }
- void motor_run(int D0, int D1, int D2, int D3, int D4) {
- /* D0 : モータスピード(左)
- D1 : モータA(左)1 = HIGH / 0 = LOW
- D2 : モータスピード(右)
- D3 : モータB(右)1 = HIGH / 0 = LOW
- D4 : LED_3 ON/OFF 1 = HIGH / 0 = LOW
- */
- analogWrite(PWMA, D0);
- digitalWrite(AIN1, D1);
- analogWrite(PWMB, D2);
- digitalWrite(BIN1, D3);
- digitalWrite(LED_3, D4);
- }
- // ====被弾====
- void Hit() {
- mp3_play(17);
- motor_run(255, 1, 255, 0, 0);
- delay(150);
- motor_run(0, 0, 0, 0, 1);
- delay(100);
- motor_run(200, 0, 200, 1, 0);
- delay(200);
- motor_run(0, 0, 0, 0, 1);
- delay(50);
- cnt++;
- if ( cnt >= 5 ) {
- motor_run(0, 0, 0, 0, 0);
- mp3_play(18);
- for ( int i = 0; i < 15 ; i++) {
- digitalWrite(LED_8, HIGH);//ヘッドライト点灯
- delay(1000);
- digitalWrite(LED_8, LOW);//ヘッドライト消灯
- delay(1000);
- }
- //delay(30000); //復活までに30秒
- cnt = 0;
- } else {
- delay(1000);
- }
- }
2018-04-14
秋月電子の2chモータドライバAE-TB6612 (350円 送料別)を利用してモータ出力をアップして走行スピードを上げることにトライしました。
前回(2017-10-10)に、モータとギヤの変更で出力アップ、走行スピードアップを試みましたが1/35スケールスピードで9.9km/hという結果で、満足できていませんでした。
今回は市販のモータドライブユニットを利用して改良してみました。
具体的には現行のVSタンクユニットとモータの間にAE-TB6612を割り込ませるという方法です。
前回のギヤヘッドはこれです。
VSタンク純正ギヤモータを100rpmのギヤードモータに変更しています。
モータ出力をアップできたので、ギヤを組みなおしてギヤ比を変えて起動輪の回転スピードを上げます。
ギヤモータのピニオンギヤ(白)18Tと起動輪のピニオンギヤ(青)12Tは変更せず、24T+10Tのクラウン2段ギヤの変更と、36Tの2段ギヤを削除します。
クラウン2段ギヤの適当なものがないので、20Tのクラウンギヤ(ピンク)と26Tのピニオンギヤを接着して対処します。
減速比は1/1.6から1.95になり、3.12倍の速度が期待できます。
組み立て完成後、実際に1mの距離を走行させて時間計測してみました。
従来品は12.8秒、改良品は4.15秒。
3.1倍のスピードです。
1/35スケールスピードは9.9km/hから30.4km/hにアップできました。
実車の速度(整地)は40km/hということなので、そこそこまでは改善できました。
過去の製作記録
2017-10-10
1回目改良と2回目の起動輪の回転スピードを比較。
改善前:17.5秒/10回転
改善後:10.5秒/10回転 1.67倍にスピードアップ。
走行試験では改善後は1mを12.8秒で走行。 時速0.28km/hです。
1/35スケールなので35倍すると時速10km/hというところでしょうか。
タイガーⅠの実車平地走行での速度は40km/hという事なので、1/4のスピードしか出ていません。
フリウルの金属履帯で車体重量が大幅に重くなったことも要因の一つです。
しかし、これ以上のスピードアップはモータドライブ回路を含む走行ユニットのパワーアップが必須です。
アオシマの低価格赤外線コントロールバトル戦車の流用では無理です。
先人の方が実施している様に1/48スケールが限界という事でしょう。
2017-10-09
初段のピニオンギヤを12Tから18Tに歯数を増やし、次段のクラウンギヤを34T+12Tから24T+10Tに下げてみました。
計算上では終段の回転数が1.8倍にスピードアップされるはずですが、ユニットのモータドライブ回路に余裕があるかどうか?
ギヤボックスの変更をするたびにパーツの接着が剥がれたり、基板の半田付け部のリードが切れたり、予想以上の手間と時間がかかっちゃいました。
果たして狙い通りに2倍近いスピードアップが出来たのかどうか、速くなった実感は有りますがバッテリの充電完了後に確認します。
2017-10-05
パワー不足を改善検討中です。
先ず、トルク不足のメインモータを変更します。
駆動回路基板のモータドライブ回路のスペックが不明なので様子を見ながら変更します。
手元にあったギヤモータを接続してみたところ問題なさそうです。
ケースを改修しギヤモータを入れ替え、関連してギヤボックスも変更します。
モータ出力軸の向きが駆動輪軸と直行するため、初段はピニオン:平ギヤではなく、ピニオン:クラウンギヤの組み合わせにしました。
スピードはほとんど変化有りませんが、トルクアップは出来たようです。
因みに最終段ピニオンギヤ=起動輪の回転スピードは10回転で17.5秒です。未だ遅い・・・・
下図は変更する前です。
今後、ピニオンギヤの歯数を上げ、クラウンギヤの歯数を下げる事でギヤ比を小さくしてスピードアップの検討を予定中です。
2017-10-04
1/35 タイガーⅠ最後期生産型/タミヤの完成です。
可動ユニットはアオシマのVSタンクユニットを移設。
速度、トルク調整に平歯車、2段歯車などを追加しました。
履帯はフリウルモデルの金属製可動履帯ATL-06です。
履帯の枚数はタミヤ製作指示より左右各1枚減らしています。
可動ユニットの赤外線受光部は砲塔換気扇に、ダメージインジケータは砲塔べりスコープに設置。
赤外線発光ダイオードは同軸機銃の穴を3φに広げて設置しました。
2017-10-03
ウェザリング処理をし、履帯及び車体下部をピグメントで土汚れを追加しました。
電気配線を済ませ可動テスト。
砲塔の旋回がガタつくので改善が必要ですが、ほぼ完了です。
2017-10-02
ハンマー、スコップなどの鉄部はMrカラーMC212アイアンを筆塗し、磨いて光沢を出します。
添付の履帯が殆ど残っているので、車体前面にも予備の履帯を装備します。
デカールは第502重戦車大隊 第3中隊 中隊本部 308号車を選択しましたが、特に理由は有りません。
砲塔後部の車体番号のデカールは添付されていません。 他のキットでは添付されているようです。
2017-10-01
本塗装に入ります。
先ず、影をセミグロスブラックで入れます。
ベースカラーはMrカラーC39ダークイエローを影のセミグロスブラックを残す様に吹きます。
続いて、2色目のダークグリーンMrカラーC17を箱絵の迷彩を参考にフリーハンドで描き込みます。
3色目のレッドブラウンMrカラーC41を書き入れて完了。
砲塔周りに予備の履帯を取り付けます。
残りのパーツも取り付け、細部塗装は明日以降にします。
2017-09-30
今日は孫の運動会を見に行ったていたので、殆ど進んでいません。
それでも砲塔内にサブ基板、赤外線受光部、ダメージインジケータ等の配置方法もほぼ決まり、組み立ての関係から、ボデー上部と下部、砲塔天板と砲塔、其々マグネットで結合させることにしました。
これにより砲塔部の配線の引き回しが楽になります。
2017-09-28
手配していた2段ギヤが届いたので2mmのプラ板でケースを作り、自前のギヤボックスを製作。
イイ感じで出来たのでボデー上部を被せると。。。。。。
ギヤが当たって閉まらない。
1mm位かついでいるので、ボデーをルータで削り、ギヤボックスの角度を変えて何とかクリアー。
コントロール基板アッシーも取り付けます。
スイッチは別部品に取り換え、基板から外しました。
リード線を引き出すときに気が付いたのですが、この基盤のパターンがおかしい。
通常はバッテリーがCOMで回路インプットと充電端子を切替接続する回路のはずが、バッテリー(+)と充電端子(+)のパタンが繋がっていました。
履帯を装着して試運転。
スピードが出ないのは止むを得ないですが、少し緩すぎる様なので左右各1枚減らしました。
2017-09-27
砲塔の組み立てを進め、仮組みをしてオキサイドレッドでサフを吹きました。
操縦席、副操縦席、装填手のハッチは0.3mm真鍮線を通して開閉できるようにしました。
そろそろ赤外線受光器やダメージインジケータランプの取付場所も決めないといけません。
2017-09-26
ツィメリットコーティングに挑戦。
エポキシパテを0.5mmに薄く伸ばし貼り付ける方法も有るようですが、Mr.ホワイトパテR低粘度タイプを直接塗り付ける事にしました。
コーティングマークは自作のローラーで付けます。
ローラーが使えない部分は、プラ板や撹拌棒でマークを付けます。
適量に薄く塗り付ける為には、もう少し乾燥までの時間がかかるタイプのほうが良いかもです。
2017-09-25
起動輪の車軸の位置がシャーシ外板に近いため何時もの様な平歯車がセットできません。
シャーシの内側を少し削いで何とかピニオンギヤが装着できました。
VSタンクのギヤモータアッシーと繋ぐためには何枚かの歯車が要りますが手元には有りません。
構造を検討しないといけませんので後回しにして、模型の組立を進めます。
もう一つの難題が有りました。
タイガーⅠは吸着地雷除けに非磁性体塗装が施されていますが、このコーティングの再現が問題です。
同梱の製作指示にはパテを塗って幅5㎜のヘラ先でコーティングマークを付けると有りますが........
箱絵を参考にピッチ0.7㎜程度で幅5㎜のローラーを自作しました。
メーカー品も有るようですが、これで試してみます。
後先考えずにボデーに接着した作業道具でツィメリットコーティングの邪魔になるものを外しました。
外す際に破損した部品は似たようなものを作って置き換える予定です。
何時もの事ですが、接着する前によく考える事が大事ですね。
2017-09-23
シャーマンの次はタイガーⅠです。
選んだのはタミヤの1/35 タイガーⅠ 後期生産型です。
今回も動かす予定です。
先ず、サスペンションが効くように改造します。
接着ガイド用のピンを削除し、車軸にピアノ線を指してトーションバー式サスペンションにします。
誘導輪、転輪、起動輪などを組み立て、既に製作済みのフリウルの金属可動履帯を巻いてみました。
転輪の脱落防止が出来ていません。
車軸を熱変形させて外れないようにしたり、真鍮ピンを通したりいろいろやってみました。