Índice general Foros Digital, Electricidad e Informática Controlar servos para desvios con pulsador y Arduino

Controlar servos para desvios con pulsador y Arduino

Moderador: 241-2001



Desconectado
Mensajes: 43
Registrado: 11 Feb 2014 09:47
segovia escribió:
haute escribió:
Si te fijas en el nuevo código que implanté creo que puse un 8 para slow, podrías poner creo que 15 o 16 para superslow creo que podría funcionar. Este numero es muy critico, no se puede poner cualquier numero, en teoría tiene que ser o el mismo numero que el numero de servos menos 1, o la mitad menos 1.
Lo que hace el código exactamente es ignorar un numero de veces que se mueva cualquier servo, pero esto tiene que ir en sincronía con las veces que le llega la orden a cada servo, por eso solo puede ser o el mismo numero o la mitad creo. Si se rompe esta regla algunos de los servos no actuaran, por eso te digo si puedes hacer la prueba con los 17.


No acabo de entender esto que dices y me gustaría hacerlo. Entiendo que cuando pones por ejemplo 8 el servo se mueve una vez de cada 8 veces que en teoría se debería mover, pero porque debe ser el numero de servos -1 o la mitad menos 1?. Podrías extenderte en este punto? Gracias


Realmente creo que cuando pongo ocho creo que realmente hace 9 pasadas, y cada pasada la hace para cada servo. La teoría dice que se podría usar cualquier número, pero la practica parece que no, seguro que es la dichosa librería SoftwareSerco.h Estuve probando a poner números diferentes y me pasaba que algunos servos no funcionaban y a veces es como si se parara el programa. Por eso te decía que probaras con mas servos, a ver si funciona con todos.
Por eso he decidido usar la librería Servo.h, que aunque solo puede manejar 12, va mas fina. 16 servos esta un poco al límite. Total un arduino vale 2€. Espero haberte ayudado.

Norber: Entonces es una fallo de programación lo del pin 8, ok. Puff, Encontrar el fallo, puff, es un codigo casi seudoassembler, jejeje

Respecto a las direcciones, a ver si puedes completar la tabla para tu sketch.

PIN        JMRI     RocRail(dir/port)     Multimouse
pin 8        1               
pin 9        2
pin 10       3
pin 11       4
pin 12       5
pin 13       6


como ejemplo te pongo unos pines del sketch de Bunza.

PIN        JMRI     RocRail(dir/port)     Multimouse
pin 3       40               0/40
pin 4       41               0/41
pin 5       42               0/42
pin 6       43               0/43
pin 7       44               0/44
pin 8       45               0/45


Lo que busco es la relación entre el address que le damos en los sketchs y su valor en el multimouse, si alguien usa el código de bunza u otro y usa el multimouse que lo diga.


A todos: Parece que hobbyking me la ha liado y no tienen en stock cable de 3 hilos, (en la pagina estaba en stock, vaya caradura), bueno despues del chasco quería preguntaros si conocéis alguna web española o europea (las chinas ya se, pero me corre algo de prisa, no puedo esperar 15o 20 días), donde tenga material de servos, cable para servos, conectores etc... y que tenga precios razonables. Si a alguno le sobra cable o servos, también se lo compro, jeje Gracias.


Desconectado
Mensajes: 46
Registrado: 15 Jul 2013 00:41

Haute, puedes usar cualquier cable para los servos (dentro de lo razonable) yo si he tenido que alargar alguno, que lo he tenido que hacer, he usado cable normal, sera de 0,20 o así. es una manguera con 4 o más cables NO rígidos. Normalmente lo corto a un poco menos de la mitad por la parte del conector y luego lo sueldo y le pongo una funda de termoretractil y hasta ahora ni un fallo. Y en el caso de que sea un cruce como comentábamos más atrás le pongo unas fichas, eso si con todas las puntas de los cables soldados. Que ya si lo quieres hacer "cool" y comprar cable prolongador ahí no me meto, pero esta solución es bastante más barata y rápida.

Si te fijas en S3 veras lo que te digo de la ficha y como llegan cables de la otra parte del módulo.

Imagen

