Ganponブログ

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

ESP32 Dev ModuleでRC可動戦車コントロール

2022-05-29 11:42:56 | RC可動コントロール

2002-05-29
前回、ArduinoでコントロールしていたものをM5Stamp PICOに換装する検討をしました。
結果、出力端子が足りないことも有って、RCカーで実現させました。
I2Cモータドライバを使用したり、子機と通信して対応すれば良さそうですが。。。。

今回はM5の親方に当たるESP32でRC可動戦車のコントロールを検討してみます。
プログラミングは使い慣れたArduino IDEを使用します。
利用できないライブラリーも有りますが、かなりの点でこれまで作ったスケッチが再利用できます。

▼画像上がESP32 Dev Modele、下がM5Stamp picoです。

▼ESP32をArduino IDEで使うための環境設定は他のブログなどを参照するとして、
ボードの設定は下記のとおりです。(細かな設定は変更していません)

▼ESP32にDCモータ2個、MP3プレーヤ、サーボモータ3個(1個は連続回転改造済み)を接続しています。
基板上にはDRV8835モータドライバ(秋月電子)、4個のLED、スイッチ、5V出力昇圧コンバータをセットしています。
電源は3.7v LiPoバッテリです。
MP3プレーヤはJQ6500を使っています。(スケッチは変更要ですがDFPlayer miniでも動作確認済みです)

ESP32 Dev ModuleでRC可動戦車コントロール

▼回路図
画像をクリックすると拡大します

