走るだけ (3) タミヤ工作セット71201を動かす
連載の1回目で、モータ駆動に使われるポートを見つけました。その情報をもとにスケッチを作ります。開発は、Arduino IDE 1.8.9です。
- P13 PWM出力。値511、周期1000us
- P14 PWM出力。値511、周期1000us
- P15 ディジタル出力。MOVE、STOP
- P16 ディジタル出力。MOVE、STOP
micro:bitへPCからは電池ホルダをめくりあげてUSBケーブルを接続します。
Arduino IDEで、ボードは次のように設定します。
- ボードは BBC micro:bit
- Softdeviceは S110
- シリアルポートは COMXX (BBC micro:bit)
●スケッチ1 右のモータだけ
ON/OFFのポートrightP15out 15は、setup()内で出力に設定し、HIGHのレベルにしてSTOP状態にします。
#define rightP13pwm 13
#define rightP15out 15
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println("start");
pinMode(rightP15out, OUTPUT);
digitalWrite(rightP15out, HIGH); // Stop
}
void loop() {
digitalWrite(rightP15out, LOW);
analogWrite(rightP13pwm, 80);
delay(2000);
analogWrite(rightP13pwm, 10);
delay(5000);
}
実行すると、ベルト(クローラ)は後ろ方向に回りました。なので、モータの2ピン・コネクタをモータ駆動ボードmi-01から抜き、左右を逆にして挿し込みました。これで、超音波距離センサがある側へ前進するようになりました。
PWMのパラメータは0に近いほうが高速に回ります。90を超えるとほぼ止まった状態になりました。
●スケッチ2 両方のモータを回転
次のスケッチでは、左右のクローラが独立して回転数を変えながら動きます。バックはできません。
#define rightP13pwm 13
#define rightP15out 15
#define leftP14pwm 14
#define leftP16out 16
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println("start");
pinMode(rightP15out, OUTPUT);
digitalWrite(rightP15out, HIGH); // Stop
pinMode(leftP16out, OUTPUT);
digitalWrite(leftP16out, HIGH); // Stop
}
void loop() {
digitalWrite(rightP15out, LOW);
analogWrite(rightP13pwm, 80);
digitalWrite(leftP16out, LOW);
analogWrite(leftP14pwm, 80);
delay(2000);
analogWrite(rightP13pwm, 10);
analogWrite(leftP14pwm, 50);
delay(5000);
}
●波形
モータの配線部分にオシロスコープのプローブをあてています。PWMが80(低速回転)のときの波形です。周期は2msなので500Hzです。
PWMが10(高速回転)のときの波形です。