Ganponブログ

趣味の模型作り、ドライブ、旅行など
since Mar.2017

ArduinoでRC可動戦車(5)

2018-10-31 00:19:01 | Arduino

2018-10-30
出力ピン不足で行き詰っていたら、ネットでUSBボスとシールドのGPIOが利用できることを知った。
早速、デジタル8個のデジタル出力を利用する。
前作に対して、Arduinoの3ピンはサーボ用に戻し、ヘッドライト、ストップランプ、砲撃、銃撃の4個のLEDを操作します。
因みに、このGPIOは3.3V出力なので注意が必要です。

Arduino PS3 Bluetooth controlled tank ver.3

 

【変更後のスケッチ】

/*
  PS3BT_arduino_tank_2dcmotor_TB6612_FIRE_A
  モータドライバはTB6612
  3ピンでサーボモータを動かす Ver.2
  砲撃時のリコイルアクション+LED点灯、銃撃時のLED点滅(5回)の機能を追加
  出力8本のGPIOを使用し、LED点灯をさせる
*/
#include
#include
#ifdef dobogusinclude
#include
#endif
#include // needed by Arduino IDE
#include
MaxGPIO max;
#include
Servo myservo;
int servo_pos = 90;
int val = 0;
int pos_y;
int pos_x;
int PWMA = 5; // ← 11  Aモータ PWM 左側モータ
int AIN1 = 4; // ← 9  Aモータ IN1  ( 9ピンはUSBホストシールド使用
int AIN2 = 2; // ← 8  Aモータ IN2
int BIN1 = 8; // ← 7  Bモータ IN1
int BIN2 = 7; // ← 6  Bモータ IN2
int PWMB = 6; // ← 10 Bモータ PWM 右側モータ ( 10ピンはUSBホストシールド使用
int motor_speed;
const int motor_sp1 = 128; //超信地旋回速度
const int motor_sp0 = 255; //超高速
USB Usb;
BTD Btd(&Usb); //そうしたBluetooth Dongleの事例を作成する必要があります
PS3BT PS3(&Btd); //これで事例が作成されます
//PS3BT PS3(&Btd, 0x00, 0x15, 0x83, 0x3D, 0x0A, 0x57);
// これにはBluetoothアドレスも格納されます
// これはスケッチを実行するときにドングルから取得できます
void setup() {
  pinMode(PWMA, OUTPUT);
  pinMode(AIN1, OUTPUT);
  pinMode(AIN2, OUTPUT);
  pinMode(BIN1, OUTPUT);
  pinMode(BIN2, OUTPUT);
  pinMode(PWMB, OUTPUT);
  myservo.attach(3); //servo1 ピン3  (9-11ピンは使えない)
  myservo.write(servo_pos);
  Serial.begin(115200);
  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 (PS3.PS3Connected) {
    //スティックの中央は127だけどピタリと止まらないので+-10ほど余裕を持たせる。
    //左スティック上下の値(最上部0、中央127、最下部255)を読み込む
    pos_y = PS3.getAnalogHat(LeftHatY);
    pos_x = PS3.getAnalogHat(LeftHatX);
    //砲撃
    //リコイル
    if (PS3.getButtonClick(R1) ) {
      Serial.println("FIRE");
      max.write(0, HIGH);
      digitalWrite(AIN1, LOW);
      digitalWrite(AIN2, HIGH);
      analogWrite(PWMA, motor_sp0);
      digitalWrite(BIN1, LOW);
      digitalWrite(BIN2, HIGH);
      analogWrite(PWMB, motor_sp0);
      delay(70);
      max.write(0, LOW);
      digitalWrite(AIN1, HIGH);
      digitalWrite(AIN2, LOW);
      analogWrite(PWMA, motor_sp1);
      digitalWrite(BIN1, HIGH);
      digitalWrite(BIN2, LOW);
      analogWrite(PWMB, motor_sp1);
      delay(95);
    }

    //サーボ UP/DOWN
    if (PS3.getButtonClick(DOWN) ||
        PS3.getAnalogHat(RightHatY) > 137 ||
        PS3.getAnalogHat(RightHatY)
      servo_pos = (int)( ( (float)PS3.getAnalogHat(RightHatY) / 255.0f ) * 180.0f);
      myservo.write(servo_pos);
      delay(20);
    }
    if (PS3.getButtonClick(UP)) {
      myservo.write(0);
      delay(20);
    }
    if (PS3.getButtonClick(DOWN)) {
      myservo.write(255);
      delay(20);
    }
    //銃撃
    if ( PS3.getButtonClick(L1)) {
      for ( int i = 0; i < 5 ; i++) {</span>
        val++;
        Serial.print("L1 : ");
        Serial.println(PS3.getButtonClick(L1));
        Serial.println("DA ");
        Serial.println(val);
        max.write(1, HIGH);
        delay(50);
        max.write(1, LOW);
        delay(50);
        Serial.println("");
      }
    }
    //ヘッドライト
    if (PS3.getButtonClick(RIGHT)) {
      max.write(7, HIGH);
    }
    if (PS3.getButtonClick(LEFT)) {
      max.write(7, LOW);
    }

    //左スティックがセンター付近は停止
    if (pos_x >= 117 && pos_x <= 137 && pos_y >= 117 && pos_y <= 137) {
      analogWrite(PWMA, 0);
      digitalWrite(AIN1, LOW);
      digitalWrite(AIN2, LOW);
      analogWrite(PWMA, 0);
      digitalWrite(BIN1, LOW);
      digitalWrite(BIN2, LOW);
      max.write(2, HIGH);
    }
    //前進
    else if (pos_y < 117 && pos_x > 117 && pos_x
      //左スティック中央(127)から最上部(0)の値をモーターのスピード0から255に変換
      motor_speed = map(pos_y, 117, 0, 0, 255);
      digitalWrite(AIN1, HIGH);
      digitalWrite(AIN2, LOW);
      analogWrite(PWMA, motor_speed);
      digitalWrite(BIN1, HIGH);
      digitalWrite(BIN2, LOW);
      analogWrite(PWMB, motor_speed);
      max.write(2, LOW);
    }
    //後進
    else if ( pos_y > 137 && pos_x > 117 && pos_x
      motor_speed = map(pos_y, 137, 255, 0, 255);
      digitalWrite(AIN1, LOW);
      digitalWrite(AIN2, HIGH);
      analogWrite(PWMA, motor_speed);
      digitalWrite(BIN1, LOW);
      digitalWrite(BIN2, HIGH);
      analogWrite(PWMB, motor_speed);
      max.write(2, LOW);
    }
    //前進右旋回
    else if ( pos_y < 117 && pos_x > 137) {
      motor_speed = map(pos_y, 117, 0, 0, 255);
      digitalWrite(AIN1, HIGH);
      digitalWrite(AIN2, LOW);
      analogWrite(PWMA, motor_speed);
      digitalWrite(BIN1, LOW);
      digitalWrite(BIN2, LOW);
      analogWrite(PWMB, motor_speed);
      max.write(2, LOW);
    }
    //前進左旋回
    else if ( pos_y
      motor_speed = map(pos_y, 117, 0, 0, 255);
      digitalWrite(AIN1, LOW);
      digitalWrite(AIN2, LOW);
      analogWrite(PWMA, motor_speed);
      digitalWrite(BIN1, HIGH);
      digitalWrite(BIN2, LOW);
      analogWrite(PWMB, motor_speed);
      max.write(2, LOW);
    }
    //後進右旋回
    else if ( pos_y > 137 && pos_x > 137) {
      motor_speed = map(pos_y, 137, 255, 0, 255);
      digitalWrite(AIN1, LOW);
      digitalWrite(AIN2, HIGH);
      analogWrite(PWMA, motor_speed);
      digitalWrite(BIN1, LOW);
      digitalWrite(BIN2, LOW);
      analogWrite(PWMB, motor_speed);
      max.write(2, LOW);
    }
    //後進左旋回
    else if ( pos_y > 137 && pos_x
      motor_speed = map(pos_y, 117, 0, 0, 255);
      digitalWrite(AIN1, LOW);
      digitalWrite(AIN2, LOW);
      analogWrite(PWMA, motor_speed);
      digitalWrite(BIN1, LOW);
      digitalWrite(BIN2, HIGH);
      analogWrite(PWMB, motor_speed);
      max.write(2, LOW);
    }
    //右超信地旋回
    else if ( pos_y > 117 && pos_y < 137 && pos_x > 137) {
      digitalWrite(AIN1, HIGH);
      digitalWrite(AIN2, LOW);
      analogWrite(PWMA, motor_sp1);
      digitalWrite(BIN1, LOW);
      digitalWrite(BIN2, HIGH);
      analogWrite(PWMB, motor_sp1);
      max.write(2, LOW);
    }
    //左超信地旋回
    else if ( pos_y > 117 && pos_y
      digitalWrite(AIN1, LOW);
      digitalWrite(AIN2, HIGH);
      analogWrite(PWMA, motor_sp1);
      digitalWrite(BIN1, HIGH);
      digitalWrite(BIN2, LOW);
      analogWrite(PWMB, motor_sp1);
      max.write(2, LOW);
    }
  }
}
 

 

 

 

 

 
 