▼スケッチ

  1. /*PS3_ESP32_tank_JQ6500mp3_DRV8835_v6.0
  2.    2022-05-28
  3. */
  4.  
  5. #include <Arduino.h> // Arduino ヘッダインクルード
  6. #include <JQ6500_Serial.h>
  7.  
  8. HardwareSerial Serial_df(2); // use HardwareSerial UART2 (16pin=RX, 17pin=TX)
  9. JQ6500_Serial mp3(Serial_df);
  10.  
  11. void printDetail(uint8_t type, int value);
  12. #include <Ps3Controller.h>
  13. #include <ESP32Servo.h>
  14. Servo servo1; // create four servo objects
  15. int servo1Pin = 27;
  16. Servo servo2;
  17. int servo2Pin = 14;
  18. Servo servo3;
  19. int servo3Pin = 12;
  20. int LED_1 = 23; //ブレーキランプ
  21. int LED_2 = 22; //ヘッドライト
  22. int LED_3 = 19; //砲撃
  23. int LED_4 = 18; //銃撃
  24. int k = 0;
  25. int s = 0;
  26. int d_time = 100;
  27. int angle_servo1 = 90; // 上下
  28. int anglenow = angle_servo1 ;
  29. int angle_servo3 = 90; // リコイル
  30. int motor_speed;
  31. float steering;
  32. int pos_y;
  33. int pos_x;
  34. int pos_lx;
  35. int AIN1 = 32; // A入力1/APHASE 左モータ AIN1
  36. int BIN1 = 25; // B入力1/BPHASE 右モータ BIN1
  37. int PWMApin = 33; //A5; // A入力2/AENABLE 左モータ AIN2 IO33 A5
  38. int PWMBpin = 26; //A19; // B入力2/BENABLE 右モータ BIN2 IO26 (IO0は起動時不安定)A19
  39. int PWMA = 2; //PWMAチャンネル 0=NG 1=NG 0〜15
  40. int PWMB = 3; //PWMBチャンネル 0=NG 1=NG 0〜15 
  41.  
  42. void setup() {
  43.   servo1.setPeriodHertz(50);
  44.   servo1.attach(servo1Pin, 500, 2400);
  45.   servo2.setPeriodHertz(50);
  46.   servo2.attach(servo2Pin, 900, 2100);
  47.   servo3.setPeriodHertz(50);
  48.   servo3.attach(servo3Pin, 500, 2400);
  49.   Serial.begin(115200);
  50.   Serial_df.begin(9600); // RX2 = 16, TX2 = 17
  51.   mp3.reset();
  52.   mp3.setVolume(22);
  53.  
  54.   Ps3.begin("00:11:22:33:44:55"); //SixaxisPairToolで調べたmac adresに修正
  55.   Serial.println("PS3 Ready");
  56.  
  57.   ledcSetup(PWMA, 12000, 8); //チャンネル,周波数,解像度(8bit=256段階)
  58.   ledcAttachPin(PWMApin, PWMA); //ledPinをPWMCHチャンネルに接続
  59.   ledcSetup(PWMB, 12000, 8); //チャンネル,周波数,解像度(8bit=256段階)
  60.   ledcAttachPin(PWMBpin, PWMB); //ledPinをPWMCHチャンネルに接続
  61.   pinMode(AIN1, OUTPUT);
  62.   pinMode(BIN1, OUTPUT);
  63.   pinMode(LED_1, OUTPUT);
  64.   pinMode(LED_2, OUTPUT);
  65.   pinMode(LED_3, OUTPUT);
  66.   pinMode(LED_4, OUTPUT);
  67.  
  68.   LEDtenmetsu(LED_2);
  69.  
  70.   servo1.write(angle_servo1); // 0 - 180
  71.   delay(100);
  72.   servo2.write(90); // 0 - 180
  73.   delay(100);
  74.   servo3.write(angle_servo3); // 0 - 180
  75.   delay(100);
  76.   mp3.playFileByIndexNumber(3);
  77.   delay(2000);
  78.  
  79. }
  80.  
  81. void loop() {
  82.   if (Ps3.isConnected()) {
  83.     pos_lx = Ps3.data.analog.stick.lx;
  84.     pos_lx = pos_lx + 128;
  85.  
  86.     //砲塔旋回
  87.     if ( pos_lx > 230) { //右旋回
  88.       servo2.write(80);
  89.     } else if (pos_lx //左旋回
  90.       servo2.write(100);
  91.     } else { //停止
  92.       servo2.write(90);
  93.     }
  94.  
  95.  
  96.     //砲身上下
  97.     if ( Ps3.event.button_down.square) { // center
  98.       if (anglenow > 90) {
  99.         for (anglenow = anglenow; anglenow >= 90; anglenow -= 1) {
  100.           servo1.write(anglenow);
  101.           delay(40);
  102.         }
  103.       }
  104.       else {
  105.         for (anglenow = anglenow; anglenow <= 90; anglenow += 1) {
  106.           servo1.write(anglenow);
  107.           delay(40);
  108.         }
  109.       }
  110.     }
  111.  
  112.     if ( Ps3.event.button_down.triangle) { // up
  113.       for (anglenow = anglenow; anglenow <= 135; anglenow += 1 ) {
  114.         servo1.write(anglenow);
  115.         delay(40);
  116.       }
  117.       //delay(100);
  118.     }
  119.  
  120.     if ( Ps3.event.button_down.cross) { // down
  121.       for (anglenow = anglenow; anglenow >= 45; anglenow -= 1 ) {
  122.         servo1.write(anglenow);
  123.         delay(40);
  124.       }
  125.     }
  126.  
  127.     if (Ps3.event.button_down.circle) {
  128.       if (s == 0) {
  129.         s = 1;
  130.         //myDFPlayer.play(3); //エンジン始動
  131.         mp3.playFileByIndexNumber(3);
  132.         delay(2000);
  133.         //myDFPlayer.loop(5); //Loop 5th mp3 アイドリング
  134.         mp3.playFileByIndexNumber(5);
  135.         mp3.setLoopMode(MP3_LOOP_ONE);
  136.         delay(d_time);
  137.       } else {
  138.         mp3.setLoopMode(MP3_LOOP_ONE_STOP);
  139.         s = 0;
  140.         delay(500);
  141.       }
  142.     }
  143.  
  144.     if (Ps3.event.button_down.r3) {
  145.       mp3.setLoopMode(MP3_LOOP_ONE_STOP);
  146.       s = 0;
  147.     }
  148.  
  149.     if (Ps3.event.button_down.right) {
  150.       digitalWrite(LED_2, HIGH); // Headlight ON
  151.     }
  152.  
  153.     if (Ps3.event.button_down.left) {
  154.       digitalWrite(LED_2, LOW); // Headlight off
  155.     }
  156.  
  157.     if (Ps3.event.button_down.r1) { //砲撃 + リコイル(砲身&車体)
  158.       digitalWrite(LED_3, HIGH); //主砲発光
  159.       //myDFPlayer.play(26);
  160.       mp3.playFileByIndexNumber(26);
  161.       delay(50);
  162.       servo3.write(angle_servo3 - 30); // 砲身リコイル
  163.       delay(20);
  164.       motor_run(180, 1, 180, 1, 1); // 車体リコイル
  165.       delay(80);
  166.       motor_run(0, 0, 0, 0, 1);
  167.       digitalWrite(LED_3, LOW);
  168.       for (int ang3 = (angle_servo3 - 30); ang3 <= angle_servo3; ang3 += 1 ) {
  169.         servo3.write(ang3);
  170.         delay(20);
  171.       }
  172.       motor_run(60, 0, 60, 0, 1);
  173.       delay(290);
  174.       motor_run(0, 0, 0, 0, 1);
  175.       delay(100);
  176.       if (s == 1) {
  177.         mp3.playFileByIndexNumber(5);
  178.         mp3.setLoopMode(MP3_LOOP_ONE);
  179.         delay(d_time);
  180.       }
  181.     }
  182.  
  183.     if (Ps3.event.button_down.l1) { //銃撃
  184.       mp3.playFileByIndexNumber(24);
  185.       for ( k = 0; k
  186.         digitalWrite(LED_4, HIGH); //発光
  187.         delay(80);
  188.         digitalWrite(LED_4, LOW);
  189.         delay(120);
  190.       }
  191.       if (s == 1) {
  192.         mp3.playFileByIndexNumber(5);
  193.         mp3.setLoopMode(MP3_LOOP_ONE);
  194.         delay(d_time);
  195.       }
  196.     }
  197.  
  198.     //走行コントロール
  199.     pos_y = Ps3.data.analog.stick.ly;
  200.     pos_x = Ps3.data.analog.stick.rx;
  201.     pos_y = pos_y + 128;
  202.     pos_x = pos_x + 128;
  203.  
  204.     //前進
  205.     if (pos_y <= 102 && pos_x >= 102 && pos_x <= 152) {
  206.       motor_speed = map(pos_y, 102, 0, 0, 255);
  207.       motor_run(motor_speed, 0, motor_speed, 0, 0);
  208.     }
  209.  
  210.     //後進
  211.     else if ( pos_y >= 152 && pos_x >= 102 && pos_x <= 152) {
  212.       motor_speed = map(pos_y, 152, 255, 0, 255) ;
  213.       motor_run(motor_speed, 1, motor_speed, 1, 0);
  214.     }
  215.  
  216.     //前進右緩旋回、信地旋回
  217.     //else if ( pos_y <= 102 && pos_x > 152 && pos_x <= 245) {
  218.     else if ( pos_y <= 102 && pos_x >= 152) {
  219.       motor_speed = map(pos_y, 102, 0, 0, 255);
  220.       steering = motor_speed * (1.00 - (map(pos_x, 152, 255, 0, 255) / 255.00));
  221.       motor_run(motor_speed, 0, steering, 0, 0);
  222.     }
  223.  
  224.     //前進左緩旋回、信地旋回
  225.     //else if ( pos_y <= 102 && pos_x < 102 && pos_x >= 10) {
  226.     else if ( pos_y <= 102 && pos_x <= 102) {
  227.       motor_speed = map(pos_y, 102, 0, 0, 255);
  228.       steering = motor_speed * (1.00 - (map(pos_x, 102, 0, 0, 255) / 255.00));
  229.       motor_run(steering, 0, motor_speed, 0, 0);
  230.     }
  231.  
  232.     //後進右緩旋回、信地旋回
  233.     //else if ( pos_y >= 152 && pos_x > 152 && pos_x <= 245) {
  234.     else if ( pos_y >= 152 && pos_x >= 152 ) {
  235.       motor_speed = map(pos_y, 152, 255, 0, 255);
  236.       steering = motor_speed * (1.00 - (map(pos_x, 152, 255, 0, 255) / 255.00));
  237.       motor_run(motor_speed, 1, steering, 1, 0);
  238.     }
  239.  
  240.     //後進左緩旋回、信地旋回
  241.     //else if ( pos_y >= 152 && pos_x < 102 && pos_x >= 10) {
  242.     else if ( pos_y >= 152 && pos_x <= 102 ) {
  243.       motor_speed = map(pos_y, 152, 255, 0, 255);
  244.       steering = motor_speed * (1.00 - (map(pos_x, 102, 0, 0, 255) / 255.00));
  245.       motor_run(steering, 1, motor_speed, 1, 0);
  246.     }
  247.  
  248.     //右超信地旋回
  249.     else if (pos_x >= 245 && pos_y >= 102 && pos_y <= 152) {
  250.       motor_speed = 204;
  251.       motor_run(motor_speed, 0, motor_speed, 1, 0);
  252.     }
  253.  
  254.     //左超信地旋回
  255.     else if (pos_x <= 10 && pos_y >= 102 && pos_y <= 152) {
  256.       motor_speed = 204;
  257.       motor_run(motor_speed, 1, motor_speed, 0, 0);
  258.     }
  259.  
  260.     else { //停止(ブレーキ)
  261.       motor_run(0, 0, 0, 0, 1);
  262.     }
  263.   }
  264. }
  265.  
  266.  
  267. void motor_run(int D0, int D1, int D2, int D3, int D4) {
  268.   ledcWrite(PWMA, D0); //(チャンネル,解像度)
  269.   digitalWrite(AIN1, D1);
  270.   //analogWrite(PWMB, D2);
  271.   ledcWrite(PWMB, D2); //(チャンネル,解像度)
  272.   digitalWrite(BIN1, D3);
  273.   digitalWrite(LED_1, D4);
  274. }
  275.  
  276. void LEDtenmetsu(int LED) {
  277.   for (int i = 0; i
  278.     digitalWrite(LED, HIGH);
  279.     delay(500);
  280.     digitalWrite(LED, LOW);
  281.     delay(500);
  282.   }
  283. }

 

