2017年1月22日日曜日

小ネタ実験 ステッピングモータとサーボをArduinoで動かしてみる。

部品箱で眠っているパーツを少しずつ試していこうと思います。まずは、モーター類から。

ステッピングモータ


共立で買ったやっすいユニポーラのステッピングモータ。 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^;適当なパーツを仕入れてテストしてみるつもり。