1

私は 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 つのモーターのみが動作します。非常にゆっくりと実行されているため (ほとんど実行されていないように見えます)、前進する代わりに、ロボットは継続的に回転します。

何が問題なのか、それを解決する方法を誰でも教えてもらえますか。

4

2 に答える 2

2

シリアル ポートは、シリアル ドキュメントの最初の段落に記載されているように、ピン 0 と 1 を使用します。

http://arduino.cc/en/reference/serial

したがって、モーターの場合は、他のピンを選択する必要があります。

于 2013-09-05T16:50:51.707 に答える
1

http://arduino.cc/en/Main/arduinoBoardUnoから:

さらに、一部のピンには特殊な機能があります。

シリアル: 0 (RX) および 1 (TX)。受信 (RX) および送信 (TX) TTL シリアル データに使用されます。これらのピンは ATmega8U2 USB-to-TTL シリアル チップの対応するピンに接続されます。

Serialはピン 0 と 1 を使用します。したがって、それらを同時に別の目的に使用することはできません。他のピンを使用してモーターを駆動することをお勧めします (例: 2 ~ 5)。

于 2013-09-05T16:51:29.203 に答える