Alguien me ayuda?????Lo que intento es disminuir la velocidad del recorrido del

Hola cuchara,

Los servos corrientes solo tiene una resolución de un grado, entonces para mover esos 180º en menos tiempo, tendrías que ir moviendolo grado a grado con delay's. Algo parecido a esto.

myservo.write(val);
val++;
delay(1000);

De esa manera cada segundo el servo de moverá un grado. Pues seria hacer un código similar con dos variables, una donde guarde el angulo de giro deseado y otra que es angulo instantáneo osea el val.

Espero que te sirva de ayuda.

Utiliza un PID, hay una libreria para utilizarlo. Con los parámetros adecuados lograrás que el movimiento sea paulatino describiendo una curva. se utiliza mucho en regulación automática.

un saludo

gracias por tu respuesta Rodri

el provlema es que este ejemplos que me das

Code:
myservo.write(val);
val++;
delay(1000);

No lo puedo agregar al código que muestro, Ya que el servio lee el potenciometro
si ago como lo muestras tu no puedo controlar manualmente el movimiento. y es eso lo que quiero me gustaría aumentar el retardo con botones
muchas gracias por tu respuesta.

y usted también Sr. dongato gracias pero que es el PID? y donde encuentro su librería? ya le di un vistazo a la librería y no lo vi
la cuchara les agradece por sus respuestas jajaja a pa nombres que nos ponemos jaja

Es algo parecido a esto lo que te comento no lo he probado con un servo, osea a lo mejor no funciona o no hace lo que quieres :stuck_out_tongue:

#include <Servo.h>

Servo myservo;
int potpin = 0;
int val;
int position; // posición deseada controlada con el potenciómetro

void setup()
{
myservo.attach(9);
val = 90;
}

void loop()
{
position = analogRead(potpin);
position = map(position, 0, 1023, 0, 179);

if ( position < val ) { //Posición deseada < Angulo servo
val--;
myservo.write(val);
delay(980);
}

if ( position > val ) { //Posición deseada > Angulo servo
val++;
myservo.write(val);
delay(980);
}

delay(20);
}

Un saludo!

ok, gracias por tu sinceridad jaja ya lo checo

en los ejemplos ponen muchas oscilaciones pero no tiene por qué oscilar si configuras bien el PID.

si utilizas esto el movimiento que describirá el servo será de forma esponencial o logaritmica. de la forma que lo hace ElRodri será linealmente.
Los PID se utilizan por ejemplo en los climatizadores de los coches, regulan una entrada de aire caliente con un servo para que la mezcla con frio sea una temperatura que se haya fijado con los mandos.

ya depende de la aplicacion que quieras hacer, si es regulacion o un simple movimiento temporizado

un saludo

pues busque en el link que me dio srdongato y me dice que no puedo entrar. Probablemente es por que no soy miembro del sitio.

pues yo buscaba movimiento temporizado pero ya que tocas el tema de exponencial creo que me gustaría saber como lograrlo también de esa forma ya que en algunos momento me serviría........ pensando bien definitivamente quiero saber como lograr eso me diste toda una visión diferente del proyecto.
bueno pues sigo sin entender como funciona ya que no pude ver el link.

Elrodri. ya prove el cod funciona muy bien ahora solo tengo encontrar como unirlo con mi actual código a ver como me va

pues ya estaba uniendo los códigos cuando me encontré con que el código no puede trabajar a una velocidad rápida
si hablamos de velocidades lentas ese código me funciona muy bien pero cuando necesite darle una velocidad rápida (180° en 2 segundos ) no me funciona ya que solo me da los 180 como en 6 o 7 segundo,
otra sugerencia?

también encontré que solo puedo cambiar la velocidad de una parte del código y no de la segunda ya que la segunda funciona con botones

para que este mas claro muestro el código

