[[FrontPage]] #contents 2013/05/25からのアクセス回数 &counter; 秋月からのモータも届いたので、 Arduino in Actionの5章に出てくる例題を試してみました。 Arduinoのすごいところは、豊富な例題と丁寧なドキュメントにあるのだと思う。 5章では、モータ制御の例があるのですが、最初に例題スケッチKnobをATmega32U4ボード で動かしてみます。 ** サーボモータの制御 [#a4345d20] [[例題のスケッチ>http://arduino.cc/en/Tutorial/Knob]]にある回路図と接続図は以下の通りです。 &ref(knob_bb.png);&ref(knob_cirkit.png); スケッチは、以下の通りです。 #pre{{ // 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 } }} たったこれだけでサーボモータがコントロールできるとは信じられない。 ((これに対抗できるのは、mbedくらいかなぁ)) 特にmap関数を使って値の変換をさりげなくすませているところは憎いですね。 ATmega32U4ボードでの動作確認は以下の様にしました。 サーボモータの世界ではコネクターのピン配置が以下の様に決まっているみたいです。 - 黒:GND - 赤:VCC(5V) - 黄:制御電圧 &ref(my_servo_bread.png); ** Hブリッジモータコントローラ [#p4504c55] 5.2節では、DCモータの制御を扱っています。 モータの回転を制御するために、図5.11のようなHブリッジモータコントローラを使用します。 &ref(Fig5_11.png); Arduino in Actionでは、この制御にL293D dual H driverを使っていますが、ここでは秋月で安価で 入手できる [[SN754410NE>http://akizukidenshi.com/catalog/g/gI-05277/]] を使用しました。 ピンの配置も以下の様にL293Dと同じになっています。 &ref(SN754410NE_pin.png); *** DCモータの接続テスト [#eb64eef6] SN754410NEは、2個のモータを制御することができますが、ここでは1個のDCモータを使用します。 図5.13のように回路を接続します。 &ref(Fig5_13.png); *** スケッチと動作確認 [#q56c21eb] 交互に回転を変更する例題スケッチを動かしてみます。 #pre{{ 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が安価((200円))で便利です。 &ref(AE-USB-MINI.JPG);&ref(AE-USB-MINI-sch.png); 以下の様にブレッドボードに回路を組んで動作を確認しました。 &ref(Bread5_13.png); ** ステッピングモータ [#ae108a1a] 単にステッピングモータの制御をテストすることが目的なので、安価な秋月の [[SPG27>http://akizukidenshi.com/catalog/g/gP-05708/]] を使って試してみました。 この製品は、15度のステッピングとあったので、最初ステッピング数を24としたのですが、 [[ステッピングモータを動かしてみます(Arduino編)>http://www.geocities.jp/zattouka/GarageHouse/micon/Motor/Stepping1.htm]] をみると、1回転ステップ数:288とされていたので、この値に変更して動くようになりました。 *** 回路との接続方法 [#g24db314] 結線方法は、Arduino in Actionの説明よりも [[Stepper Motor Knob>http://arduino.cc/en/Tutorial/MotorKnob]] の方が丁寧でした。 2相の場合の結線は、以下の様にします。 &ref(th_bipolar_bb.jpg); 回路も上記のサイトの通り、以下のようにします。 &ref(bipolar_schem.jpeg); ここで、注意するのは、モータの黒と青の線は、モータ用の電源Vccに接続することです。 *** スケッチと動作確認 [#z5f55c86] スケッチは、以下の様にしました。 #pre{{ #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); } }} 何とか無事動くようになりました。 &ref(Bread5_21.png); ** コメント [#lc885b54] #vote(おもしろかった[11],そうでもない[1],わかりずらい[5]) #vote(おもしろかった[12],そうでもない[1],わかりずらい[5]) 皆様のご意見、ご希望をお待ちしております。 #comment_kcaptcha