Ganponブログ

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

1/144 HGUC RX-75 ガンタンク(その12・完成)

2024-11-28 12:56:49 | ガンダム

2024-11-28
デカールが乾いたので艶消しクリアーを吹き、ウェザリングは程々にして完成としました。

▼完成動画もアップしました。

▼回路図

▼スケッチ

  1. /*PS3_ESP32_tank_MP3_DRV8835_GUNTANK_v1.5
  2.    2024-11-27
  3.    「ガンタンク発進します」音声追加。
  4.    「シャーッ」音声追加。
  5.    サーボギヤ変更により回転角を広げる。
  6.  
  7.   最大1310720バイトのフラッシュメモリのうち、スケッチが1088181バイト(83%)を使っています。
  8.   最大327680バイトのRAMのうち、グローバル変数が39564バイト(12%)を使っていて、
  9.   ローカル変数で288116バイト使うことができます。
  10.  
  11.   【書込み実行手順】
  12.   AE-ESP32ボードの「BOOTボタン」ON しながら
  13.   「ENボタン」ON → OFF。
  14.   「BOOTボタン」OFF。
  15.   Arduino IDE→「スケッチ」→「マイコンボードに書き込む」
  16.   書き込みが終わってもまだ実行はしない。
  17.   「ENボタン」ONで、実行(LED点滅)する。
  18.  
  19.   効果音はDFPlayer Mini
  20.   モータドライバはDRX8835
  21.  
  22.   【ペアリング操作手順】
  23.     PSボタンでペアリング開始。白色インジケータランプ高速点滅。
  24.     戦車の電源投入。
  25.     インジケータランプ青色点灯でペアリング完了。
  26.  
  27.    【走行コントロール】
  28.      コントローラーの左スティック上下で前後進、
  29.      右スティックの左右でステアリングを制御。
  30.      ステアリングを振っていくと回転軸側が減速していき(緩旋回から信地旋回)、
  31.      一杯に倒すと回転軸側は停止。(信地旋回)
  32.      左スティック中央で右ステアリングを一杯に振ると超信地旋回(速度50%)
  33.  
  34.    【砲身上下】右十字キーの △と?ボタンで砲身上下。□ボタンでセンター。
  35.    【機関砲】 R1ボタンで主砲発射
  36.    【機銃】 L1ボタンで射撃(連射)
  37.    【効果音】左十字キーrightで「ガンタンク発進します」、leftで「シャーッ」
  38.  
  39. */
  40.  
  41. #include <Arduino.h> // Arduino ヘッダインクルード
  42. #include "SoftwareSerial.h" // EspSoftwareSerial
  43. #include "DFRobotDFPlayerMini.h"
  44.  
  45. //SoftwareSerial mySoftwareSerial(16, 17); // RX, TX EspSoftwareSerial
  46. HardwareSerial Serial_df(2); // use HardwareSerial UART2 (16pin=RX, 17pin=TX)
  47.  
  48. DFRobotDFPlayerMini myDFPlayer;
  49. void printDetail(uint8_t type, int value);
  50.  
  51. #include <Ps3Controller.h>
  52.  
  53. #include <ESP32Servo.h>
  54. Servo servo1; // create four servo objects
  55. int servo1Pin = 27;
  56.  
  57. int LED_3 = 19; //キャノン砲
  58. int LED_4 = 18; //ミサイルランチャー
  59.  
  60. int k = 0;
  61. int s = 0;
  62. int d_time = 50;
  63.  
  64. int angle_servo1 = 90; // 上下center
  65. int dtime = 20; //砲身上下スピード(遅延時間)
  66. int anglenow = angle_servo1 ;
  67.  
  68. int motor_speed;
  69. float steering;
  70. int pos_ly;
  71. int pos_lx;
  72. int pos_ry;
  73. int pos_rx;
  74.  
  75. int AIN1 = 32; // A入力1/APHASE 左モータ AIN1
  76. int BIN1 = 25; // B入力1/BPHASE 右モータ BIN1
  77. int PWMApin = A5; // A入力2/AENABLE 左モータ AIN2 IO33
  78. int PWMBpin = A19; // B入力2/BENABLE 右モータ BIN2 IO26 (IO0は起動時不安定)
  79. int PWMA = 2; //PWMAチャンネル 0=NG 1=NG 0〜15
  80. int PWMB = 3; //PWMBチャンネル 0=NG 1=NG 0〜15 
  81.  
  82. void setup() {
  83.   servo1.setPeriodHertz(50); // Standard 50hz servo PWMサイクル:20mS FS0307 120°
  84.   servo1.attach(servo1Pin, 900, 2100); // (servo1Pin, minUs, maxUs)
  85.   //delay(50);
  86.  
  87.   //mySoftwareSerial.begin(9600);
  88.   Serial_df.begin(9600); // RX2 = 16, TX2 = 17
  89.   Serial.begin(116500);
  90.  
  91.   //Ps3.begin("00:11:22:33:44:55"); //SixaxisPairToolで調べたmac adresに修正
  92.   Ps3.begin("01:02:03:04:05:06"); // PS3コントローラmac address
  93.   Serial.println("PS3 Ready");
  94.  
  95.   //if (!myDFPlayer.begin(mySoftwareSerial)) { //Use softwareSerial to communicate with mp3.
  96.   if (!myDFPlayer.begin(Serial_df)) { //Use HardwareSerial to communicate with mp3.
  97.     Serial.println(F("Unable to begin:"));
  98.     Serial.println(F("1.Please recheck the connection!"));
  99.     Serial.println(F("2.Please insert the SD card!"));
  100.     while (true) {
  101.       delay(0); // Code to compatible with ESP8266 watch dog.
  102.     }
  103.   }
  104.  
  105.   Serial.println(F("DFPlayer Mini online."));
  106.   myDFPlayer.volume(20); //Set volume value. From 0 to 30
  107.  
  108.   ledcSetup(PWMA, 5000, 8); //チャンネル,周波数,解像度(8bit=256段階)
  109.   ledcAttachPin(PWMApin, PWMA); //ledPinをPWMCHチャンネルに接続
  110.   ledcSetup(PWMB, 5000, 8); //チャンネル,周波数,解像度(8bit=256段階)
  111.   ledcAttachPin(PWMBpin, PWMB); //ledPinをPWMCHチャンネルに接続
  112.   pinMode(AIN1, OUTPUT);
  113.   pinMode(BIN1, OUTPUT);
  114.  
  115.   pinMode(LED_3, OUTPUT);
  116.   pinMode(LED_4, OUTPUT);
  117.  
  118.   servo1.write(angle_servo1); // 0 - 180
  119.   delay(100);
  120.  
  121.   myDFPlayer.play(5); //ガンタンク発進
  122.   delay( 1000);
  123. }
  124.  
  125. void loop() {
  126.   if (Ps3.isConnected()) {
  127.     pos_lx = Ps3.data.analog.stick.lx;
  128.     pos_lx = pos_lx + 128;
  129.     pos_ly = Ps3.data.analog.stick.ly;
  130.     pos_ly = pos_ly + 128;
  131.     pos_rx = Ps3.data.analog.stick.rx;
  132.     pos_rx = pos_rx + 128;
  133.  
  134.     if ( Ps3.event.button_down.right) { // ガンタンク発進します
  135.       myDFPlayer.play(5);
  136.       delay(1000);
  137.     }
  138.  
  139.     if ( Ps3.event.button_down.left) { // シャーッ
  140.       myDFPlayer.play(3);
  141.       delay(1000);
  142.     }
  143.  
  144.     //砲身上下
  145.     if ( Ps3.event.button_down.square) { // center
  146.       if (anglenow > angle_servo1) {
  147.         for (anglenow = anglenow; anglenow >= angle_servo1; anglenow -= 1) {
  148.           servo1.write(anglenow);
  149.           delay(dtime);
  150.         }
  151.       }
  152.       else {
  153.         for (anglenow = anglenow; anglenow <= angle_servo1; anglenow += 1) {
  154.           servo1.write(anglenow);
  155.           delay(dtime);
  156.         }
  157.       }
  158.     }
  159.  
  160.     if ( Ps3.event.button_down.triangle) { // up
  161.       for (anglenow = anglenow; anglenow >= (angle_servo1 - 60); anglenow -= 1 ) {
  162.         servo1.write(anglenow);
  163.         delay(dtime);
  164.       }
  165.     }
  166.  
  167.     if ( Ps3.event.button_down.cross) { // down
  168.       for (anglenow = anglenow; anglenow < (angle_servo1 + 60); anglenow += 1 ) {
  169.         servo1.write(anglenow);
  170.         delay(dtime);
  171.       }
  172.     }
  173.  
  174.     if (Ps3.event.button_down.r1) { //キャノン砲
  175.       digitalWrite(LED_3, HIGH); //発光
  176.       myDFPlayer.play(4);
  177.       delay(200);
  178.       motor_run(180, 1, 180, 1); // 車体リコイル
  179.       delay(150);
  180.       motor_run(0, 0, 0, 0);
  181.       delay(200);
  182.       digitalWrite(LED_3, LOW);
  183.       motor_run(90, 0, 90, 0);
  184.       delay(300);
  185.     }
  186.  
  187.     if (Ps3.event.button_down.l1) { //ミサイルランチャー
  188.       myDFPlayer.play(2);
  189.       delay(100);
  190.       for ( k = 0; k < 9; k++) {
  191.         digitalWrite(LED_4, HIGH); //発光
  192.         delay(80);
  193.         digitalWrite(LED_4, LOW);
  194.         delay(160);
  195.       }
  196.     }
  197.  
  198.     //前進
  199.     if (pos_ly <= 89 && pos_rx >= 89 && pos_rx <= 165) {
  200.       motor_speed = map(pos_ly, 89, 0, 0, 255);
  201.       motor_run(motor_speed, 0, motor_speed, 0);
  202.     }
  203.  
  204.     //後進
  205.     else if ( pos_ly >= 165 && pos_rx >= 89 && pos_rx <= 165) {
  206.       motor_speed = map(pos_ly, 165, 255, 0, 255) ;
  207.       motor_run(motor_speed, 1, motor_speed, 1);
  208.     }
  209.  
  210.     //前進右緩旋回、信地旋回
  211.     //else if ( pos_ly <= 89 && pos_rx > 165 && pos_rx <= 245) {
  212.     else if ( pos_ly <= 89 && pos_rx >= 165) {
  213.       motor_speed = map(pos_ly, 89, 0, 0, 255);
  214.       steering = motor_speed * (1.00 - (map(pos_rx, 165, 255, 0, 255) / 255.00));
  215.       motor_run(motor_speed, 0, steering, 0);
  216.     }
  217.  
  218.     //前進左緩旋回、信地旋回
  219.     //else if ( pos_ly <= 89 && pos_rx < 89 && pos_rx >= 10) {
  220.     else if ( pos_ly <= 89 && pos_rx <= 89) {
  221.       motor_speed = map(pos_ly, 89, 0, 0, 255);
  222.       steering = motor_speed * (1.00 - (map(pos_rx, 89, 0, 0, 255) / 255.00));
  223.       motor_run(steering, 0, motor_speed, 0);
  224.     }
  225.  
  226.     //後進右緩旋回、信地旋回
  227.     //else if ( pos_ly >= 165 && pos_rx > 165 && pos_rx <= 245) {
  228.     else if ( pos_ly >= 165 && pos_rx >= 165 ) {
  229.       motor_speed = map(pos_ly, 165, 255, 0, 255);
  230.       steering = motor_speed * (1.00 - (map(pos_rx, 165, 255, 0, 255) / 255.00));
  231.       motor_run(motor_speed, 1, steering, 1);
  232.     }
  233.  
  234.     //後進左緩旋回、信地旋回
  235.     //else if ( pos_ly >= 165 && pos_rx < 89 && pos_rx >= 10) {
  236.     else if ( pos_ly >= 165 && pos_rx <= 89 ) {
  237.       motor_speed = map(pos_ly, 165, 255, 0, 255);
  238.       steering = motor_speed * (1.00 - (map(pos_rx, 89, 0, 0, 255) / 255.00));
  239.       motor_run(steering, 1, motor_speed, 1);
  240.     }
  241.  
  242.     //右超信地旋回
  243.     else if (pos_rx >= 245 && pos_ly >= 89 && pos_ly <= 165) {
  244.       motor_speed = 204;
  245.       motor_run(motor_speed, 0, motor_speed, 1);
  246.     }
  247.  
  248.     //左超信地旋回
  249.     else if (pos_rx <= 10 && pos_ly >= 89 && pos_ly <= 165) {
  250.       motor_speed = 204;
  251.       motor_run(motor_speed, 1, motor_speed, 0);
  252.     }
  253.  
  254.     else { //停止(ブレーキ)
  255.       motor_run(0, 0, 0, 0);
  256.     }
  257.   }
  258. }
  259.  
  260.  
  261. void motor_run(int D0, int D1, int D2, int D3) {
  262.   //D0 : モータスピード(左)
  263.   //D1 : モータA(左)1 = HIGH / 0 = LOW
  264.   //D2 : モータスピード(右)
  265.   //D3 : モータB(右)1 = HIGH / 0 = LOW
  266.  
  267.   //analogWrite(PWMA, D0);
  268.   ledcWrite(PWMA, D0); //(チャンネル,解像度)
  269.   digitalWrite(AIN1, D1);
  270.   //analogWrite(PWMB, D2);
  271.   ledcWrite(PWMB, D2); //(チャンネル,解像度)
  272.   digitalWrite(BIN1, D3);
  273. }