Saludos!!!
Maqueta modular http://lamaquetade.infotronikblog.com/
Electrónica, digital y cacharreo http://www.infotronikblog.com/


Desconectado
Mensajes: 43
Registrado: 11 Feb 2014 09:47
Peyu: Si ya se que puedo usar cualquier cable, pero era para tenerlo mas ordenado y no andar desmontando cables, quitando fundas, trenzando etc...
Me ha encantado el soporte de los servos, jejej a grandes problemas pequeñas y simples soluciones.


Desconectado
Mensajes: 46
Registrado: 15 Jul 2013 00:41

Haute, creo que la palabra que buscas es cutre :lol: :lol: :lol: es que no encontré unos soportes que me gustaran para los servos y así se quedo chapo. Lo que estoy pensando que no me gusta lo que hace es lo del muelle en los desvíos, esta feo el efecto que hace y más cuando buscas que vayan poco a poco, pero bueno ya se lo quitare. Ahora mismo tengo otros problemillas con la maqueta a nivel decorado. Por que esto del arduino por el momento creo que esta ya "superado". Siempre se puede mejorar off curse, pero por el momento creo que esta bastante bien. Ahora lo que quiero es hacer una estación oculta que con esto de los módulos esta joio, pero esto ya sería otro hilo.
De todas maneras estoy atento a este hilo, que es super interesante. Voy a subir un par de fotos de la maqueta en su sección del foro correspondiente.

http://www.forotrenes.com/foro/viewtopic.php?f=6&t=68555 Esta es mi maqueta
Saludos!!!
Maqueta modular http://lamaquetade.infotronikblog.com/
Electrónica, digital y cacharreo http://www.infotronikblog.com/


Desconectado
Mensajes: 10
Registrado: 25 Jul 2012 14:45
Buenas noches a todos.

He leido el tema, veo que es para controlar servos, en mi caso quiero controlar los desvios electricos.
No se como conectar los tres cables que traen dichos desvios, ni que necesito de componentes.
Creo que a nivel de programa es el mismo, o ¿tendria que modificar?

Perdon por ser pesado.

Gracias.


Desconectado
Mensajes: 761
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
He revisado el código que ofrecí hace unos días. El algoritmo que hemos desarrollado es tan majo que puede con 16 servos sin temblequeos y va suave. O eso me parece a mi.

Con esta nueva versión:

- Se pueden conectar 16 servos, usando las salidas 3 a A5 inclusives del Arduino
- Cualquiera de dichas salidas puede controlar tanto servos como accesorios on/off
- Funcionan todas (corregido error de programa) con suavidad

Tengo pendiente:

- Mejorar la asignación de direcciones
- Guardar en memoria permanente la posición en que se dejaron al apagar (para que no 'salten' un poquito la primera vez que se usan)

Probadlo y contad vuestras impresiones por favor. Gracias.

/* Arduino Nano Pro as
    - DCC accessory decoder
    - (x16) Servo or ON/OFF accessory controller
 Code by German Trinidad and Norber, January 2016

 VERSION PARA PRUEBAS
 
 Freely distributable for private, non commercial, use.
 
 Connections for DCC (adapted through 6N137 fast optocoupler):
 DCC pin 2  to  ARD pin DCC_INT
 
 Connections for accessories or servos:
 Item 1  to  ARD pin 3
 ...          ...
 Item 16  to  ARD pin A5
 */

#define DIREC1   129          // Direccion primer grupo servos:  129 son Multimaus 0005, 0006, 0007, 0008
#define DIREC2   130          // Direccion segundo grupo servos: 130               0009, 0010, 0011, 0012
#define DIREC3   131          // Direccion tercer grupo servos:  131               0013, 0014, 0015, 0016
#define DIREC4   132          // Direccion cuarto grupo servos:  132               0017, 0018, 0019, 0020

#define TICKS    215          // Prescaler 8 -> pulso de Timer cada 0.5 µs -> 200 ticks son 100 µs
#define VEL_SER  5            // Lentitud del movimiento de los servos (entre 3 y 8)
#define INCR_SV  50           // Paso de servo (no cambiar)
#define DESVI    1500         // Posición desviada (cambiar de 50 en 50)
#define RECTO    4000         // Posición recta (cambiar de 50 en 50)
#define SLOTuS   RECTO+100    // Frecuencia de ajuste de servos

