Hatena::ブログ(Diary)

滴了庵日録 このページをアンテナに追加 RSSフィード

2017/04/28(Fri)

ESP32はじめるよ

ESP32とは?

ひとことで言うと、WiFiBluetoothが使える安いマイコンモジュールです。

  • ESP8266の上位版的な製品
  • WiFiに加え、Bluetooth (Classic及びBLE 4.2)が使える (※1)
  • IOが大幅に増えた
  • 秋月で700円と安い (ESP8266は550円) (※2)
  • 技適取得済み

※1 ただし、Bluetoothに関してはライブラリの対応はまだまだこれからという印象

※2 正確にはESP32はチップの名前であり、ESP32を搭載したモジュールの名前はESP-WROOM-32ですが、みんなESP-WROOM-32のことを俗にESP32と呼んでいます。この記事でも便宜上、ESP-WROOM-32をESP32と呼ぶことにします。

購入

とりあえず買ってすぐ試したいなら(A)がオススメ。開発ボードなので必要な周辺回路が実装済みです。それでこの値段は激安です。(B)は素のブレークアウトボードです。ユニバーサル基板やブレッドボード(※)でフルスクラッチで回路を組むならこっち。(C)は自分でプリント基板をおこす人向け。あるいはウレタン線(UEW)で配線するのがお好きな人向けです。


※ 片側各5列の安いブレッドボードだと片側1列しか使えないので、片側各6列あるサンハヤトのブレッドボードがオススメです。

開発環境

おもなものとして以下の開発環境があります。

ネイティブ系には、Arduino IDEで開発できるお手軽なArduino Core for the ESP32と、硬派なSDKのESP-IDFがあり、ともにメーカーが公式にサポートしています。スクリプト系には、Python、Lua、Javascriptがありますが、いずれも実装が乱立してる模様。筆者はネイティブ派なので、どれが良いかよく知りません。BASICはまあ、おっさんホイホイのつもりでしょうか?

ここではとりあえず、Arduino Core for the ESP32を使うことにします。

Arduino開発環境の導入

Arduino IDEがすでにインストールされていることを前提にします。また、プラットフォームWindowsで、Gitが使えるものとします。残念ながら、Arduino Core for the ESP32はArduino IDEのボードマネージャには対応しておらず、以下のように手作業でインストールする必要があります。

まず、以下のリポジトリからクローンします。もしもGitが使えない場合、こちらからDownload ZIPして解凍してもかまいません。アップデートの時の手間だけの問題かと思います。

次に、下記のバイナリを実行します。

  • C:/Users/[YOUR_USER_NAME]/Documents/Arduino/hardware/espressif/esp32/tools/get.exe

DOS窓が開いてインストールが実行されます。あとはDOS窓が閉じるまで待ちます。


ノートン先生をはじめ一部のセキュリティソフトは、いくつかのバイナリをウィルスとして検出してしまうようです。(ノートン先生ではTrojan.Gen.8!cloudとして検出されます。) これらのバイナリをセキュリティ適用から除外するかは各自の判断でお願いします。また、Pythonを実行できる環境であれば、これらのバイナリがなくてもインストール可能のようです。

結線

ESP32-DevKitCボードを使う場合は、この節は読み飛ばしてOKです。

最低限、以下の7つのピンの結線が必要です。

  • GND, 3.3V: 電源を供給します。
  • TXD0, RXD0: USBシリアル変換を介してPCに接続します。(書き込み用)
  • EN: 10kΩでプルアップし、タクトスイッチ等でGNDに落ちるようにします。(※1)
  • IO0: タクトスイッチ等でGNDに落ちるようにします。(※2)
  • IO2: 起動時にHighに「ならない」こと。(※3)

※1 ESP8266におけるENとRESETの機能を兼ねています。

※2 プルアップは不要です。(内部プルアップされています。)

※3 内部プルダウンされています。つまり、開放でもOKです。


ブートモード設定は下表の通りになります。

つまり、ENとIO0のボタンを押してからENのボタンを先にはなすと、書き込みモードに入ります。