最後までお付き合い頂き、ありがとうございました。
次回作も、よろしく。


1/144 HGUC RX-75 ガンタンク製作(その11)

2024-11-26 16:09:03 | ガンダム

2024-11-26
デカールを検討している間に履帯の塗装をします。
当初は塗装を省こうとも考えていましたが、やはり塗装することにしました。

▼先ずマルチミッチャクプライマーを吹きます。

▼続いてオキサイドレッドサフを吹きます。

▼LP54ダークアイアン履帯色を吹き、ウェザリングをします。
履帯表面の押出ピンの跡が目立ちますが、修正が大変なのでそのままにしました。

▼デカールですが、やはり気に入らないのでガンタンク用で販売されているものを手に入れる事にしました。
Amazonでも入手できますが、少しでも安価に入手したかったのでメルカリで購入しました。
アニメに登場するガンタンクにはコーションマークなど一切表現されていないので、適当に貼ってみました。

デカールが乾いてから艶消しクリアーを吹いて、もう少しウェザリングしようと考えています。

 

 


1/144 HGUC RX-75 ガンタンク製作(その10)

2024-11-18 11:15:23 | ガンダム

2024-11-18
▼入手したガンダムデカールを説明書通りに貼ってみました。

▼1/144スケール用という事なのか、情報量が少なく、折角デカールを貼ってもパッとしません。

