Step motor car を作って調べて見ました
DCモータと回転センサーの組み合わせで模型の自動運転の車の検討を暫くした
のですが、回転速度の検出の時間遅れと非直線的なDCモータの特性の解析が
難しく、直線走行以外では満足が得られる制御方法が見つかりませんでした。
その為、それらの問題をそれほど考慮しなくても良いステップモータを利用した
ものを検討する事とし、比較的安価で利用可能なステップモータを数種類購入して、
実際に模型の車を作り動作させて見ました。結果的には、ステップモータを
利用すれば、メカの技術力さえ有れば、目標とするものが作れる事が判りました。
以下はそれらの検討状況です。
<I2C Step motor carの概要>
秋月電子通商,Amazon,eBayから数種類のステップモータを購入して、I2Cの
インターフェイスで駆動する模型の車を作って、その動作の状況を調べて
見ました。その様子は、次の様なものでした。
[概要]
1.ステップモータのコントロールには左右4ビットづつの8ビットが必要
なので、I2C I/O Expander を利用
2.I2C I/O Expander にはLCD用のI2C変換である FC-113を改造して利用
(汎用のものの半額の為) (参照記事はこちら)
3.ステップモータ用のドライバとしては、Hブリッジ用のL9110のチップを
搭載したものをBipolarモータ、ULN2003を搭載したものをUnipolar
モータ用にそれぞれ使用
4.動作させたステップモータは次のもの (Unipolar 4種類、Bipolar 3種類)
Unipolar : 28BYJ-48, 20BYJ01-130HR, SPG27-1101, ST-42BYG0506H
Bipolar : Off-brand 35mm, MDP-35A, 17PM-K044-AKZ
5.スタップモータカーのコントロールはスマホからWiFiを通して行い、
コントールには左右のモータのスピードと回転方向をマニュアルで
行うものと、単一動作ユニットを組み合わせたリストをスマホ上に
プログラムして行うものを用意
[FC-113の改造]
[作成したものの外観]
[動作状況]
<Manual control sample>
<Program control sample>
<関連資料>
I/O Expanderのチップのデータシートは次のものを参考にしました。
URL : http://www.nxp.com/docs/en/data-sheet/PCF8574_PCF8574A.pdf
I/O Expanderの制御用コードは次のURLからのものを利用しました。
(コピー&ペーストで利用)
URL : http://playground.arduino.cc/Main/PCF8574Class
利用しているWebSocketのライブラリは次のものを使っています。
URL : https://github.com/Links2004/arduinoWebSockets
<テスト内容と結果>
I2Cでのステップモータカ―のテストに関しては、購入したステップモータを
駆動する為の車体を手作りし、それをスマホからコントロールするプログラムを
作成して行いました。
1.各ステップモータを搭載した手作りの模型の車を作成して、それをスマホ
から制御
2.制御内容は、左右のモータの回転速度と回転方向をマニュアルで
コントロールするものと、単一動作のユニットを指定したリストを
プログラミングして、そのリストの内容を順番に動作させるもの
動作させた結果としては、次の様なものでした。
1.スマホからの制御に関しては、マニュアルおよびプログラムとも
目標通りの制御を行う事が出来ました。
2.ただし、ステップモータのステップ数が少ない場合は、移動制御が
荒くなり(特に回転)、ステップ数が多い場合には車体の動作速度が
遅くなる問題が判りました。
3.車体の動作精度を確保する為にはメカの技術力が必要で、その点が
不足している事を実感しました。
4.以下が各ステップモータに関する個人的な感触です。
<28BYJ-48>
ステップ数が大きい(2048)ため動作がとても緩慢になります。
移動速度を早くするため、タイヤとして植木鉢(ダイソーで2個100円)
を利用しました。ネット上にBipolarにして電圧を上げるとパワーが
3倍になるとの記事が有ったので試して見ました。速度は3割程度早く
する事が出来ましたが、モータの発熱が激しかったのでもとのままでの
利用に戻しました。
<20BYJ01-130HR>
これは、上記の28BYJ-48と同じ様なステップ数でその動作の状況等も
ほぼ同じでした。安価で一回り小さいので利用しやいと思いましたが、
内部のギアが小さくて弱い様で、タイヤをモータに付けたままクルクル
回していたら、中のギアが左右2つのモータとも壊れてしまいました。
今は、走行時のみタイヤを取り付ける様にしています。
<Off-brand 35mm>
これはステップ数が少ない(48)為、動作の制度を確保するのが
難しい様です。ただし、最大のパルス出力(1000パルス/秒)でも
無負荷の時に回転するので、適度にギアダウンすると,、とても良い
のではないかと思います。試しにギアダウンのメカを作って見ましたが、
ギアダウンメカの摩擦が大きい様で上手く行きませんでした。
(メカ力の不足です。)
<MDP-35A> --- 12V用
これも上記のOff-brand 35mmのものと同じで、ステップ数が少ない為、
動作の精度を確保するのが難しい様です。電源電圧12V用、軸径6mm
なので動作させる時に少し苦労しました。
<SPG27-1101> --- 12V用
これは、ステップ数も適度に有り、軸径も3mmなので模型の車用には
とても良いと思ました。ただし、電源電圧12V用なので、その点が少し
残念な所でした。
<17PM-K044-AKZ>
これは、ステップ数も適度で、しかも電源電圧は5Vで良いのでとても
良かったのですが、モータが重く動作時の音が気になる所でした。
<ST-42BYG0506H>
これは、動作状況は上記の17PM-K044-AKZとほぼ同じでしたが、
こちらは動作時の音は静かでした。気になる点は、モータが重いのと
値段が高い事でした。それが気にならない人には最適かと思います。
[テストでの機器の接続]
I2C I/O Expander 出力と ステップモータ間の配線としては、数種類の
組み合わせが考えられます。上記のものは、その中の一つです。
[Web コントロール画面]
1.最上部は超音波距離センサーからの出力、センサーを取り付けて
「Enable」を選択すれば計測値を表示します。
2.その下がマニュアルコントロールブロック、スライドバーにより左右の
モータの回転方向と速度を制御します。
3.更にその下がプログラムコントロールブロック、アクションを選択して
その速度と関連するパラメータを設定後に「Exec. solo」でそれを単独で
実行させるか、「Add list」でその下のアクションリストに登録、一連の
アクションの登録が終了したら「Execute」ボタンによりリスト登録内容
を実行させます。
4.最下部は運転パラメータの設定、設定後に「Set driving parm.」で
パラメータを登録、登録した内容は次の値を設定するまで不揮発で記憶
されます。
[設定手順]
1.入手したコードのコンパイルオプションを必要に応じて利用するものに
変更します。
- I2C I/O Expander チップの選択 (PCF8574A or PCF8574(古い方))
- Unipoler or Bipolar の選択
- Motor 取り付け位置(回転方向)の選択 (上 or 下)
2.必要に応じてピン割り付け等を変更。(コード先頭に有る定義値により
変更可能)
3.必要に応じて、コンパイルオプション等を変更した後に、ESP8266系の
ボードにコードを書き込みます。
4.IDEのシリアルモニタを有効にしてボードを起動後、画面の案内に従って
利用するネットワークのSSIDとパスワードを設定します。 (デホルトの
シリアルモニタ通信速度は115200bpsで、設定した内容は更新するまで
不揮発で記憶されます)
5.ESP8266ボードに割り当てられたIPアドレスをブラウザで読み出して
運転用のパラメータを設定します。(設定内容は下記で、更新するまで
不揮発で記憶されます)
- 最大パルス出力回数/秒 (動作限界を設定)
- ステップ幅 (タイヤの周/1回転当たりのステップ数)
(デホルトの1-2相励磁方式では1相/2相励磁方式の半分です。)
- 左右のタイヤ間隔(トレッド)
- 左右のタイヤバランス(スライド右で右に曲がる様補正)
[コード類]
使用したコード類は次のURLからダウンロード可能です。
Code download URL : https://www.dropbox.com/s/5jgg5pq07hfvmkx/I2C_step_motor_car_test.zip?dl=0
のですが、回転速度の検出の時間遅れと非直線的なDCモータの特性の解析が
難しく、直線走行以外では満足が得られる制御方法が見つかりませんでした。
その為、それらの問題をそれほど考慮しなくても良いステップモータを利用した
ものを検討する事とし、比較的安価で利用可能なステップモータを数種類購入して、
実際に模型の車を作り動作させて見ました。結果的には、ステップモータを
利用すれば、メカの技術力さえ有れば、目標とするものが作れる事が判りました。
以下はそれらの検討状況です。
<I2C Step motor carの概要>
秋月電子通商,Amazon,eBayから数種類のステップモータを購入して、I2Cの
インターフェイスで駆動する模型の車を作って、その動作の状況を調べて
見ました。その様子は、次の様なものでした。
[概要]
1.ステップモータのコントロールには左右4ビットづつの8ビットが必要
なので、I2C I/O Expander を利用
2.I2C I/O Expander にはLCD用のI2C変換である FC-113を改造して利用
(汎用のものの半額の為) (参照記事はこちら)
3.ステップモータ用のドライバとしては、Hブリッジ用のL9110のチップを
搭載したものをBipolarモータ、ULN2003を搭載したものをUnipolar
モータ用にそれぞれ使用
4.動作させたステップモータは次のもの (Unipolar 4種類、Bipolar 3種類)
Unipolar : 28BYJ-48, 20BYJ01-130HR, SPG27-1101, ST-42BYG0506H
Bipolar : Off-brand 35mm, MDP-35A, 17PM-K044-AKZ
5.スタップモータカーのコントロールはスマホからWiFiを通して行い、
コントールには左右のモータのスピードと回転方向をマニュアルで
行うものと、単一動作ユニットを組み合わせたリストをスマホ上に
プログラムして行うものを用意
[FC-113の改造]
[作成したものの外観]
[動作状況]
<Manual control sample>
<Program control sample>
<関連資料>
I/O Expanderのチップのデータシートは次のものを参考にしました。
URL : http://www.nxp.com/docs/en/data-sheet/PCF8574_PCF8574A.pdf
I/O Expanderの制御用コードは次のURLからのものを利用しました。
(コピー&ペーストで利用)
URL : http://playground.arduino.cc/Main/PCF8574Class
利用しているWebSocketのライブラリは次のものを使っています。
URL : https://github.com/Links2004/arduinoWebSockets
<テスト内容と結果>
I2Cでのステップモータカ―のテストに関しては、購入したステップモータを
駆動する為の車体を手作りし、それをスマホからコントロールするプログラムを
作成して行いました。
1.各ステップモータを搭載した手作りの模型の車を作成して、それをスマホ
から制御
2.制御内容は、左右のモータの回転速度と回転方向をマニュアルで
コントロールするものと、単一動作のユニットを指定したリストを
プログラミングして、そのリストの内容を順番に動作させるもの
動作させた結果としては、次の様なものでした。
1.スマホからの制御に関しては、マニュアルおよびプログラムとも
目標通りの制御を行う事が出来ました。
2.ただし、ステップモータのステップ数が少ない場合は、移動制御が
荒くなり(特に回転)、ステップ数が多い場合には車体の動作速度が
遅くなる問題が判りました。
3.車体の動作精度を確保する為にはメカの技術力が必要で、その点が
不足している事を実感しました。
4.以下が各ステップモータに関する個人的な感触です。
<28BYJ-48>
ステップ数が大きい(2048)ため動作がとても緩慢になります。
移動速度を早くするため、タイヤとして植木鉢(ダイソーで2個100円)
を利用しました。ネット上にBipolarにして電圧を上げるとパワーが
3倍になるとの記事が有ったので試して見ました。速度は3割程度早く
する事が出来ましたが、モータの発熱が激しかったのでもとのままでの
利用に戻しました。
<20BYJ01-130HR>
これは、上記の28BYJ-48と同じ様なステップ数でその動作の状況等も
ほぼ同じでした。安価で一回り小さいので利用しやいと思いましたが、
内部のギアが小さくて弱い様で、タイヤをモータに付けたままクルクル
回していたら、中のギアが左右2つのモータとも壊れてしまいました。
今は、走行時のみタイヤを取り付ける様にしています。
<Off-brand 35mm>
これはステップ数が少ない(48)為、動作の制度を確保するのが
難しい様です。ただし、最大のパルス出力(1000パルス/秒)でも
無負荷の時に回転するので、適度にギアダウンすると,、とても良い
のではないかと思います。試しにギアダウンのメカを作って見ましたが、
ギアダウンメカの摩擦が大きい様で上手く行きませんでした。
(メカ力の不足です。)
<MDP-35A> --- 12V用
これも上記のOff-brand 35mmのものと同じで、ステップ数が少ない為、
動作の精度を確保するのが難しい様です。電源電圧12V用、軸径6mm
なので動作させる時に少し苦労しました。
<SPG27-1101> --- 12V用
これは、ステップ数も適度に有り、軸径も3mmなので模型の車用には
とても良いと思ました。ただし、電源電圧12V用なので、その点が少し
残念な所でした。
<17PM-K044-AKZ>
これは、ステップ数も適度で、しかも電源電圧は5Vで良いのでとても
良かったのですが、モータが重く動作時の音が気になる所でした。
<ST-42BYG0506H>
これは、動作状況は上記の17PM-K044-AKZとほぼ同じでしたが、
こちらは動作時の音は静かでした。気になる点は、モータが重いのと
値段が高い事でした。それが気にならない人には最適かと思います。
[テストでの機器の接続]
I2C I/O Expander 出力と ステップモータ間の配線としては、数種類の
組み合わせが考えられます。上記のものは、その中の一つです。
[Web コントロール画面]
1.最上部は超音波距離センサーからの出力、センサーを取り付けて
「Enable」を選択すれば計測値を表示します。
2.その下がマニュアルコントロールブロック、スライドバーにより左右の
モータの回転方向と速度を制御します。
3.更にその下がプログラムコントロールブロック、アクションを選択して
その速度と関連するパラメータを設定後に「Exec. solo」でそれを単独で
実行させるか、「Add list」でその下のアクションリストに登録、一連の
アクションの登録が終了したら「Execute」ボタンによりリスト登録内容
を実行させます。
4.最下部は運転パラメータの設定、設定後に「Set driving parm.」で
パラメータを登録、登録した内容は次の値を設定するまで不揮発で記憶
されます。
[設定手順]
1.入手したコードのコンパイルオプションを必要に応じて利用するものに
変更します。
- I2C I/O Expander チップの選択 (PCF8574A or PCF8574(古い方))
- Unipoler or Bipolar の選択
- Motor 取り付け位置(回転方向)の選択 (上 or 下)
2.必要に応じてピン割り付け等を変更。(コード先頭に有る定義値により
変更可能)
3.必要に応じて、コンパイルオプション等を変更した後に、ESP8266系の
ボードにコードを書き込みます。
4.IDEのシリアルモニタを有効にしてボードを起動後、画面の案内に従って
利用するネットワークのSSIDとパスワードを設定します。 (デホルトの
シリアルモニタ通信速度は115200bpsで、設定した内容は更新するまで
不揮発で記憶されます)
5.ESP8266ボードに割り当てられたIPアドレスをブラウザで読み出して
運転用のパラメータを設定します。(設定内容は下記で、更新するまで
不揮発で記憶されます)
- 最大パルス出力回数/秒 (動作限界を設定)
- ステップ幅 (タイヤの周/1回転当たりのステップ数)
(デホルトの1-2相励磁方式では1相/2相励磁方式の半分です。)
- 左右のタイヤ間隔(トレッド)
- 左右のタイヤバランス(スライド右で右に曲がる様補正)
[コード類]
使用したコード類は次のURLからダウンロード可能です。
Code download URL : https://www.dropbox.com/s/5jgg5pq07hfvmkx/I2C_step_motor_car_test.zip?dl=0