ステッピングモータ
共立で買ったやっすいユニポーラのステッピングモータ。 6Vと比較的低電圧で駆動できるので実験しやすいと思う。
付属の紙をみると、「巻線抵抗/相:7Ω」となっているので、6V駆動すると1A近く電流が流れる。当然、Arduinoでは直接駆動できない。ArduinoのStepperライブラリのページには、ULN2003かULN2004か、ダーリントントランジスタ・アレイを使うように書いてあるが、とりあえず手持ちの部品で実験してみた。
モーター駆動回路
NPNトランジスタのスイッチング回路を使ってモーターを駆動する。1A近く流すので小信号用トランジスタではダメで、パワーTrかパワーMOS-FETを使わないといけない。手持ちにあった2SC2655を使った。[IN]がArduinoからの制御信号(H/L)で、[Q1]をスイッチングする。Trなのでベースに流す電流を制限するR1が必要。
D1はモーターの逆起電力を逃がすために入れる。手持ちにあった、整流用ダイオードの1N4007を使った。
ブレッドボード配線図
A、!A、B、!Bはユニポーラ・ステッピングモータの端子名。モータは500mA以上流れるようなので、モーター駆動回路の電源をArduinoから取ると、Arduinoの電源回路が壊れる可能性があるので注意。
これで、ArduinoのExample/Stepperのサンプルプログラムが試せる。
使用したモーターのステップ数が48stepなので
// change this to the number of steps on your motor
#define STEPS 48
とした。
Exampleの[MotorKnob]は挙動がわかりにくいので、最初は他のExampleの方がいいかもしれない。
また、[stepper_speedControl]は48stepを指定すると、
myStepper.step(stepsPerRevolution / 100);
のところが0になってしまい、動作しない。
↓48Step対応の修正版
#include <Stepper.h> const int stepsPerRevolution = 48; // change this to fit the number of steps per revolution // for your motor // initialize the stepper library on pins 8 through 11: Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11); int stepCount = 0; // number of steps the motor has taken void setup() { // nothing to do inside the setup } void loop() { // read the sensor value: int sensorReading = analogRead(A0); // map it to a range from 0 to 100: int motorSpeed = map(sensorReading, 0, 1023, 0, 100); // set the motor speed: if (motorSpeed > 0) { myStepper.setSpeed(motorSpeed); // step 1/100 of a revolution: //myStepper.step(stepsPerRevolution / 100); myStepper.step(2); } }
サーボ
秋月で一番安かったサーボ。このサーボは180°しか可動域がない。(普通そうなんだろうか?)
配線図
サーボの方はArduinoから制御用のパルス波を送るだけなので、回路はシンプル。このサーボも数100mAの電流が流れるようなので、Arduinoとは別に電源を用意して使った。
example/servoのサンプルプログラムを動作させることが出来た。プログラムも回転角を与えるだけなので楽ちんだ。
メモ:
DCモータをHブリッジ回路を使って動かしてみようと思ったが、手持ちのパワーTr/MOS-FETのPチャネル側のものがオーディオアンプ用に買ってストックしているものなので、なんとなく使いづらい(^q^;適当なパーツを仕入れてテストしてみるつもり。
0 件のコメント:
コメントを投稿