1/100スケールのガンタンク用デカールが存在するようです。
ちょっと検討してみます。

▼そうこうしていると、案の定、接合ピンが折れてしまいました。

▼2㎜の真鍮棒を少しだけ細くして改修しました。

予定では、デカールを貼り終え、艶消しか半艶のクリアを吹くところでしたが、今日はここまででとしました。

話は違いますが、最近気になっていることがあります。
全角モードで「¥」記号はそのまま入力できますが、
半角モードでは「 \ 」になってしまいます。
以前からそうだったのかはっきりしませんが、違った気がします。(物忘れが酷い)
どうも、このエディター(goo blog)や、Google検索への入力時にそうなります。
タスクバーの検索やNOTEでは半角¥で入力できます。

 


1/144 HGUC RX-75 ガンタンク製作(その9)

2024-11-16 16:39:52 | ガンダム

2024-11-16
▼頭部のコックピットのハヤトがレリーフの様になっているのでディテールアップします。

▼MSフィギュアというものを手に入れました。

▼男性パイロットの腕を改造して操縦席につかせます。

▼操縦席のパイロット、シートを削り落とします。

▼シートや周辺をプラ板で追加します。
ハヤトを着座させますが、頭がキャノピーに当たります。
シート面をさらに彫り込んで改修しました。