SPI Flash Boot(通常)Download(書き込み)
IO010
IO2Don't-care0

ピン配置と機能

写真

書き込み

  • Arduino IDEのツール > マイコンボードで「ESP32 Dev Module」を選択する。
  • Arduino IDEのツール > シリアルポートでESP32のポートを選択する。
  • ESP32を書き込みモードにして、Arduino IDEの書き込みボタンで書き込みます。(※)

※ ESP32-DevKitCの場合には、ボタンを押さなくてもArduino IDEの書き込みボタンを押すだけで自動的に書き込みモードになり、書き込みができます。

参考URL

2017/04/23(Sun)

ラジコン戦車の改造 (4)赤外線信号の解析

Waltersonsバトルタンクシリーズの赤外線信号をオシロで解析します。

変調周波数

変調周波数は、一般的な赤外線リモコンと同じ38kHzのようです。

図

信号フォーマット(バトルロイヤルモード時)

バトルタンクシリーズの赤外線バトルは、自分以外全員敵のバトルロイヤルモードと、Aチーム/Bチームに分かれて戦うチーム戦モードがあり、プロポのスイッチで切り替えられます。チーム戦モードの場合、フレンドリーファイアー(同士討ち)は無効となります。まず、バトルロイヤルモード時の信号を解析します。バトルロイヤルモードでは、VS TANKと信号の互換性があります。

図

上図のように、長いヘッダのあと、8ビットのデータらしきものが見えます。短いOFFと長いONのセットと、長いOFFと短いONのセットが0/1を表してると思われます。ヘッダの長さが6600usec、短いパルスの長さが550usec、長いパルスの長さが1650usecです。MSBファーストと仮定すると、データの値は5Bhと読めます。

これは、OpenPanzer.orgでのVS TANKの赤外線信号の実装と一致します。

信号フォーマット(チーム戦モード時)

ところが、チーム戦モード時の信号を測定したところ、上記の仮定は覆されてしまいました。


【チームAの場合】

図

【チームBの場合】

図

上図のように、長いOFFと長いON、短いOFFと短いOFFという組み合わせが出現しました。WaltersonsがVS TANKの信号を独自拡張したのだとしたら、ちょっと理解に苦しむ仕様です。けっきょく、長いON/長いOFFを各々ビット値1、短いON/短いOFFを各々ビット値0と見なして16ビットデータとして扱うしかなさそうです。


マニュアルによると、実車の主砲口径によってダメージのポイントが3段階に設定されているようです。

  • 75-76mm口径: 15ポイント
  • 85-88mm口径: 20ポイント
  • 105-127mm口径: 30ポイント

今回、使用したT-34/85の主砲は85mm口径なので、上記の波形は20ポイントの攻撃の信号と考えられます。それ以外については手元に機体が無いので今のところ不明です。

結論

  • 変調周波数 = 38kHz
  • 信号フォーマット = ヘッダ + (OFFパルス + ONパルス)×8
  • ヘッダの長さ = 6600usec
  • 長いパルスの長さ = 1650usec
  • 短いパルスの長さ = 550usec
  • 長いパルスをビット値1、短いパルスをビット値0、MSBファーストの16ビット値と見なす
  • バトルロイヤルモード時の信号 = 669Ah
  • チーム戦モード時の信号は下表の通り
口径ポイントAチームBチーム
75-76mm15ポイント未調査未調査
85-88mm20ポイント9589hB7ABh
105-127mm30ポイント未調査未調査

2017/04/22(Sat)

ラジコン戦車の改造 (3)モータの駆動電流

WaltersonsのT-34/85の駆動輪のモータの電流を測定しました。

(以下、電流値は片輪1チャンネルぶんの電流値です。)

  • 平地(フローリング床)での前進/後退で連続0.17A
  • 平地(フローリング床)での超信地旋回で連続0.35A
  • 勾配25度(タオル地)での前進で連続0.27A
  • 平地(タオル地)での壁押しで連続0.25A

始動時はだいたいこの倍くらいの電流でした。(テスターでの測定のため瞬間最大は不明)


以上のように、意外と電流値が小さいことが分かりました。

使用されいるモータドライバMX1508は、両輪駆動時の最大連続電流が1A程度と思われます。(片チャンネルの連続駆動電流が0.8Aのとき、他チャンネルの連続駆動電流は最大1.2A、との記述があります。)

僕がGPduinoシリーズで採用しているTB6612FNGは、連続最大1.2A / ピーク最大3.2Aなので、じゅうぶん間に合うのではないかと思います。

2017/04/21(Fri)

ラジコン戦車の改造 (2)電装系の解析

WaltersonsのT-34/85を分解して電装系を解析します。

分解

制御回路は40mm×64mmの基板が1枚あるのみで、基板上に無線モジュールが実装されています。

写真


基板上の主要部品は下記の通りです。

構成図

図

結線表

P1 駆動輪モータ出力

ケーブル直付け (2mmピッチ)

ピン番号ケーブル色接続先
1左駆動輪モータ-
2左駆動輪モータ+
3右駆動輪モータ-
4右駆動輪モータ+
P2 砲塔部モータ出力

JST PHコネクタ (2mmピッチ)

ピン番号ケーブル色接続先
1砲身上下モータ-
2砲身上下モータ+
3砲塔回転モータ-
4砲塔回転モータ+
P3 小信号入出力

JST PDHコネクタ(2mmピッチ×2列)

ピン番号ケーブル色接続先ピン番号ケーブル色接続先
1NC未接続2赤外線受信モジュールGND
3+3.3V4赤外線受信モジュール信号
5NC未接続6着弾表示LEDカソード
7ステータスLED(赤)カソード8主砲LED(赤外)カソード
9ステータスLED(緑)カソード10NC未接続
11砲撃表示LEDカソード12NC未接続
13ヘッドライトLEDカソード14NC未接続

※ LEDおよび赤外線受信モジュールはすべて共通の+3.3V電源で動作

P6 バッテリー電源入力

ケーブル直付け (5mmピッチ)

ピン番号ケーブル色接続先
1バッテリー電源-
2バッテリー電源+
P8 スピーカ出力

JST XHコネクタ (2.5mmピッチ)

ピン番号ケーブル色接続先
1スピーカ+
2スピーカ-

2017/04/19(Wed)

ラジコン戦車の改造 (1)素材選び

夏に向けてラジコン戦車改造のプロジェクトを開始します。制御基板を自作のものに置き換えてWiFiでコントロールするのが目標です。今回は素材となるラジコン戦車を選定します。市販のラジコン戦車のシリーズには、タミヤ1/16、タミヤ1/35、VS TANK 1/24、HengLong 1/16 などがあります。


まずスケールについていうと、選択肢は 1/35 か 1/24 か 1/16 ですが、1/35は小さすぎて回路を詰め込むのが難しいと思われます。また1/16はモーターが大きくなるので、モータドライバ要求スペックが跳ね上がります。そこで、手ごろなサイズの1/24をターゲットとします。


次に、バトルの方式として、主砲からBB弾などの実体弾を撃つタイプと、赤外線LEDで信号を撃つタイプとがあります。イベント会場でBB弾を撃つのは危ないし、弾を拾うのも面倒なので、赤外線タイプを選ぶことにします。


さて、1/24で赤外線バトル方式といえば、VS TANKの「1/24 RCバトルタンク IR」および Waltersonsの「バトルタンクシリーズ」が当てはまります。この両シリーズは赤外線信号の互換性があります。ちなみに日本ラジコン戦車道連盟でもこれらのシリーズが競技に使用されています。そこで、本プロジェクトでもこれらのシリーズをターゲットとします。


僕はソ連者なので、車種はやはりWaltersonsのT-34/85(ガルパン仕様)を選ぶことにします。さっそく購入しました。

写真


同じくWaltersonsのティーガー戦車と撃ち合っているところです。

写真