Tutorial Servo, Motor Shield und HC-SR04 am Arduino Uno R3

Ich gehe im folgenden davon aus, dass 7-12V an Vin anliegen. Lt. der Dokumentation sollte man min. 7V anschließen, damit man am 5V Pin auch 5V anliegen hat.

Servo
Einen Servo an einen Arduino anzuschließen, ist eigtl. sehr einfach. Das braune Kabel muss an GND, das rote an Vin und das gelbe an einen der digitalen Pins mit PWM (erkennbar an der ~) des Arduinos. In meinem Codebeispiel habe ich D5 genutzt.

#include <Servo.h>
Servo servo;
const int servoPin = 5;
const int servoAngle = 0; // Servo position in degrees at startup

void setup()
{
 servo.attach(servoPin);
 servo.write(90); // Turn SG90 servo to 90 degrees (center position)
}

void loop()
{
 servo.write(45); // Turn SG90 servo to 45 degrees (right)
 delay(1000); // Wait one second

 servo.write(90); // Turn SG90 servo to 90 degrees (center)
 delay(1000); // Wait one second

 servo.write(135); // Turn SG90 servo to 90 degrees (left)
 delay(1000); // Wait one second
}

HC-SR04
Diesen Sensor kann man an jeden digitalen Pin anschließen. Er braucht kein PWM. Aus diesem Grund habe ich Echo an D2 und den Trigger an D4 angeschlossen. VCC muss natürlich an Vin und GND an GND.

const int echoPin = 2;
const int triggerPin = 4;
long duration;
int distance;

void setup()
{
 pinMode(trigPin, OUTPUT); // Set triggerPin as an output
 pinMode(echoPin, INPUT); // Set echoPin as an input
 Serial.begin(9600);
}

void loop()
{
 digitalWrite(trigPin, LOW); // Clear trigger
 delayMicroseconds(2); // Wait 2 microseconds

 // Send sound for 10 microseconds and clear trigger
 digitalWrite(trigPin, HIGH);
 delayMicroseconds(10);
 digitalWrite(trigPin, LOW);

 // Read echoPin. This returns the travel time of the sound in microseconds
 duration = pulseIn(echoPin, HIGH);
 distance = duration * 0.034 / 2; // Calculate the distance in cm

 Serial.println(distance); // Print the distance in the serial monitor
}
Wie kommt es zu dieser Rechnung?
Der Schall legt 340m in einer Sekunde zurück. Das macht 0,034cm in einer Milisekunde. Da wir den Schall zuvor ausgesendet haben und auf die Antwort warten, müssen wir die zurück gelieferte Zeit durch 2 teilen.

Motor Shield
Das Motor Shield ist für den Arduino Uno R3 gedacht und passt auch auf den Leonardo. Theoretisch passt es auch auf die älteren Arduinos. Hier müssen aber ein paar Pins gekürzt werden. Dies sollte man jedoch nicht machen.
Bei einem Shield muss man immer aufpassen, welche Pins es für seine Zwecke belegt, sofern man weiteres anschließen möchte. Bei diesem Shield sind folgende Pins belegt:
A0 = Stromverbrauch Motor A
A1 = Stromverbrauch Motor B
D3 = Geschwindigkeitsregulierung Motor A
D8 = Bremse Motor B
D9 = Bremse Motor A
D11 = Geschwindigkeitsregulierung Motor B
D12 = Drehrichtung Motor A
D13 = Drehrichtung Motor B

void setup()
{
 // Setup channel A
 pinMode(9, OUTPUT); // Setup brake pin of motor A as output
 pinMode(12, OUTPUT); // Setup direction pin of motor A as output

 // Setup channel B
 pinMode(8, OUTPUT); // Setup brake pin of motor B as output
 pinMode(13, OUTPUT); // Setup direction pin of motor B as output
}

void loop()
{
 digitalWrite(12, HIGH); // Set motor A forward
 digitalWrite(9, LOW); // Release the brake for motor A
 analogWrite(3, 123); // Set motor A to half speed

 digitalWrite(13, LOW); // Set motor b backwards
 digitalWrite(8, LOW); // Release the bracke for motor B
 analogWrite(11, 123); // Set motor B to half speed

 delay(5000); // Wait 5 seconds

 digitalWrite(12, LOW); // Set motor A backward
 digitalWrite(9, LOW); // Release the brake for motor A
 analogWrite(3, 255); // Set motor A to full speed

 digitalWrite(13, HIGH); // Set motor b forward
 digitalWrite(8, LOW); // Release the bracke for motor B
 analogWrite(11, 255); // Set motor B to full speed

 delay(5000); // Wait 5 seconds
}

Sehr schlechtSchlechtMittelmäßigGutSehr gut (No Ratings Yet)
Loading...

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert