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
}