ArduinoでRC可動戦車(4)

2018-10-30 13:28:08 | Arduino

2018-10-29
砲撃時のリコイルアクション+LED点灯、銃撃時のLED点滅(5回)の機能を追加しました。
残念ながら、現在のシステムでは出力ピンの空きは3から9までの7個です。
DCモータ1個に+、-、PWMの3個が2セットで6個と、LEDに1個で残りゼロです。

砲塔旋回、砲身上下などの機能を追加するにはどうするか?

Arduino PS3 Bluetooth controlled tank ver.2

【使用パーツ】
1.Aruduino UNO R3(ELEGOO)
2.USBホストシールド 2.0 for Arduino(互換品)
3.KKHMF デュアル・モータードライバ モジュール TB6612FNG
4.DD昇圧コンバータ(IN:
DC3V / OUT:DC5V):100均モバイルバッテリから移植
 モータドライブ用電源に使用
5.Lipoバッテリ DC3.7V 350mAh(DD昇圧コンバータ用)
6.006Pアルカリ電池(Arduino外部電源用)
7.タミヤ タンク工作基本セット[70108]
8.タミヤ ツインモーターギヤーボックス [70097]
9.タミヤ ユニバーサルプレートセット [70098]

(注意)DC5Vコンバータ出力電流値は0.8A(実測)でした。
    100均のモバイルバッテリのDDコンバータの使用は自己責任です。

【直近の問題点】
1.006Pアルカリ電池はもったいないので、他の電源供給方法を検討したい。
 この電圧が6Vまで下がってくると暴走します。


2018-10-30
009Pアルカリ電池の代替案を実施。
容量不足で使わなかったDDコンバータを使い、同じ3.7VのLipoバッテリからモータ用とは別のコンバータで5Vを作成。
Arduino外部入力(Vin)へ接続します。(実測電流値0.1A以下)
コンバータを分けることで、モータ駆動時のラッシュ電流などで5Vが一瞬低下してArduinoが動作不良するのを回避します。
動作テストの結果も良好なので、この方法で解決です。(100μFコンデンサ実装だけでは回避できない)

 

【ver.2のスケッチ】

