Ganponブログ

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

フリスク缶の再利用

2021-07-27 15:16:08 | DIY

2021-07-27
極暑が続き、模型製作意欲が失せます。
しかし、この暑い日中に屋外で競技をしている東京オリンピックのアスリートは素晴らしいです。
コロナ禍でのオリンピック開催には賛否両論ありますが、私はクーラーの効いた部屋でテレビ観戦です。

今回は、短時間でできるDIYです。
よくネットで見る空き缶の塗装はがしと再利用を試してみます。
瞬着の保管容器に利用できるフリスク缶を加工します。

と言っても、手元にフリスク缶は有りません。
買ってきて空き缶を作るのも良いのですが、今回はメルカリで空き缶を購入しました。
300円(送料&税込み)で6個も手に入れることができます。
発注して2日後には届きました。
6個のはずが2個多く入っていました。

材料が揃ったので、加工作業に入ります。

▼加工前のフリスクの空き缶

▼塗料をはがし、サンドペーパーで磨き、更に磨き材で磨き上げます。
塗料はがしはアサヒペンの非塩素系塗料はがし剤を使います。
ゲル状の液体で、刷毛で塗り30分ほどで塗料面が浮いてくるという事です。
しかし、3時間たっても変化なし。
ヘラでこすると・・・・・剥がれません。
フリスクの塗装はものすごく強いようです。
再度塗り付け、金属ブラシで擦って少しずつ剥がしていきます。
2400番、4000番のサンドペーパーで磨き、さらにブルーマジックで磨き上げます。

▼蓋にヒートンを取り付け、チェーンを通します。
1個は黒染めしてみました。

残りの4個はそのままです。
残り4個の加工は、そのうち気が向いたらという事で終了します。

 


RC可動化 1/35 キングタイガー製作(回路)

2021-07-26 14:45:33 | 1/35 タミヤ キングタイガー