void loop()
{
   position = analogRead(potpin);              
   position = map(position, 0, 1023, 0, 179);            
    
    
     if ( position < val ) 
   {
  val--;  
  myservo.write(val); 
  delay(masmenos);
  }
  
  if ( position > val ) 
  { 
  val++;  
  myservo.write(val); 
  delay(masmenos);
  }

asta esta parte todo bien el servo se tarda en recorrer la lectura del pot. a la velocidad que le dice la variable (masmenos)
pero cuando pasa a esta parte,

if (digitalRead(Bot1) == LOW)            
   {
     if (mem1 == 0)   	                     
	 {                                 
	   mem1 = val;             
	 }
	 else                              
	 {
	   val = mem1;             
	  }
      }

en la que los botones mueven al servo a la posición memorizada el (masmenos) ya no puede controlar y provoca el movimiento del servo muy rapido
como agrego una variavle que controle el movimiento del servo en todas sus ordenes tanto potentiometer como botones ?????

una bes mas les agradece la cuchara

no apareces conectado.
no pinches en el link que dejo, copialo y pegalo en el explorador, no se por que causa si pinchas no se ve la pagina.

lo que quieres hacer con lo pid lo puedes hacer

http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/

hay tienes el autor de la libreria

y el playground

http://www.arduino.cc/playground/Code/PIDLibrary

una vez configurado solo tienes que establecer el valor objetivo que quieres que alcance. imagina que estas en 30º, tu estableces que debe ir a 80º, entonces el valor que manda al servo irá variando poco a poco, promero con más velocidad decreciento esta velocidad conforme se acerca al valor objetivo. los tiempos y demás los configuras con los valores PID

leete un poco como va el tema
hay simuladores tambien conlos qe puedes ver las reacciones segun los valores que pongas

un saludo

SrDonGato
que gran tema me dio a leer. es todo un mundo gracias, creo que si me meto por ahí me complicare mas de los que ya estoy ya muy confundido ando
espero alguien me ayude

El problema que tienes con los botones es que no tienes que utilizar la variable val para cambiar de posición al servo si no position que lo ara girar hacia un lado o hacia el otro, dependiendo si es más grande o más pequeño que val. Al meterle mem1 a val lo que haces es cambiar de golpe el angulo del servo, en vez de aumentarlo con el ++ o -- en una unidad. :wink:

gracias Rodri creo que debí explicar mas el código esas función la necesito así.
pues me deje del foro y encontre lo que tenia que hacer mi código ya esta como lo quiero.

pero aun sigue mi segunda pregunta l

También me gustaría agregar una lcd para aumentar el tiempo de retardo sin la necesidad de una comp.

lo que tengo que lograr es por medio de unos 4 botones poder escribir en una lcd (HD44780 1602 16x2) tiempo.

he visto barios ejemplos de como atreves de un botón (botonA) un dígito puede ir en aumento (del 0 al 9) y con otro (botonDerecha) cambiar de posición al siguiente dígito y aumentarlo o disminuirlos etc.....
entienden a lo que me refiero?????
mi lcd viene en camino asi que puedo aprender mientras llega

cren necesario que haga un nuevo topic

Veamos .. para el movimiento yo lo haria asi

pos_actual = (((pos_mayor-pos_menor)/tiempo_total)*tiempo_transcurrido)+pos_menor

tendras que variar la formula dependiendo si va de mayor a menor , de esa forma cambiara linealmente.

Para lo del LCD ... tendras que hacer un menú. vi el otro dia un pryecto , photoduino, que con solo 2 botones es capaz de moverse por el menu y cambiar parámetros y tiene tambien algun menu de temporizaciones, y verlas en un lcd claro está .... echale un vistazo al codigo por si te puede servir de ayuda

Un saludo

gracia los botones de velocidad ya quedaron funcionando bien.
en cuanto a la lcd

tendras que hacer un menú. vi el otro dia un pryecto , photoduino, que con solo 2 botones es capaz de moverse por el menu y cambiar parámetros y tiene tambien algun menu de temporizaciones,

en donde puedo encontrar ejemplos ??

http://code.google.com/p/photoduino/

no es el unico , con lo que tienes hay mil ejemplos de menus, incluso una libreria me parecio ver una vez

san google...

una vez mas Gracias srdongato buen link
ya le di un vistazo al código y es lo suficientemente grande como para dejarme mareado... no tengo ni la menor idea de como utilizar una lcd tal vez si tuviera una lcd con migo podría hacer pruebas, pero por el momento no puedo, bueno sigo viendo el código mientras escribo y ya le voy encontrando sus relaciones pero insisto es muy grande
me pueden recomendar un lugar donde puedo encontrar ejemplos un poco mas simples XD

Que es

san google...

???? te refieres que busque en google?

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1233535986/7

ejemplo lcd con 3 botones

libreria para utilizar el LCD

otro ejemplo de utilizacion de lcd

hay mucho ejemplos mas, lo suyo es tenerlo delante montado y trastear, ir haciendo el codigo poco a poco. Yo hice un analizador de diagnosis para mi curro y se ha de hacer poco a poco , si lo haces de una te puede dar algo

un saludo

si lo haces de una te puede dar algo

jaja ok
gracias por los link buenísimos