/*
  PS3BT_arduino_tank_2dcmotor_TB6612
  モータドライバはTB6612
  サーボモータを動かす Ver.2
*/
#include <PS3BT.h>
#include <usbhub.h>
#ifdef dobogusinclude
#include <spi4teensy3.h>
#endif
const int LED = 3; //砲撃 LED 3ピン
int val = 0;
int pos_y;
int pos_x;
int PWMA = 5; // ← 11  Aモータ PWM 左側モータ
int AIN1 = 4; // ← 9  Aモータ IN1  ( 9ピンはUSBホストシールド使用
int AIN2 = 2; // ← 8  Aモータ IN2
int BIN1 = 8; // ← 7  Bモータ IN1
int BIN2 = 7; // ← 6  Bモータ IN2
int PWMB = 6; // ← 10 Bモータ PWM 右側モータ ( 10ピンはUSBホストシールド使用
int motor_speed;
const int motor_sp1 = 128; //超信地旋回速度
const int motor_sp0 = 255; //超高速
USB Usb;
BTD Btd(&Usb); //そうしたBluetooth Dongleの事例を作成する必要があります
PS3BT PS3(&Btd); //これで事例が作成されます
//PS3BT PS3(&Btd, 0x00, 0x15, 0x83, 0x3D, 0x0A, 0x57);
// これにはBluetoothアドレスも格納されます
// これはスケッチを実行するときにドングルから取得できます
void setup() {
  pinMode(PWMA, OUTPUT);
  pinMode(AIN1, OUTPUT);
  pinMode(AIN2, OUTPUT);
  pinMode(BIN1, OUTPUT);
  pinMode(BIN2, OUTPUT);
  pinMode(PWMB, OUTPUT);
  pinMode(LED, OUTPUT);
  Serial.begin(115200);
  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 (PS3.PS3Connected) {
    //スティックの中央は127だけどピタリと止まらないので+-10ほど余裕を持たせる。
    //左スティック上下の値(最上部0、中央127、最下部255)を読み込む
    pos_y = PS3.getAnalogHat(LeftHatY);
    pos_x = PS3.getAnalogHat(LeftHatX);
    //砲撃
    //リコイル
    if (PS3.getButtonClick(R1) ) {
      Serial.println("FIRE");
      digitalWrite(LED, HIGH);
      digitalWrite(AIN1, LOW);
      digitalWrite(AIN2, HIGH);
      analogWrite(PWMA, motor_sp0);
      digitalWrite(BIN1, LOW);
      digitalWrite(BIN2, HIGH);
      analogWrite(PWMB, motor_sp0);
      delay(70);
      digitalWrite(LED, LOW);
      digitalWrite(AIN1, HIGH);
      digitalWrite(AIN2, LOW);
      analogWrite(PWMA, motor_sp1);
      digitalWrite(BIN1, HIGH);
      digitalWrite(BIN2, LOW);
      analogWrite(PWMB, motor_sp1);
      delay(95);
    }
    //銃撃
    if ( PS3.getButtonClick(L1)) {
      for ( int i = 0; i < 5 ; i++) {
        val++;
        Serial.print("L1 : ");
        Serial.println(PS3.getButtonClick(L1));
        Serial.println("DA ");
        Serial.println(val);
        digitalWrite(LED, HIGH);
        delay(50);
        digitalWrite(LED, LOW);
        delay(50);
        Serial.println("");
      }
    }
    //左スティックがセンター付近は停止
    if (pos_x >= 117 && pos_x <= 137 && pos_y >= 117 && pos_y <= 137) {
      analogWrite(PWMA, 0);
      digitalWrite(AIN1, LOW);
      digitalWrite(AIN2, LOW);
      analogWrite(PWMA, 0);
      digitalWrite(BIN1, LOW);
      digitalWrite(BIN2, LOW);
    }
    //前進
    else if (pos_y < 117 && pos_x > 117 && pos_x < 137) {
      //左スティック中央(127)から最上部(0)の値をモーターのスピード0から255に変換
      motor_speed = map(pos_y, 117, 0, 0, 255);
      digitalWrite(AIN1, HIGH);
      digitalWrite(AIN2, LOW);
      analogWrite(PWMA, motor_speed);
      digitalWrite(BIN1, HIGH);
      digitalWrite(BIN2, LOW);
      analogWrite(PWMB, motor_speed);
    }
    //後進
    else if ( pos_y > 137 && pos_x > 117 && pos_x < 137) {
      motor_speed = map(pos_y, 137, 255, 0, 255);
      digitalWrite(AIN1, LOW);
      digitalWrite(AIN2, HIGH);
      analogWrite(PWMA, motor_speed);
      digitalWrite(BIN1, LOW);
      digitalWrite(BIN2, HIGH);
      analogWrite(PWMB, motor_speed);
    }
    //前進右旋回
    else if ( pos_y < 117 && pos_x > 137) {
      motor_speed = map(pos_y, 117, 0, 0, 255);
      digitalWrite(AIN1, HIGH);
      digitalWrite(AIN2, LOW);
      analogWrite(PWMA, motor_speed);
      digitalWrite(BIN1, LOW);
      digitalWrite(BIN2, LOW);
      analogWrite(PWMB, motor_speed);
    }
    //前進左旋回
    else if ( pos_y < 117 && pos_x < 117) {
      motor_speed = map(pos_y, 117, 0, 0, 255);
      digitalWrite(AIN1, LOW);
      digitalWrite(AIN2, LOW);
      analogWrite(PWMA, motor_speed);
      digitalWrite(BIN1, HIGH);
      digitalWrite(BIN2, LOW);
      analogWrite(PWMB, motor_speed);
    }
    //後進右旋回
    else if ( pos_y > 137 && pos_x > 137) {
      motor_speed = map(pos_y, 137, 255, 0, 255);
      digitalWrite(AIN1, LOW);
      digitalWrite(AIN2, HIGH);
      analogWrite(PWMA, motor_speed);
      digitalWrite(BIN1, LOW);
      digitalWrite(BIN2, LOW);
      analogWrite(PWMB, motor_speed);
    }
    //後進左旋回
    else if ( pos_y > 137 && pos_x < 117) {
      motor_speed = map(pos_y, 117, 0, 0, 255);
      digitalWrite(AIN1, LOW);
      digitalWrite(AIN2, LOW);
      analogWrite(PWMA, motor_speed);
      digitalWrite(BIN1, LOW);
      digitalWrite(BIN2, HIGH);
      analogWrite(PWMB, motor_speed);
    }
    //右超信地旋回
    else if ( pos_y > 117 && pos_y < 137 && pos_x > 137) {
      digitalWrite(AIN1, HIGH);
      digitalWrite(AIN2, LOW);
      analogWrite(PWMA, motor_sp1);
      digitalWrite(BIN1, LOW);
      digitalWrite(BIN2, HIGH);
      analogWrite(PWMB, motor_sp1);
    }
    //左超信地旋回
    else if ( pos_y > 117 && pos_y < 137 && pos_x < 117) {
      digitalWrite(AIN1, LOW);
      digitalWrite(AIN2, HIGH);
      analogWrite(PWMA, motor_sp1);
      digitalWrite(BIN1, HIGH);
      digitalWrite(BIN2, LOW);
      analogWrite(PWMB, motor_sp1);
    }
  }
}


 
 

ArduinoでRC可動戦車(3)

2018-10-30 00:59:36 | Arduino
2018-10-27
モータドライバーを従来よく使っていたTB6612に変えます。
こちらの方が電圧降下が少なく、より低い電圧で扱えます。
実装はArduino用ユニバーサル基板を使い、積み重ねます。
入力は3.7V350mAHのLipoバッテリで、100均のモバイルバッテリの中身の昇圧コンバータで5Vを作ります。
 
モータドライブシールドを止めたので、スケッチを書き換えます。
特にUSBホストシールドが9ピンと10ピンを使っているので、競合しない様に他のピンに振り替えます。
この競合の事は知らなかったのですが、基板組立後の動作確認時に誤動作を繰り返すことから判りました。
 
【変更後のスケッチ】
// PS3BT_arduino_tank_2dcmotor_TB6612
// 空きデジタルPIN2でLEDを点灯/消灯
//モータドライバはTB6612
#include <PS3BT.h>
#include <usbhub.h>
#ifdef dobogusinclude
#include <spi4teensy3.h>
#endif
USB Usb;
BTD Btd(&Usb); //そうしたBluetooth Dongleの事例を作成する必要があります
PS3BT PS3(&Btd); //これで事例が作成されます
//PS3BT PS3(&Btd, 0x00, 0x15, 0x83, 0x3D, 0x0A, 0x57);
// これにはBluetoothアドレスも格納されます
// これはスケッチを実行するときにドングルから取得できます
int pos_y;
int pos_x;
int PWMA = 5; // ← 11  Aモータ PWM 左側モータ
int AIN1 = 4; // ← 9  Aモータ IN1  ( 9ピンはUSBホストシールド使用
int AIN2 = 3; // ← 8  Aモータ IN2
int BIN1 = 8; // ← 7  Bモータ IN1
int BIN2 = 7; // ← 6  Bモータ IN2
int PWMB = 6; // ← 10 Bモータ PWM 右側モータ ( 10ピンはUSBホストシールド使用
int motor_speed;
const int motor_sp1 = 128; //超信地旋回速度
const int motor_sp0 = 0; //超低速
const int LED = 2;
int btn;
int i ;
 