#define DCC_INT   2
#define SI        0            // Para el preámbulo, la primera vez de la interrupción
#define NO        1

volatile byte buf_dcc[6];      // Buffer del último comando recibido
volatile boolean comandoRecibido = false;
volatile byte servoAct = 0;
volatile int contador = 0;

struct Servos {
  byte    pinServo;
  boolean esServo;
  int     posAhora;
  int     posObjetivo;
};

Servos miServo[] = { {0,0,0,0},   // Cuatro grupos de servos / accesorios
  { 3, true, RECTO, RECTO}, { 4, true, RECTO, RECTO}, { 5, true, RECTO, RECTO}, { 6, true, RECTO, RECTO},
  { 7, true, RECTO, RECTO}, { 8, true, RECTO, RECTO}, { 9, true, RECTO, RECTO}, {10, true, RECTO, RECTO},
  {11, true, RECTO, RECTO}, {12, true, RECTO, RECTO}, {13, true, RECTO, RECTO}, {14, true, RECTO, RECTO},
  {15, true, RECTO, RECTO}, {16, true, RECTO, RECTO}, {17, true, RECTO, RECTO}, {18, true, RECTO, RECTO}
};

void setup() {
  pinMode(DCC_INT, INPUT);
  for (int i = 3; i < 20; i++) {
    pinMode(i, OUTPUT);
  }
  attachInterrupt(0, dcc_int, CHANGE);       // pin2 = DCC      externalInterrupt 0
  cli();
  TCCR0A = 0;
  TCCR0B = 0;
  TCCR0B |= (1 << CS01);                     // Set CS01 bit for 8 prescaler (0.5 µs) on Timer0 - DCC
  TCCR1A = 0;
  TCCR1B = 0;
  TCCR1A |= (1 << WGM11);                    // Turn on Fast PWM mode 
  TCCR1B |= (1 << WGM13)|(1 << WGM12);       // Turn on Fast PWM mode
  TCCR1B |= (1 << CS11);                     // Set CS11 bit for 8 prescaler (0.5 µs) on Timer1 - Servos
  ICR1 = SLOTuS;                             // Set PWM fixed frequency
  TIMSK1 = 0;
  TIMSK1 |= (1 << OCIE1A)|(1<<TOIE1);        // Enable Timer1 interrupts for Compare Match A & Overflow mode 
  sei();                                     // Activar interrupciones
}

void loop() {
  static byte servo, estado;
  if (comandoRecibido == true) {
    switch (buf_dcc[0]) {                    // Leo la direccion a la que se dirige el comando recibido
    case DIREC1:
      servo = 1;
      break;
    case DIREC2:
      servo = 5;
      break;
    case DIREC3:
      servo = 9;
      break;
    case DIREC4:
      servo = 13;
      break;     
    default:
      servo = 0;
      break;
    }
    if (servo) {                                 // Si era una direccion de las mias, modifico posObjetivo
      servo = servo  + ((buf_dcc[1] & 0x06) >> 1);
      estado = buf_dcc[1] & 0x01;
      if (estado) miServo[servo].posObjetivo = RECTO;
      else miServo[servo].posObjetivo = DESVI;
      if (miServo[servo].esServo == false) digitalWrite(miServo[servo].pinServo, estado);
    }
    comandoRecibido = false;
  }
}

