Beruflich Dokumente
Kultur Dokumente
com
1
Http://www.elegoo.com
2
Http://www.elegoo.com
Ⅰ. Verbindung
servo
3
Http://www.elegoo.com
Ⅱ. Programm hochladen
4
Http://www.elegoo.com
int in2 = 7;
int in3 = 8;
int in4 = 9;
int ENA = 5;
int ENB = 11;
int ABS = 150;
int rightDistance = 0,leftDistance = 0,middleDistance = 0 ;
void _mForward()
{
analogWrite(ENA,ABS);
analogWrite(ENB,ABS);
digitalWrite(in1,HIGH);//digital output
digitalWrite(in2,LOW);
digitalWrite(in3,LOW);
digitalWrite(in4,HIGH);
Serial.println("go forward!");
}
void _mBack()
{
analogWrite(ENA,ABS);
analogWrite(ENB,ABS);
digitalWrite(in1,LOW);
digitalWrite(in2,HIGH);
digitalWrite(in3,HIGH);
digitalWrite(in4,LOW);
Serial.println("go back!");
}
void _mleft()
{
analogWrite(ENA,ABS);
analogWrite(ENB,ABS);
5
Http://www.elegoo.com
digitalWrite(in1,HIGH);
digitalWrite(in2,LOW);
digitalWrite(in3,HIGH);
digitalWrite(in4,LOW);
Serial.println("go left!");
}
void _mright()
{
analogWrite(ENA,ABS);
analogWrite(ENB,ABS);
digitalWrite(in1,LOW);
digitalWrite(in2,HIGH);
digitalWrite(in3,LOW);
digitalWrite(in4,HIGH);
Serial.println("go right!");
}
void _mStop()
{
digitalWrite(ENA,LOW);
digitalWrite(ENB,LOW);
Serial.println("Stop!");
}
/*Ultrasonic distance measurement Sub function*/
int Distance_test()
{
digitalWrite(Trig, LOW);
delayMicroseconds(2);
digitalWrite(Trig, HIGH);
delayMicroseconds(20);
digitalWrite(Trig, LOW);
float Fdistance = pulseIn(Echo, HIGH);
Fdistance= Fdistance/58;
6
Http://www.elegoo.com
return (int)Fdistance;
}
void setup()
{
myservo.attach(3);// attach servo on pin 3 to servo object
Serial.begin(9600);
pinMode(Echo, INPUT);
pinMode(Trig, OUTPUT);
pinMode(in1,OUTPUT);
pinMode(in2,OUTPUT);
pinMode(in3,OUTPUT);
pinMode(in4,OUTPUT);
pinMode(ENA,OUTPUT);
pinMode(ENB,OUTPUT);
_mStop();
}
void loop()
{
myservo.write(90);//setservo position according to scaled value
delay(500);
middleDistance = Distance_test();
#ifdef send
Serial.print("middleDistance=");
Serial.println(middleDistance);
#endif
if(middleDistance<=20)
{
_mStop();
delay(500);
myservo.write(5);
7
Http://www.elegoo.com
delay(1000);
rightDistance = Distance_test();
#ifdef send
Serial.print("rightDistance=");
Serial.println(rightDistance);
#endif
delay(500);
myservo.write(90);
delay(1000);
myservo.write(180);
delay(1000);
leftDistance = Distance_test();
#ifdef send
Serial.print("leftDistance=");
Serial.println(leftDistance);
#endif
delay(500);
myservo.write(90);
delay(1000);
if(rightDistance>leftDistance)
{
_mright();
delay(360);
}
else if(rightDistance<leftDistance)
{
_mleft();
delay(360);
}
8
Http://www.elegoo.com
else if((rightDistance<=20)||(leftDistance<=20))
{
_mBack();
delay(180);
}
else
{
_mForward();
}
}
else
_mForward();
}
Öffnen Sie die Datei Obstacle_Avoidance_Car \ Obstacle_Avoidance_Car.ino
Da das Programm die Bibliothek <servo.h> verwendet, müssen wir die Bibliothek
zunächst installieren.
Öffnen Sie die Sketch --- Include Library --- Verwalten von Bibliotheken
9
Http://www.elegoo.com
10
Http://www.elegoo.com
11
Http://www.elegoo.com
12
Http://www.elegoo.com
Tatsächlicher Betrieb:
Das Zeitdiagramm ist unten dargestellt. Sie müssen nur einen Short10uS-Puls an den
Trigger-Eingang liefern, um die Messung zu starten, und dann sendet das Modul einen
8-Zyklus-Ultraschall-Ultraschall mit 40 kHz aus und hebt dessen Echo an. Das Echo ist ein
Distanzobjekt, das die Pulsbreite und der Bereich im Verhältnis ist. Sie können den
Bereich über das Zeitintervall zwischen dem Senden des Triggersignals und dem
Empfang des Echosignals berechnen. Formel: µs / 58 = Zentimeter oder µs / 148 = Zoll;
Oder: der Bereich = hohe Pegelzeit * Geschwindigkeit (340M / S) / 2; Wir empfehlen,
über 60ms Messzyklus zu verwenden, um ein Triggersignal zum Echosignal zu
verhindern.
13
Http://www.elegoo.com
start
Obstacle NO
YES
servo rotates
14
Http://www.elegoo.com
Im Bild oben, können wir sehen, dass das Prinzip des Hindernis Vermeidung Auto sehr
einfach ist. Das Ultraschallsensormodul erkennt den Abstand zwischen dem Wagen
und den Hindernissen immer wieder und sendet die Daten an die Anschaltbaugruppe,
dann stoppt das Auto und dreht das Servo, um die linke und rechte Seite um die
Umgebung zu scannen. Nach dem Vergleich der Distanz zu der anderen Seite, dreht
sich das Auto zu der Seite, die die längere Distanz hat und dann gehts wieder
vorwärts . Dann erkennt das Ultraschallsensormodul den Abstand wieder.
if(rightDistance>leftDistance)
{
_mright();
delay(360);
}
else if(rightDistance<leftDistance)
{
_mleft();
delay(360);
}
else if((rightDistance<=20)||(leftDistance<=20))
{
_mBack();
delay(180);
}
else
{
_mForward();
}
}
else
_mForward();
}
15