Arduino ESP8266(ESP-WROOM-02)でステッピングモーターを動かしてみた

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

2016年度最後の日、3/31の夕方、皆様いかがお過ごしでしょうか。いつでも眠いばっしーです。

先日、営業がギリギリのスケジュールで受注し、何とか今期に納品する案件を担当しました。

受注時に既に3月だったため、普段使っている通常納期のベンダは選択できず、代理店が在庫してて即納できる某社のサーバを発注したのですが、不運なことに初期不良でした。私の人生初某社のサーバーは初期不良だったのです。私の人生において某社のサーバは100%初期不良です。

症状は電源を落とすとRAID1の一台がデグレードしてしまい、RAIDの再構成が発生するというものです。HDDを変えましたが改善せず、今朝になってようやくメインボードを交換しました。現在RAID再構成中ですが3/31の夕方に直っても何の意味もない「要らない子」なんですけどね。納期間に合わないならわざわざ某社のもの買わなかったのに。。。返品できませんか?

【4/3追記】

メインボード交換後のRAID再構築完了後、シャットダウンしたら今度はDISKが見つけられなくなり、沈黙してしまいました。マジで返品したい。。。

【追記ここまで】

 

さて、そんなわけで年度末の最後に時間がぽっかり空いたので、第3回アキハバラIoTツアーズに向けてちょっと勘を取り戻すために、昨年Aliexpressで約180円購入して放置していた(積んでいた)デバイスである「ステッピングモーター」をArduinoで動かしてみました。

動かすのはライブラリで簡単

ステッピングモーターを動かすこと自体は「stepper」ライブラリがあるので簡単です。

まずはソースコードですが、ArduinoIDEのサンプルをそのまま動かしています。

ソースコード

#include 
const int stepsPerRevolution = 200; 
Stepper myStepper(stepsPerRevolution, 12, 13, 14, 15);

void setup() {
  myStepper.setSpeed(100);
  Serial.begin(9600);
}

void loop() {
  Serial.println("clockwise");
  myStepper.step(stepsPerRevolution);
  delay(500);
  Serial.println("counterclockwise");
  myStepper.step(-stepsPerRevolution);
  delay(500);
}

このソースの公式解説はこちらにあります。(英語)

https://www.arduino.cc/en/Tutorial/StepperOneRevolution

ソースコードの解説

Stepper myStepper(stepsPerRevolution, 12, 13, 14, 15)

→myStepperという名前でステッピングモーターを定義しています。

myStepper.step(stepsPerRevolution)

→時計回りに200ステップ分動かします。

myStepper.step(-stepsPerRevolution)

→反時計回りに200ステップ分動かします。

上記のプログラムを動かすと、一定間隔で回転・反転させることができます。

回路作成

使用するマイコンはESP-WROOM-02、ステッピングモーターは「28BYJ-48」です。

ステッピングモーターは電源(+、-)と信号4本を適当なGPIOへ接続するだけですが、電源は電源容量に注意する必要があります。今回はプラス端子はUSBからの電源が直結しているピンから、マイナスはGNDから取りました。

信号線はデジタル出力ができるGPIOから適当に取ればいいのですが、ちょっとはまったので後程記載します。

全体像

マイコンのアップ

モーターコントローラーのアップ

信号の接続ではまった件

実は結構ははまりました。信号線が4本あるのですが、その順番がよくわからずはまりました。

物自体はユニポーラ駆動型、コントローラ基板から延びているケーブルが5ピンのため、一本はアースですね。それが、ゆっくり動かしても、LEDがABCDの順番どおりに光らないんです。

初めは、勝手に1:A、2:B、3:C、4:Dと対応していると思い込んでいましたが、結論から言うと全く異なった接続となっていました。

ESP8266のGPIOピンが一直線に並んでいる、「12-15」を利用することにして、はじめは1:12、2:13、3:14、4:15と接続して試してみました。

それにしても、ESP8266の基板上で一直線に並んでいるのになぜ順番がメチャクチャなのでしょう?「15、13、12、14」という変な順番です。

一応モーターは意図したとおりっぽく動くものの、期待したとおりにLEDが綺麗に流れてくれません。今思うと、それでも動いていたのは、たまたま逆側のモーターのコアが磁力で引き寄せられたからなのではないかと思います。

動きを見て解析してみたところ、なぜか上に書いた変な順番のとおりにケーブルをさせば思ったとおりの動きをしてくれました。写真の通り、ケーブルの色の並びが同じですよね。なぜなんだ・・・?

念のため、接続順は以下のとおりです。

1:13 2:15 3:12 4:14

動画

全体の動作

LEDの動き

※モーターは同じ28-BJY-48ですが、ロット違いのためか、基盤の色が異なります。

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。

コメントを残す