2021-07-26
要望があったので、2年前に製作したRC可動化キングタイガーの回路図を掲載します。
当時の資料を探しましたが、時間がたっていますので、違っているところがあるかもしれません。


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

  1. * PS4BT_arduino_pro mini_tank_DRV8835_KING_TIGER_ser_ver04c
  2.     【走行コントロール】
  3.    コントローラーの左スティック上下で前後進、
  4.    右スティックの左右でステアリングを制御。
  5.    ステアリングを振っていくと回転軸側が減速していき(緩旋回から信地旋回)、
  6.    一杯に倒すと回転軸側は停止。(信地旋回)
  7.    左スティック中央で右ステアリングを一杯に振ると超信地旋回(速度50%)
  8.    
  9.    【砲身上下】 右スティック上下で砲身上下。R3ボタンでセンター。
  10.      // 右側の△ボタンで砲身上、×ボタンで砲身下、□ボタンでセンター位置になる。
  11.    【砲塔旋回】 左スティック左右で砲塔旋回。離した位置で止まる。
  12.    【主砲】 R1ボタンで主砲発射
  13.    【機銃】 L1ボタンで機銃射撃
  14.    【ヘッドライト】RIGHTボタンで点灯、LEFTボタンで消灯。
  15.    【車間表示灯】UPボタンで点灯、DOWNボタンで消灯。  
  16.  
  17.   モータドライバはDRX8835
  18.   砲撃時のリコイルアクション 車体
  19.   主砲発光はミニUSBシールドのGPOUTピン0を使用
  20.  
  21.   サブシステムで実行
  22.    irremote PIN3 赤外線発光(砲撃)システム
  23.    赤外線受光モジュール出力を接続し、被弾処理を追加
  24.     MP3プレーヤーで効果音を発生
  25.  
  26.   シリアル通信データ
  27.    エンジン始動 100
  28.    砲撃 101
  29.    銃撃 102
  30.    被弾 103
  31.    破壊 105
  32.    エンジン停止/始動 110
  33. */
  34.  
  35. #include <PS4BT.h>
  36. #include <usbhub.h>
  37.  
  38. #ifdef dobogusinclude
  39. #include <spi4teensy3.h>
  40. #endif
  41. #include <SPI.h>
  42.  
  43. USB Usb;
  44. BTD Btd(&Usb);
  45. PS4BT PS4(&Btd, PAIR);
  46. bool printAngle, printTouch;
  47. uint8_t oldL2Value, oldR2Value;
  48.  
  49. #include <USB_Host_Shield_GPIO.h> // GPOUTピンで主砲LEDを発光させるため
  50. MaxGPIO max;
  51.  
  52. int cnt = 0 ;
  53. byte ser_deta;
  54.  
  55. #include <VarSpeedServo.h>
  56. VarSpeedServo myservo_1;
  57. VarSpeedServo myservo_2;
  58. VarSpeedServo myservo_3;
  59. int servo1_pos = 60;
  60. int servo_pos = servo1_pos;
  61. const int servo1_sp = 5;
  62. const int servo2_sp = 1;
  63. int servo3_pos = 50;
  64. int ch = 0;
  65. int pos_y;
  66. int pos_x;
  67. int pos_ry;
  68. int pos_rx;
  69. int motor_speed;
  70. float steering;
  71. int PWMA = 5;
  72. int PWMB = 6;
  73. int AIN1 = 4;
  74. int BIN1 = 7;
  75. const int LED_2 = 2;
  76. const int LED_3 = 8;
  77. const int LED_4 = A2;
  78.  
  79. void setup() {
  80.   Serial.begin (115200);
  81. #if !defined(__MIPSEL__)
  82.   while (!Serial);
  83. #endif
  84.   if (Usb.Init() == -1) {
  85.     Serial.print(F("\r\nOSC did not start"));
  86.     while (1); // Halt
  87.   }
  88.   Serial.print(F("\r\nPS4 Bluetooth Library Started"));
  89.  
  90.   pinMode(PWMA, OUTPUT);
  91.   pinMode(PWMB, OUTPUT);
  92.   pinMode(AIN1, OUTPUT);
  93.   pinMode(BIN1, OUTPUT);
  94.   pinMode(LED_2, OUTPUT);
  95.   pinMode(LED_3, OUTPUT);
  96.   pinMode(LED_4, OUTPUT);
  97.   pinMode(A4, OUTPUT);
  98.   pinMode(A5, OUTPUT);
  99.   pinMode(A1, OUTPUT);
  100.  
  101.   myservo_1.attach(A4);
  102.   myservo_1.write(servo_pos);
  103.   myservo_2.attach(A5);
  104.   myservo_2.write(90);
  105.   //myservo_2.detach();
  106.   myservo_3.attach(A1);
  107.   myservo_3.write(servo3_pos);
  108. }
  109.  
  110. void loop() {
  111.   Usb.Task();
  112.   if (PS4.connected()) {
  113.     if ( Serial.available() >= 2 ) {
  114.       if ( Serial.read() == 'H' ) {
  115.         ser_deta = Serial.read() ;
  116.       }
  117.     }
  118.  
  119.     if (ser_deta == 103) {
  120.       Hit();
  121.     }
  122.  
  123.     //エンジン音停止
  124.     if (PS4.getButtonClick(CIRCLE)) {
  125.       sendData(110);
  126.     }
  127.  
  128.     // 砲身 UP/DOWN
  129.     if ( PS4.getButtonClick(R3)) { //CENTER
  130.       myservo_1.attach(A4);
  131.       myservo_1.write(servo1_pos, servo1_sp, true);
  132.       // myservo_1.detach();
  133.     }
  134.     pos_ry = PS4.getAnalogHat(RightHatY);
  135.     if (pos_ry < 10) { // UP
  136.       myservo_1.attach(A4);
  137.       myservo_1.write(servo1_pos - 40, servo1_sp, true);
  138.       // myservo_1.detach();
  139.     } else if (pos_ry > 245) { //DOWN
  140.       myservo_1.attach(A4);
  141.       myservo_1.write(servo1_pos +25, servo1_sp, true);
  142.       // myservo_1.detach();
  143.     } else { //停止
  144.       myservo_1.detach();
  145.     }
  146.   
  147.     //砲塔旋回
  148.     //pos_rx = PS4.getAnalogHat(LeftHatX);
  149.     if ( PS4.getAnalogHat(LeftHatX) > 230) {
  150.       myservo_2.attach(A5);
  151.       myservo_2.write(95, servo2_sp);
  152.     } else if (PS4.getAnalogHat(LeftHatX) < 26) {
  153.       myservo_2.attach(A5);
  154.       myservo_2.write(85, servo2_sp);
  155.     } else {
  156.       myservo_2.write(90, 255);
  157.       myservo_2.detach();
  158.     }
  159.  
  160.     //砲撃 + リコイル
  161.     if (PS4.getButtonClick(R1) && ch == 0 ) {
  162.       sendData(101);
  163.       delay(100);
  164.       max.write(0, HIGH);
  165.       //myservo_3.attach(A1);
  166.       myservo_3.write(servo3_pos+50, 255);
  167.       delay(100);
  168.       motor_run(200, 1, 200, 1, 1);
  169.       ch = 2000;
  170.       myservo_3.write(servo3_pos, 15);
  171.       delay(100);
  172.       motor_run(0, 0, 0, 0, 1);
  173.       // myservo_3.write(servo3_pos, 20);
  174.       delay(40);
  175.       max.write(0, LOW);
  176.       motor_run(100, 0, 100, 0, 1);
  177.       delay(260);
  178.       motor_run(0, 0, 0, 0, 1);
  179.       delay(140);
  180.       //myservo_3.detach();
  181.     } else {
  182.       if (ch > 0) {
  183.         ch--;
  184.       }
  185.     }
  186.  
  187.     //銃撃
  188.     if ( PS4.getButtonClick(L1)) {
  189.       sendData(102);
  190.       delay(100);
  191.       for ( int i = 0; i < 5 ; i++) {
  192.         digitalWrite(LED_2, HIGH);
  193.         delay(80);
  194.         digitalWrite(LED_2, LOW);
  195.         delay(120);
  196.       }
  197.     }
  198.  
  199.  
  200.     //ヘッドライト
  201.     if (PS4.getButtonClick(RIGHT)) {
  202.       max.write(1, HIGH);
  203.     }
  204.  
  205.     if (PS4.getButtonClick(LEFT)) {
  206.       max.write(1, LOW);
  207.     }
  208.  
  209.     //車間表示灯
  210.     if (PS4.getButtonClick(UP)) {
  211.       digitalWrite(LED_4, HIGH);
  212.     }
  213.  
  214.     if (PS4.getButtonClick(DOWN)) {
  215.       digitalWrite(LED_4, LOW);
  216.     }
  217.  
  218.  
  219.     //走行コントロール
  220.     pos_y = PS4.getAnalogHat(LeftHatY);
  221.     pos_x = PS4.getAnalogHat(RightHatX);
  222.  
  223.     //前進
  224.     if (pos_y <= 102 && pos_x >= 102 && pos_x <= 152) {
  225.       motor_speed = map(pos_y, 102, 0, 0, 255);
  226.       motor_run(motor_speed, 0, motor_speed, 0, 0);
  227.     }
  228.  
  229.     //後進
  230.     else if ( pos_y >= 152 && pos_x >= 102 && pos_x <= 152) {
  231.       motor_speed = map(pos_y, 152, 255, 0, 255) ;
  232.       motor_run(motor_speed, 1, motor_speed, 1, 0);
  233.     }
  234.  
  235.     //前進右緩旋回、信地旋回
  236.     //else if ( pos_y <= 102 && pos_x > 152 && pos_x <= 245) {
  237.     else if ( pos_y <= 102 && pos_x > 152) {
  238.       motor_speed = map(pos_y, 102, 0, 0, 255);
  239.       steering = motor_speed * (1.00 - (map(pos_x, 152, 255, 0, 255) / 255.00));
  240.       motor_run(motor_speed, 0, steering, 0, 0);
  241.     }
  242.  
  243.     //前進左緩旋回、信地旋回
  244.     //else if ( pos_y <= 102 && pos_x < 102 && pos_x >= 10) {
  245.     else if ( pos_y <= 102 && pos_x < 102) {
  246.       motor_speed = map(pos_y, 102, 0, 0, 255);
  247.       steering = motor_speed * (1.00 - (map(pos_x, 102, 0, 0, 255) / 255.00));
  248.       motor_run(steering, 0, motor_speed, 0, 0);
  249.     }
  250.  
  251.     //後進右緩旋回、信地旋回
  252.     //else if ( pos_y >= 152 && pos_x > 152 && pos_x <= 245) {
  253.     else if ( pos_y >= 152 && pos_x > 152 ) {
  254.       motor_speed = map(pos_y, 152, 255, 0, 255);
  255.       steering = motor_speed * (1.00 - (map(pos_x, 152, 255, 0, 255) / 255.00));
  256.       motor_run(motor_speed, 1, steering, 1, 0);
  257.     }
  258.  
  259.     //後進左緩旋回、信地旋回
  260.     //else if ( pos_y >= 152 && pos_x < 102 && pos_x >= 10) {
  261.     else if ( pos_y >= 152 && pos_x < 102 ) {
  262.       motor_speed = map(pos_y, 152, 255, 0, 255);
  263.       steering = motor_speed * (1.00 - (map(pos_x, 102, 0, 0, 255) / 255.00));
  264.       motor_run(steering, 1, motor_speed, 1, 0);
  265.     }
  266.  
  267.     //右超信地旋回
  268.     else if (pos_x > 245 && pos_y >= 102 && pos_y <= 152) {
  269.       motor_speed = 128;
  270.       motor_run(motor_speed, 0, motor_speed, 1, 0);
  271.     }
  272.  
  273.     //左超信地旋回
  274.     else if (pos_x < 10 && pos_y >= 102 && pos_y <= 152) {
  275.       motor_speed = 128;
  276.       motor_run(motor_speed, 1, motor_speed, 0, 0);
  277.     }
  278.  
  279.     else {
  280.       motor_run(0, 0, 0, 0, 1);
  281.     }
  282.   }
  283. }
  284.  
  285. void motor_run(int D0, int D1, int D2, int D3, int D4) {
  286.   analogWrite(PWMA, D0);
  287.   digitalWrite(AIN1, D1);
  288.   analogWrite(PWMB, D2);
  289.   digitalWrite(BIN1, D3);
  290.   digitalWrite(LED_3, D4);
  291. }
  292.  
  293. // ====被弾====
  294. void Hit() {
  295.   ser_deta = 0;
  296.   motor_run(255, 1, 255, 0, 0);
  297.   delay(150);
  298.   motor_run(0, 0, 0, 0, 1);
  299.   delay(100);
  300.   motor_run(200, 0, 200, 1, 0);
  301.   delay(200);
  302.   motor_run(0, 0, 0, 0, 1);
  303.   delay(50);
  304.   cnt++;
  305.   if ( cnt >= 5 ) {
  306.     sendData(105);
  307.     motor_run(0, 0, 0, 0, 0);
  308.     for ( int i = 0; i < 15 ; i++) {
  309.       max.write(1, HIGH);
  310.       delay(1000);
  311.       max.write(1, LOW);
  312.       delay(1000);
  313.     }
  314.     //delay(30000);
  315.     cnt = 0;
  316.   } else {
  317.     delay(1000);
  318.   }
  319. }
  320.  
  321. void sendData(byte val) {
  322.   Serial.write('H');
  323.   Serial.write(val);
  324. }
 
 