void dcc_int() {                               // ISR(INT0_vect) External interrupt routine for signal on pin2
  static int tmp_pulso;
  static byte bit_dcc;
  static byte preamb;
  static byte aux_dcc, x_or, idx, num_bits;
  if (PIND & (0x04)) TCNT0 = 0;                                // pin2 esta HIGH
  else  {                                                      // cuando pasa a nivel bajo
    tmp_pulso = TCNT0;                                         // lee los microsegundos (byte bajo)
    if (tmp_pulso > TICKS) bit_dcc = 0;                        // duración mayor de XX us => cero
    else bit_dcc = 1;                                          // y menor uno   
    if (preamb == SI) {                                        // preámbulo
      if (bit_dcc) {                                           // otro '1'
        if (num_bits) num_bits--;
      }
      else {
        if (!num_bits) {                                       // el '0' de inicio de datos
          preamb = NO;
          num_bits = 9;
          x_or = 0;
          idx = 0;
        }
        else num_bits = 10;                                    // no se cumple la trama, vuelta a inicio
      }
    }
    else {                                                     // recepción de los bytes
      if (--num_bits) aux_dcc = aux_dcc * 2 + bit_dcc;
      else {                                                   // el separador de bytes
        if (!bit_dcc) {                                        // cero, a por el siguiente byte
          buf_dcc [idx++] = aux_dcc;
          x_or ^= aux_dcc;                                     // actualiza la x_or
          num_bits = 9;
        }
        else {                                                 // uno, fin del paquete
          preamb = SI;
          num_bits = 10;                                       // vuelta a empezar
          if (x_or == aux_dcc) comandoRecibido = true;         // paquete correcto
        }
      }
    }
  }
}

ISR(TIMER1_OVF_vect) {                                        // Timer1 Overflow interrupt for servos each 3300 µS
 static int sumar, dif;
 if (contador == VEL_SER) {
   sumar = 0;
   dif = miServo[servoAct].posAhora - miServo[servoAct].posObjetivo;
   if (dif < 0) sumar = INCR_SV;
   else if (dif > 0) sumar = -INCR_SV;
   if (sumar) {
     if (miServo[servoAct].esServo) digitalWrite(miServo[servoAct].pinServo, HIGH);
     miServo[servoAct].posAhora += sumar;
     OCR1A = miServo[servoAct].posAhora;
   }
 }
 else contador++;
}

ISR(TIMER1_COMPA_vect) {                                     // Timer1 Match Compare A interrupt for servos
  if (contador == VEL_SER) {
    if (miServo[servoAct].esServo) digitalWrite(miServo[servoAct].pinServo, LOW);
    if (++servoAct > 16) {
      servoAct = 0;
      contador = 0;
    }
  }
}
Saludos

[Multimaus + GenLi-S88 + +z21f. + RocRail (MacOsX)]
H0 Renfe, sin catenaria


Desconectado
Mensajes: 43
Registrado: 11 Feb 2014 09:47
Norber: no me olvido, estoy haciendo pruebas a la vez que diseño pcb, etc....

En principio lo he probado por encima y en velocidad lenta que es el numero 8, el movimiento del servo va como a trompicones de poco en poco, no se si 17 servos será demasiado.
Me preguntaba como se configura la posición start y stop de cada servo, solo veo una general. Quizas aqui?
Servos miServo[] = { {0,0,0,0},   // Cuatro grupos de servos / accesorios
  { 3, true, RECTO, RECTO}, { 4, true, RECTO, RECTO}, { 5, true, RECTO, RECTO}, { 6, true, RECTO, RECTO},
  { 7, true, RECTO, RECTO}, { 8, true, RECTO, RECTO}, { 9, true, RECTO, RECTO}, {10, true, RECTO, RECTO},
  {11, true, RECTO, RECTO}, {12, true, RECTO, RECTO}, {13, true, RECTO, RECTO}, {14, true, RECTO, RECTO},
  {15, true, RECTO, RECTO}, {16, true, RECTO, RECTO}, {17, true, RECTO, RECTO}, {18, true, RECTO, RECTO}
};


El true es para indicar si es un servo o un dispositivo on/off.
Pero el recto recto, no sería mejor definir las dos posiciones aqui?.


Desconectado
Mensajes: 761
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
haute escribió:
no me olvido, estoy haciendo pruebas a la vez que diseño pcb, etc....

No te lo tomes como una obligación hombre! Haz lo que puedas. Yo tampoco tengo mucho rato para estas cosas. Pero te agradezco tu opinión.

harte escribió:
en velocidad lenta que es el numero 8, el movimiento del servo va como a trompicones de poco en poco, no se si 17 servos será demasiado
En teoría estamos ya fuera de norma pues al ser 16 servos los que hay que atender, a cada uno de dedicamos su 'ratito' cada 23 ms más o menos, que son más de 20 ms (aunque esto no parece importar). Pero la razón de ir a micro-saltitos en el '8' es que ya es una velocidad demasiado lenta y hay que ajustar otro parámetro además del '8'. Los míos los tengo al '4' (más rápidos) y me gustan así (y se ve que van suaves). Lo pruebo y veo cómo conseguir velocidades ultra lentas sin que se noten los saltitos.

[Nota: para que un servo parezca que va lento hay que obligarlo a ir a saltitos pequeñitos y poco frecuentes. Con el '8' van poco frecuentes, pero quizá no sean tan pequeñitos como debieran y se notan por eso].

haute escribió:
Me preguntaba como se configura la posición start y stop de cada servo, solo veo una general.

No, no es ahí. Pero si quieres esa función, se puede poner con facilidad. Un inicio y una parada distintos para cada servo. Oído cocina! ;)

haute escribió:
El true es para indicar si es un servo o un dispositivo on/off.
Pero el recto recto, no sería mejor definir las dos posiciones aqui?.

Sí a lo primero. Casi a lo segundo. Lo de RECTO, RECTO sirve para habilitar un sitio donde guardar la posición actual de cada servo en cada momento y para habilitar otro donde decirle al Arduino por qué posición empezar cuando se enciende (esto ya dije que lo mejoraré para que lo recuerde aunque se apague, y así no hay 'brinco' al usar por primera vez un servo que quedó apagado para el otro lado).

Sigue probando y gracias. Es muy importante la colaboración que estás prestando para acabar sacando una solución que merezca la pena.
Saludos

[Multimaus + GenLi-S88 + +z21f. + RocRail (MacOsX)]
H0 Renfe, sin catenaria


Desconectado
Mensajes: 43
Registrado: 11 Feb 2014 09:47
Necesito ayuda, me estoy volviendo loco y no consigo hacerlo funcionar.
Me ha dejado mi padre el Multimouse para probar la placa de arduino que he hecho.
El caso es que el codigo que uso es el de bunza. Addrees 40, Usando el Sprog 3, con el JMRI configurado el desvio como addres 40 funciona, en rocrail lo configuro como dir 0, port 40 y funciona.
El problema es que con multimouse no tengo narices a hacerlo funcionar. He probado 40, 36(4 dires menos) casi todos los numero hasta mas del 1xx y nada, igual hay algún modo de configurar algo en el multimouse que desconozco.

A ver si me podéis ayudar.

Update: Solucionado, era 4 dires mas, osea, si el address en el sketch de arduino es 40, en el multimouse es 44.

Update1: Lo que me pregunto ahora es si interfiere esto con las maquinas, ya que tengo configuradas 6 maquinas con valores del 4 al 10. O al ser un accesorio no tiene nada que ver?.
Y otra duda, en desvíos de bobina si en el dibujo del multimouse aparecía cambiado el dibujo respecto al desvío, con cambiar los cables de las bobinas se solucionaba, en el caso de los servos se podría solucionar girando por completo el servo bajo el tablero, pero si ya está instalado o no podemos por problema de espacio, ¿hay alguna manera de variar el sentido del dibujo del desvío en el multimouse?

Algunas fotos de la placa: No ha quedado nada fina, porque he usado la técnica de transfer y no parece muy buena, a ver si estos días ajusto la tecnica mediante insoladora que seguro va mejor.
Como podéis ver es a dos caras y varias vías, no he podido hacerlo a una.
Imagen
Imagen
Imagen
Imagen


Desconectado
Mensajes: 14
Registrado: 30 Jul 2013 21:25
Hola a todos, mi pregunta es para Peyu, aunque no soy muy experto en esto de los programas de arduino de una forma y de otra he conseguido y con suerte para mi que el programa de movimiento de desvios con pulsador en una placa de arduino UNO y con suerte para mi ha funcionado, ahora me falta para pasarlo a mi maqueta que se encienda el diodo cuando el cambio esté para la izquierda y otro cuando esté para la derecha.


Desconectado
Mensajes: 55
Registrado: 23 Nov 2008 09:46
Llevaba unos dias sin entrar, hoy entro y veo el pedazo de placa que te has montado haute. Felicidades.
Una pena que sea de dos caras. es complicado con medios caseros hacerlas bien

