ここしばらくステップモーターを色々と試していました。備忘録としての記事です^^;
コントロールはやはりarduinoで^^。
ちなみに超素人のステップモーターテストなので間違いや、もっと気にしなければいけない部分とかあるかもしれません。何かありましたらお教え願えたらと思います^^。
まずはステップモーターの構造から
バイポーラ型、ユニポーラ型が存在しますが、この配線の巻き方とかもあって色々複雑なのですが、とりあえず「メカトロアイデアさんのこちら」で確認。
まっ、色々ありますが今回はこの配線をの型をバイポーラ型と呼びます。
で、この配線の型をユニポーラ型と呼ぶこととします。
そこで、ステップモーターを試す上で1番の問題は、最もお世話になるアマゾンの中華製のステップモーターでは配線がわからないwということです。
そこで私の配線確認方法は
①モーターから出ている配線の数で、バイポーラ(4本)かユニポーラ(5本か6本)か見分ける。たまに8本とかのステップモーターもありますが分からないものは買わないw
②テスターの抵抗測定を使い、それぞれの配線で繋がっているA相、B相のペアーを見つける。
③先ほどのA相、B相の組み合わせを参考にモータードライバーに結線してちゃんと動くように配線を組み替えてみる。
まっ、結局最後の③で色々組み合わせをやるということですw
この際に使っているのが上の写真の黒い基盤で、今まで買ったバイポーラ型のモーターは全て動いてくれているという実績がありますのでこれで配線のチェックしています。
これ、以前アマゾンで購入したのですが最近売っていないんですよね・・・・。
ユニポーラ型は今のところコネクターのついているものしか購入していないので配線は1/2確率で当たりますw
配線確認後、arduinoで動かしてみるのですがプログラムの設定数値によっては配線が当たっていても脱調して動かないこともあるんですよね・・・・・。色々ハマってなんとなくわかったのはスピードが早すぎる場合や電圧が足りない場合に脱調してる事が多い感じです。それと、スピードが遅すぎて回転が分からずに脱調していると誤認する場合もありますw
さて、前置きはこのくらいにしてまずはarduinoキットを購入した時についていました、ユニポーラ型のステップモータ28BYJ-48とモータードライバーULN2003を使って動かしてみました。
配線は
モータードライバー arduino
IN1———————————————–D8
IN2———————————————-D9
IN3———————————————-D10
IN4———————————————-D11
あとはモータードライバーの電源配線に5V1Aの電源を接続しました。電流量は多い方が安心ではあります。
テストプログラムはこちら
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <Stepper.h> const int stepsPerRevolution = 2048; // change this to fit the number of steps per revolution Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11); void setup() { myStepper.setSpeed(1000);//1800~100 Serial.begin(9600); } void loop() { myStepper.setSpeed(1500); myStepper.step(2048);//ギア比1:64のため1周が32x64=2048 delay(500); myStepper.setSpeed(500); myStepper.step(-1748); myStepper.setSpeed(100); myStepper.step(-300); delay(500); } |
プログラムはstepper.hを用いた物です。
myStepper.stepのカッコ内に数字を書き込むとその数字分時計回りにステップしてマイナス数字を入れると反時計回りに数字分ステップします。
ちなみにスピードは1800〜100の間で、これ以外にすると脱調して動かない事が多くなりました。
範囲内でも脱調して動かない場合は800ぐらいで試してみてください。1:64の減速ギアが入っていますのでどうしてもスピードは遅くなりますが、その分トルクはしっかりある感じです。
少しきになるのは長く連続稼働させるとモーターが結構熱を持ってきます。電流量の調整が必要なのかな〜とは思います。
先ほど28BYJ-48と同じユニポーラ型の5本線で、少し小型です
左のモーターが28BYJ-48で右のモーターが購入したものです。基本的に前回のプログラムでそのまま動き、動作スピードもほぼ同じ感じです。
ただ、モーターについているコネクターが先ほどのドライバーに適合しませんのでコネクターの交換が必要です。
配線はこの順番です。ドライバーとaruduinoの配線は変わりません。
ちなみにモーターの裏に6V10Ωと書いてありましたが5Vのアダプターでも動きました。ただ脱調しやすい感じなのでやはり規定のVはあった方がいいのかもしれません。
次に少し大きめの秋月で売っていたこちらのモーター(ST-42BYG0506H)
これもドライバーとarudiunoとの配線は変えずにつかえます。
プログラムは
const int stepsPerRevolution = 32;これをconst int stepsPerRevolution = 200;
としてスピードは100~1位の数字が入力できます。
モーターとドライバーの配線はこうなっています。
白と黒は結線して一番端の端子になります。
IN1青、IN2赤、IN3黄色、IN4緑、IN5黒白となります。
ちなみに下のプログラムは赤外線リモコンによる、DFPlayerとステップモーターの連携プログラムとなっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
/* まずはarduinoIDEのメニューから スケッチ→ライブラリーをインクルード→ライブラリーを管理 を選択 右上の欄に以下のライブラリー名を入力してインストールしてください。 IRremote Stepper(これは最初から入っているかもしれません) DFPlayer_Mini_Mp3_master このプログラムはユニポーラ式2相5線のステップモーター用です。 モーターやモータードライバーの種類によってはこのプログラムは使えません。 おなじユニポーラ2相5線でもステップモーターによって number_of_stepsの数字の変更が必要です。 */ #include <SoftwareSerial.h> //----------IR------------------- #include <IRremote.h> int RECV_PIN = 2;//pin割り込み0を使用 IRrecv irrecv(RECV_PIN); decode_results results; //----------step----------------- #include <Stepper.h> const int number_of_steps = 200;//1周200steps Stepper myStepper01(number_of_steps, 5, 7, 6, 8); //---------DFPlayer-------------- #include <DFPlayer_Mini_Mp3.h> SoftwareSerial mySoftwareSerial(3, 4); // RX, TX int a,b,d01=0,d02=0; int mp3_vol=20;//DFPlayerの初期設定音量を変えたいときはここの数字を変えてください 30以下です。 long key; //以下は手持のリモコンのコード番号です。リモコンが変わる場合はここの引数は変わります。 int z1=0X30CF,z2=0x18E7,z3=0x7A85,z4=0x10EF,z5=0x38C7,z6=0x5AA5; int z7=0x42BD,z8=0x4AB5,z9=0x52AD,z0=0xD42B; int zd=0xA25D,zn=0xE21D,zg=0x22DD,zs=0xC23D,zc=0x6897;//電源:zd,MENU:zn,TEST:zg,回転矢印:zs int zu=0xE01F,zw=0x906F,zv=0xA857,zp=0x02FD,zm=0x9867;//巻き戻し:zu,早送り:zw,再生:zv:+:zp,-:zm //---------void IR------------------- void my_IR_recv(){ //赤外線リモコン受信関数 if (irrecv.decode(&results)) { key=results.value; irrecv.resume(); // Receive the next value key=key-0x00FF0000; Serial.println(key,HEX); operation(); } } void operation(){ if(key==z1){a=1; key=0;} if(key==z2){b=1;key=0; } } //---------void step--------------- void door01_move(int speed01 ,int step01){//S_stepマイナスで反時計回り 1回転200 myStepper01.setSpeed(speed01); myStepper01.step(step01); } //--------------------------------- void setup() { Serial.begin (9600); irrecv.enableIRIn(); Serial.println("IRrecv OK"); attachInterrupt(0, my_IR_recv, CHANGE); mySoftwareSerial.begin(9600); mp3_set_serial (mySoftwareSerial); //set Serial for DFPlayer-mini mp3 module delay(1); //wait 1ms for mp3 module to set volume mp3_set_volume (mp3_vol); Serial.println("DFPlayer OK"); } void loop() { if(a==1 && d01==0){ Serial.println("clockwise"); mp3_play (1); /* 時計回りのモーターの動きです()内の前の数字が速さ、後ろの数字が回転範囲 スピードはあまり大きすぎると誤作動起こします。200以下で設定してください。 */ door01_move(100,200); a=0;b=0;d01=1; } if(b==1 && d01==1){ Serial.println("counterclockwise"); mp3_play (2); /* 反時計回りのモーターの動きです()内の前の数字が速さ、後ろの数字が回転範囲 反時計回りは回転範囲の方はマイナス数字です。 マイナスの数字の合計が上記の時計回りのモーターの回転範囲と同じになるようにすると 元の位置に戻ります。 スピードの変更も自由にできます。 */ door01_move(50,-150); door01_move(10,-30); door01_move(5,-20); a=0;b=0;d01=0; } } |
リモコンは最近あまり見なくなったいつものこれを使っています。
リモコンが違う場合はリモコンの設定数字と49行目の式を変えてもらうと動かせると思います。
動作はこちら
こちらは、減速ギアー等がついていないので結構な速で回っていますね。
てな感じで、arduinoの購入時に付録みたいについてきていたステップモーター用ドライバー結構優秀でしたwユニポーラ型のステップモーターはこのドライバーで使っていこうと思います。
次にバイポーラ型なのですが・・・・・これが超苦戦しましたw
長くなったのでまた次回に^^
<別件の図>
関連すると思われる記事:
- None Found
こんばんは
一口にステップモーターといっても、端子も含めていろいろとバリエーションがあるんですね、全然知りませんでした。6jiroさんのこの記事や次の記事がなかったら、手元に届いても茫然としてたと思います。いや、ほんとうにありがとうございます。
制御線の見分け方とかも重要なノウハウですよね、これ。ソースコードも公開していただいてほんと感謝です。
メガザクおいといても実験するのがたのしみになってきました。次の記事も楽しみです!
ところで、1枚目と4枚目の写真が見れない状態になってるようです。私だけかな?
なおさん こんばんは!
そうなんですよ〜。私もステップモーターにこんな種類があるとは知らずに簡単に考えていたのですが、ユニポーラ、バイポーラと型式が違うとドライバーが全然違うんですよね〜。
配線の見分け方は結局最後は総当たりとなりますが多少は参考になると思います^^;
プログラムの方はStepperライブラリーがよく出来ていて簡単な命令で動かすことができました^^。
バイポーラの方の記事はもう少し記事を書き加えて明日の夜中にでもアップできたらな〜と思っています。先日のステップモーターはバイポーラ型式ですから、次回の記事でドライバーの紹介できたらなと思います^^。
1、4枚目の写真は共有設定が外れている写真でした^^;設定変更しておきましたので見れるのではないかと思います。教えていただきありがとうございます!
こんなに色々と実験していただいてたなんて!!!
ありがとうございます。
感謝、感謝でございます。
DFPlayerとのリモコン連携スケッチは、、、見たことあります^^/
現在、送っていただいた大型のモーター基準にレールやラックを製作していますが、
サイズと重量が結構あるので、中央の空き部屋にモーターふたつとレールその他を
セットすると、ひっとしたら小さいモーターの出番があるかも・・・
レールの製作が少しハードル高くて、ドア幅が4mmなのでレール幅も4mm、
剛性と軽さが欲しいのでアルミ部材からの切り出しとプラ板のサンドイッチでレールにする予定です。
gyoさん こんばんは!
いえいえ^^私も以前からずっとステップモーターには興味があったのですが、放置していたところ今回機会をもらって勉強することができましたので、こちらこそいいきっかけをありがとうございます!
DFPlayerとのリモコン連携スケッチ・・・・見たことありますよねwちゃんと動いてくれてよかったです^^。
確かに私もあのモーター大きいので気になっていたので、gyoさんのおっしゃっていた秋月のコパルステッピングモーターも注文しておきました。到着したらテスト後使えそうなら送ります。
遅い回転は問題ないのですが、早い回転がどこまでいけるかが問題なんですよね〜^^;
このステップモーターもユニポーラ型なのでプログラムはほぼそのまま使えるかなと思います。
レールは確かにある程度の強度必要ですからね。ただ、もしスペースの問題がなければレールの部分だけ幅を太くするのは難しいでしょうかね?こうするとストッパーの役目もできるのでドアの破損確率が減りそうです^^図がコメント欄にうまくアップできないので記事の本編の最後にあげておきます。いい加減な図ですみません^^;上から見た感じです。
4mmだとラック&ピニオンの関係もシビアになりそうですね。
こんばんは
今度はステッピングモータですか!
大昔に秋月さんのキットでトライしたことがあります。大きなモーターで、結構なトルクがあります。ステッピングモーターは、低速回転でもトルクがあり、しかも停止トルクが大きいので、ブレーキを回転とともに制御することができるので、使いやすいですね。
難点は、励磁のタイミングにより、回転数やトルクを変えられるのですが、PICだと、結構真面目に制御してやる必要があります。早すぎると回転がついてきません。先日のライントレースカーに、使用したかったのですが、ギア付きで回転が遅いものしか見当たらず、ギアードモーターにしました。
しかし、Arduinoだと関数が用意されているのですね!恐るべし、Arduino!
Vividさん こんばんは!
ステップモーターの勉強始めてみました^^。
大きなモーターだと結構トルクありますよね〜。小さいものは減速ギアが噛ませてないとトルクは厳しい感じですね。
そっか!回転しないように電流与えると停止の維持もできるんですね。今度やってみよw
おっしゃるように回転数とかによってすぐ脱調してしまいますね・・・。この辺が難しいところですね。
小型で早く動くステップモーターてなかなかないですよね・・ただいま捜索中です^^。
arduinoさまさまですwほんと何でもこなしてくれます^^。