Usar 180º en un servo de 360º

Buenas.

Os comento que es lo que me sucede!!!

Tengo un servo de 360º que quiero usar en la cabeza de un PING))) que gira 180º de izquierda a derecha y de derecha a izquierda; haciendo una analogía con las agujas del reloj, que vaya de 9 a 3, y de 3 a 9. El servo es este:
http://www.bricogeek.com/shop/motores/118-servomotor-de-rotacion-continua-s35-std.html ,
que me dice que la velocidad de rotación (6V): 0,13 sec / 60°. Yo alimento el servo, por ahora mientras hago pruebas, directamente con Arduino Mega 2560. Luego, cuando consiga lo que busco lo alimentaré, junto con otros dos servos más, tres en total, con 4 pilas de 1’5V, o sea, 6V. En un vídeo vi que haciendo servo.write(0) ponía el servo en la posición 0º, servo.write(90) en 90º y que servo.write(180) en 180º. Luego con un delay de 1000ms en las lineas, pues colocaba a 0º, 90º y 180º con un retardo de un segundo. Lo pruebo y nada… me hace un par de extraños… y me doy cuenta de que mi servo, al hacerle el servo.write(0) gira de manera continuada en el sentido de las agujas del reloj, y si le hago un servo.write(180) gira en el sentido contrario a las agujas del reloj. Pienso un poco y digo… pues nada, le digo que servo.write(0) durante lo que tarde en hacer 180º con el delay, y cuando llegue que vaya en sentido contrario con servo.write(180) durante el mismo tiempo para que haga otros 180º:

#include <Servo.h>

Servo servo;

void setup()
{
  servo.attach(7);
}

void loop()
{
  servo.write(0);
  delay(1175);
  servo.write(180);
  delay(1175);
}

PROBLEMA:
Resulta que no va, volviendo a la analogía del reloj, de 9 a 3 y de 3 a 9. Yo lo coloco como punto de partida como punto de partida de 9 a 3, horizontal o si lo prefieres alineado como eje X, y lo que hace es ir de 9 a 3’1, de 3’1 a a 9’1, de 9’1 a 3’2, de 3’2 a 9’2… y así que poco a poco, termina alineado con el eje Y, termina puesto de 12 a 6 en el reloj.
Sigo pensando… y si al llegar al final del recorrido el siguiente delay empieza a contar pero el motor pierde unas milésimas en empezar a girar para el otro sentido y así se estropea??? Voy probando valores pero me dicen por ahí que no juegue con los valores del delay que cuando lo consiga después de mil pruebas, cuando conecte otros motores con sus delays, el sensor PING)))… pues va a tardar mucho en trabajar… que Arduino Mega trabaja con un reloj de 16Mhz… Me sugieren que haga un for al que voy cambiando los valores del bucle, sin tocar un delay de 1ms, con este código:

#include <Servo.h>

Servo servo;
int i;
  
void setup()
{
  servo.attach(7);
}

void loop()
{
  for(i=0; i<=180; i++) //180 es lo que voy modificando
  {
    servo.write(i);
    delay(1);
  }
  
  for(i=180; i<=0; i--)
  {
    servo.write(i);
    delay(1);
  }
}

… Me hace cosas raras, hasta el punto de que cuando reduzco mucho los valores del bucle, de 180 a 50 por ejemplo… el segundo for parece que termina bloqueado, el motor vibra y ni se mueve… o sea, que no funciona mucho este método.

Así que después de esta parrafada que espero hayáis entendido, no se si me he explicado bien, pues si alguien pudiera ayudarme le estaría muy agradecido!!! MUCHO!!! Por cierto, ya me han sugerido que me compre un servo de 180º, que para eso están… pero claro… no me quiero rendir con el que tengo ni tampoco me quiero gastar más dinero, así que… POR FAVOR, AYUDA!!!

Gracias.

Hola de nuevo royyyyy.

Si he entendido bien lo que quieres es tener un control de posición de los servos con unos servos que tienen control de velocidad. Entiendo que no quieras gastarte más dinero pero lo que realmente necesitas es unos servos normales tal como ya te han sugerido. Si no se me ocurre que al igual que transforman servos normales en servos de rotación continua tal vez se pueda hacer la transformación inversa, yo no te puedo decir si se puede ni cómo pero seguro que aquí alguien te podrá decir.

Veo otra solución, sería poner finales de carrera en los puntos donde quieras que se bloqueen los servos. Pero vamos, que es matar moscas a cañonazos. Gastarás unas cuantas entradas de Arduino y tendrás que gastarte el dinero en los finales de carrera.

Como dice Cheyenne la mejor manera es utilizar un servo normal, para controlar la posición con un solo pin de arduino y con un código más simple. Ya que el problema de los servos de rotación continua es que no sabes nunca en la posición que van ha acabar.

Para darte alguna solución más por si quieres hacerlo seria utilizando un encoder, pintas de negro la parte donde quieres que pare.

Por este precio yo me compraría uno de 180 y deja el de 360 para otro proyecto que seguro que es caro.

http://www.focalprice.com/YO019L/TowerPro_SG90_15kg03sec_9g_Micro_Servo_Blue.html salu2

Bueno... pues visto lo visto tendré que comprar un servo de 180º... así que nada...

Muchas gracias por contestar!

Un saludo!