int servoPin = 7; // R/C Servo connected to digital pin
int myAngle; // angle of the servo (roughly in degrees) 0-180
int pulseWidth; // function variable
void servoPulse(int servoPin, int myAngle) {
pulseWidth = (myAngle * 9) + 700; // converts angle to microseconds
digitalWrite(servoPin, HIGH); // set servo high
delayMicroseconds(pulseWidth); // wait a very small amount
digitalWrite(servoPin, LOW); // set servo low
Serial.print("pulseWidth: "); Serial.println(pulseWidth);
delay(20); // refresh cycle of typical servos (20 ms)
}
void setup() {
pinMode(servoPin, OUTPUT); // set servoPin pin as output
Serial.begin(19200);
}
void loop() {
// cycle through every angle (rotate the servo 180 slowly)
for (myAngle=0; myAngle<=180; myAngle++) {
servoPulse(servoPin, myAngle);
}
delay(1000);
}
utiliza el pin 7 como arriba dice para controlar el motor(pwm)
lo que necesito saber es como hago para conectar un segundo motor
y que tenga su propio movimiento pero en otro ritmo, ya que al conectarlo al pin 7 (ambos motores) quedan funcionando sincronizados,
talves designar otro pin?... necesito ayuda lo mas completa posible para sacar este proyecto adelante
parece que no entendiste lo que te queria decir.
resulta que tengo 2 motores servos y quiero que muevan 2 objetos pero cuando los conecto los 2 se mueven a la par, necesito que no pase eso, he intentado modificar el codigo pero no se muy bien cuales son los pin pwm y como agregar esa nuevo pin al codigo sin que me de error
La idea es la siguiente ... usar dos pines PWM ... uno para cada motor/servo.
Para probar cómo se comporta el motor con las salidas PWM (puedes escribir un valor de 0 a 255) ...
int valor = 0; // variable que contiene el valor
int motor = 10; // motor conectado al PIN 10
void setup() { } // No es necesario
void loop() {
for(valor = 0 ; valor <= 255; valor +=5) {
analogWrite(motor, valor);
delay(30);
}
for(valor = 255; valor >=0; valor -=5) {
analogWrite(motor, valor);
delay(30);
}
}
Y ahora ... con los dos motores ...
int valor1 = 0;
int valor2 = 0;
int motor1 = 9; // motor conectado al PIN 10
int motor2 = 10; // motor conectado al PIN 10
void setup() { } // No es necesario
void loop() {
/*
Aquí metes el código que calcula el valor de cada motor (valor1 y valor2)
*/
analogWrite(motor1, valor1);
delay(30);
analogWrite(motor2, valor2);
delay(30);
}
}
no entendi eso
lo probe pero funcionan igual
modifique un poco el codigo pero ahora tengo dos motores moviendose a la par y si control haha
ayuda mira este es el codigo que termine de compilar esta bien?
int valor1 = 0;
int valor2 = 0;
int motor1 = 7; // motor conectado al PIN 10
int motor2 = 10; // motor conectado al PIN 10
Noooo ... uno a un pin PWM y otro al otro pin PWM ... para controlar cada motor por separado.
En cuanto al código ... está mal .... para que veas el porqué súbele el delay a 200 milisegundos.
Lo que haces es "secuencialmente":
1.- Mover el motor 1 mediante un bucle (30 ms * 16 iteraciones = 480 milisegundos)
2.- Mover el motor 2 mediante un bucle (30 ms * 16 iteraciones = 480 milisegundos)
3.- Volver a escribir en los pines PWM despues de los bucles -->Este código te sobra ... ya que lo usas arriba:
La idea es mover los dos motores independientemente, no uno y luego el otro ... para ello:
1.- ¿En función de que valores quieres mover los servos?, ¿el valor de un sensor?, ¿un parámetro modificado por un bucle?
2.- Progamar el código que calcula los dos valores.
3.- Escribir los valores en los motores uno detrás de otro sin delay ... y justo después el delay.
En caso de que fuese un bucle lo que controla los dos motores deberías hacer algo pareceido a esto para que cada motor gire en un sentido contrario al otro:
Una pregunta. Veo que aqui los motores los controlas con analogWrite (int, int); y yo en un pryecto intento hacerlo con digitalWrite (int, HIGH/LOW); y programando un delayMicroseconds(); en medio. ¿Cual es el medio mas practico?
Se pueden controlar servo-motores de muchas formas. Si sólo tienes uno, es fácil controlarlo simulando el PWM con el digitalWrite. Si tienes más de uno, lo mejor, en mi opinión, es que utilices el analogWrite. Sincronizar más de un motor usando digitalWrite es complicado de programar. Al menos para mi.
Las señales PWM sirven para simular, mediante una salida digital, una analógica. Explicar aquí la teoría es un engorro, más teniendo en cuenta que yo no soy un profe. Échale un vistazo a estas transparencias en la parte de salidas analógicas: