Servo nervioso, tics o se mueve solo... con arduino.

Hola, no sé si este tema ya está tratado, pero no he encontrado nada en este foro y en google hay información relatando el problema pero no consigo solucionarlo, y me encomiendo a vosotros... como siempre :)

a ver, tengo montado un robot, y el control remoto lo hago con el móvil y un modulo GSM con arduino. La dirección del robot va con un MicroServo 9g de estos azules muy común hoy en día... y el caso es que solo le mando la orden al servo de cambiar la dirección cuando envío una nueva graduación. O sea que dejando el móvil quieto no hay variabilidad del ángulo. pero el servo de repente se pone a moverse como si estuviera "loco", "nervioso" o como dicen que se dice, algo le provoca el "buzz" creo que se dice...
el caso es que dicen que puede ser una mala alimentación, o un potenciometro mal conectado... en mi caso, no uso potenciometro, pero tengo claro que no hay picos de grados en el ángulo fuera de lo que yo pueda provocar moviendo el móvil... así que tiene que ser el voltage o qué?

lo alimento con una batería de 4 pilas de 1.2V recargables, que dan una tensión entre 4.8 y 5.15 como pude medir ayer...

he leído algo del refresco en la librería de arduino, pero este método (SoftwareServo::refresh()) ya no se necesita llamar con la nueva librería (Servo.h).
o sea, puede ser alguna interrupción de algún lado externa a mi código? por ejemplo el módulo GSM? no uso librería para el modulo GSM, yo mismo programé todo el tema de leer y escribir por serial...

gracias por la ayuda,

un saludo! ...



gracias 2M por la correción ;)
 
Última edición:
Pues quita todas las rutinas que no tengan que ver con la de tu servo hasta dejar unicamente la que controla el el servo y vez si sigue haciendo lo mismo
 
tiene que ser algo de lo que dices porque el siguiente ejemplo funciona, pero es que no consigo encontrar un codigo a partir del que tengo, que quitando rutinas funcione la comunicación GSM...

#include <Servo.h>

Servo servo1;

void setup() {
servo1.attach(4);
Serial.begin(9600);
}

void loop() {

for (int i=20; i<=148; i++) {
servo1.write(i);
delay(5);
}
for (int i=148; i>=20; i--) {
servo1.write(i);
delay(5);
}

}

debe ser algo relacionado con las interrupciones que genera el SoftwareSerial...



cito:

The servo library uses the arduino's Timer 1. The software serial library disables interrupts during transmit or receive operations which then prevent the timer interruts for the servo library triggering.

There is a software servo library which may help, or you could simply use hardware serial for the GPS, but you will need to disconnect the GPS before programming the uno as the serial lines are used for programming. GPS and uno will conflict.

de aquí:
http://letsmakerobots.com/content/arduino-servo-library-and-softwareserial-library-conflict
 
Última edición:
pues el caso es que estoy usando ahora mismo los pins de serial de hardware y sigue haciendo el loco... pero menos... :-\ y con el ejemplo ese no hace tics... :( alguna ayuda?

por cierto, estoy usando un freaduino pro mini 5V, que es como la versión de arduino pro mini 5V...
 
bueno, ya lo he solucionado.

al parecer la comunicación serial claramente funciona mediante interrupciones, y los pulsos al servo también. lo que he hecho ha sido implementar mis propias funciones, y con el timer1 del avr he conseguido hacer trabajar el servo y el modulo gsm al "mismo tiempo".


nada que ver con mi codigo, simplemente es incompatible una cosa con la otra si no se programa manual ni en teoría se usa un puerto hardware de comunicación serial.

saludos.
 
Atrás
Arriba