昨日は、ナポリ名物ベスビオ火山の火口に登ってきたので、今日は休養日。
いつも休養しとりますが……。
あれだな。山道は、登りより下りの方が疲れるものだな。
足場が不安定なので、常に片足で体のバランスを取る必要があった。
ふくらはぎ、パンパン。
牛乳が切れたので、午前中買い物に出かけたのだが、帰りの下り坂がきつかった。
さて、工作の方である。
前回、ハード系の配線はすべて完了。ソフト的な課題のみとなっていた。
まずは、Arduinoでステッピングモータを回すためのスケッチ(プログラム)をダウンロード。
ArduinoのLibraryに「Stepper.h」というモジュールが用意されており、これを利用すれば簡単にステッピングモータを回せる。
<StepperOneRevolution>
/*
Stepper Motor Control - one revolution
This program drives a unipolar or bipolar stepper motor.
The motor is attached to digital pins 8 - 11 of the Arduino.
The motor should revolve one revolution in one direction, then
one revolution in the other direction.
Created 11 Mar. 2007
Modified 30 Nov. 2009
by Tom Igoe
*/
#include <Stepper.h>
const int stepsPerRevolution = 120; // 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, 10, 11, 9);
void setup() {
// set the speed at 60 rpm:
myStepper.setSpeed(60);
// initialize the serial port:
Serial.begin(9600);
}
void loop() {
// step one revolution in one direction:
Serial.println("clockwise");
myStepper.step(stepsPerRevolution);
delay(500);
// step one revolution in the other direction:
Serial.println("counterclockwise");
myStepper.step(-stepsPerRevolution);
delay(500);
}
ほぼほぼ、ダウンロードしたまんまで良かったのだが、赤字の部分だけ調整が必要だった。
まず、
const int stepsPerRevolution = 120;
の部分は、「モータ1回転につき、何ステップ駆動が必要か?」という定数。
サンプルでは200になっていた。1ステップ当たり1.8度回転するということ。
パチモンR2D2用モータでは、試してみたところ、この定数が120だった。
つまり、1ステップ当たり3度回転する。
おもちゃ用なので、結構制御の目が粗いということだろう。
問題は、2番目の赤字部分。
ここは、モータを回すために、電圧をかける極の順番を指定している。
この順番を間違うと、回らない。
サンプルのままでは、「8, 9, 10, 11」と数字の順になっていた。
そのまま行けるかと思ったら、振動するだけで回転しない。
色々試行錯誤した結果、赤字のとおり「8, 10, 11, 9」の順番で回ることがわかった。
(配線順を変えればよいのだろうがーー)
マワリャあいいのさあ。
回ったところの映像が、こちら。
やっと、ここまでたどり着いた。
さて、この先は、R2D2頭部の回転限界を検出するエンコーダの解析。
そして、本体への組み込み後の、運転すり合わせ。
最終的には、どういうタイミングでモータをどれだけ回転させるか、など演出を加えていく予定である。
LEDの追加とか、音声の出力とかも、できるものならやってみたいがーー。