#include //Ein Unterprogramm zur Servosteuerung wird aus der "Bibliothek" geladen. Servo myServo1; //Der Servo heisst jetzt myServo1. Nun werden die Wörter angel1 und d1 erfunden ihnen die Möglichkeit erönnet, ein Zahlenwert zu sein: int angel1; int d1; #define PIN_TRIGGER1 2 #define PIN_ECHO1 4 //die digitalEingänge(Pins) werden als Trigger und Echo für den Ultraschallsensor definiert unsigned long duration1; unsigned int distance1; //erfindet das Wort distance1 und duration1 void setup() { pinMode(PIN_TRIGGER1, OUTPUT); pinMode(PIN_ECHO1, INPUT); //der TriggerPin ist nun ein Ausgang, der EchoPin ein Eingang. Der Ultraschallsensor sendet //ja Ultraschall-Signale aus (Trigger) und empfängt die Reflektion Durch den zeitlichen Abstand von Trigger und Echo //wird dann der Abstand errechnet myServo1.attach(3); //Der Servo wird über den digitalPin Nr 3 angesteuert. Des weiteren muss er mit einer 5V-Spannungsquelle verbunden sein //dies kann bei lediglich einem Servo auch der Arduino selber sein. Bei nexternen Spannungsquellen müssen die Minus-Pole von Ardu und Ext.Spannung verbunden sein Serial.begin(9600); } void loop() { //nun findet die Aktivierung der Triggersignale statt. { digitalWrite(PIN_TRIGGER1, LOW); //Zuerst kein Signal delayMicroseconds(2); digitalWrite(PIN_TRIGGER1, HIGH); //2 millisekunden später (delay) ein Signal delayMicroseconds(10); duration1 = pulseIn(PIN_ECHO1, HIGH); //Hier wird die dauer des Ultraschallsignals gemessen distance1 = duration1 / 58; //Dies ist die Umrechnung von millisekunden in cm. Der Wert "58" in der Berechnung von distance1 errechnet sich dadurch, //dass durch die Schallgeschwindigkeit das Triggersignal 29µs für 1cm in der Luft benötigt. Und da das Signal sowohl hin, als auch wieder zurückkehrt, //müssen wir den Wert auf 58µs verdoppeln. delay(10); } { d1 = (distance1); //Der Wert d1 repräsentiert die errechnete Distanz myServo1.write(angel1); //Die Werte, die an den Servo ausgegeben werden sollen die Winkelwerte sein, die im folgenden definiert werden } if (d1 <= 20) { myServo1.write(0); //wenn der Abstand kleinergleich 20 cm ist soll der Servo auf Winkel 0 Grad stehen } else if (d1 <= 40 && d1 > 20) { myServo1.write(90); //ansonsten wenn der Abstand größer als 20 cm und kleinergleich 40 cm ist soll der Servo auf 90 Grad stehen } else if (d1 <= 60 && d1 > 40) { myServo1.write(0); //ansonsten wenn der Abstand größer als 40 cm und kleinergleich 60 cm ist soll der Servo auf 0 Grad stehen } else if (d1 >= 60) { myServo1.write(90); //ansonsten wenn der Abstand größergleich 60 cm ist soll der Servo auf 90 Grad stehen } Serial.print("d1: cm"); Serial.println(d1); //im seriellem Monitor können wir die Distanzwerte nun ablesen delay(100); //Wir warten 0,1 Sekunden bevor auf den nächsten Messwert reagiert wird. Dies um ein Zittern des Servos zu vermeiden }