ステッピングモータをArduinoでロータリーエンコーダ制御①チュートリアル通りに動かす

2022/08/18

Arduino ULN2003A ステッピングモータ ロータリーエンコーダ

t f B! P L

ステッピングモータをArduinoでロータリーエンコーダによる制御を使って動かします。

 目次:

今回の目的

ELEGOOのチュートリアル「ロータリーエンコーダ付きステッピングモータの制御」をチュートリアル通りに動かします。

※チュートリアルの文章(PDF日本語版含む)もスケッチもELEGOOのサイトから無料でダウンロードできました。

Download ⇒「Arduino Kits & ~」⇒「UNO R3 Starter Kits」⇒ 「ELEGOO UNO R3 The Most Complete Starter Kit」 からダウンロードリンクに辿り着けます。


使用する部材

ロータリーエンコーダは今回初使用となりますが、その他の既出は以前の記事に詳細を譲ります。

1.ステッピングモータとドライバモジュール

ステッピングモータ「28BYJ-48」とドライバモジュール「ULN2003A」です。


図1.ステッピングモータ(28BYJ-48)

「ステッピングモータをArduinoで動かす①チュートリアル通りに動かす」-「1.ステッピングモータ」



図2.ステッピングモータドライバ(ULN2003A)

「ステッピングモータをArduinoで動かす①チュートリアル通りに動かす」-「2.ステッピングモータドライバ」


2.電源モジュール

Arduinoでは供給しきれない充分な電力をモータに供給するためのモジュールです。


図3.電源モジュール


3.ロータリーエンコーダ

回転の機械的変位量をデジタル量に変換する位置センサ。今回初使用です。

(1)表

(2)裏

(3)横

図4.ロータリーエンコーダ

3端子のロータリーエンコーダを子基板の表面に実装、裏面R2、R3に10kΩのチップ抵抗が実装されており、5本の外部端子にはシルク表記「CLK」「DT」「SW」「+」「GND」あり。

ロータリーエンコーダのトリマを回すとカチカチ(音はしませんが)とした手応えを感じます。手ごたえを頼りに1回転捻ったところ、その刻みは20ありました。

ロータリーエンコーダには光電、磁気、容量など、回転を検出する方法に種類がありますが、こちらは機械的スイッチのようです。3つの端子を仮にA、B、Cとすると、初期位置で開放だったA-B-C間が、刻みと刻みの微妙な間でA-B間、A-C間、B-C間それぞれ短絡するタイミングがあることがテスタでの測定で分かりました。

子基板上で、A、Bは10kΩ抵抗でプルアップして外部端子「CLK」、「DT」に接続。Cはそのまま「GND」に直結してます。シルク表記からすると、「GND」をGNDに接続し、「CLK」「DT」は初期状態でプルアップされて電源電圧、回転が始まるとその方向によって「CLK」「DT」いずれかが先にGNDに変化する、というところでしょうか。

さらに、このロータリーエンコーダにはモーメンタリーのプッシュスイッチとしての機能があり、押している間だけ外部端子「SW」と「GND」間を短絡することができます。


機材接続

家庭用電源100VからACアダプタを電源モジュールへ繋ぎます。

PCのUSBポートに繋いだArduinoと、電源モジュールのラインをドライバモジュールに繋ぎ、ドライバモジュールにステッピングモータのハウジングを挿します。

この構成に、ロータリーエンコーダをArduinoに繋いで加えます。


図5.機材接続


スケッチ

スケッチ詳細は省略です。使用しているライブラリは「Stepper」だけ。

外部割込み関数「attachInterrupt」を使ってロータリーエンコーダのCLK電位の変化(High→Low)を検出します。

attachInterrupt(interrupt, function mode)

外部割込み発生時に実行する関数を指定する

  interrupt:割込み番号(Arduino Unoでは「0」、「1」でpin2、3を指定

  function:割込み時に呼び出す関数

  mode:割込みトリガ(LOW、CHANGE、RISING、FALLING)

CLKの変化を検出したら、その時のDT電位High、Lowで回転方向を認識し、その回転方向に沿ってステッピングモータの角度を進めます。この際、進めた角度をカウントして、ロータリーエンコーダのプッシュスイッチが入力されたら進めたカウント分だけ一気にステッピングモータの回転を戻します(ステッピングモータは初期の角度に戻る)。


動作

ロータリーエンコーダを捻った方向と角度に合わせてステッピングモータが回ります。

動作の原理は前述の通りですが、ロータリーエンコーダを早く操作し過ぎると認識しきれなくなってしまいます。チャタリングの処理のためdelay関数による待ち時間を入れているせいでしょうか。また、回転方向によって随分感度が悪くなっているような。。。スケッチを弄れば改善できるかもしれません。


図6.動作(写真では表現できませんが動いてます)


所感

未だにステッピングモータへの理解がいまいちです。モータとスケッチ(というよりライブラリ)の中身が分かればもう少しどうにかなるとは思うのですが。他所のブログや動画ではモータを分解している方もおられますし、いずれもう少し踏み込めたらと思います。


ともあれ、当記事でELEGOOのチュートリアル全33レッスンを一巡できました。

当初は作業として機械的に消化してしまうのではと恐れていたのですが、ブログへのアウトプットを意識したおかげで、多少なりとも深堀りして身に付くものもあったのではないかと思います。

ただ、一度通してみることを優先したため「チュートリアル通りに動かす」の副題が付く記事がほとんどになってしまいました。やはりスケッチを試行錯誤して弄らないと理解が乏しいように思えますし、出来ることなら個々の部品の構造についてもより理解を深めていきたいと思います。この辺りは二巡目以降の課題としましょう。

このブログを検索

ブログ アーカイブ

自己紹介

にほんブログ村

QooQ