▼Arduino-ESP32「03:サーボモーター制御」

まずは、サーボモーターを制御するためのライブラリー(ESP32 Servo)をインストールします。

それぞれの違いは、使用するサーボの制御範囲「ESP32Servo(0~180度)/ESP32Servo360(0~360°)」です。ここでは、[ESP32Servo]を選択してインストールします。

※直接ZIP形式で入手される場合は、こちらからダウンロードできます。ESP32-Arduino-Servo-LibraryのCloneをクリックして「Download ZIP」を選択。

ダウンロードしたインクルードファイルを組み込むには、[スケッチ]->[ライブラリーをインクルード]->[.ZIP形式・・]でインストールを行います。


プログラム

#include <ESP32Servo.h>
#include <stdio.h>
#include <string>

Servo myservo;
int pos = 160;
// Recommended PWM GPIO pins on the ESP32 include 2,4,12-19,21-23,25-27,32-33
int servoPin = 16;

void setup()
{
    myservo.setPeriodHertz(50);
    myservo.attach(servoPin, 400, 2400); // sg90仕様書に合わせて設定
    Serial.begin(115200);
}

void loop()
{
    String key;
    if (Serial.available())
    {
        key = Serial.readStringUntil('\n');
        Serial.println(key);
        //Serial.println("print!");
        int newAngle;
        newAngle = atoi(key.c_str());
        Serial.println(newAngle);
        if (newAngle <= 180 && newAngle >= 0)
        {
            while (pos != newAngle)
            {
                if (pos < newAngle)
                {
                    myservo.write(pos++);
                    delay(5);
                }
                else
                {
                    myservo.write(pos--);
                    delay(5);
                }
                Serial.println(pos);
            }
        }
        else
        {
            Serial.printf("Out of range [%3d]\n", newAngle);
        }
    }
}

▼サーボモーターSG90&SG92R仕様

  • SG90(低トルク)
  • 標準速度サーボモーター120度、最大速度は180度
  • 作動トルク:1.2-1.4KG /cm
  • 反応速度:0.12秒/ 60度
  • 使用温度:-30℃-60℃
  • 動作電圧:4.8V-6V
  • 茶:GND、赤:+5V、橙:信号線

  • SG92R(低中トルク)
  • PWMサイクル:20mS
  • 制御角:±約90°(180°)
  • 配線:茶=GND、赤=電源[+]、橙=制御信号 [JRタイプ]
  • トルク:2.5kgf・cm
  • 動作速度:0.1秒/60度
  • 動作電圧:4.8V
  • 温度範囲:0℃~55℃
  • 外形寸法:23×12.2x27mm
  • 重量:9g

▼操作

シリアルモニターから角度を入力してサーボをコントロール

▼Arduino-ESP32「02:ESP32同士の通信」

今回は、ESP32同士の通信を学びます。まずは、2個のESP32モジュールを準備します。


まずは、各モジュールに割り当てられた「MACアドレス」の情報を調べる必要があります。この情報は、モジュール内部に持っていますので、読みだして確認することができます。

下記の手順で「MACアドレス」の情報表示を行うプログラムを読み込みます。

▼サンプル・プログラム

  • ボードバージョン:ESP32 by Espressif Systems Ver2.0.17
  • ライブラリーバージョン:xx

上記のプログラムをESP32に書き込み、シリアルモニタを起動します。

モジュールのリセットボタンを押すと、通信に必要となる情報を取得できます。今回のテストで必要となるのは、「Bluetooth」の右に書かれた12桁[xx : xx : xx : xx : xx : xx]の情報です。


動作プログラムについて

ESP32モジュール同士のBluetooth通信のテストとして、次のようなプログラムを行います。

ESP1:送信側・・ボタンを押した情報をESP2へ送る

ESP2:受信側・・情報を受け取ると、LEDを点滅


①送信側モジュールのプログラム


②受信側モジュールのプログラム

▼Arduino-ESP32「01:開発環境の準備」

まずは、開発モジュールおよびプログラム環境の準備から始めます。


▼開発ボード

ESP32開発ボード Wi-Fi + BLEモジュール ESP-WROOM-32

まずは、手始めにこちらのモジュールでテストを行います。


▼PC側開発環境準備 ※Arudino IDEインストール

Arduino公式ダウンロードサイトを開いてダウンロードします。実行してアプリを起動します。


日本語化

Arduino IDE画面左上の [File]から、 [Preferences]を選択します。 設定画面が表示されます。 [Language]の項目で を選択し、 [OK]ボタンを押します。 Arduino IDEが再起動し、日本語表示になります。


開発ボードの選択

まずは、ボードマネージャーから以下をインストールします。

[ツール]->[ボード]->[esp32]->[ESP32 Dev Module]でボードを選択します。