Un saludo


Desconectado
Mensajes: 46
Registrado: 15 Jul 2013 00:41

Ya ves Segovia aquí faltas un par de días y parece esto la NASA jajajaja, Ole haute por esa plaquita, muy currada si señor.
Bueno parece que el tema de los servos esta más o menos controlado. Ahora... y los desvios de bobina? por que en mi caso tengo 3 y no me gustaría tener que quitarlos, están en la parte del fondo y eso van a ser unas horitas.... yo había pensado en poner una salida como de accesorio y con un rele activar hacia un lado o hacia el otro (1abierto/0cerrado), pero por el momento tengo que dejarlo para dentro de un mesecillo o así que ahora tengo trabajo :). Aunque de todas formas os sigo de cerca eh :shock: jajajajjaja un saludo a todos y mucho animo con este magnifico trabajo!!!
Maqueta modular http://lamaquetade.infotronikblog.com/
Electrónica, digital y cacharreo http://www.infotronikblog.com/


Desconectado
Mensajes: 53
Registrado: 14 Dic 2015 17:19
En el código de Norber, si en vez de usar un multimaus se usa una lenz ¿como se pone la dirección de los decoders?
Tengo unos cuantos con el montaje de Paco servopoint, pero me parece que el arduino es bastante más cómodo que los pics, entre otras cosas porque lo programas conectándolo al usb y te olvidas del programador, además por el precio que cuesta un nano, no merece la pena liarse haciendo el pcb. Los próximos deco que haga serán con arduino, pero tengo una lenz.
La verdad que la facilidad ,comodidad y precio que tienen los arduinos supera bastante a los pics, por lo menos en los montajes que necesitamos para nuestras maquetas.
Una mala experiencia que he tenido con los servos es usando cables largos, ya que aparecen interferencias que hacen mover a los servos. También si se usa una mala fuente de alimentación. Por el precio no merece la pena complicarse haciéndose una. Lo mejor una fuente de ordenador. Además en la entrada de la fuente tengo añadido un filtro supresor de interferencias. Se supone que la fuente lo trae. Como la mía tenía unos cuantos años y no estaba seguro si lo llevaba, se lo añadí.
Un saludo


Desconectado
Mensajes: 761
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
fco1306 escribió:
En el código de Norber, si en vez de usar un multimaus se usa una lenz ¿como se pone la dirección de los decoders?


Supongo que la diferencia (si la hay) son, como siempre, cuatro números más o cuatro menos (sigo sin acordarme :lol: ).

Buena idea lo de la fuente de PC. Es el consejo de Orbahn y es lo que tengo yo también. Pero lo de las interferencias en cables largos de servos pues… Los servos son delicadísimos de gobernar y requieren una señal muy bien construida (microsegundos, etc). Todas las anomalías que yo he visto en servos colocados en maquetas venían de la mano de malos controladores. ¿Podrías informarnos algo más de tu experiencia con las interferencias? Muchas gracias.
Saludos

[Multimaus + GenLi-S88 + +z21f. + RocRail (MacOsX)]
H0 Renfe, sin catenaria


