Go Down

Topic: Giro continuo de Servo MG995 (Read 368 times) previous topic - next topic

AsdrubalVelasquez

Mar 22, 2019, 04:33 pm Last Edit: Mar 22, 2019, 11:14 pm by surbyte Reason: Errores y códigos deben ir con etiquetas
Buenos dias amigos:

Tengo un Servo MG995, este viene modificado de fabrica para su giro de 360°, el caso es que deseo controlar el servo a través del puerto serial del arduino. Vi este video para poder hacerlo: "Controlar un servo motor digital desde el computador"  en el, utilizan el mismo servo que tengo yo, el problema es cuando introduzco el valor en el  monitor serial, el servo motor gira sin parar, pensé que era calibración del servo pero, al buscar tutoriales del calibrado, todos los servos que aparecen tienen un potenciometro integrado para su calibración, pero este no tiene (o no se lo he encontrado). No se que pueda ser entonces. yo utilizo Arduino UNO, no se si influirá que en el video se  utilice otro arduino y el código es el siguiente:

Code: [Select]
#include <Servo.h>


Servo miServo;
int angulo=90;

void setup(){
  miServo.attach(9);
  Serial.begin(9600);
}


void loop(){
  unsigned char comando=0;
  if(Serial.available()){//solo leeremos si hay un byte en el buffer
    
    comando=Serial.read();//leemos el byte
    
    if(comando=='s')angulo+=10;//incrementamos 10
    else if(comando=='b')angulo-=10;//decrementamos 10
    angulo=constrain(angulo,0,180);//restringimos el valor de 0 a 180
  }
  miServo.write(angulo);  
  Serial.print("Angulo:");Serial.println(angulo);
  delay(100);
}//Fin de ciclo


si me pudieran ayudar se los agradeceré.

Saludos

sande11

#1
Mar 31, 2019, 03:47 pm Last Edit: Mar 31, 2019, 03:48 pm by sande11
Hola, creo que deberías conectar tu servo a un pin analógico como el A0.
Sería cambiar por: 
miServo.attach(9);

surbyte

Quote
yo utilizo Arduino UNO, no se si influirá que en el video se  utilice otro arduino
No cambia nada el hecho que el video sea con un Arduino y tu uses otro. Son todos mas o menos intercambiables siempre que se respete la funcionalidad.

Ahora mira este video que te dirá porque tu servo se comporta como lo hace

0 es maxima velocidad en un sentido
180 es máxima velocidad en sentido contrario.
No tienes forma de que vaya a una posicion si has alterado el servo para que gire 360 grados.
El servo ahora gira permanentemente y la funcionalidad que buscas no esta presente en este tipo de servo.



tauro0221

#3
Mar 31, 2019, 06:57 pm Last Edit: Mar 31, 2019, 06:59 pm by tauro0221
Hi,
Adjunto un sketch que mueve el servo en una direccion y despues en la otra direccion. Tratalo para ver si te trabaja. La instrucion importante es la write(0) y write(180). Una te mueve el servo en una direccion y la otra en la direccion opuesta. Trata el sketch y reporta el resultado.El link explica como trabaja el servo de 360 en ingles.
http://ctc-dev.verkstad.cc/en/course-literature/continuous-rotation-servo/

Code: [Select]
#include <Servo.h>
 
Servo myservo;
 
void setup() {
myservo.attach(9);
}
 
void loop() {
myservo.write(0);
delay(1000);
myservo.write(180);
delay(1000);
}

surbyte

No comprendiste tauro o se te pasó mi respuesta, mira el video de mi post anterior..
Ademas el código que el propone es similar y justamente como no se posiciona es que planteó la consulta.


Si un servo es de giro continuo ya no se detiene en posiciones.
Si le das
Code: [Select]
myservo.write(0);gira a full en un sentido
Si le das
Code: [Select]
myservo.write(180); gira a full en sentido opuesto.

tauro0221

#5
Mar 31, 2019, 11:14 pm Last Edit: Mar 31, 2019, 11:43 pm by tauro0221
Hi,
El problema es que cuando modifica el servo para 360 grados le remueves la resistencia de feedback que es la que le dice los steps ya el servo no trabaja como angulo solo por velocidad,  En otra palabras esta convertiendo el servo como un motor. Entonces por que no usar un motor. El porque el servo no puede originalmente sin modificacion dr iuna vuelta de 360 grados es porque la rsistencia variable interna no puede dar vueltas de 360 grados.

surbyte

A ver tauro.. creo que no lees debidamente

Quote
tengo un Servo MG995, este viene modificado de fabrica para su giro de 360°,
no modificó nada. Lo compró con giro de 360 y espera que se comporte como otra cosa.

tauro0221

#7
Apr 01, 2019, 02:29 am Last Edit: Apr 01, 2019, 02:31 am by tauro0221
Hi,
Surbyte el que fabrica el servo ya le removio la resistencia variable por eso es que gira 360. Haz un google para que vea como se modifica y veras que le remueven la resistencia varariable. Adjunto un video que explica como hacerlo. Ya yo se lo hize a uno.

https://www.youtube.com/watch?v=6G1nHfvl4aI

surbyte

#8
Apr 01, 2019, 06:07 am Last Edit: Apr 01, 2019, 06:10 am by surbyte
No interesa que hizo el fabricante.
El fabricante vende un servo que gira 360 grados y eso compró @AsdrubalVelasquez.
El adquirió eso suponiendo que pero que se comportaría como un Servo que gira entre 0 y 180 y no es así.

Este servo por comentario del OP no tiene el preset. Fue removido de fábrica.

Entonces? porque comparas con un servo MG995 digamos normal que va entre 0 y 180.

Son dos cosas distintas. Este ya vino modificado.
A ver si aclaro las cosas:

Quote
Tengo un Servo MG995, este viene modificado de fabrica para su giro de 360°, el caso es que deseo controlar el servo a través del puerto serial del arduino.
Eso dice @AsdrubalVelasquez pero luego el cree que puede moverlo a posiciones como si fuera otra cosa y ahí esta su error.

tauro0221

#9
Apr 01, 2019, 06:18 am Last Edit: Apr 01, 2019, 06:27 am by tauro0221
Hi,
No Se, si va a moverlo a 360 grados porque no usa un motor de paso. Para mi la ventaja del servo es que solamente usa un pulso para moverse y eso lo hace facil su programarlo comparado con motor de paso. Bueno de todas manera cada cual con su tema.

Go Up