Arduinoでステッピングモータ SPG20-332を回すやつの続き。
葉山先生の華麗なるアルミ板とPOM板加工によって上の写真(左)のような状態に。
卓球のピンポン球に絵を描くということでピン球botと命名され、あとを任されました。
ボールを回転させる軸とペンの向きを変える軸の2軸なので、少し接続を変更。
pin 4〜7に接続したステッピングモータをボールの軸、pin 8〜11に接続したステッピングモータをペンの軸とする。
ATmega168/328のI/OポートはB、C、Dの3つで、port Bがpin 8〜13、port Cがpin A0〜A5、port Dがpin 0〜7となっている。
ローレベルかつ高速に制御したい時は、これらのポートのコントロールレジスタを直接いじってあげれば良い。→Reference/PortManipulation
(というのも、前回の記事で載せた方式で制御しようとすると励磁する速度の問題で細かい振動が発生するっぽいので)
プログラムはこんな感じで。
#include <Servo.h> const byte motorPen[]={0x03,0x06,0x0C,0x09}; //PortBの励磁パターン const byte motorBall[]={0x90,0xC0,0x60,0x30}; //PortDの励磁パターン Servo servoPen; void setup(){ DDRB |=B00001111; //PortB 8,9,10,11 DDRD |=B11110000; //PortD 4,5,6,7 servoPen.attach(3); } void loop(){ for(int n=0;n<20;n++){ servoPen.write(100); for(int i=0;i<4;i++){ PORTB &=0xf0; PORTB |= motorPen[i]; PORTD &=0x0f; PORTD |= motorBall[i]; delay(8); } } for(int n=0;n<20;n++){ servoPen.write(115); for(int i=3;i>=0;i--){ PORTB &=0xf0; PORTB |= motorPen[i]; PORTD &=0x0f; PORTD |= motorBall[i]; delay(8); } } }DDRB |= B00001111でポートBの下位4ビット(pin 11,10,9,8)を出力に設定。
DDRD |= B11110000でポートDの上位4ビット(pin 7,6,5,4)を出力に設定。
PORTBとPORTDを初期化し、あらかじめ定義しておいたモータの励磁パターンを投げてあげるという仕組み。
サーボはペンの持ち上げに使用。
これで、以下の動画のように動作する。
行き(右から左)はペン先をボール表面に降ろし、帰り(左から右)はペン先を持ち上げています。
次は起動時のゼロ点補正機構と、座標指定で描いてくれるようなプログラムを作っていきます。
初めまして、クマザルと申します
返信削除こちらには初めてコメントさせていただきます、神奈川県在住の専門学校生です。コンピュータ関係の学科に通っています。
私は現在、ステッピングモータを使って、2輪駆動のロボットを製作しようとしているのですが、分野の違いもあり思うように開発が進んでいない状態です。
そんな中、こちらで紹介されている内容が、開発したい内容に最も近かったため、参考にさせて頂こうと思いました。
そのうえで、いくつかお伺いしておきたい事が有りましてコメントさせて頂いた次第です。
確認したいことは2つあり、1つは、ステッピングモータ2つを、バラバラに動かすことができるのかどうか、もう1つはステッピングモータをタイヤの駆動に使うため、1回転させたいのですがそれも可能なのかと言う事です。
そちらのご都合がよろしい時で構いませんので、返答のほど、よろしくお願いします。
では、失礼します。
>ステッピングモータ2つを、バラバラに動かすことができるのかどうか
削除できます。実際に下記で2つバラバラに動かしています。(ボール回転軸とペン回転軸)
http://eleclog.quitsq.com/2012/07/spg20-332-mp4401-3.html
>ステッピングモータをタイヤの駆動に使うため、1回転させたいのですがそれも可能なのか
可能です。上記の記事が参考になると思います。
こんばんは。クマザルです。
削除お早い返答、ありがとうございます。
的確な返答だけでなく、参考になるページを教えて頂けて、とても助かりました。
教えて頂けたページの方を参考に、今後も作業に取り組んでいきたいと思います。
本当にありがとうございました。
匿名ですみません。この記事を読んでステッピングモーターを制御しようとしている者です。
返信削除こちらの記事の、fritzingの画像を見ていたところ、MP4401側の3、10番ピン(カソードピン)と6、7番ピン(ソースピン)が逆になっていると思われます。