▼黄色のパーツを塗装します。

▼ハヤトを塗り分けます。

▼コックピットを塗装して組立てます。

▼組み立て完了です。

▼墨入れをした後、水性クリアーを吹いてデカールを貼る前準備をしました。

▼このキットにはデカールは入っていませんので、ガンダムデカールを仕入れました。

 

 

今日はここまでです。
次はデカールを貼ります。

 


1/144 HGUC RX-75 ガンタンク製作(その8)

2024-11-14 13:04:46 | ガンダム

2024-11-14
▼接合部で目立つところは接着して合わせ目けしをします。

▼合わせ目けしをして、再度サフを吹きます。

▼C13ニュートラルグレーにC33艶消しブラックを混ぜた濃い目のグレーを吹きます。
明るい面に、少し明るいグレーを吹いて明暗をつけておきます。

▼C322フタロシアニンブルー(ブルーインパルスカラー)を吹きます。

▼キャノン砲はLEDを組み込んでから接着します。
合わせ目けしが上手くいっていないところが有りました。

▼イージーサンディングで修正して、黒サフを吹き直して、MC212アイアンを再塗装しました。

▼表面を磨いて光らせます。
このままだと触れると粒子が手につきます。
アイアンを吹いた後に洗ってないエアブラシのカップにLP24セミグロスクリアを入れて吹きます。