Sub:
  1. /* arduino_pro mini_tank_IRw_MP3_sub_ver03b
  2.     2019-06-15
  3.    本サブシステムの内容
  4.    irremote PIN3 赤外線発光(砲撃)システム
  5.    赤外線受光モジュール出力を接続し、被弾処理を追加
  6.    MP3プレーヤーで効果音を発生
  7.    エンジン始動信号受信でエンジン始動、アイドリング音発生。
  8.  
  9.   シリアル通信データ
  10.    エンジン始動 100
  11.    砲撃 101
  12.    銃撃 102
  13.    被弾 103
  14.    破壊 105
  15.    エンジン停止/始動 110
  16. */
  17.  
  18. #include
  19. #include
  20. SoftwareSerial mySerial(A2, A3);
  21. DFRobotDFPlayerMini myDFPlayer;
  22. #include
  23. IRsend irsend;
  24. int RECV_PIN = A0 ; /
  25. IRrecv irrecv(RECV_PIN);
  26. decode_results results;
  27. const long sign_hit = 0x4CB0FADD;
  28. byte recv_data;
  29. const int LED_1 = 8;
  30. int silent = 1;
  31. int khz = 38;
  32. unsigned int irSignal[] = {4100, 1000, 2050, 2050, 1000};
  33. int d_time = 200;
  34.  
  35. void setup() {
  36.   irrecv.enableIRIn(); // Start the receiver
  37.   pinMode(RECV_PIN, INPUT) ;
  38.   Serial.begin (115200);
  39.   mySerial.begin (9600);
  40.   myDFPlayer.begin(mySerial);
  41.   delay(100);
  42.   myDFPlayer.volume(22);
  43.   //pinMode(LED_1, OUTPUT);
  44. }
  45.  
  46. void loop() {
  47.   if (irrecv.decode(&results)) {
  48.     if (results.value == sign_hit) {
  49.       sendData(103);
  50.       myDFPlayer.play(17);
  51.       delay(1000);
  52.     }
  53.     irrecv.resume();
  54.   }
  55.  
  56.    if ( Serial.available() >= 2 ) {
  57.     if ( Serial.read() == 'H' ) {
  58.       recv_data = Serial.read() ;
  59.     }
  60.   }
  61.  
  62.   if (recv_data == 110) {
  63.     silent = 1 - silent;
  64.     // recv_data = 0;
  65.   }
  66.  
  67.   if (silent == 1) {
  68.     myDFPlayer.disableLoop();
  69.   } else if ( (silent == 0) && (recv_data == 110)) {
  70.     myDFPlayer.play(3);
  71.     delay(2000);
  72.     myDFPlayer.loop(5);
  73.     delay(d_time);
  74.   } else {
  75.     myDFPlayer.loop(5);
  76.     delay(d_time);
  77.   }
  78.  
  79.   if ( recv_data == 101) {
  80.     irsend.sendRaw(irSignal, (sizeof(irSignal) / sizeof(irSignal[0])), khz);
  81.     //irsend.sendRaw(data buf, length, hertz)
  82.     irrecv.enableIRIn();
  83.     PLAY_MP3(15);
  84.   } else if ( recv_data == 102 ) {
  85.     PLAY_MP3(10);
  86.  
  87.   } else if ( recv_data == 105 ) {
  88.     PLAY_MP3(18);
  89.     delay(30000);
  90.     PLAY_MP3(3);
  91.     delay(2000);
  92.   }
  93.   recv_data = 0;
  94. }
  95.  
  96. void sendData(byte val) {
  97.   Serial.write('H');
  98.   Serial.write(val);
  99. }
  100.  
  101. void PLAY_MP3(int LT) {
  102.   recv_data = 0;
  103.   //digitalWrite(LED_1, HIGH);
  104.   myDFPlayer.play(LT);
  105.   delay(900);
  106.   //digitalWrite(LED_1, LOW);
  107. }
 