▼私が購入した物(VKLSVAN 2個セット JQ6500:現在在庫切れ)ではないですが。。。。

 


1/72 T-2 ブルーインパルス 製作(その7・完成)

2022-05-21 19:22:29 | 現用機(日本)

2022-05-20~21
日の丸はデカールを使う予定でしたが塗装に変更しました。
理由は、デカールの赤丸に対して塗装している白丸が少し小さかったからです。

▼残りのデカールを貼るためにセミグロスクリアーを吹きます。

▼デカールを貼ります。
タービンラインは貼るのが難しいので、塗装しておけばよかったと後悔しています。

▼デカール保護も兼ねてセミグロスクリアーを吹き、キャノピーのマスキングを剥がします。
何か所かクリア部分に汚れが発生しています。

▲キャノピーの最前部はかかみがはらで撮影した実機と違いますが、このままとしました。

▼キャノピーはしっかり接着してしまったので、内面の汚れの除去は諦めましたが、
外面は擦ったりクリアーを塗ったりして手直しします。

色々ありましたが、ミスは技量の足りなさの結果という事です。
ミス無しで、納得の製作が出来るの様に精進します。

という事で、完成としました。
機体番号は「かかみがはら航空宇宙博物館」に展示されている173号機です。

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

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

 


▲T-4と一緒に撮影しました。

 

 