Desconectado
Mensajes: 53
Registrado: 14 Dic 2015 17:19
Sobre servos hablamos bastante en el foro ctms1, por ejemplo
http://ctms1.com/forum/viewtopic.php?t= ... ght=servos
Mi experiencia, tengo sobre 20 conectados a una central lenz y utilizo el servopoint de Paco Cañadas, pero con alimentación independiente de la central digital. Según la versión de Salus, creo. Los servos son comprados en ebay y de los más baratos.
Cuando comencé a usarlos conecté cinco a un transformador que tenía de flex de un set de iniciación. También conectaba la central a él. El resultado era que al conectar la alimentación, los servos comenzaban a moverse de un lado hacia otro, durante unos cuantos segundos y luego se detenían. Después de dar muchas vueltas, mirando el cableado, los decoders, etc, me di cuenta que era problema de poco amperaje de la fuente, sólo daba 1 A. Busqué esquemas y me hice una fuente de alimentación de un par de amperios con un transformador que tenía parado. El movimiento dejó de producirse.
Como me resulta engorroso programar los decoders debajo del tablero, pensé en pasarlos todos al panel de control. Entonces llevaba un cable de teléfono de tres hilos más masa desde el panel a cada uno de los servos. Algún cable medía sobre un metro o más de largo.
Me apareció un pequeño movimiento aleatorio en los servos. Para colmo unas veces se movía uno y otras veces otro. Vuelta a mirar el cableado, la fuente, etc.
Buscando información encontré en un foro de radiocontrol que los servos eran muy delicados en cuestión de interferencias. Casi al mismo tiempo me di cuenta que una de las fluorescentes que tengo en el cuarto de la maqueta, tenía el cebador estropeado y parpadeaba. Cada vez que parpadeaba los servos se movían. Tenía problemas de parásitos.
Desmonté todo, pasé los decoders otra vez bajo tablero y por casualidad encontré una página en la que usaban una fuente de ordenador, para no me acuerdo qué .
Tenía una de un viejo 386 y es la que ahora tengo funcionando. Además puse a la entrada de la fuente un supresor de interferencias porque comentaban que estas fuentes tan antiguas no lo traían de serie.
Además tengo alguna ferrita en el cable que lleva la señal dcc. Procuro poner el decoder lo más cerca del servo que pueda.
Salus llegó a medir el consumo de estos servos y parece que es bastante elevado para el tamaño que tienen, sobre todo cuando comienzan a moverse.
Después de mi experiencia aconsejo usar una fuente de ordenador para los decoders y otra fuente para dcc.
Los servos van a buscar la posición que tienen programada. Si por cualquier motivo no pueden llegar a ella , se va a oir un ruido, ya que intentan seguir moviéndose. Por eso es mejor usar un alambre que no sea muy grueso y pueda absorver el exceso de movimiento. Un clip no me parece adecuado. Lo mejor que me ha resultado es el cable de piano, creo que de 0.8mm es el que tengo. Me ha dado problemas usar el sistema de palanca (ya sé que todo el mundo lo usa). En mi caso me dió mejor resultado no usar palanca.
El sistema es parecido a http://mudgeeline.blogspot.com.es/2011_ ... chive.html
Además tengo un par de interruptores para el corazón del desvío y para señalización.
Hoy ya no tengo movimiento no deseado en los servos.
Bueno, espero que os sirva de ayuda.
Un saludo
Juan


Desconectado
Mensajes: 761
Ubicación: Salamanca
Registrado: 12 Ene 2012 14:44
Muy buena explicación!

Veo lo de las interferencias del cebador… No lo esperaba, aunque sí que se asemeja a los fenómenos de movimientos anómalos en aparatos de radiocontrol. Yo siempre creí que se trataba de interferencias en la receptora del RC, que ordenaba movimientos caóticos a los servos, no de interferencias sobre los mismos servos… Interesante detalle a tener muy en cuenta. Quizá haya que apantallar los cables de los servos cuando no haya más remedio que usarlos largos.

La cuestión de la potencia en la alimentación está clara, especialmente al arrancar muchos servos a la vez. Yo he tenido que ingeniármelas, aunque consigo usar como fuente el propio amplificador (booster) de la central. Pero lo ideal es la fuente de PC. Voy migrando poco a poco todos los servos hacia ella.

Gracias por el detalle del alambre cuerda piano 0.8 mm. Es un aspecto al que no se le suele dar importancia, pero he comprobado que sí la tiene.
Saludos

[Multimaus + GenLi-S88 + +z21f. + RocRail (MacOsX)]
H0 Renfe, sin catenaria


Desconectado
Mensajes: 43
Registrado: 11 Feb 2014 09:47
Gracias por la explicación, respecto a la cuerda de piano de 0,8, donde se puede comprar eso y barato claro.
Un saludo.


