Buenos días a todos.
Estoy haciendo el proyecto de un robot con un arduino ethernet y dos servos. Tengo un código el cual creo que es correcto pero al conectar-lo todo los motores no giran y hacen ruidos extraños. y si desconecto uno de ellos, el otro funciona correctamente. A ver si sabéis porque me pasa y como podría solucionarlo. Muchas gracias.
Yo lo primero que veo es que en servo.write(); le estas metiendo un valor equivocado si quieres meter microsegundos debes poner servo.writeMicroseconds(); si pones servo . write(); el valor es en ángulo de 0 a 180
Y para poner dos servos te recomiendo que los alimentes a parte, el arduíno puede no tener chicha para mover varios servos
Cuando un hombre planta un árbol bajo cuya sombra sabe que no se sentará ha comenzado a comprender el sentido de la vida... o lo que es lo mismo... comparte!!!
Siempre tengo la costumbre de limitar las cargas todo lo que puedo sobre los pines de arduino y utilizar una fuente alimentación auxiliar, y no solo por la potencia de los pines de arduino que ya de por si es muy limitada, tambien para evitar cualquier tipo de ruido que pueda inducirse en otros pines, hay que evitar los ruidos con nuestro arduino que dan muuuuchos problemas, a nivel laboratorio no, pero cuando salen a una instalación real pues.....
Gracias por la ayuda la verdad no se me havia ocurrido alimentarlos con una fuente externa. Por otra parte pongo write(1000) para regular la velocidad, asi consigues que vaya a maxima velocidad en un sentido. Si pones write (1500) se para i si pones write (2000) va a maxima velocidad en sentido opuesto.
Esto es lo que pone el la explicación de servo.write() en la página de arduino
Código:
write()
Description
Writes a value to the servo, controlling the shaft accordingly. On a standard servo, this will set the angle of the shaft (in degrees), moving the shaft to that orientation. On a continuous rotation servo, this will set the speed of the servo (with 0 being full-speed in one direction, 180 being full speed in the other, and a value near 90 being no movement).
Syntax
servo.write(angle)
Parameters
servo: a variable of type Servo
angle: the value to write to the servo, from 0 to 180
si poniendo 1000,1500 o 2000 te funciona yo lo achacaría a la casualidad, normalmente y hasta donde yo entiendo, una variable de 8 bit's por ejemplo puede albergar un valor de 0 a 255, si tienes 255 y le sumas cinco podrías esperar tener un valor de "260" y en realidad tendrás un valor de "5", no se de que tipo es la variable que guarda el parámetro que le envías a la función, pero probablemente ese desbordamiento te esté dando un valor que de casualidad se aproxime al valor que te hace mover los servos correctamente.
Es una conjetura/opinión :roll: pero yo probaría a meterle 0,90 y 180 en vez de 1000,1500 o 2000
Cuando un hombre planta un árbol bajo cuya sombra sabe que no se sentará ha comenzado a comprender el sentido de la vida... o lo que es lo mismo... comparte!!!