ここリモで扇風機をリモート

2021-07-16 21:33:26 | リモコン

2021-07-16

ローコスト家電スマートリモコン「ここリモ」のカスタマイズをします。
カスタマイズ自体は昨年実施していました。
この度、家庭内のWi-Fi環境が更新され、再設定することになったので、備忘録としてここに残します。

▼ここリモ本体はこんなものです。

▼ここリモではエアコン、テレビ、照明の3種類、各1台のWi-Fiリモート操作ができます。
因みにこれはエアコンの操作画面です。

本題のカスタムは、準備されていない「扇風機」のリモートをここリモで実行することです。
条件は扇風機が赤外線リモコンで操作できいるタイプであること。
扇風機以外でも同様のカスタムは可能だと思います。
今回はテレビの操作面で扇風機を操作できるようにします。

▼この画面で、右上のスパナマークの「編集」をクリックします。

▲今回は電源ボタンに電源のON/OFF、 +は風量アップ、-は風量ダウン、|◀と▶|に首振りを設定。
いらないボタンは編集で消して、カスタムボタンのAとBにお休みタイマーとリズムを割り当てました。

▼編集しますかと聞いてくるので、「OK」をクリック。

▼既にテレビのボタン設定が割り当て済みだったので、更新しますかと聞いてきますので、
「更新する」をクリック。