▼赤色はC68モンザレッドを吹きます。

▼グレーはC13ニュートラルグレーを吹きます。

▼肩のパーツは左右接合構造ですが合わせ目が目立つので、
受け側を削り込んで後はめ出来る様にします。

▼組み直し、充電します。

 


1/144 HGUC RX-75 ガンタンク製作(その7)

2024-11-11 20:27:27 | ガンダム

2024-11-11
今回は電飾です。
キャノン砲と、ミサイルランチャーを光らせます。

▼LEDは3㎜ウォームホワイト、電流制限抵抗100Ω。
供給電圧が3.3V、LEDのVf=2.6Vなので、7ⅿA流します。
砲身の内側をマッキーの黒を塗って遮光します。  

▼ミサイルランチャーは両腕の関節の軸に1mmの穴をあけて配線(ポリウレタン銅線)を通します。

▼ミサイルランチャーは片側4基装備しています。
1基にLED1個を仕込むと、計8個使うことになります。
経済的ではないので、LED1個を透明プラ棒などで導光させて光らせることにします。

▼直接光で光らせるのではないので、電流制限抵抗は47Ωにして15ⅿA流すことにします。

▼透明プラ板に3.2Φの穴をあけ、LEDを挿します。
プラ板にはアルミテープで光を反射する様にしました。

▼腕を組み立てます。

▼ボデーに組付けます。

▼駆動部をクローラーユニットに取り換えていますが、元々のイメージを少しでも残すためにちょっと細工します。

▼組み立てがほぼ終わったので、全部ばらして塗装準備に入ります。
先ずは、黒サフを吹きます。

黒サフするパーツはもう少しありますが、今日はここで時間切れです。

 


1/144 HGUC RX-75 ガンタンク製作(その6)