1/72 T-2 ブルーインパルス 製作(その6)

2022-05-19 23:30:36 | 現用機(日本)

2022-05-18~19
▼エンジンノズル周り及び水平尾翼下面を塗装します。
水平尾翼下面はSM206スーパークロームシルバー2を、ノズル周りは更にMC214ダークアイアンを混ぜたものを吹きます。

▼リアルタッチマーカーのオレンジ1、ブルー1で焼け表現をします。

▼塗装はみ出し部の修正をしました。

▼忘れていた機体側面の日の丸用に白丸を塗装しました。

デカールを使う予定の日の丸の赤を除けば、これで塗り分けはほぼ終了です。
キャノピーの塗り分けが上手く出来ているか確認したいのですが、
マスキングを剥がすのは最後のトップコート後になります。

 


1/72 T-2 ブルーインパルス 製作(その5)

2022-05-17 22:31:28 | 現用機(日本)

2022-05-14~17
▼1色目の白が乾いたのでマスキングします。

▼2色目はC323ライトブルーです。

▼更にマスキングして3色目を塗ります。

▼マスキングを取り除きます。
数ヶ所、塗料のはみ出しが有りますが、最後に修復する事にします。

 


ミニ四駆 ランドクルーザー 製作&RC化 (M5Stamp PICO編)