ライブラリーの組込み

各種ライブラリー群は、その都度必要なものを組み込んでいきます。


ブレッドボードの準備

ESP32テストにおいては、ブレッドボード上で各種テストを行います。


書き込みテスト

それでは実際にプログラムの書き込みができるかテストしていきます。パソコンとUSBケーブルで繋ぎます。

まずは、基本的なLED点滅プログラムをESP32に書き込んで動作を見ます。

プログラム1


▼Arudino IDE ESP32リファレンス

Arduino core for the ESP32 リファレンス (fc2.com)

▼Arduino-ESP32「00:お役立ち」

▼ESP32サンプルプログラム実行におけるコンパイルエラーについて

ネットに多数のサンプルプログラムが公開されていますが、いざコンパイルするとエラーが頻発します。これは、バージョンアップに伴うコード体系の変更に伴うもので発生するようです。

解決方法としては、参考にしたサンプルプログラムの「ボードバージョン/各ライブラリーバージョン」を知っておく必要があります。ただし、この点については掲載されていないことが多く、アップグレードするとかえってコンパイルエラーを引き起こすことになります。そのため、プログラム開発時には、ボードバージョンとライブラリーバージョンも一緒に記述しておくとよいと思われます。


▼ESP32で使用できる通信方式

  • Wi-Fi 802.11 b/g/n/e/i
  • Bluetooth v4.2 BR/EDRとBLE
  • SPI
  • VSPI
  • HSPI
  • SDIO
  • I2C
  • UART

ESP32におけるシリアル通信

ESP32では、以下の種類のシリアル通信が利用可能です。

  1. UART: ESP32にはUARTのポートが3つあります。それぞれ、UART0、UART1、UART2と呼ばれます。ただし、UART1はデフォルトでは使用できません。これは、UART1のTX/RXが内蔵フラッシュと共有されているためです1。そのため、UART1を使用するには別のピンに割り当てる必要があります1
  2. I2C: I2CはInter-Integrated Circuitの略で、マイクロコントローラ間でデータを送受信するためのシリアル通信プロトコルです。
  3. SPI: Serial Peripheral Interface (SPI)は、マイクロコントローラと周辺デバイス間でデータを送受信するためのシリアル通信プロトコルです。
  4. Bluetooth: ESP32はBluetoothでシリアル通信を行うためのプロファイルもサポートしています。

これらの通信方式を選択する際には、プロジェクトの要件や目的により適したものを選択することが重要です。例えば、UARTはシンプルで直感的な通信方式であり、I2CやSPIはより高速なデータ転送を可能にします。一方、Bluetoothは無線通信を可能にするため、ケーブル接続の制約を受けずにデバイス間でデータを送受信することができます。各通信方式の特性を理解し、適切に選択することが重要です。

▼潜水艦「1/350 SSN-683 Parch 後期型 R/C化」

大変古いキットということもありまして、加工なしでは組立できません。

ようやくパーツ同士の接合部がぴったり合いました。

このようになります。このあと上下分割できるように内部加工を施します。

▼潜水艦「1/350 ロシア ボレイ型原子力潜水艦 R/C化」

全長は、約46センチ程度になります。


▼ボレイ型原子力潜水艦について


▼船体加工

まずは、底面に穴開けを行い船体への水の取り入れ口を作ります。

こちら前方の底になります。

▼潜水艦「1/144 イギリス 原子力潜水艦 HMS アスチュート級 R/C化」

HMS Astute (S119) は、イギリス海軍の原子力潜水艦です。アスチュート級原子力潜水艦の1番艦でネームシップです。1997年1月31日にゼネラル・エレクトリック・カンパニーの子会社マルコーニ・マリーン(現在のBAEシステムズ・サブマリン・ソリューションズ)に発注され、2001年1月31日にキールを据えて起工され、2007年6月8日にコーンウォール公爵夫人(のちの王妃)カミラにより進水式が執り行われました。


▼無線操縦機

送信機と受信機は、近藤科学株式会社から「MC-8 2.4GHz」を使用します。

<主なスペック>
【送信機 MC-8】
●2.4GHz MX-F方式 マルチコントローラー
●サイズ:150.0×84.5×61.0mm
●重量:145.5g(電池含まず)
●電源:単4乾電池、単4型充電式電池×4本(別売)
●消費電流:50mA以下
 連続17時間以上使用可能(条件により異なります)
●チャンネル数:8
 スティック操作4系統 + スイッチ操作4系統
●送信周波数帯:2.4GHz

マイコンボード接続による信号幅データ

パルス幅の仕様


▼ESP32開発ボード

次により多機能な制御を実現するため、ESP32マイコンボード接続します。


▼船体の制作

