TODOPIC

Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: fco1306 en 14 de Marzo de 2011, 18:27:45

Título: ¿Cómo se puede hacer lo que aparece en el vídeo?
Publicado por: fco1306 en 14 de Marzo de 2011, 18:27:45
Soy aficionado al modelismo ferroviario,utilizo servos para mover los desvíos. En el siguiente enlace aparece el uso de un servo que detecta el final del recorrido que debe hacer. Se mueve hacia un lado ,cuando ya no puede moverse ,se para y se mueve hacia el otro lado.Quedan grabadas las posiciones a derecha e izquierda para volver a hacer el movimiento.

http://www.tamvalleydepot.com/products/octopusservodriver.html


¿Cómo se podría hacer? ¿en qué lenguaje? He estado buscando información por la red y no he encontrado nada. ¿se os ocurre algo?

Un saludo
Título: Re: ¿Cómo se puede hacer lo que aparece en el vídeo?
Publicado por: fco1306 en 15 de Marzo de 2011, 18:18:20
Buscando por la red ,parece que se podría hacer midiendo el consumo del servo mediante el adc del pic. Cuando llega a un punto que no puede moverse aumenta el consumo. Lo que no he encontrado todavía es como se puede utilizar el adc para medir no sé, si sería voltaje o intensidad ¿sabéis de alguna página que hable de cómo utilizar el pic para medir voltaje o intensidad?
Título: Re: ¿Cómo se puede hacer lo que aparece en el vídeo?
Publicado por: dogflu66 en 15 de Marzo de 2011, 20:13:51
No es necesario, la mayoria de los servomotores no tienen giro continuo, basta con decirle a que posición se tiene que colocar dentro de los 180º de su recorrido, y cuando llega a la posición deseada se para.
Tienes mucha información en el foro para poder realizar el proyecto, de todas formas en este enlace puede que te sea más fácil comprenderlo.

http://www.pickey.es/uso_practico_del_pic12f675_iv.html
Título: Re: ¿Cómo se puede hacer lo que aparece en el vídeo?
Publicado por: fco1306 en 16 de Marzo de 2011, 11:12:28
Ya, pero se trata de lo contrario. ¿Es posible conocer la posición en la que está un servo sin mandarle antes un pulso de control para que vaya a esa posición?
Título: Re: ¿Cómo se puede hacer lo que aparece en el vídeo?
Publicado por: stk500 en 16 de Marzo de 2011, 13:21:15
pues claro que es posible conocer la posicion del Servo, por eso nuestros amigo Dogflu te ha puesto un enlace, y para que te entere es mejor que lea sobre programacion, en la Web hay un monton de Info, es solo saber buscar con la palabra Tecnica, cuando programa un servo siempre tiene que calcular todos los parametro, como cualquier otro motor.
por eso te aconsejo que lea sobre los Servos y aqui en el Foro hay muchas informacion.
Saludos
Título: Re: ¿Cómo se puede hacer lo que aparece en el vídeo?
Publicado por: dogflu66 en 16 de Marzo de 2011, 15:19:27
Ya, pero se trata de lo contrario. ¿Es posible conocer la posición en la que está un servo sin mandarle antes un pulso de control para que vaya a esa posición?

La posición del servo tiene que ser la ultima que se le indicó, no veo la necesidad de saberla. ¿Por qué la necesitas?.
Título: Re: ¿Cómo se puede hacer lo que aparece en el vídeo?
Publicado por: Strepto en 16 de Marzo de 2011, 17:45:17
Creo que el compañero fco1306 se refiere a como saber cuando el servo ha hecho tope, tanto a un lado como al otro, mientras este se esta girando. ¿Me equivoco?