2022-05-16 22:00:37 | RC可動コントロール

2022-05-16

またまた寄り道です。

▼下記ブログでで書いた様にRC化の新しいツールを勉強中です。
いろいろ試している中で、何とかRCカーに利用できるところまでできました。

 

1/72 T-2 ブルーインパルス 製作(その3) - Ganponブログ

2022-05-11早い方なら1日で完成させる1/72ジェット機ですが、あまり進んでおりません。まさに牛の歩みです。▼主翼と水平尾翼を取付け、接合部を均し、不要な穴(赤丸)をイ...

goo blog

 

 

▼という事で、2年前にArduino pro miniで完成しているミニ四駆ランクルに換装しました。

 

「RC化ミニ四駆」のブログ記事一覧-Ganponブログ

「RC化ミニ四駆」のブログ記事一覧です。趣味の模型作り、ドライブ、旅行などsince Mar.2017【Ganponブログ】

goo blog

 

▼画像の上がArduino pro mini+ミニUSBホストシールド(Bluetooth USBアダプタ装着)、
下がM5Stamp PICOです。

▼M5Stamp PICOをセット。

換装して動作確認すると動かない。
プログラムや接続などチェックすると、リード線がはんだ付け部であちこち切れていました。
こんな事を繰り返して、やっと完成。

以下に、備忘録としてプログラムと回路を残します。

 

【スケッチを書き込む準備】

(注1)サーボを制御するために「ESP32Servo.h」をインストール。

(注2)ESP32ライブラリV1.0.4をインストール。

(注3)下記スケッチをM5Stamp PICOに書き込み実行。

void setup(void) {
Serial.begin(115200);
uint8_t btmac[6];
delay(500);
esp_read_mac(btmac, ESP_MAC_BT);
Serial.printf("[Bluetooth] Mac Address = %02X:%02X:%02X:%02X:%02X:%02X\r\n", btmac[0], btmac[1], btmac[2], btmac[3], btmac[4], btmac[5]);
}
void loop() {
}

シリアルモニタにアドレスが表示されるのでメモしておく。

次に、SixaxisPairTool でPS3のコントローラにMac Addressを書き込む
1. PS3コントローラをMiniUSBケーブルでPCに繋ぐ。
2. SixaxisPairToolを実行し、メモしたアドレスを入力してUpdateボタンを押すと書き込みが完了。

(参考)「ESP32でPS3コントローラを使う」をキーにネット検索すると参考になる記述が見つかります。

 

▼スケッチ(プログラム)/Arduino IDE用 

  1. /*PS4BT_Arduino_DRV8835_RCCAR_04a
  2.    2020/05/14
  3.   PS4BT_Arduino_DRV8835_RCCAR_02a
  4.   左十字キーTRIANGLEで高速モード、CROSSで低速(70%)モード
  5.   ステアリング角度をスティック角比例にする
  6.   モータドライバはDRV8835
  7.    3ピンでステアリングサーボを動かす
  8. */
  9.  
  10. #include <Arduino.h> // Arduino ヘッダインクルード
  11. #include "M5Atom.h"
  12.  
  13. #include <FastLED.h> // LED操作用ライブラリインクルード(3.5.0を使用)
  14. #define NUM_LEDS 1
  15. #define DATA_PIN 27
  16. CRGB leds[NUM_LEDS];
  17.  
  18. #include <Ps3Controller.h>
  19.  
  20. #include <ESP32Servo.h>
  21. Servo servo1; // create four servo objects
  22. int servo1Pin = 26;
  23.  
  24. int servo_pos = 90;
  25. int ang = 40;
  26.  
  27. int d_time = 10;
  28. float ratio = 0.6;
  29. int pos_y;
  30. int pos_x;
  31. float motor_speed;
  32. float steering;
  33.  
  34. int PWMApin = 25; // A入力2/AENABLE 左モータ AIN2
  35. int PWMA = 11; //PWMAチャンネル 11
  36. int AIN1 = 22; // A入力1/APHASE 左モータ AIN1
  37.  
  38. int LED_3 = 19 ; // ブレーキランプ
  39. int LED_2 = 18 ; // フォグランプ
  40. int LED_8 = 21 ; // ヘッドランプ
  41.  
  42. void onConnect() {
  43.   Serial.println("Connected.");
  44.   for (int cnt = 0; cnt
  45.     digitalWrite(LED_8, HIGH);
  46.     delay(500);
  47.     digitalWrite(LED_8, LOW);
  48.     delay(500);
  49.   }
  50. }
  51.  
  52. void setup() {
  53.   Serial.begin(115200);
  54.   M5.begin(false, false , true); //SerialEnable, I2CEnable ,DisplayEnable
  55.   FastLED.addLeds<SK6812, DATA_PIN, RGB>(leds, NUM_LEDS); // GRB ordering is typical
  56.   leds[0] = 0xf00000; //green
  57.  
  58.   ledcSetup(PWMA, 5000, 8); //チャンネル,周波数,解像度(8bit=256段階)
  59.   ledcAttachPin(PWMApin, PWMA); //ledPinをPWMCHチャンネルに接続
  60.  
  61.   pinMode(AIN1, OUTPUT);
  62.   pinMode(LED_2, OUTPUT);
  63.   pinMode(LED_3, OUTPUT);
  64.   pinMode(LED_8, OUTPUT);
  65.  
  66.   servo1.setPeriodHertz(50); // Standard 50hz servo PWMサイクル:20mS
  67.   servo1.attach(servo1Pin, 500, 2400); // (servo1Pin, minUs, maxUs)
  68.   servo1.write(servo_pos);
  69.  
  70.   Ps3.attachOnConnect(onConnect);
  71.   Ps3.begin("00:11:22:33:44:55"); //SixaxisPairToolで調べたmac adresに修正
  72.   Serial.println("Ready");
  73. }
  74.  
  75. void loop() {
  76.   if (Ps3.isConnected()) {
  77.     pos_y = Ps3.data.analog.stick.ly;
  78.     pos_x = Ps3.data.analog.stick.rx;
  79.     pos_y = pos_y + 128;
  80.     pos_x = pos_x + 128;
  81.  
  82.     if (Ps3.event.button_down.triangle) {
  83.       ratio = 1; //高速モード
  84.     }
  85.  
  86.     if (Ps3.event.button_down.cross) {
  87.       ratio = 0.7; //低速モード
  88.     }
  89.  
  90.     if (pos_x >= 152 ) { // R
  91.       //steering = map(pos_x, 152, 255, 0, 45);
  92.       steering = map(pow(pos_x, 2), 23104, 65025, 0, 55 );
  93.       servo1.write(servo_pos - steering);
  94.       //delay(d_time);
  95.     } else {
  96.       if (pos_x <= 103 ) { //L
  97.         //steering = map(pos_x, 103, 0, 0, 35);
  98.         steering = map(pow(pos_x, 2), 10609, 0, 0, 55 );
  99.         servo1.write(servo_pos + steering);
  100.         //delay(d_time);
  101.       }
  102.       else {
  103.         servo1.write(servo_pos);
  104.       }
  105.     }
  106.  
  107.     //左スティックがセンター付近は停止(ブレーキ)
  108.     if ( pos_y > 117 && pos_y
  109.       motor_run(0, 0, 1);
  110.     }
  111.  
  112.     //前進
  113.     else if (pos_y
  114.       //左スティック中央(117)から最上部(0)の値をモーターのスピード0から255に変換
  115.       // motor_speed = ratio * map(pos_y, 117, 0, 0, 255);
  116.       motor_speed = ratio * map(pow(pos_y, 2), 13689, 0, 0, 255 );
  117.       motor_run(motor_speed, 1, 0);
  118.     }
  119.  
  120.     //後進
  121.     else if ( pos_y > 137) {
  122.       //motor_speed = ratio * map(pos_y, 137, 255, 0, 255);
  123.       motor_speed = ratio * map(pow(pos_y, 2), 18769, 65025, 0, 255 );
  124.       motor_run(motor_speed, 0, 0);
  125.     }
  126.  
  127.     //ヘッドライト
  128.     if (Ps3.event.button_down.right) { //点灯
  129.       digitalWrite(LED_8, HIGH);
  130.     }
  131.  
  132.     if (Ps3.event.button_down.left) { //消灯
  133.       digitalWrite(LED_8, LOW);
  134.     }
  135.  
  136.     //フォグランプ
  137.     if (Ps3.event.button_down.up) { //点灯
  138.       digitalWrite(LED_2, HIGH);
  139.     }
  140.  
  141.     if (Ps3.event.button_down.down) { //消灯
  142.       digitalWrite(LED_2, LOW);
  143.     }
  144.   }
  145. }
  146.  
  147. void motor_run(float D0, int D1, int D4) {
  148.   //SPrint();
  149.   /* D0 : モータスピード(左)
  150.     D1 : モータA(左)1 = HIGH / 0 = LOW
  151.     D4 : LED_3 ON/OFF 1 = HIGH / 0 = LOW
  152.   */
  153.   //analogWrite(PWMA, D0);
  154.   ledcWrite(PWMA, D0); //(チャンネル,解像度)
  155.   digitalWrite(AIN1, D1);
  156.   digitalWrite(LED_3, D4);
  157. }

