FrontPage

2013/05/25からのアクセス回数 4572

秋月からのモータも届いたので、 Arduino in Actionの5章に出てくる例題を試してみました。

Arduinoのすごいところは、豊富な例題と丁寧なドキュメントにあるのだと思う。 5章では、モータ制御の例があるのですが、最初に例題スケッチKnobをATmega32U4ボード で動かしてみます。

サーボモータの制御

例題のスケッチにある回路図と接続図は以下の通りです。

knob_bb.pngknob_cirkit.png

スケッチは、以下の通りです。

// Controlling a servo position using a potentiometer (variable resistor)
// by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>

#include <Servo.h>
 
Servo myservo;  // create servo object to control a servo
 
int potpin = 0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin
 
void setup()
{
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}
 
void loop()
{
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)
  val = map(val, 0, 1023, 0, 179);     // scale it to use it with the servo (value between 0 and 180)
  myservo.write(val);                  // sets the servo position according to the scaled value
  delay(15);                           // waits for the servo to get there
}

たったこれだけでサーボモータがコントロールできるとは信じられない。 *1

特にmap関数を使って値の変換をさりげなくすませているところは憎いですね。 ATmega32U4ボードでの動作確認は以下の様にしました。 サーボモータの世界ではコネクターのピン配置が以下の様に決まっているみたいです。

  • 黒:GND
  • 赤:VCC(5V)
  • 黄:制御電圧

my_servo_bread.png

Hブリッジモータコントローラ

5.2節では、DCモータの制御を扱っています。

モータの回転を制御するために、図5.11のようなHブリッジモータコントローラを使用します。

Fig5_11.png

Arduino in Actionでは、この制御にL293D dual H driverを使っていますが、ここでは秋月で安価で 入手できる SN754410NE を使用しました。

ピンの配置も以下の様にL293Dと同じになっています。

SN754410NE_pin.png

DCモータの接続テスト

SN754410NEは、2個のモータを制御することができますが、ここでは1個のDCモータを使用します。

図5.13のように回路を接続します。

Fig5_13.png

スケッチと動作確認

交互に回転を変更する例題スケッチを動かしてみます。

int enablePin = 11;
int in1A = 4;
int in2A = 7;

void setup() {
  pinMode(enablePin, OUTPUT);
  pinMode(in1A, OUTPUT);
  pinMode(in2A, OUTPUT);
  digitalWrite(enablePin, LOW);
}

void loop() {
  digitalWrite(in1A, HIGH);
  digitalWrite(in2A, LOW);
  digitalWrite(enablePin, HIGH);
  delay(5000);
  digitalWrite(enablePin, LOW);
  delay(2000);
  digitalWrite(in1A, LOW);
  digitalWrite(in2A, HIGH);
  digitalWrite(enablePin, HIGH);
  delay(5000);
  digitalWrite(enablePin, LOW);
  delay(2000);
}

DCモータの駆動には単3電池を使用するよりも、eneloopの5Vを使用すると何かに便利です。

USBからの電源の取り出しには、秋月のAE-USB-MINIが安価*2で便利です。

AE-USB-MINI.JPGAE-USB-MINI-sch.png

以下の様にブレッドボードに回路を組んで動作を確認しました。

Bread5_13.png

ステッピングモータ

単にステッピングモータの制御をテストすることが目的なので、安価な秋月の SPG27 を使って試してみました。

この製品は、15度のステッピングとあったので、最初ステッピング数を24としたのですが、 ステッピングモータを動かしてみます(Arduino編) をみると、1回転ステップ数:288とされていたので、この値に変更して動くようになりました。

回路との接続方法

結線方法は、Arduino in Actionの説明よりも Stepper Motor Knob の方が丁寧でした。

2相の場合の結線は、以下の様にします。

th_bipolar_bb.jpg

回路も上記のサイトの通り、以下のようにします。

bipolar_schem.jpeg

ここで、注意するのは、モータの黒と青の線は、モータ用の電源Vccに接続することです。

スケッチと動作確認

スケッチは、以下の様にしました。

#include <Stepper.h>

const int stepsPerRevolution = 288;
Stepper myStepper(stepsPerRevolution, 8,9,10,11);

int stepCount = 0;

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

void loop() {
  myStepper.step(1);
  Serial.print("steps:" );
  Serial.println(stepCount);
  stepCount++;
  delay(500);
}

何とか無事動くようになりました。

Bread5_21.png

コメント

選択肢 投票
おもしろかった 10  
そうでもない 0  
わかりずらい 1  

皆様のご意見、ご希望をお待ちしております。


(Input image string)


*1 これに対抗できるのは、mbedくらいかなぁ
*2 200円

添付ファイル: filemy_servo_bread.png 656件 [詳細] fileSN754410NE_pin.png 636件 [詳細] fileknob_cirkit.png 673件 [詳細] fileknob_bb.png 676件 [詳細] fileFig5_13.png 630件 [詳細] fileFig5_11.png 617件 [詳細] fileBread5_21.png 620件 [詳細] fileBread5_13.png 629件 [詳細] fileBread_knob.png 284件 [詳細] filebipolar_schem.jpeg 728件 [詳細] fileth_bipolar_bb.jpg 1157件 [詳細] fileAE-USB-MINI.JPG 579件 [詳細] fileAE-USB-MINI-sch.png 534件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-09-15 (火) 21:47:11 (590d)
SmartDoc