私は Arduino Uno を使用して、前進する非常に単純なロボットを構築しています。物体を感知すると (距離センサーを使用HC-SR04
)、動きを止めます。ロボットベースは4輪で、各輪にDCモーターがついています。モーター 1、2、3、4 をそれぞれ制御するためにピン 1、2、3、4 を使用しています。ピン 7、8 は、距離センサーの Echo ピンと Trig ピンに使用されますHC-SR04
。
このために、次のコードを書きました
#define m1p1 1
#define m1p2 2
#define m2p1 3
#define m2p2 4
#define echoPin 7 // Echo Pin
#define trigPin 8 // Trigger Pin
#define LEDPin 13 // Onboard LED
int maximumRange = 200; // Maximum range needed
int minimumRange = 4; // Minimum range needed
long duration, distance; // Duration used to calculate distance
void setup()
{
Serial.begin(9600);
pinMode(m1p1, OUTPUT);
pinMode(m1p2, OUTPUT);
pinMode(m2p1, OUTPUT);
pinMode(m2p2, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(LEDPin, OUTPUT); // Use LED indicator (if required)
}
void loop()
{
//Code to run motors forward
digitalWrite(m1p1, LOW);
digitalWrite(m1p2, HIGH);
digitalWrite(m2p1, HIGH);
digitalWrite(m2p2, LOW);
//Code of distance sensor
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
//Calculate the distance (in cm) based on the speed of sound.
distance = duration/58.2;
if (distance >= maximumRange || distance <= minimumRange){
Serial.println("-1");
//Code to stop motors
digitalWrite(m1p1, LOW);
digitalWrite(m1p2, LOW);
digitalWrite(m2p1, LOW);
digitalWrite(m2p2, LOW);
}
else {
/* Send the distance to the computer using Serial protocol, and
turn LED OFF to indicate successful reading.
*/
Serial.println(distance);
digitalWrite(LEDPin, LOW);
}
//Delay 50ms before next reading.
delay(50);
}
問題は、この行を削除すると、すべてのモーターが正しく動作し、ロボットが順方向に動作するため、を含む行にあると思いますが、Serial.begin(9600)
この行を書くと、2 つのモーターのみがスムーズに動作し、2 つのモーターのみが動作します。非常にゆっくりと実行されているため (ほとんど実行されていないように見えます)、前進する代わりに、ロボットは継続的に回転します。
何が問題なのか、それを解決する方法を誰でも教えてもらえますか。