▼回路図

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

▼Arduino IDE ボードの設定

 

 

 


1/72 T-2 ブルーインパルス 製作(その4)

2022-05-12 14:56:15 | 現用機(日本)

2022-05-12
今日は機体全体の塗装に入ります。

▼計画通り脚収納庫の扉は殆ど閉めた状態にします。
それと、どうなるか判りませんが脚も接着してしまいます。
扉を取付けると、受けが無いので面より沈んでしまうので、ストッパーを取付けています。(赤丸)

▼Mr.プラ今サフ1000グレーを吹きます。

▼3色の塗装順は悩みどころです。
マスキングから考えると濃い青色が先の方がやりやすそうですが、今回は薄い色から塗り始めます。
手持ちのGX1をる買う事にしたのですが、不足気味なのでC1も使います。

次はマスキングして水色ですが、しっかり乾かせたいので、今日はここまでです。

 


1/72 T-2 ブルーインパルス 製作(その3)

2022-05-11 23:21:31 | 現用機(日本)

2022-05-11
早い方なら1日で完成させる1/72ジェット機ですが、あまり進んでおりません。
まさに牛の歩みです。

▼主翼と水平尾翼を取付け、接合部を均し、不要な穴(赤丸)をイージーサンディングで埋めます。

▼キャノピーを取付けます。