Un saludo!
Título: Re: ¿Cómo se puede hacer lo que aparece en el vídeo?
Publicado por: fco1306 en 16 de Marzo de 2011, 18:28:52
Sí así es .Si veis el vídeo que pone octopus II no necesitan saber ni la pocion inicial ni las finales. La electrónica o programación las determinan.
Lo que hacemos para mover los desvíos con servos es ,primero ,sin poner el servo en su sitio, mandar un pulso con la posición central. A continuación ponemos el servo en el desvío elegido y determinados el ángulo que se necesita mover a la derecha e izquierda. Este ángulo se puede conseguir de varias maneras, grabado en el programa, mediante pulsadores ,mediantes potenciómetros conectados al adc, etc. El octopusII determina automáticamente este valor. Si ellos lo han conseguido, de alguna manera se podrá hacer.
Un saludo
Título: Re: ¿Cómo se puede hacer lo que aparece en el vídeo?
Publicado por: stk500 en 16 de Marzo de 2011, 18:33:54
pues claro que te hemos comprendido, lo que sucede que tu no nos comprende, te decimos que el pic o micro esta programado que reconoce cual su fin y cual es su final, y como se ve el video se puede ajustar el tope fino, si te lee tutorial sobre Servo aprendera mas cosas :P
Saludos
Título: Re: ¿Cómo se puede hacer lo que aparece en el vídeo?
Publicado por: dogflu66 en 17 de Marzo de 2011, 10:03:04
Voy a hacer una prueba en una entrenadora a ver como queda.
Título: Re: ¿Cómo se puede hacer lo que aparece en el vídeo?
Publicado por: fco1306 en 17 de Marzo de 2011, 18:32:06
Antes de preguntar he mirado bastante en otros sitios. Gracias a dogflu66, hice un pequeño programa con un 12f629 que mueve un servo ,desde una posición central, a un lado y a otro y se puede ajustar el recorrido con un par de pulsadores y guarda la posición para cuando se desconecta la alimentación.
Cuando mando el valor de un pulso al servo se mueve hasta esa posición, pero ¿si no puede llegar porque hay algo que se lo impide? ¿cómo se puede saber en que valor se ha detenido?, es lo que no veo cómo se puede hacer.

Título: Re: ¿Cómo se puede hacer lo que aparece en el vídeo?
Publicado por: dogflu66 en 17 de Marzo de 2011, 21:16:27
Ahora comprendo; los servos analógicos o de posición no indican la posición que tienen, todo se hace por estimación, se supone que un servo no debería tener nada por medio. De todas formas se puede saber cuando un servo quedo bloqueado mediante la monitorización de su consumo, si el consumo sobrepasa un valor determinado se considera bloqueado, en teoría esto se podría realizar intercalando una resistencia de bajo valor en serie con la alimentación y además utilizar un pic con modulo ADC para leer la caída de tensión en ella. Otra opción podría ser colocar un encoder en el servo que nos suministra pulsos mientras su mecanismo esta girando.
Título: Re: ¿Cómo se puede hacer lo que aparece en el vídeo?
Publicado por: Nocturno en 18 de Marzo de 2011, 02:26:00
No lo he probado nunca, pero quizás se podría abrir el servo y tomar una lectura de su potenciómetro interno con el ADC del PIC para saber dónde está situado.
Título: Re: ¿Cómo se puede hacer lo que aparece en el vídeo?
Publicado por: fco1306 en 18 de Marzo de 2011, 18:30:02
Bueno, menos mal que al final me hice entender.
Según me han comentado el octopus determina cuando debe  pararse. Cuando pega contra una vía y no puede seguir moviéndose, se para y gira hacia el otro lado. Al servo no le hay que añadirle nada. Sólo enchufar y listo. Por lo poco que he encontrado en la red parece que se consigue midiendo el consumo. Encontré una página de modelismo que hablaban de poner 4 resistencias de 1 omnio 1/4 w en paralelo para obtener 1 de 0.25 y 1w. Decían que había que  conectar una entrada al adc y la otra a vref pero no aparecía ni esquema ni nada más. ¿Sabéis de algún sitio a donde pueda dirigirme?.
Un saludo
Título: Re: ¿Cómo se puede hacer lo que aparece en el vídeo?
Publicado por: dogflu66 en 18 de Marzo de 2011, 23:55:13
En realidad no necesitas buscar mucho, solo tienes que establecer dos niveles de corriente, una cuando el servomotor esta trabajando normalmente y la otra cuando hace tope. Esto puedes medirlo con un amperímetro. Una vez que tienes estos dos valores solo tienes que aplicar la ley de Ohm.
Ejemplo:
1º) para un consumo de 250mAh, tendrás en el extremo de la resistencia V= 0.250*0.25=62.5mV
2º) para servo parado >500mAh, “ V= 0.5*0.25=125mV