ベースとなるキットは、「トランぺッター 1/144 イギリス海軍 原子力潜水艦 HMS アスチュート」/全長:約65センチ

まずは仮組を行います。

赤丸の突起をカットしてスクリューを設置するスペースを確保します。

パイプを通す穴をあけます。

続いて、穴あけした箇所に金属パイプ(外形3.0/内径2.0/長さ:60mm)を差し込みます。

パイプ表面に薄くボンド塗ってから、回転させて差し込んでいきます。

ステンレス製スクリューを差し込みます。


▼メカBOX

ABS板を上記のように切り出します。

組み立てるとこのようになります。

中央にバッテリーを配置するように設計してあります。

上面パーツ制作して逆ネジをはめ込みます。

このようになります。

船体に組み込むとこのようになります。


▼潜舵組込み

「内径:2.01mm」のハトメを両側に埋め込みます。

そこに「ステンレスシャフト」を差し込みます。ここではまだ固定しません。

特に問題がなければいったんシャフトを引き抜きます。


▼船体分割固定パーツの制作

船体前側の左右に1カ所ずつ穴あけを行います。

続いて船体底にドリルで6mmの穴を開けます。中央2カ所(写真では左右)は、船体内に水を取り込むための注水口となります。

このような部品を設計して車体に組み込みます。

内側に接着剤を流してしっかり固定します。

このようになります。※船体上

全部取り付ける必要はありません。中央よりの4箇所のみです。

こちらのパーツは、船体下(写真右)に埋め込みます。

これで船体上下をネジで閉じることができます。


▼塗装作業

泡洗剤とシャワーで塗装前にしっかり油分を落とします。

普段はシャワーを使いませんが、今回はやや大きさがありますので、シャワーを使うと効率的です。そのあと水分をしっかりと拭きとってから、しばらく自然乾燥させます。

乾燥が終ったら基本塗装の前に、プラサフ(下地)をまんべんなく吹きます。

続いて「つや消し黒」を複数回に分けて吹き付けていき、塗膜を徐々に厚くしていきます。

潜水艦らしい深みのある黒になりました。

船体の基本塗装が終ったところで、デカール貼り「高耐久つや消しクリアー」を2~3回に分けて塗膜を厚くしていきます。

次に船体にウェザリング処理を施していきます。


▼潜水テスト用ミニプール

潜水テスト用にフレーム式プールを用意します。「満水量:4,000リットル」

サイズ:幅:3m /奥行:2m/水深:75cm


▼ピストンバラスト

比較的シンプルな構造で実現できそうな方法から試していきます。テストにあたり準備するものは以下の通りです。

  • 空気ダメ容器
  • シリンジ60ml
  • 小型真空ポンプ x 2基
  • テスト用電池BOX
  • 極性切り替えスイッチ
  • ON/OFFスイッチ

初めのテストとしては、こんなところでしょうか。


ここでちょっと一息、Youtubeに大変すばらしい動画がございましたのご紹介いたします。


▼潜水テスト

上記の映像に登場する制作域に到達するまで先は長そうです。まずは初歩的な仕組みから理解して1つ1つ進めていくことにしましょう。

まずは、潜水と浮上の仕組みを理解する上でも試作を作りながらいろいろテストしていくところから始めます。

最初は簡単な構造からテストして実際に浮き沈みするか見ていきます。使用する材料は以下の通りです。

・シリンジ 25ml x 1/マイクロポンプ x 2/エアチューブ分配 x 1

エアチューブ分配器については、3Dプリンターで作りました。

マイクロエアーポンプは2個使います。理想は、極性を変えることでエアーの方向を変えることができればよかったのですが、片方向のみしか対応していません。そのため、注水と排水の機能を持たせるには2個必要となります。


▼試作バラストタンク組立

上記の部品を組み合わせて試作バラストタンクを作ってみることにします。

シリンジを上記のようにカットします。※左写真、右はカット後

次に先端に制作したエア分配器を取り付けます。

上記の接続によりシリンダー内のピストンが正常に動作するか試してみましたが、この接続ではうまくいきませんでした。逆流する空気の流れを遮断できていないようです。そこで、電磁弁を追加して空気の流れを制御することで問題は解決されました。

↓ 2ポジション3ウェイ電磁弁

▼潜水艦「1/350 ドイツ海軍 212A型 組立」

船体の上下を接着して継ぎ目消しを行ってから、サーフェイサーを吹きます。

基本色による塗装が終ったところで、仕上げ塗装に入ります。

まずは、横のラインに沿って薄くブルーをかけていきます。そのあとシルバーを10倍に薄めて全体に吹き付けます。次にダークグレーをモールドに沿って流し込み上から下に伸ばしていきます。

船体が出来上がったところで、水中ジオラマを作ります。