▼サフを吹く前に、脚収納庫の扉なども塗装準備をします。
主脚収納庫の前側の大きい扉B10、B11と、エアブレーキB5、B6は閉めた状態にします。

あまり進んでいませんが、今日はここまでです。

 

ところで、牛歩の理由と言うと。。。

これまでArduinoマイコンボードやPICマイコンを利用して可動化や電飾制御などをやっていますが、
M5Stamp Picoという切手サイズのESP32マイコンを利用する勉強を始めました。

M5Stamp PocoはWi-Fi/Bluetooth機能を内蔵しているので、これだけでラジコン操作が出来そうなのです。
更に今使っているArduinoは8bit 8MHzですが、M5Stamp(ESP32)は32bit 240MHzという事で、クロックだけでも30倍です。

価格はと言うと、Arduino pro mini 3.3VとM5Stamp Picoはどちらも1000円程度です。
Arduinoの場合は、更にミニUSBホストシールド2.0 (1,500円程度)と USB BlueToothドングル(1,000円程度)が必要です。
(最近はマイコン関連が急騰していてもっと高額になっています。)
コスト的にもサイズ的にもコンパクトになります。

良いことずくめの様ですが、Arduinoは開発環境が充実していて、ライブラリーなどプログラム作成の手助けが揃っています。
それに比べて、M5Stamp Pico等のEP32関連にはあまり用意されていません。

実機を入手して1週間ほど経ちますが、LED点滅、PS3コントローラとの連携、サーボモータを回すところまで来たところです。
モータを速度制御してドライブさせたり、効果音を発生させたりは未だ先の事です。

 


1/72 T-2 ブルーインパルス 製作(その2)

2022-05-06 16:30:48 | 現用機(日本)

2022-05-06
▼コックピットの塗装をします。
組立図の塗装指示はH324ライトグレーですが持っていないことも有り、C308グレー FS36375で塗ります。
キャノピーもマスキングして内面色として一緒に塗装します。

▼シート上部のヘッドパッドは指示のC2レッドではなく、C68モンザレッドを筆塗りします。
パッドの上の突起部は削り落として、真鍮線でコの字にしたものを取り付けます。

▼計器パネル、スイッチパネルのデカールを貼ります。
前はパイロットフィギュアが乗りますが、後ろは空席です。

▼パイロットを塗装して搭乗させます。

▼機体に取り付けます。

▼機首のピトー管は1mm真鍮パイプと0.5mm真鍮線に置き換えます。

今日はここでタイムオーバーです。

 


1/72 T-2 ブルーインパルス 製作(その1)

2022-05-04 22:58:08 | 現用機(日本)

2022-05-04
ハセガワの1/72 T-2 ブルーインパルスです。

▼パーツは濃いブルーで成形されています。
バリが所々有りますが問題無さそうです。

▼クリアパーツはキャノピーと計器盤です。

▼デカールはブルーインパルスのカラーデザインです。
成形色の濃いブルーとデカールで、無塗装で完成させる事ができます。

▼先ずコックピットから組み立てます。

▼細かなところは後回しにして、機体に組付けて計器盤の位置など確認します。

今日はここまでです。

▼かかみがはら航空宇宙博物館で撮影した中にT-2も有りました。
もっと、たくさん撮っておけばよかった。