Desconectado
Mensajes: 53
Registrado: 14 Dic 2015 17:19
La cuerda de piano tuve la suerte de encontrarla en una ferretería de toda la vida.
Supongo que la vendan en comercios de instrumentos musicales. Y seguro que por internet. No me acuerdo lo que me costó, pero no fue cara. Además da para un montón de desvíos.
He visto que algunos comentais poner los servos minis en velocidad lenta. A velocidad muy lenta van a saltos, el precio, es el precio y en algo se notará. Para este tipo de movimiento lento hay que usar otro tipo de servo más caro. Además hay que pensar en donde se van a utilizar. En mi caso, que es una estación con un montón de desvíos, en las pruebas que hice, accionaba el desvío y llegaba la locomotora a él antes de que hubiera cambiado, ya que tenía puesto al servo un movimiento muy lento, casi a saltos, con el consiguiente corto. Tuve que subir la velocidad a los servos. Hay que tener en cuenta que los desvíos en h0 con el movimiento lento de los servos pueden tardar unos cuantos segundos en cambiar.
Bueno, espero que estos consejos os sirvar para no tener malas experiencias con estos chismes.
Un saludo


Desconectado
Mensajes: 46
Registrado: 15 Jul 2013 00:41

Buenas otra vez!!! ahora ando liado con trabajo y no puedo dedicarle todo el tiempo que me gustaría, pero he leído lo de las interferencias y ahí si puedo poner mi granito de arena. En mis comienzos con arduino hice un poco de todo, ejemplos con luces, pulsadores, LCD, etc... Pues bien cuando estaba haciendo un reloj, cada cierto tiempo, se iba la pantalla, funcionaba de 10 y de repente ZAS, unos caracteres raros raros, bueno solo lo hacia de vez en cuando y curiosamente solo en el trabajo... y un día ate cabos... LA CAFETERA!!! una cafetera eléctrica normal, pues cada vez que encendía y apagaba el termostato que mantiene el café caliente en la jarra. Así que tomad nota, nada de cafeteras cerca de arduino!!!! :lol: :lol: :lol: .

Bueno y ese es mi granito de arena, y Norber, te pillo la idea de los leds que van de más a menos para los semáforos http://www.forotrenes.com/foro/viewtopic.php?f=7&t=68675 jejejejeje. Y otra cosa, por lo de las resistencias de 2k2 que te han preguntado... si haces PWM para hacer variar la intensidad del led, puedes fijarle un tope más bajo no? es decir, le pones una resistencia de 330ohm y el duty de PWM a 127 por ejemplo. Vamos que es una idea, no se si te interesa tener los 255 pasos del PWM, pero si no, pues esta es una idea ;)

Un saludo a todos!!! y animos "cacharreadores"!!!!
Maqueta modular http://lamaquetade.infotronikblog.com/
Electrónica, digital y cacharreo http://www.infotronikblog.com/


Desconectado
Mensajes: 27
Registrado: 02 Ene 2016 23:53
Primero que nada comentaros que me hice el optoacoplador y funcina.
He probado el programa de PEYU (con el de NORBER a un no me atrevo) y me funciona perfectamente tanto con el
Multimaus como con la Intellibox II y en el ordenador con un demo de Wind dijipet aunque me surgen algunas dudas
que serán por mi ignorancia y falta de conocimiento .
En el programa dice:
Case ... // Pon la dirección que quieras dentro del rango de 0 a 255
Tanto en el Multimaus como en la Intellibox II hay 1024 direcciones de accesorios ¿con este programa se limita a 255?

Cargo el programa, abro el monitor serie y pulso en el Multimaus el accesorio 1 y me lee -3 y en la Intllibox pulsando el
accesorio 1 me lee 1.
Conecto 4 servos con sus 4 reles (para polarizar los cambios) .
Direcciones :
Case -3, Case -2, Case -1 y Case 0 en el Multimaus me funciona como accesorio 1, 2, 3 y 4
Case 1, Case 2, Case 3 y Case 4 en la Intellibox me funciona como accesorio 1,2,3 y 4
Funciona todo correctamente. ¿Lo abre hecho bien o sera la suerte del principiante?.

Saludos y muchísimas gracias a todos por vuestras aportaciones tan generosas.
Santiago
Saludos
Santiago

AnteriorSiguiente

Volver a Digital, Electricidad e Informática

Síguenos en Facebook Síguenos en Youtube Síguenos en Instagram Feed - Nuevos Temas
©2017   -   Información Legal