▼ここで、扇風機のリモコンをここリモの受信部(青色のインジケータランプの少し上)に向けて
5㎝ほどの距離から画面指示に従って一度押します。

▼学習に成功すると「完了」ボタンをクリックして、次のボタンを割り当て学習します。
時々、送受信に失敗してエラー表示が出ますが、再度やり直します。

残念なことは、「テレビ」の機器名やボタンの表示文字の編集ができないことです。
それでも、Wi-Fiで操作できるようになり、赤外線リモコンで受信部を狙って操作する不自由さが解消できます。

ここリモ アプリ操作マニュアル

 

 


ハセガワ 1/72 MiG-25フォックスバット製作(その1)

2021-07-15 10:48:13 | 現用機(ロシア)

2021-07-15
10日ほど前にファイザー製コロナワクチン2回目摂取を終えました。
2回とも摂取箇所付近が痛くなりましたが、それ以外は気になっていた発熱もありませんでした。

連日の豪雨や暑さで制作意欲がダダ下がりです。
そんな状態ですが、ハセガワの1/72 MiG-25フォックスバットを作り始めました。
MIG-25と言えば、函館空港に強行着陸した1976年9月6日のベレンコ中尉亡命事件が思い出されます。
真空管が使用されていたという記事も印象的でした。

▼箱絵はこの時の機体です。