Paso seguido tomamos el camino más simple y calculamos la resolución del ADC suponiendo que Vref = 5v. Y utilizaremos la máxima resolución del módulo, 10bit:
RD= 5000mV/1024puntos adc=4.8mV, por lo que el rango dinámico de trabajo del adc permite trabajar para las lecturas anteriores, porque la resolución mínima del adc es de 4.8mV que es mucho menor que la menor de las lecturas necesarias 62.5mV.

La conexión es simple, negativo del servo a extremo de la resistencia y el otro extremo de la resistencia a masa del circuito. Lo que es un poco más complejo es la conexión de la entrada del pic, hay que poner un condensador de 10nF entre la entrada del pic y masa y, otro en paralelo de unos 3.3uF de tántalo, luego todo esto va conectado al negativo del servo a través de una resistencia de unos 2k2.

La lectura del articulo de este enlace puede que te ayude algo más a comprender lo anterior expuesto:

http://www.pickey.es/uso_practico_del_pic12f675_v.html
Título: Re: ¿Cómo se puede hacer lo que aparece en el vídeo?
Publicado por: dogflu66 en 19 de Marzo de 2011, 00:06:48
No lo he probado nunca, pero quizás se podría abrir el servo y tomar una lectura de su potenciómetro interno con el ADC del PIC para saber dónde está situado.

Lo que expone Manolo es interesante, pero hay que tocar el servo internamente.
Título: Re: ¿Cómo se puede hacer lo que aparece en el vídeo?
Publicado por: Nocturno en 19 de Marzo de 2011, 02:31:44
Claro, es que no es lo mismo "saber dónde está el servo en cada momento" que "saber si ha chocado".
Para lo último bastará con medir el consumo.
Para lo primero hay que buscar retroalimentación de algún tipo, un encoder, un potenciómetro, ...
Título: Re: ¿Cómo se puede hacer lo que aparece en el vídeo?
Publicado por: fco1306 en 20 de Marzo de 2011, 16:52:13
Muchas gracias a todos.
Intentaré hacer algo, a ver que sale.
Título: Re: ¿Cómo se puede hacer lo que aparece en el vídeo?
Publicado por: AKENAFAB en 20 de Marzo de 2011, 19:12:10
Con un servo digital si podrías saber donde se encuentra dentro de la trayectoria , tambien te manda el consumo , etc...Ya que se puede establecer una comunicación bidirecional.

Son mucho más caros pero están buenos para experimentar.
Título: Re: ¿Cómo se puede hacer lo que aparece en el vídeo?
Publicado por: fco1306 en 21 de Marzo de 2011, 11:27:35
De los que tengo son de este tipo

http://cgi.ebay.es/4-X-Micro-9g-Mini-Servo-Futaba-Hitec-HS-55-GWS-walkera-/170609638590?pt=Radio_Control_Parts_Accessories&hash=item27b9207cbe

Aparte del potenciómetro traen un micro. No sé si serán digitales. Por el precio supongo que nó. ¿Cómo se puede saber si son digitales o nó? ya que he encontrado otros del mismo tipo que pone que son digitales, más o menos al mismo precio.
¿Cómo se puede hacer lo que dices? Porque como puedes ver , me habían dejado claro que no era posible.
Un saludo

Título: Re: ¿Cómo se puede hacer lo que aparece en el vídeo?
Publicado por: dogflu66 en 21 de Marzo de 2011, 16:05:29
De los que tengo son de este tipo

http://cgi.ebay.es/4-X-Micro-9g-Mini-Servo-Futaba-Hitec-HS-55-GWS-walkera-/170609638590?pt=Radio_Control_Parts_Accessories&hash=item27b9207cbe

Aparte del potenciómetro traen un micro. No sé si serán digitales. Por el precio supongo que nó. ¿Cómo se puede saber si son digitales o nó? ya que he encontrado otros del mismo tipo que pone que son digitales, más o menos al mismo precio.
¿Cómo se puede hacer lo que dices? Porque como puedes ver , me habían dejado claro que no era posible.
Un saludo