void setup() {
  Usb.Init();
  Serial.begin(115200);
  while (!Serial); // シリアルポートが接続するのを待つ
  if (Usb.Init() == -1) {
    Serial.print(F("\r\nOSC did not start"));
    while (1); //halt
  }
  Serial.print(F("\r\nPS3 Bluetooth Library Started"));
  pinMode(PWMA, OUTPUT);
  pinMode(AIN1, OUTPUT);
  pinMode(AIN2, OUTPUT);
  pinMode(BIN1, OUTPUT);
  pinMode(BIN2, OUTPUT);
  pinMode(PWMB, OUTPUT);
  pinMode(LED, OUTPUT);
  // turn on servo
  //servo0.attach(9);
  //servo1.attach(10);
}
void loop() {
  Usb.Task();
  if (PS3.PS3Connected) {
    //スティックの中央は127だけどピタリと止まらないので+-10ほど余裕を持たせる。
    //左スティック上下の値(最上部0、中央127、最下部255)を読み込む
    pos_y = PS3.getAnalogHat(LeftHatY);
    pos_x = PS3.getAnalogHat(LeftHatX);
    pos_rx = PS3.getAnalogHat(RightHatX);
    //LED点灯
    if (PS3.getButtonClick(UP)) {
      digitalWrite(LED, HIGH);
    }
    //LED消灯
    if (PS3.getButtonClick(DOWN)) {
      digitalWrite(LED, LOW);
    }
    //サーボUP
    //    if (PS3.getButtonClick(TRIANGLE)) {
    //      servo0.write(168);
    //      delay(20);
    //    }
    //サーボDOWN
    //    if (PS3.getButtonClick(CROSS)) {
    //      servo0.write(12);
    //      delay(20);
    //    }
    //サーボ右回転
    //    if (pos_rx > 137) {
    //      servo1.write(168);
    //      delay(20);
    //    }
    //サーボ左回転
    //    if (pos_rx < 117 ) {
    //      servo1.write(12);
    //      delay(20);
    //    }
    //左スティックがセンター付近は停止
    if (pos_x >= 117 && pos_x <= 137 && pos_y >= 117 && pos_y <= 137) {
      analogWrite(PWMA, 0);
      digitalWrite(AIN1, LOW);
      digitalWrite(AIN2, LOW);
      analogWrite(PWMA, 0);
      digitalWrite(BIN1, LOW);
      digitalWrite(BIN2, LOW);
    }
    //前進
    else if (pos_y < 117 && pos_x > 117 && pos_x < 137) {
      //左スティック中央(127)から最上部(0)の値をモーターのスピード0から255に変換
      motor_speed = map(pos_y, 117, 0, 0, 255);
      digitalWrite(AIN1, HIGH);
      digitalWrite(AIN2, LOW);
      analogWrite(PWMA, motor_speed);
      digitalWrite(BIN1, HIGH);
      digitalWrite(BIN2, LOW);
      analogWrite(PWMB, motor_speed);
    }
    //後進
    else if ( pos_y > 137 && pos_x > 117 && pos_x < 137) {
      motor_speed = map(pos_y, 137, 255, 0, 255);
      digitalWrite(AIN1, LOW);
      digitalWrite(AIN2, HIGH);
      analogWrite(PWMA, motor_speed);
      digitalWrite(BIN1, LOW);
      digitalWrite(BIN2, HIGH);
      analogWrite(PWMB, motor_speed);
    }
    //前進右旋回
    else if ( pos_y < 117 && pos_x > 137) {
      motor_speed = map(pos_y, 117, 0, 0, 255);
      digitalWrite(AIN1, HIGH);
      digitalWrite(AIN2, LOW);
      analogWrite(PWMA, motor_speed);
      digitalWrite(BIN1, LOW);
      digitalWrite(BIN2, LOW);
      analogWrite(PWMB, motor_speed);
    }
    //前進左旋回
    else if ( pos_y < 117 && pos_x < 117) {
      motor_speed = map(pos_y, 117, 0, 0, 255);
      digitalWrite(AIN1, LOW);
      digitalWrite(AIN2, LOW);
      analogWrite(PWMA, motor_speed);
      digitalWrite(BIN1, HIGH);
      digitalWrite(BIN2, LOW);
      analogWrite(PWMB, motor_speed);
    }
    //後進右旋回
    else if ( pos_y > 137 && pos_x > 137) {
      motor_speed = map(pos_y, 137, 255, 0, 255);
      digitalWrite(AIN1, LOW);
      digitalWrite(AIN2, HIGH);
      analogWrite(PWMA, motor_speed);
      digitalWrite(BIN1, LOW);
      digitalWrite(BIN2, LOW);
      analogWrite(PWMB, motor_speed);
    }
    //後進左旋回
    else if ( pos_y > 137 && pos_x < 117) {
      motor_speed = map(pos_y, 117, 0, 0, 255);
      digitalWrite(AIN1, LOW);
      digitalWrite(AIN2, LOW);
      analogWrite(PWMA, motor_speed);
      digitalWrite(BIN1, LOW);
      digitalWrite(BIN2, HIGH);
      analogWrite(PWMB, motor_speed);
    }
    //右超信地旋回
    else if ( pos_y > 117 && pos_y < 137 && pos_x > 137) {
      digitalWrite(AIN1, HIGH);
      digitalWrite(AIN2, LOW);
      analogWrite(PWMA, motor_sp1);
      digitalWrite(BIN1, LOW);
      digitalWrite(BIN2, HIGH);
      analogWrite(PWMB, motor_sp1);
    }
    //左超信地旋回
    else if ( pos_y > 117 && pos_y < 137 && pos_x < 117) {
      digitalWrite(AIN1, LOW);
      digitalWrite(AIN2, HIGH);
      analogWrite(PWMA, motor_sp1);
      digitalWrite(BIN1, HIGH);
      digitalWrite(BIN2, LOW);
      analogWrite(PWMB, motor_sp1);
    }
  }
}
 
 
 

ArduinoでRC可動戦車(2)

2018-10-29 12:55:56 | Arduino
2018-10-23
PS3コントローラ、USBシールド、モータードライブシールド、Bluetoothドングルを入手。
ジョイスティックで有線コントロールから、PS3コントローラで無線コントロールへ挑戦します。
 
