ワレコ
此の所、ArduinoやAVRマイコンを猛烈に勉強している。
ヒューズビットと言うのが今一つ良く分かっていないが、Arduino IDEやMicrochip Studioを使ってプログラミングする環境は整える事が出来た。
またATMEL-ICEを使ってAVRマイコンだけでなくArduinoもデバッグ実行させる事も出来るようになった。
さて、そんなワテがArduino UNOを使ってステッピングモーターを赤外線リモコンで制御する事に成功した。
前回記事でも同様の実験をしたのだが、実はその後、モーターの挙動が何だかおかしくてリモコン制御が上手く行く場合と行かない場合があったのだ。
その後の調査で挙動不審なモーター動作の原因も判明し(後述)、ステッピングモーターのリモコン制御は完全にマスター出来たのだ(多分)。
では、本題に入ろう。
Arduino UNO互換機スターターキットのステッピングモーターを使ってリモコン制御に成功
上で示した前回記事では、共立エレショップで買ったステッピングモーターと秋月電子で買った赤外線受信モジュールを組み合わせてリモコン制御実験を行った。
でも、先ほど述べたように実はモーター制御が上手く行く場合と行かない場合が有ったのだ。
具体的には、スケッチを書き込んだ直後には正常にリモコンに反応してモーターが回転するのだが、その直後にリモコンを送信しても受信はしているのにモーターが動かないと言った症状だ。
その原因はこの後で説明するが、取り敢えず別のステッピングモーターと赤外線受信モジュールを使って実験をしてみた。
その結果、下動画のようにリモコンの「ー」ボタンや「+」ボタンに反応して、ステッピングモーターが時計回り、反時計回りに期待通り回転している。
動画 リモコンの「ー」や「+」ボタンに反応して正転・逆転しているステッピングモーター
上動画に於いて、液晶ディスプレイとブレッドボード回路の大半は今回の実験とは無関係。このブレッドボード回路はAVRマイコン(ATmega328P)を単体で使って液晶表示をさせた時の実験回路だ。
ブレッドボード右端にある基板は5V/3.3V電源基板で、DCジャックに7V~12Vの直流電圧を与える。5V/3.3Vの切り替えは基板上のジャンパーソケットで行う。上動画では5V設定にしていて、ブレッドボードの上下二箇所の赤青ラインには5Vが供給されている。
この5V電源とドライブ基板(ULN2003使用)を使ってステッピングモーター(28BYJ-48)を制御している。
その電源基板の左隣りにあるのが赤外線受信モジュールで、リモコン信号を受信したら小さな赤いLEDが発光している。
この実験で使ったのが下写真のようなArduino UNO 電子工作 スターターキットだ。
このキットはお勧めだ。なぜならArduino UNO互換基板、各種実験用のモジュール、ジャンパーワイヤーなどがセットになっていて三千円台の低価格なのだ。
写真 Arduino UNO 電子工作スターターキット付属のモーターやIR受信モジュールで実験成功
リモコン送信機もこのスターターキット付属のやつ(下写真右端)のやつを使った。
写真 各種リモコン送信機(秋月、ダイソー、Miuzeiスターターキット)
上写真右端のMiuzei製Arduino UNOスターターキット付属のリモコンを使う。
このリモコンにある ⊖ と ⊕ の二つのボタンに反応してモーターが動くようにしたのだ。
Arduino UNO互換機スターターキットのステッピングモーターと赤外線リモコン受信モジュールで組んだ実験回路
下図がこの実験の回路図だ。
図 Arduino UNO互換機スターターキットのステッピングモーター(28BYJ-48)と赤外線リモコン受信モジュールで組んだ実験回路
ステッピングモーターのリモコン制御に使ったスケッチ(プログラム)
#include "Stepper.h" #include "IRremote.h" // 変数など #define STEPS 48 // 1回転のステップ数(共立エレM35SP-7N-DJKは48Step(7.5°)) int StepsOneRevo; // リモコン信号での回転ステップ数 int pinReceiver = 6; // IR receiver 入力をArduino Digital Pin 6に設定 // モーターや赤外レシーバーの宣言 Stepper mystepper(STEPS, 8, 10, 9, 11); IRrecv irrecv(pinReceiver); // create instance of 'irrecv' decode_results results; // create instance of 'decode_results' void setup() { irrecv.enableIRIn(); // Start the receiver Serial.begin(115200); // Serial.println("setup out"); // } void loop() { if (irrecv.decode(&results)) // IR signal受信チェック { Serial.println("if irrecv in"); // 追加した Serial.print("results.value="); // 追加した Serial.println(results.value, HEX); // 追加した Serial.println(results.value); // 追加した switch (results.value) { case 0xFFE01F: // -ボタン =16769055 mystepper.setSpeed(500); // 最大値は未確認 StepsOneRevo = -20; // Rotate CCW mystepper.step(StepsOneRevo); // delay(2000); break; case 0xFFA857: // +ボタン =16754775 mystepper.setSpeed(500); // 最大値は未確認 StepsOneRevo = +20; // Rotate CW mystepper.step(StepsOneRevo); // delay(2000); break; } irrecv.resume(); // receive the next value digitalWrite(8, LOW); // この4行は必須。 digitalWrite(9, LOW); // もし忘れるとモーターが発熱するので。 digitalWrite(10, LOW); // 特に共立エレのモーターは7Ωの digitalWrite(11, LOW); // 低抵抗なのでアッチッチになる。 } }
コード Arduino UNO互換機スターターキットのステッピングモーターと赤外線リモコン受信モジュールを制御するスケッチ
ステッピングモーターの動きを指定するパラメータを以下に取り出してみた。
#define STEPS 48 // 1回転のステップ数(共立エレM35SP-7N-DJKは48Step(7.5°)) int StepsOneRevo; // リモコン信号での回転ステップ数 ... mystepper.setSpeed(500); // 最大値は未確認 StepsOneRevo = -20; // Rotate CCW mystepper.step(StepsOneRevo); ...
この実験で使った28BYJ-48と言うモーターは1回転のステップ数は未確認だ。色々試した限りでは200ステップ以上はあるようだが。
それとスピード設定の値はどんな数字が妥当なのかも未確認。
それと、一つ気付いた点としては、mystepper.step(+1) みたいな小さな値だと回転しないようだ。
mystepper.step(+10) とかなら回転する。
まあ、この辺りのパラメータの意味は今後色々実験して理解を深めたい。
この実験で使ったのと多分同じステッピングモーターやドライバは以下の通り。
共立エレショップのユニポーラステッピングモータと秋月の赤外線受信モジュールで実験成功
さて、次は前回記事で紹介した共立エレショップで買ったユニポーラステッピングモーター[M35SP-7N-DJK]と秋月電子で買った赤外線受信モジュールを使って、リモコン実験をしてみた。
写真 共立エレショップのユニポーラステッピングモータと秋月の赤外線受信モジュールで実験
共立エレショップのユニポーラステッピングモータM35SP-7N-DJK(ミツミ製)の仕様
ユニポーラステッピングモータ(2個入り) ▲航空便不可▲ ■限定特価品■
M35SP-7N-DJK●ステップ数:48Step(7.5°)
●巻線抵抗/相:7Ω
●駆動方式:ユニポーラ定電圧
●駆動電圧:6V
●励磁方式 2-2相
●実測テスト:約500mA(DC6V)(ヒートシンク無し/無負荷/1相励磁)
●コネクタ:XHP 6
●軸径:φ2mm
●取付穴:M2.6×2
●モータ本体サイズ:φ35×15mm(突起含まず)
●ギア:モジュール0.5 歯数20
●使用条件に合わせてドライブ電流/放熱の調整をしてください
東芝8chダーリントンシンクドライバ TD62083APGの仕様
トランジスタアレイ(8chダーリントンシンクドライバ) TD62083APG
メーカーカテゴリ 株式会社東芝セミコンダクター社(TOSHIBA)
東芝の8回路入りトランジスタアレイです。
・LEDドライブ、リレーのドライブなどに最適です。
・18ピンDIPパッケージ
・50V500mA/1ch
下図が実験に使った回路だ。
図 ミツミ製ステッピングモーター(共立エレ)と三洋電機製赤外線受信モジュール(秋月電子)で実験
スケッチは先ほど掲載したのと同じものを使った。
その結果、下動画のようにリモコン制御でステッピングモーターを駆動する事が出来た。
動画 ミツミ製ステッピングモーターM35SP-7N-DJKをリモコン制御出来た
このミツミ製ステッピングモーターは一周で48ステップだが、リモコンボタンの1クリックで20ステップ回転させる設定にしたので、1クリックで半回転近く回っている。
前回記事の回路でモーターが回転したりしなかったりした問題の原因判明
前回記事でも、今回の実験で使ったミツミ製ステッピングモーター(共立エレ購入)と三洋電機製赤外受信モジュール(秋月購入)を組み合わせて実験した。
その時には、リモコン信号の一発目ではうまく回転したのだが、引き続きリモコンボタンを押して何度もやっていると、なぜかモーターが反応しなくなった。
それと、スケッチプログラムも上手く説明出来ないのだが何故か挙動がおかしいのだ。
もう訳分からん感じw
で、今回の実験成功で、前回のその問題の原因が判明した。
つまり前回の実験では、Arduino UNO基板にUSBケーブルとDC5V電源を供給していた(下写真)。
写真 Arduino UNOにUSBケーブルとDC5V電源印加する間違った接続(前回実験)
でもそれは正しい配線では無くて、正しくは上の実体配線図に示すようにArduino UNO基板にはUSBケーブルのみ、一方、ステッピングモーターやドライバICにはDC5V電源を与えるべきだったのだ(本当は6VモータなのでDC6Vを与えるのがベストだが)。
このミツミ製ステッピングモーターM35SP-7N-DJKは仕様によると巻線抵抗が7Ωと低い。DC5Vなら714mA流れる。それが2巻線だから1.4Aも電流を消費する。
つまり、前回記事の電源供給方法ではモーターを駆動するのに必要な電流が供給出来ていなかったようだ。
今回、上図のようにDC5V電源をブレッドボードに接続してステッピングモータードライブ用のトランジスタアレイに接続したら、無事にモーターが動いたのだ。
なお、スケッチ末尾にある以下のコマンドは必須だ。
digitalWrite(8, LOW); // この4行は必須。 digitalWrite(9, LOW); // もし忘れるとモーターが発熱するので。 digitalWrite(10, LOW); // 特に共立エレのモーターは7Ωの digitalWrite(11, LOW); // 低抵抗なので、アッチッチになる。
その理由はコメントにも記載しているように、もしこれらの四行のコマンドを省略すると、モーター停止中でも1.4Aもの電流が流れてしまう。電力なら5V x 1.4A = 7Wだ。
その結果、モーターが手で持てないくらいに発熱するのだ!
ワテはうっかり気付かづに手でモーターを持ち上げたら、アッチッチだったのだ。
A CHI CHI A CHI 燃えてるんだろうかステッピングモーター!
まとめ
ワレコ
電子工作では電源を正しく与えるのは基本だ。
その基本を守らずにArduino UNOボードにUSBケーブルとDC5V電源を同時に供給するなどと言うヘンテコな接続で実験したのが間違いだった。
当記事ではArduino UNOボードを使って、ステッピングモーターを赤外線リモコンで正転・反転させる実験の手順を紹介した。
二種類のステッピングモーターを使って実験を行った。
一つはアマゾンで購入したArduino UNO 電子工作スターターキットに入っているステッピングモーター(28BYJ-48)とIR受信モジュールだ。下写真のようなやつだ。
もう一つは共立エレショップで買ったMITSUMI製(M35SP-7N-DJK)と秋月電子で買った三洋電機製IR受信モジュール(SPS-444-1)を使った実験だ。
その結果、どちらの実験でも無事にモーター制御に成功した。
さて、当実験の目的はオーディオ機器のボリュームをリモコン制御するのが最終目的なのだが、ステッピングモーターよりもサーボモーターのほうが適している気がして来た。
なぜならボリュームの回転角度範囲は300度くらいだし、実用上は最左位置(7時付近)から15時位置くらいまで回せれば十分だ。
ステッピングモーターを使っても角度制御は可能だと思うが、目的の角度にピッタリと位置決めするならサーボモーターのほうが適しているだろう。
と言う事で次の実験はサーボモーターだ。
アマゾンで買ったArduino UNOキットにはサーボモーターも付属しているので早速試してみたい。
(続く)
コメント