▼パーツは大きいですが、数は少ないですが、大きいです。
今のところ、完成後の置き場所がありません。

▼古いキットのためか、バリが結構あります。

▼コックピットを組み立てます。

▼機体に仮付け。

▼機体を仮組します。
接合部のズレや隙間がありますが、修正可能範囲です。
それより、このキットは凸モールドでした。
彫り直すか、どうしようか?

今日はここまでです。

 

 

 


オイルランタンと収納ケース

2021-07-08 23:21:06 | キャンプ・サバイバル

2021-07-08
”キャンプ気分を味わう” 第2弾
以前から欲しかったオイルランタンのFEUERHAND 276を購入しました。
昨今のキャンプブームで価格高騰ですが、比較的低めの価格で入手できました。

▼オイルは何がいいか判りませんが、防虫ハーブオイル RO-F300 300ccというものを購入。

▼そして、オイル注入口蓋のパッキンを紙のようなものからゴムパッキンに取り替えます。

芯の先をハサミで角を切り、点灯させてみます。
▼照明としての明るさは不十分ですが、雰囲気は最高です。

 

持ち運ぶことはないのですが、収納ケースを作ります。
材料は桐集成材145x600x13㎜を3枚。
丁番、取っ手、パッチン錠などです。

製作工程の画像は残していませんが、2枚の600㎜の板を2分割し、300㎜の側板を4枚作ります。
残りの板から天板、底板を切り出します。
扉は幅が足りないので、残りの板から不足分を切り出してボンドで接着します。
▼木工ニス(チーク)を刷毛塗りし、紙を切り出して「FEUER HAND」をプリントします。

▼ランタンが中で暴れないようにストッパーの板を下部に設置。
前後の寸法がギリギリなので、背板の下部を少し彫り込んでいます。

▼扉の内側にスポイトのホルダーと替え芯などを収納する缶を取り付けます。

▼上部に取っ手を取り付けて完成です。

 

▼出来れば4,000円以下で購入できるタイミングを待ちましょう。

 

 

▼送料込みでもっと低価格の購入先をお勧めします。