2024-11-09 14:23:30 | ガンダム

2024-11-09
▼キャノン砲の左右動作は、シャフトを通し左右のキャノン砲を連動させることにしました。
2㎜六角シャフトを受ける軸受は、最初はハトメでしたが、ベアリングにしました。

▼サーボモータを組み込みます。
手持ちのギヤから適当なものを選んで組立て、リンクにはサーボホーンを利用しました。

▼キャノン砲の回転軸用ポリキャップの受け側の穴はドリルで少し大きくして動きやすくしました。

▼キャノン砲を組付けます。
差し込み具合で左右のキャノン砲の俯仰角が変わります。

▼前面パネルを取り付けます。
(内蔵物が接触しないように、邪魔な部分は切除しました。)

▼ボデーに組付けます。

▼ここで、またまた動作テストです。

次回はキャノン砲などにLEDを仕込みます。

 

 

 


1/144 HGUC RX-75 ガンタンク製作(その5)

2024-11-06 21:41:04 | ガンダム

2024-11-06
▼腕のミサイルランチャーのスリットを開口します。

▼グリルの内側にスピーカを設置するので、開口することにします。

▼思い切って大きく切り欠いて、ルーバーを付けることにします。

▼キャノン砲を動かします。
ボデー内の邪魔になる所を除去して、マイクロスイッチを内蔵させました。

▼この方法では片側しか動かせていません。
失敗です。



1/144 HGUC RX-75 ガンタンク製作(その4)

2024-11-04 14:54:42 | ガンダム

2024-11-04
前回の試作では、とてもRC駆動回路は車体内に収納できませんでした。
RC可動戦車を作るときに、マイコン、モータドライバ、DCコンバータ、バッテリ、そして効果音発生装置などを基板の上にマウントします。
しかし、今回は基板に実装したのでは大きくなりすぎて、収納できません。
ESP32系マイコンのコンパクトサイズのESP32C3というものを使いたいのですが、Bluetooth5.0なので、PSコントローラが利用できません。
M5スタンプPicoも同サイズなのですが、使える出力ポートが不足です。(走るだけなら可能)

そこで、ESP32-WROOM-32Eで何とかします。
▼このマイコンはWi-FiとBluetooth(4.2)を内蔵しているので使いやすいのです。

▼マイコンを収納するために、車体の高さを10㎜高くしました。
まだ実装していませんが、この空間に収めるしかありません。

▼前回の走行テストで、ギヤ比が1/150では鈍いので、1/75に変更します。

▼基盤に実装しないで配線したものを組み込みました。
画像の一番手前のパーツはMP3プレーヤーのJQ6500です。
所有するJQ6500は動作がおかしいので、DFPlayer miniに載せ替えました。

▼走行テストをします。

▼現在Amazonで購入できるものは高額です。
私は秋月電子で購入しています。Amazonの1/3以下です。
電子工作ステーションなら500円以上は送料無しなのでお手軽です。

 


1/144 HGUC RX-75 ガンタンク製作(その3)

2024-11-02 21:21:29 | ガンダム

2024-11-02
今回からRC可動化に挑戦します。

▼先月製作した「タミヤ四輪クローラー工作セット」のクローラーユニットを移植します。
少し大きいですが、利用できそうです。

▼起動輪を回すギヤモータはタミヤのを組み込もうと思います。

▼クローラーユニットの起動輪の位置を中央上部から前部に移動します。

▼こんな感じで組み込もうと思います。

▼邪魔になる部分を削除していきます。

▼車体下面を切り欠いて、何とか搭載できそうです。

▼スムーズに動く様に、起動輪用シャフト軸受には内径3㎜のベアリングを使います。

▼ギヤモータセットで余った3㎜タッピングネジで車体に固定しました。

▼ギヤモータは収納できましたが、RC駆動回路部品を搭載するスペースは殆ど有りません。
難しいことは先送りにして、取り敢えず走行テストをします。