Cómo prevenir el jitter de inicio del servo

3

Tengo un pequeño robot con Arduino Uno al que estoy entrando en una competencia, y utiliza algunos pequeños servos para posicionar los sensores y otros actuadores. De acuerdo con las reglas, no puede moverse hasta que se reciba una señal predeterminada, momento en el cual el robot se enciende manualmente. Sin embargo, cuando se inicia, el Arduino activará los servos en posiciones aleatorias, causando un "jitter" que descalificará inmediatamente al robot.

¿Cómo cableas / codificas el Arduino para que, cuando se enciende inicialmente, los servos conectados permanezcan en su posición actual y no "tiemblan"?

Los servos se conectan a los pines DIO estándar mediante la biblioteca de servos incorporada.

    
pregunta Cerin

2 respuestas

2

Aunque la respuesta de @ akellyril lo resolvió parcialmente, todavía estaba viendo un poco de jitter. Para resolverlo completamente, conecté un transistor NPN para permitir cortar la línea del servo 5V a través de un pin Arduino, como se describe aquí .

Otro problema menor con el que me encontré fue que, incluso cuando el servo estaba en la posición correcta y sin carga, "gemía" y hacía mucho ruido incluso con el corte de línea de 5V. Encontré que llamar al método detach() del servo soluciona esto.

Para resumir, mi pseudocódigo parece:

  1. Establezca el pin de control de servoalimentación para dar salida y establezca un valor bajo para apagarlo.
  2. Establezca el servo en la posición "estacionada".
  3. Adjuntar servo.
  4. Establezca el pin de control de alimentación del servo en alto para encender el servo.
  5. Mover el servo para la aplicación.
  6. Establezca el servo en la posición estacionada.
  7. Desacoplar el servo.
  8. Establezca el pin de control de servoalimentación en bajo para apagarlo.
respondido por el Cerin
2

Cuando enciendes un Arduino, obviamente no tendrás las posiciones de Servo (como dices), por lo que necesitas determinar la posición del Servo después del encendido. Esto no es facil. Implicaría sensores de posición de rotación adicionales.

Si realmente necesita que Arduino se encienda para que no se apague completamente, entonces "estacionaré" los servos en una cierta posición antes de apagar. Luego, durante la inicialización después del encendido, devuelva los servos a la posición estacionada, y claramente no se moverán.

Alternativamente, podría considerar un modo de suspensión para su robot en el que el Arduino no se apaga realmente y, por lo tanto, las variables que contienen las posiciones de los servos no se eliminan.

    
respondido por el akellyirl

Lea otras preguntas en las etiquetas