2022年8月26日発売 書籍『あっと驚く技術力 ガジェット改造』に記事を掲載して頂きました!

【Arduino】L293Dモータードライバシールドと無線モジュールをシリアル接続する簡単な方法!

最近、初めてのメカナムホイールを購入しました。
このメカナムホイールをテストで動かすためにArduino UnoとWi-Fiモジュール(ESP-01)という組み合わせで組んで動きを付けてテスト動作させていました。

メカナムホイールはその構造から前後・左右・斜め方向・回転など多くの動きを付けることができ、ラジコンなどに使うとおもしろい動きをさせることが出来ます。

今回はメカナムホイールの話ではなく使用したモータードライバとの無線接続の話となります。

上記動画(スクロールして動画を見て下さい)に多くのコメントやDMを頂きました。
前輪・後輪を軸とした回転も出来るよ・・・なんていうメカナムホイールについてのアドバイスなども頂きましたが、みなさん興味を持たれたのは使用しているモータードライバに関してや無線モジュールとの接続方法のようですね!(ちょっと意外でした!)

上記動画で動かしているラジコンのボディーは、メカナムホイールがどんな動きが出来るのかテストをするためにたまたま手元にあったボディーにモーターをマウントして動かしたものとなります。

最終的には3Dプリンタでボディーを作成してもっとコンパクトなメカナムホイールラジコンを製作しようと考えています。

そして使用するマイコンやギアボックスなどの構成も最終的に変わってくるかもしれませんが、上記動画ではArduino UnoにL293Dモータードライバシールドという組み合わせで、無線モジュールにはESP-01(ESP8266)を使っています。

Arduinoで使えるモータードライバには、L293Dの他にも例えばメジャーなものではL298NやDRV8833や8835、TB6612などいろいろとあります。
接続できるモーターの台数や定格(流せる電圧・電流の違い)など様々なタイプのモータードライバが販売されています。

【Arduino入門編㉒】ArduinoでDCモーターを制御する。【L298Nデュアルモータードライバ】

Arduinoを使っていて便利に感じるのは、接続するだけで機能を拡張する事が出来る『シールド』と呼ばれる拡張ボードが多数販売されているところです。
上記動画ではL293Dモータードライバシールドというものを使っています。
Arduinoに接続するだけでDCモーターやステッピングモーター、サーボモーターなどを動かすことが出来るシールドです!

このシールドにはモータードライバチップとしてL293Dが2枚使われているので、4台のDCモーター(または2台のステッピングモーター)を同時に制御する事が出来ます。
2枚のL293Dドライバチップをシフトレジスタチップ(74HC595)で制御する構成となっています。

プログラム(スケッチ)的にはAdafruitのモータードライバ用ライブラリを使えば比較的簡単に複数台のDCモーターやステッピングモーター、サーボモーターを制御する事が出来る便利なArduino用のシールドとなります。

L293Dモータードライバシールドに関しては、こちらの記事で詳しく解説しているので参考にして下さい!

【Arduino】L293Dモータードライバシールドを使ってみる!ステッピングモーター/DCモーター/サーボモーター、複数のモーターを動かす事ができる便利なシールドです!

そして本題に戻ります!
上記Instagramに投稿した動画では、メカナムホイールの質問やコメントよりも使用しているモータードライバや無線モジュールとの接続に関して多く頂きました!

『無線モジュールは何を使っている?』
『L293Dシールドとの接続方法は?』
といった内容です!
個別でDMに答えるのは時間的に大変なので、少し本記事でまとめておきます。

メカナムホイールの面白さが伝わればと投稿した動画なのですが、みなさん見る視点がちょっと違っていたのは少し驚きですね!

【Arduino】L293Dシールドに無線モジュールを接続する!

L293Dモータードライバシールドは、Arduino Unoに接続するだけでDCモーター(最大4台)やステッピングモーター(2台まで)を同時に制御する事ができ、さらに2台のサーボモーターも動かすことが出来る便利なArduino用のシールドとなります。

今回、仮組み的な感覚でメカナムホイールで動くラジコンを組んで動かしてみましたが、このようにちょっとしたテストで動かしたい場合などでも便利に使うことが出来るシールドとなります。

4台のDCモーターにそれぞれモータードライバを接続し、電源供給やさらにArduinoに無線モジュールを接続しようと考えると結構な配線になってしまいますからね!

そして質問が多かった無線モジュールとの接続の話です。
おそらくこのシールドを使ったことがある方からの質問なんだと思います。

サーボ用端子はソフトウェアシリアルで無線モジュールとの接続にも使える!

L293Dモータードライバシールドはご覧の通りArduino Unoに接続するだけで(Megaなどでも使用できます)DCモーターやステッピングモーターを制御する事が出来るシールドとなります。(詳しくはこちらの記事を参考にして下さい!)

便利に使えるシールドなんですが、例えば今回のようにラジコン化のためさらに無線モジュールなどと接続したい場合、接続するためのIO端子が用意されていません。

L293Dシールドの内部的な話をすると、DCモーターやステッピングモーターを動かす際は搭載されている2枚のL293Dチップがシフトレジスタチップ(74HC595)のラッチを介してArduino側のデジタルピンD4/D7/D8/D12に接続され、モーター制御でD3/D5/D6/D11が使用されています。

その他のArduino側のデジタルピンは基本使われておらず(D9/D10はサーボ端子と繋がっています)、またアナログ入力端子は全て未使用となっています。

Arduinoのアナログ入力端子はデジタル入出力端子として使うことも出来るので、このシールドを使う場合も実際には多くの端子が未使用で他のデバイスなどと接続するIO端子として使うことが出来るのですが・・・

しかしシールド上にはピンソケットなどが取り付けされていないため、これら空いている端子を実際に使いたい場合では直接はんだ付けするなどの作業が必要となります。(A0~A5ピンはピンヘッダーを取り付けて使用できます)

実際に製作物に組み込む場合はそれでもいいのですが、今回のようにテストで動かしたい場合などでは少し手間がかかります。

MEMO
今回ご紹介しているL293DシールドはV1タイプのものとなります。
L293DシールドにはV2タイプのものもあるようで、モーター制御にI2Cが使われているなど仕様が少し異なるようです!

そこで今回無線モジュールの接続ではあらかじめL293Dシールドに用意されているサーボ接続用端子を使っています。
L293Dシールドには2台のサーボモーターを接続して動かせるサーボ接続用の専用端子が用意されています。

このサーボ接続用端子は、5V端子とGND端子が用意され直接サーボモーターを接続できる形状になっていますが、シグナル端子は特にシールド側で制御されているといったものではなく、ダイレクトにArduino Unoのデジタル端子と接続されているだけの端子となります。
サーボ1端子はArduinoのD9端子、サーボ2端子はD10端子に接続されています

このサーボ用端子を使えばArduinoのD9/D10端子と接続できるので、シリアル接続で使える無線モジュールなどと接続して動かすことが出来ます。

上記動画では、この2つの端子を使いWi-FiモジュールとしてESP-01(ESP8266)をシリアル接続して動かしています。

ESP-01はArduinoに接続して使える便利な小型Wi-Fiモジュールなので、こちらの記事も参考にして下さい!

【Arduino】小型Wi-FiモジュールESP8266(ESP-01)の基本的な使い方!スケッチの書き込み&モジュール単体で動かす基本的な方法!

ArduinoのD9/D10端子を使うわけなので、Arduinoとはソフトウェアシリアルを使い接続する必要があります。
スケッチ側の調整なのでこれは簡単に行なえます。

【Arduino入門編㉘】ソフトウェアシリアルを使ってみる!

また、シリアル接続で使える無線モジュールは大抵の場合デフォルトのボーレート(通信速度)は115200bpsに設定されているものが多いと思います。

Arduinoのソフトウェアシリアルでの接続ではサポートされているのは最大115200bpsとなります。
ESP-01のデフォルトのボーレート115200bpsでも接続は可能ですが、データ送受信の取りこぼし等発生することから、ESP-01のボーレートを下げる作業も必要になるかと思います。

【Arduino】小型Wi-FiモジュールESP8266(ESP-01)をArduinoのソフトウェアシリアルで使う手順!ATコマンドによるボーレート(通信速度)の変更方法!

L293Dモータードライバシールドの使用用途としてDCモーターを使って動かすラジコン的なものへの使用が主に考えられますが、ラジコンとして動かす場合、無線モジュールとの接続も必須になるかと思います。

このようにサーボ接続用に用意されている2つの端子を使えば、シリアル接続出来るモジュールにソフトウェアシリアルを使い接続することが出来るので、シールドとの接続がスマートに出来ますね!

また、シリアルでの接続なのでHC-05などBluetoothモジュールなどでも同様の手順で接続する事も出来ます。
こちらも同様にソフトウェアシリアルでの接続となり、ボーレートを下げる必要が出てきます。

Arduinoを使いBluetooth通信をやってみる!HC-05/HC-06 Bluetoothモジュールの使い方!

最後に!

L293Dモータードライバシールドへの無線モジュールの接続方法について質問が多かったことから、簡単な一例としてまとめてみました。

Arduino側で実際に使用されていない端子は多数あり、全く未使用のA0~A5端子はピンヘッダーが取り付けできる形状となっていますがArduinoと直結されているだけのサーボ用端子(D9/D10)を使えばシリアルでの無線モジュールとの接続をシンプル&スマートにすることが出来ます。(もちろんA0~A5端子でも同様なことは出来ます)

L293Dシールドはモータードライバなので、使用用途としてはラジコン的なものへの使用が多くなると思います。
ラジコンを動かすには当然何かしらの無線モジュールとの接続が必要となってきますが、今回ご紹介した方法で簡単に接続して動かすことが出来るので便利だと思います。

コメントを残す