[背景]
ArduinoUNOとモータードライバーシールドを使用しモーターの制御を行う。
[制御条件]
以下の条件でモーターを制御する。
・正転・反転を1Hzの周期で繰り返す
・その際、PWM制御(Duty比を変化)で平均電圧を変化させる
(理由)モーターの振動の仕方を滑らかにするため
[質問]
モーターを単純に1Hzの周期で繰り返すことはdelay関数よりできます(プログラム①)
しかし、PWM制御をする際のduty比の増加数とdelayの指定時間とをいくらに設定すれば
周期が1Hzにすることができるのかがわかりません。(プログラム②)
どのように計算して指定すればよろしいでしょうか?
・プログラム①
void setup() {
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(9, OUTPUT);
}
void loop() {
analogWrite(9, 50);
analogWrite(4, HIGH);
analogWrite(5, LOW);
delay(500);
analogWrite(9, 50);
analogWrite(4, LOW);
analogWrite(5, HIGH);
delay(500)
}
・ 試したこと(プログラム②)
const int WAITTIME = 50;
//PWMの出力を変更するごとにWAITTIMEだけ停止
const int STEP = 50;
//duty255までのステップ数
void setup() {
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(9, OUTPUT);
}
void loop() {
int i;
i = 0;
while( i <= 255){
analogWrite(9, i);
analogWrite(4, HIGH);
analogWrite(5, LOW);
delay(WAITTIME);
i = i + STEP;
}
i = 255;
while( i >= 0 ){
analogWrite(9, i);
analogWrite(4, HIGH);
analogWrite(5, LOW);
delay(WAITTIME);
i = i - STEP;
}
i = 0;
while( i <= 255){
analogWrite(9, i);
analogWrite(4, LOW);
analogWrite(5, HIGH);
delay(WAITTIME);
i = i + STEP;
}
i = 255;
while( i >= 0 ){
analogWrite(9, i);
analogWrite(4, LOW);
analogWrite(5, HIGH);
delay(WAITTIME);
i = i - STEP;
}
}
(補足情報)
[モータードライバーシールド]
サイト:モノタロウ
種類:工作キット
出力:モータードライバー×2、LED×2、ブザー×1
基盤寸法(mm) 65×75
定格:(モータードライバー)最大1.4A(2ch合計)
適合:Arduinoボード Duemilanove, UNO(R3),
Arduino-IDE バージョン1.0.1
電源電圧(V) DC6~12
入力:プッシュスイッチ