Un tema son servos analógicos o de RC y otro tema totalmente distinto es hablar de servos digitales. Si hablamos de servos digitales todo lo expuesto no sirve para nada ya que su funcionamiento es distinto.
Título: Re: ¿Cómo se puede hacer lo que aparece en el vídeo?
Publicado por: fco1306 en 21 de Marzo de 2011, 17:54:15
Pensé que igual daba analógico o digital ya que en lo que he mirado de programación no he encontrado nada del control de servos digitales. Supongo que el que aparece en el vídeo de octopus es analógico y los que tengo también.Buscaré algo de información sobre servos digitales.
Título: Re: ¿Cómo se puede hacer lo que aparece en el vídeo?
Publicado por: fco1306 en 12 de Abril de 2011, 17:32:41
dogflu66 ¿es así como dices de conectar el micro al servo?
Supongo que no será así.
Un saludo
Título: Re: ¿Cómo se puede hacer lo que aparece en el vídeo?
Publicado por: dogflu66 en 12 de Abril de 2011, 21:37:27
Si, eso es.
Título: Re: ¿Cómo se puede hacer lo que aparece en el vídeo?
Publicado por: Noelillo en 18 de Julio de 2011, 12:19:26
Código: [Seleccionar]
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : Miguel Noe Garcia Perez                           *
'*  Notice  : Copyright (c) 2010 Iberica 2000                   *
'*          : All Rights Reserved                               *
'*  Date    : 03/09/2010                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
 ' Control a servo motor attached to pin 3 of PORTA
 DEVICE 16f876          ' We'll use the new PICmicro
 
 
                                       
Device = 16F876
    XTAL = 4
        LCD_TYPE = 0
        LCD_LINES = 4
        LCD_DTPIN = PORTB.4
        LCD_RSPIN = PORTB.3
        LCD_ENPIN = PORTB.2
        LCD_INTERFACE = 4
 
 
 DIM Grados as dWORD        ' Servo Position
 Dim Punto as word
 DIM Pos as WORD        ' Servo Position
 Dim i as word
 dim Velocidad as word
 
 SYMBOL Pin = PORTA.5   ' Alias the servo pin
 
 ALL_DIGITAL = ON       ' PORTA to digital
 CLS                    ' Clear the LCD
 Pos = 400             ' Centre the servo
 PORTA = 0              ' PORTA lines low to read buttons
 TRISA = %00000111      ' Enable the button pins as inputs
 for i = 0 to 15
  pos = 400
  SERVO Pin , Pos
  delayms 5
next   
  'Check any button pressed to move servo
Main:
PRINT AT 1 , 1 , "Position=" , Dec Pos , " "
DelayMS 500

'for i = 10 to 0 step -1
' print at 2,2,"Tiempo: ", dec2 i
' delayms 1000
' next
' IF PORTA.0 = 0 AND Pos < 3000 Then  pos = pos +2 'inc Pos  ' Move servo left 
' IF PORTA.1 = 0 Then Pos = 1500             ' Centre servo
' IF PORTA.2 = 0 AND Pos > 0 Then   pos = pos -2 ' dec Pos     ' Move servo right
 
 ' Regulacion servo futaba S 3001





 Velocidad =1
i=400
grados = 0
inicio:
 punto = 1
 'for velocidad = 10 to 30
  for pos = 400 to 2430 step 10
     
     Servo pin, pos
     Delayms 5
     Grados = punto/11
      gosub pinta
      punto = punto +1
      'inc velocidad
     'DelayMS 500
  next
'next
  'for velocidad = 1 to 30
   for pos = 2430 to 400 step -10
     
     Servo pin, pos
     Delayms 5
     Grados = punto/11
      gosub pinta2
      punto = punto -1
      'dec velocidad
     'DelayMS 500
  next
'next 
goto inicio
 
 'if pos <= 400 then pos = 2430:Gosub Baja
 'if pos >= 2430 then pos = 400:gosub Sube
 'delayms 500
 
 GOTO Main 
 
 
 

 Sube:
 
 DELAYMS 5             ' Servo update rate
 PRINT AT 1 , 1 , "Position=" , Dec Pos , " "
 pos = pos +1
 SERVO Pin , Pos
 return
 
 Baja:
 
 DELAYMS 5             ' Servo update rate
 PRINT AT 1 , 1 , "Position=" , Dec Pos , " "
 pos = pos -1
 SERVO Pin , Pos
 return
 
 Pinta:
   PRINT AT 1 , 1 ,"Posicion: " , Dec4 Pos , " "
   print at 2 , 1 ,"Grados:    ", Dec3 Grados,223
 return
     
Pinta2:
   PRINT AT 1 , 1 ,"Posicion: " , Dec4 Pos , "2for"
   print at 2 , 1 ,"Grados:    ", Dec3 Grados,223
 return