2018-10-24
入手したモータードライブシールドのモータ1の出力がPWM制御出来ていなかった。
当初はスケッチ(プログラム)の誤りと思い、いろいろ変更したり、使用実績のあるモータドライバに変更するためにスケッチを書き直したり。。。。。。
テストで接続したモータ1からモータ4に接続変更すると正常にPWM制御でき速度可変に出来た。
どの段階で故障したのかは不明のため、代理店への返品は見送ります。(モータ2,3,4は使える)
1モータでの動作確認ができたので、2モータで直進、後進、右旋回、左旋回、停止、右超信地旋回、左超信地旋回をPS3コントローラを使いluetoothで無線コントロールするスケッチを書きます。
書き上げては、検証、コンパイル、書き込み、実行、修正、を繰り返し、何とか完成しました。
 
タミヤの楽しい工作キットで実際に走るタンクを試作します。
 
3枚の基板が段積みになっています。
下がArduino UNO
中がUSBシールド(USBトングルが装着されてます)
上がモータドライブシールドです。
3.7Vバッテリで動作させるには、低ON抵抗の他のモータドライバに変更する必要が有ります。
出来ましたが、第1転輪と第3転輪の距離が短すぎて不安定です。
10mm広げます。
モータドライブシールド外部電源の単3電池x4ボックス(6V)は車体下部へ移動。

Arduinoユニット右は006P電池です。
Arduinoの外部電源入力ジャックに接続しています。
外部電源の仕様は7~12Vですが。。。。
仕様より低いDC5Vを印可した場合でも辛うじて動きました。
この場合、3.3V出力端子は3.3V。 5v出力端子は3.3V。 Vinは4.3V。
やはり5V系の適正電圧が出ていません。
 外部電源入力に006P電池(9v)を印可すると、3.3V出力端子は3.3V。 5v出力端子は4.5V。 Vinは5.5V。
 
 
 
Arduino PS3 Bluetooth controlled tank  試運転
 

 

 

 

 

 

 


ArduinoでRC可動戦車(1)【Arduinoスケッチ訂正版】

2018-10-25 21:55:20 | Arduino
2018-10-19
arduinoの基礎勉強をしてきたが、このへんで当初の目的であったarduinoでRC可動戦車を動かす計画に入ります。
これまでの応用で、ジョイスティックで2個のDCモータをPWM速度可変で動かします。
DCモータはモータドライバーを介して動かします。

スティック操作と動きは、慣れたVSタンクの仕様に準拠させます。
↑で直進、↓で後進、
→で右超信地旋回、←左超信地旋回、
右斜め上で前進右旋回、左斜め上で前進左旋回、
右斜め下で後進右旋回、左斜め下で後進左旋回、
中央付近(フリーポジション)で停止。
スティックの角度(位置)で低速から高速までコントロールします。

Arduino Joystick 2 DC motor control

【接続図】



//joystick_control_2_dc_motor_B
//1個のjoystickで2個のDCモータをコントロールし前進、後退、信地旋回、超信地旋回させる
int joystick_x = A0;
int joystick_y = A1;
int pos_x;
int pos_y;
int PWMA = 11; //Aモータ PWM 右側モータ
int AIN1 = 9; //Aモータ IN1
int AIN2 = 8; //Aモータ IN2
int BIN1 = 7; //Bモータ IN1
int BIN2 = 6; //Bモータ IN2
int PWMB = 10; //Bモータ PWM 左側モータ
int motor_speed;
const int speed1 = 128; //超信地旋回速度
void setup ( ) {
Serial.begin (9600); //9600bpsでシリアル通信
pinMode(PWMA, OUTPUT);
pinMode(AIN1, OUTPUT);
pinMode(AIN2, OUTPUT);
pinMode(BIN1, OUTPUT);
pinMode(BIN2, OUTPUT);
pinMode(PWMB, OUTPUT);
pinMode (joystick_x, INPUT) ;
pinMode (joystick_y, INPUT) ;
}
void loop () {
pos_x = analogRead (joystick_x) ; //joystickのX方向の値 0-400-600-1023
pos_y = analogRead (joystick_y) ; //joystickのY方向の値 0-400-600-1023
if ((pos_x > 400) && (pos_x < 600) && (pos_y < 400)) { //前進
motor_speed = map(pos_y, 400, 0, 0, 255);
digitalWrite(AIN1, LOW);
digitalWrite(AIN2, HIGH);
analogWrite(PWMA, motor_speed);
digitalWrite(BIN1, LOW);
digitalWrite(BIN2, HIGH);
analogWrite(PWMB, motor_speed);
}
//joystickセンター付近は停止
else if ((pos_x > 400) && (pos_x < 600) && (pos_y > 400) && (pos_y < 600)) {
digitalWrite(AIN1, LOW);
digitalWrite(AIN2, LOW);
digitalWrite(BIN1, LOW);
digitalWrite(BIN2, LOW);
}
else if ((pos_x > 400) && (pos_x < 600) && (pos_y > 600)) { //後進
motor_speed = map(pos_y, 600, 1023, 0, 255);
digitalWrite(AIN1, HIGH);
digitalWrite(AIN2, LOW);
analogWrite(PWMA, motor_speed);
digitalWrite(BIN1, HIGH);
digitalWrite(BIN2, LOW);
analogWrite(PWMB, motor_speed);
}
else if ((pos_x > 600) && (pos_y < 400)) { //前進􀘙右旋回
motor_speed = map(pos_y, 400, 0, 0, 255);
digitalWrite(AIN1, LOW);
digitalWrite(AIN2, LOW);
analogWrite(PWMA, motor_speed);
digitalWrite(BIN1, LOW);
digitalWrite(BIN2, HIGH);
analogWrite(PWMB, motor_speed);
}
else if ((pos_x > 600) && (pos_y > 400) && (pos_y < 600)) { //右超信地旋回
digitalWrite(AIN1, HIGH);
digitalWrite(AIN2, LOW);
analogWrite(PWMA, speed1);
digitalWrite(BIN1, LOW);
digitalWrite(BIN2, HIGH);
analogWrite(PWMB, speed1);
}
else if ((pos_x > 600) && (pos_y > 600)) { //後進右旋回
motor_speed = map(pos_y, 600, 1023, 0, 255);
digitalWrite(AIN1, LOW);
digitalWrite(AIN2, LOW);
analogWrite(PWMA, motor_speed);
digitalWrite(BIN1, HIGH);
digitalWrite(BIN2, LOW);
analogWrite(PWMB, motor_speed);
}
else if ((pos_x < 400) && (pos_y < 400)) { //前進左旋回
motor_speed = map(pos_y, 400, 0, 0, 255);
digitalWrite(AIN1, LOW);
digitalWrite(AIN2, HIGH);
analogWrite(PWMA, motor_speed);
digitalWrite(BIN1, LOW);
digitalWrite(BIN2, LOW);
analogWrite(PWMB, motor_speed);
}
else if ((pos_x < 400) && (pos_y > 400 && pos_y < 600)) { //左超信地旋回
digitalWrite(AIN1, LOW);
digitalWrite(AIN2, HIGH);
analogWrite(PWMA, speed1);
digitalWrite(BIN1, HIGH);
digitalWrite(BIN2, LOW);
analogWrite(PWMB, speed1);
}
else if ((pos_x < 400) && (pos_y > 600)) { //後進左旋回
motor_speed = map(pos_y, 600, 1023, 0, 255);
digitalWrite(AIN1, HIGH);
digitalWrite(AIN2, LOW);
analogWrite(PWMA, motor_speed);
digitalWrite(BIN1, LOW);
digitalWrite(BIN2, LOW);
analogWrite(PWMB, motor_speed);
}
}


