In questo schema i pin che comandano i servo sono collegati ai pin PWM 10 e 9, ma si possono usare qualsiasi pin PWM, non tutti i pin di arduino sono PWM si possono individuare mediante la sigla davanti ai pin.
Circuito elettrico:
il codice arduino:
#include <Servo.h>//include la libreria del servo
int minPulse1 = 0; // posizione minima o°
int maxPulse1 = 180; // posizione massima 180°
int turnRate1 = 10; // ruota di 10° alla volta
int minPulse2 = 0; // posizione minima o°
int maxPulse2 = 180; // posizione massima 180°
int turnRate2 = 10; // ruota di 10° alla volta
int buttonPin = 13; // pin that the trigger will be connected to
/** The Arduino will calculate these values for you **/
int centerServo1;
int centerServo2;
int pulseWidth1; // servo pulse width
int pulseWidth2; // servo pulse width
Servo servo1;
Servo servo2;
void setup() {
pinMode(buttonPin, OUTPUT);
servo1.attach(10);//dichiara il servo nel pin 10 PWM
servo2.attach(9);//dichiara il servo nel pin 9 PWM
centerServo1 = maxPulse1 - ((maxPulse1 - minPulse1)/2);
centerServo2 = maxPulse2 - ((maxPulse2 - minPulse2)/2);
pulseWidth1 = centerServo1;
pulseWidth2 = centerServo2;
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
Serial.println(" Arduino Serial Servo Control");
Serial.println("Press a, s, d, or w to move, spacebar to center, and f to fire");
Serial.println();
}
void loop() {
// check for serial input
if (Serial.available() > 0) {
int data = Serial.read(); // read the incoming byte:
digitalWrite(buttonPin, LOW); // turn the pin off on any incoming data
switch(data)
{
case 'a' : pulseWidth1 = pulseWidth1 - turnRate1; break;
case 'd' : pulseWidth1 = pulseWidth1 + turnRate1; break ;
case ' ' : pulseWidth1 = pulseWidth2 = centerServo1; break;
case 's' : pulseWidth2 = pulseWidth2 - turnRate1; break;
case 'w' : pulseWidth2 = pulseWidth2 + turnRate1; break ;
case 'f' : digitalWrite(buttonPin, HIGH); delay (1000); digitalWrite(buttonPin, LOW); break;
}
// stop servo pulse at min and max
if (pulseWidth1 > maxPulse1) { pulseWidth1 = maxPulse1; }
if (pulseWidth1 < minPulse1) { pulseWidth1 = minPulse1; }
// stop servo pulse at min and max
if (pulseWidth2 > maxPulse2) { pulseWidth2 = maxPulse2; }
if (pulseWidth2 < minPulse2) { pulseWidth2 = minPulse2; }
servo1.write(pulseWidth1);
servo2.write(pulseWidth2);
// print pulseWidth back to the Serial Monitor (uncomment to debug)
Serial.print("Servo 1: ");
Serial.print(pulseWidth1);
Serial.print(" Servo 2: ");
Serial.print(pulseWidth2);
Serial.println("degrees");
}
}
Adesso aprendo il monitor seriale visualizzerete il seguente testo:
Arduino Serial Servo Control
Press a, s, d, or w to move, spacebar to center, and f to fire
digitando uno dei tasti indicati sopra e premendo invio, vedrete il vostro servo muoversi
Se avete dei problemi a far funzionare il circuito commentate o scrivete sul forum.
Nessun commento:
Posta un commento
Commenta