ArduinoでRC可動戦車(1)

2018-10-25 21:54:15 | Arduino

2018-10-19
arduinoの基礎勉強をしてきたが、このへんで当初の目的であったarduinoでRC可動戦車を動かす計画に入ります。
これまでの応用で、ジョイスティックで2個のDCモータをPWM速度可変で動かします。
DCモータはモータドライバーを介して動かします。

スティック操作と動きは、慣れたVSタンクの仕様に準拠させます。
↑で直進、↓で後進、
→で右超信地旋回、←左超信地旋回、
右斜め上で前進右旋回、左斜め上で前進左旋回、
右斜め下で後進右旋回、左斜め下で後進左旋回、
中央付近(フリーポジション)で停止。
スティックの角度(位置)で低速から高速までコントロールします。

Arduino Joystick 2 DC motor control

【接続図】

 

【スケッチ】一部が欠落していたので、訂正版を公開します。2022-04-26
朱書きの行をコメントに書いた内容に置き換えてください。

joystick_control_2_dc_motor_B.ino 


1: //joystick_control_2_dc_motor_B
2: //1個のjoystickで2個のDCモータをコントロールし前進、後退、信地旋回、超信地旋回させる
3: int joystick_x = A0;
4: int joystick_y = A1;
5: int pos_x;
6: int pos_y;
7: int PWMA = 11; //Aモータ PWM 右側モータ
8: int AIN1 = 9; //Aモータ IN1
9: int AIN2 = 8; //Aモータ IN2
10: int BIN1 = 7; //Bモータ IN1
11: int BIN2 = 6; //Bモータ IN2
12: int PWMB = 10; //Bモータ PWM 左側モータ
13: int motor_speed;
14: const int speed1 = 128; //超信地旋回速度
15: void setup ( ) {
16: Serial.begin (9600); //9600bpsでシリアル通信
17: pinMode(PWMA, OUTPUT);
18: pinMode(AIN1, OUTPUT);
19: pinMode(AIN2, OUTPUT);
20: pinMode(BIN1, OUTPUT);
21: pinMode(BIN2, OUTPUT);
22: pinMode(PWMB, OUTPUT);
23: pinMode (joystick_x, INPUT) ;
24: pinMode (joystick_y, INPUT) ;
25: }
26: void loop () {
27: pos_x = analogRead (joystick_x) ; //joystickのX方向の値 0-400-600-1023
28: pos_y = analogRead (joystick_y) ; //joystickのY方向の値 0-400-600-1023
29: if ((pos_x > 400) && (pos_x
30: motor_speed = map(pos_y, 400, 0, 0, 255);
31: digitalWrite(AIN1, LOW);
32: digitalWrite(AIN2, HIGH);
33: analogWrite(PWMA, motor_speed);
34: digitalWrite(BIN1, LOW);
35: digitalWrite(BIN2, HIGH);
36: analogWrite(PWMB, motor_speed);
37: }
38: //joystickセンター付近は停止
39: else if ((pos_x > 400) && (pos_x < 600) && (pos_y > 400) && (pos_y
40: digitalWrite(AIN1, LOW);
41: digitalWrite(AIN2, LOW);
42: digitalWrite(BIN1, LOW);
43: digitalWrite(BIN2, LOW);
44: }
45: else if ((pos_x > 400) && (pos_x < 600) && (pos_y > 600)) { //後進
46: motor_speed = map(pos_y, 600, 1023, 0, 255);
47: digitalWrite(AIN1, HIGH);
48: digitalWrite(AIN2, LOW);
49: analogWrite(PWMA, motor_speed);
50: digitalWrite(BIN1, HIGH);
51: digitalWrite(BIN2, LOW);
52: analogWrite(PWMB, motor_speed);
53: }
54: else if ((pos_x > 600) && (pos_y
55: motor_speed = map(pos_y, 400, 0, 0, 255);
56: digitalWrite(AIN1, LOW);
57: digitalWrite(AIN2, LOW);
58: analogWrite(PWMA, motor_speed);
59: digitalWrite(BIN1, LOW);
60: digitalWrite(BIN2, HIGH);
61: analogWrite(PWMB, motor_speed);
62: }
63: else if ((pos_x > 600) && (pos_y > 400) && (pos_y
64: digitalWrite(AIN1, HIGH);
65: digitalWrite(AIN2, LOW);
66: analogWrite(PWMA, speed1);
67: digitalWrite(BIN1, LOW);
68: digitalWrite(BIN2, HIGH);
69: analogWrite(PWMB, speed1);
70: }
71: else if ((pos_x > 600) && (pos_y > 600)) { //後進右旋回
72: motor_speed = map(pos_y, 600, 1023, 0, 255);
73: digitalWrite(AIN1, LOW);
74: digitalWrite(AIN2, LOW);
75: analogWrite(PWMA, motor_speed);
76: digitalWrite(BIN1, HIGH);
77: digitalWrite(BIN2, LOW);
78: analogWrite(PWMB, motor_speed);
79: }
80: else if ((pos_x
81: motor_speed = map(pos_y, 400, 0, 0, 255);
82: digitalWrite(AIN1, LOW);
83: digitalWrite(AIN2, HIGH);
84: analogWrite(PWMA, motor_speed);
85: digitalWrite(BIN1, LOW);
86: digitalWrite(BIN2, LOW);
87: analogWrite(PWMB, motor_speed);
88: }
89: else if ((pos_x < 400) && (pos_y > 400 && pos_y
90: digitalWrite(AIN1, LOW);
91: digitalWrite(AIN2, HIGH);
92: analogWrite(PWMA, speed1);
93: digitalWrite(BIN1, HIGH);
94: digitalWrite(BIN2, LOW);
95: analogWrite(PWMB, speed1);
96: }
97: else if ((pos_x < 400) && (pos_y > 600)) { //後進左旋回
98: motor_speed = map(pos_y, 600, 1023, 0, 255);
99: digitalWrite(AIN1, HIGH);
100: digitalWrite(AIN2, LOW);
101: analogWrite(PWMA, motor_speed);
102: digitalWrite(BIN1, LOW);
103: digitalWrite(BIN2, LOW);
104: analogWrite(PWMB, motor_speed);
105: }
106: }
107:


 
 

Arduinoをはじめよう

2018-10-24 15:02:11 | Arduino

2018-09-30
ふとしたことから「Arduinoをはじめよう 第3版」を古本で手に入れました。
記憶力が衰える毎日ですが、67歳になって勉強を始めてみようと思います。

読み始めると、直ぐにキットが必要になります。
そこでArduino UNO互換機をネットで入手。
Uno R3 コントロールボード以外に、ブレッドボード、LED,抵抗、Cds、スイッチ、LCD、モータ、サーボ、リレーなどの教材に使うパーツが入っているので助かります。

Arduino IDEはネットで入手。
「Arduinoをはじめよう」(以下、テキスト)にそって、スケッチをArduino IDEに書き込み、ベリファイ、コンパイル、マイコンボードに書き込み、そして動作の確認。
文法やコマンドリファレンスなど覚えることが多いですが、最後まで挫けずにいきたいです。



10日経過しました。
未だ挫折していません。
テキストに沿ってスケッチを入力し、検証し、マイコンボードに書き込み、実行させます。
毎日がこの繰り返しです。

「Arduinoをはじめよう 第3版」
10/01 Example4-2 ボタンが押されている間、LEDを点灯。
10/01 Example4-3 ボタンが押されている間、LEDを点灯。
10/01 Example4-5 ボタンが押されている間、LEDを点灯。ボタンのバウンジング対応。
10/01 Example5-2 ボタンを押したままで明るさが変化する。
10/01 Example5-3 Cdsを接続し、アナログ入力の値に応じて点滅周期が変わる。
10/01 Example5-4 周囲が明るいとLEDは明るく、暗いとLEDも暗くなる。
10/06 Example5-5 アナログ入力ピン0の値をPCにデータ転送し、シリアルモニタで確認する。
10/09 Example7-2 Aruduinoネットワークランプ(LEDはRGB_LEDに変更)
         シリアルモニタから文字入力、送信して色を変化させる。

「ELEGOO UNO R3 スーパースターターキット」の演習もやってみます。
10/06 Lesson4 RGB_LED
10/06 Lesson5 デジタル入力 ボタンAでLED点灯、BでLEDオフ
10/06 Lesson6 アクティブブザー
10/06 Lesson7 パッシブブザーで音階を発生
10/06 Lesson8 傾斜スイッチでLED点灯
10/06 Lesson9 サーボモータを0度から180度まで連続動作
10/07 Lesson9 自習 ボタンA,Bを追加して、ボタンでcw,ccw回転をさせる
10/12 Lesson13 赤外線モジュールでリモコンのコードを読む
10/14 Lesson10 超音波モジュールで障害物までの距離を測定
10/14 Lesson11 DHT11 温度と湿度を測定
10/14 Lesson12 アナログジョイスティックの値を読む

そろそろ、無線でモータなどをコントロールすることを目標に、ネットで調査を始めます。
PS3コントローラをBluetoothでArduinoに接続したいと考えています。



RC可動化 1/35 タミヤ M26パーシング(完成)

2018-10-18 16:10:10 | 1/35 タミヤ パーシング

2018-10-18
モータドライバは制御側電源VCCとモータ電源VMは分ける様に指示されています。
しかし、これまで2電源にせずに1電源でやっていました。
ときどき発生する誤動作の原因として考えられますが、別けても解消しないこともあり、1電源のままです。
しかし、基板の+側は別なのですが、-側のパターンがものすごく細いことに気が付きました。
この線をリード線で引き直して完成としました。

ということで、完成写真です。
1枚目だけは画像をクリックすると拡大表示します。

画像をクリックすると拡大します

 

そして、動画です。




RC可動化 1/35 タミヤ M26パーシング(その11)

2018-10-17 17:59:46 | 1/35 タミヤ パーシング

2018-10-13
木箱を載せ、ロープをかけます。
ロープはAWG28電線です。
フックは省略です。

フィギュアを載せます。

M2重機関銃は少し手を入れます。

墨入れをして艶消しクリアーを吹きます。
サイドスカートも付けます。

おっと、デカールを貼る前に艶消しクリアーを吹いてしまった。
後はデカール、汚しの追加、トップコートで完了です。

2018-10-16
デカール貼り、泥羽汚れの追加をしました。
完成まじかですが、ここで気になることを対処します。
フリウル金属履帯の重量増加に対して、サスの強化をします。
全ての内蔵パーツを外し、トーションバーに使った0.4mmピアノ線を0.5mmに取り換えます。
作業中にサスアームが2本折れてしまったのも何とか改修しました。
置いておくのなら履帯は多少弛みがあった方が良いのですが、走行させるときには弛みのせいで起動輪から履帯が外れて空回りする事が有ります。
後輪駆動のこのキットでは後進時に空回りが発生し易いので、履帯を1枚減らすことにします。
結局、履帯は片側75枚です。


RC可動化 1/35 タミヤ M26パーシング(その10)

2018-10-13 01:20:58 | 1/35 タミヤ パーシング

2018-10-12
車体上面と砲塔の塗装をします。
今回もMr.カラーのカラーモジュレーションセット・オリーブドラブを使用します。
先ず、オキサイドレッドサフを吹きます。

次にODシャドーを吹きます。

そしてシャドーを残すようにオリーブドラブを全体に吹きます。

ODハイライト1を凸部、明るい部分に吹きます。

更に、ハイライト1を塗った上に、ハイライト2をグラデーションの先端に吹きます。

こんな感じになりました。

この先は、残りのOVMパーツ搭載、墨入れ、デカール、艶消しトップコートなどが有りますが、完成が見えてきました。
履帯はC40ジャーマングレーの補充が出来たので、吹きなおしました。


RC可動化 1/35 タミヤ M26パーシング(その9 履帯)

2018-10-11 17:46:13 | 1/35 タミヤ パーシング

2018-10-10
フリウルモデルのM26パーシング用T80E1履帯ATL-145を組立てます。

セット内訳は履帯が2種類と0.5mm真鍮線。
起動輪、誘導輪周りのRが小さい箇所用が35枚と直線部用が150枚です。

因みにタミヤキットのベルトタイプ履帯は82枚、連結可動履帯では84か86枚というとこです。
全てが直線部用で良いのですが数が足りません。
10枚ごとに曲線部用を1枚使用します。
これまで組立てたフリウルの履帯はピン貫通型ばかりでしたが、今回は両側から刺すタイプです。
事前に0.5mmドリルで穴を開け直しておきます。


数枚組み立てて起動輪に巻いてみます。

事件です!
巻けません。
履帯に対して起動輪の横巾が短い。

今更どうしようもないので、起動輪を改造することにします。
切断して、2tプラ板スペーサをかませてることにします。

切断した起動輪を接着するときに、履帯(13枚)を巻いて左右のずれなどが出ない様にします。

上手く加工できたようです。

後はひたすら加工します。
巻いてみると77枚で良いようです。

組みあがったので、履かせます。
重い!  2個で206gあります。
重量が増えたので、走行速度が遅くなったようです。

前進するときに弛みが大きく、起動輪との噛み合いが気になります。
1枚減らし、76枚にします。

 


2018-10-11
履帯の塗装です。
何時もなら両面にTS4ジャーマングレイを吹いた後で、側面に軽くTS1レッドブラウンを吹きまが、TS4が品切れです。
そこで、オオキサイドレッド サフを吹き、エアブラシでC40ジャーマングレーを吹きます。
C40も殆ど残っていないので、MC212アイアンを混ぜました。
更に表面を軽くサンディングして、凸面のみホワイトメタルの地色を出します。

重量増加によるトルク不足は今後の課題ですが、取り敢えず履帯組み立ては完了です。

 


2018-10-11【追記】
ギヤボックスを分解して微調整、次段とのギヤの位置調整をします。

そして実走テストで計測します。

 前回(ベルトゴム履帯) 7.2s/m → 0.139m/s = 0.5km/h (1/35換算 17.5km/h)
 今回(金属可動履帯)
  6.5s/m → 0.154m/s = 0.55km/h (1/35換算 19.4km/h)

調整の効果も出ているようで、多少早くなりました。(ホッ。)

 


RC可動化 1/35 タミヤ M26パーシング(その8)

2018-10-09 19:07:17 | 1/35 タミヤ パーシング

2018-10-08
今日は車体上面の10枚のハッチを開閉可動加工します。
中央の4枚のハッチはドリルが届かないので、車体側ヒンジはAWG28電線被覆を利用。
ヒンジピンは0.2mm真鍮線です。
前の2枚のハッチは貫通せず、両側から0.3mm真鍮線を指します。
ハッチ裏の白いものは、ハッチが振動で開かない様にするためのプラ丸棒です。

ヘッドライトはチップLEDを組み込みます。

2018-10-09
引き続き車体上面の組立です。
ライトガードや収納箱、ワイヤーなどを組み付けて完了です。

砲塔の組立です。
左側面のハッチを開閉改造します。

ハッチとヒンジに切り分け、砲塔側に穴をあけます。

砲塔上部の2個のハッチも開閉改造します。

未だ未取り付けのパーツが若干有りますが、組み立て作業は大詰めです。
フリウルの金属連結履帯が届きましたので、本体の組立は中断して履帯の組立をする予定です。

 


RC可動化 1/35 タミヤ M26パーシング(その7)

2018-10-07 18:42:32 | 1/35 タミヤ パーシング

2018-10-07
手配していたギヤが届いたので、ギヤボックスを改修します。
モータ出力軸には前回同様に8Tピニオンギヤを付けます。
ギヤボックスは
 1段目 24Tクラウンギヤ+12Tピニオンギヤの2段ギヤ(改造品)
 2段目 22T-10Tの2段ギヤ
 3段目 24T-10Tの2段ギヤ
 4段目 24T-10Tの2段ギヤ(10T側は使用しません)
4段目の24Tを16Tピニオンギヤで受け、同シャフトに10Tピニオンギヤを圧入し、24Tピニオンギヤとファイナルギヤケース内で連結させて起動輪を回します。
ギヤ比は1/50.7
モータはタミヤ低回転型130モーター DC3V 0.45A 7100rpm(定格トルク時)

実測値は起動輪(無負荷)156rpm
起動輪の歯数は13T、履帯ピッチは4.4mmなので、0.535km/h(計算値)
履帯装着での実走行   7.2s/m → 0.139m/s = 0.5km/h (1/35換算 17.5km/h)

1/35換算で30km/h以上にしたいところですが、狭い室内では十分な速度です。

M26パーシング走行テスト動画


RC可動化 1/35 タミヤ M26パーシング(その6)

2018-10-05 23:12:27 | 1/35 タミヤ パーシング

2018-10-04
電気回路の接続を済ませ、改めて動作確認をします。
すると、又しても少し動くと止まる不可解な現象が発生しています。
回路の改良をしたし、何度も動作させていても異常なかったので安心していました。
ノイズや電源の問題か?
モータを低速タイプに替えると発生しません。
電流値を減らすと改善する様ですが、低速モータでは走行速度が遅すぎます。
仕方がないので、ギヤボックスのギヤ比を変えて走行速度上げることにします。
しかし、手持ちのギヤでは対処できないので、ネットで手配します。
希望の歯数のギヤは無いので、いろいろ組み合わせることで何とかなりそうです。

ギヤが届くまでは、キットを組み立てることにします。

2018-10-05
と言う事で、転輪の塗装と組立です。
ついでに車体下部も塗装します。
先ず、いつもの様にオキサイドレッドのサフを吹きます。
次にMr.カラー特色 カラーモジュレーションセット オリーブドラブ VERSIONのODシャドーを吹きます。
転輪のゴムパッド部をXF1艶消し黒を筆塗り。

順番を間違えたけど、シャドー部を除いてオリーブドラブ2を吹きます。
転輪は折角塗装した黒にかからない様に圧力を下げ、絞って吹きます。
黒の部分が消えたら、仕方がないのでまた筆塗りしますが、何とかなりました。

砲身に赤外線LEDを内蔵させます。



RC可動化 1/35 タミヤ M26パーシング(その5)

2018-10-03 20:46:01 | 1/35 タミヤ パーシング

2018-10-03
コントロール基板の配置を検討します。
砲塔旋回機構が可なり大きくなったので、空きスペースが無くなってきました。
コントローラー基盤以外に、走行用モータ、砲塔旋回モータにはモータードライバーが必要です。
実装できるのか怪しくなってきたので、実際に配置をしてみます。

パーシングはシャーマンよりボデーが低いので、大きな車体のわりに狭いです。
フェンダーの位置はほぼ同じですが、ボデーがシャーマンの方が高いです。
M4A1E8シャーマンの全高は2.67m、M26パーシングは全高2.78mなので、砲塔が大きいです。

RC可動化を進める中でいつも問題になるのが履帯をどうするかです。
キットのベルト式履帯はシングルピン方式ですが、その他にダブルピン方式の履帯が2種類あります。
連結可動式履帯を探し、フリウルのダブルピン方式のT80E1履帯(鋼鉄タイプ)を手配しました。
このT80E1は主に戦後に見られたタイプで、第2次世界大戦時のM26ではシングルピン式履帯(鋼鉄タイプ)が一般的とのことです。
M26の初期生産車では幅610mmのT81履帯が用いられていたが、生産の早い段階で幅584mmのT80E1履帯に変更されたとの事です。
もう1種類の履帯はダブルピン方式T84E1でラバーパッドタイプです。