Ascensor para casa de muñecas

Si vas a usar un servo, ¿ porque uno de 360º ?, usa uno normal con polea, 0º primer piso 60º segundo-------180º el ultimo.

Pues la prueba ha resultado fallida. Seguramente lo habré hecho mal, y por si acaso pregunto: El programa que indicas es tal cual como lo tengo que aplicar, o el que indicas hay que complementarlo con el que figura en el tutorial que señalas?.
Muchas gracias.

Muchas gracias por todo, lo que si te puedo asegurar es que tienes razón cuando dices que algunas personas mayores no sabemos manejarnos en todo éste tinglado, a mi personalmente me sobrepasa, y eso que intento estar más o menos al corriente, pero son palabras y conceptos nuevos, y encima en inglés que hay que memorizar................,

El tutorial es para que vallas entendiendo algo de los motores paso a paso. El código que te di en el post #34 funciona correctamente si tocarle nada con el esquema que pusiste en el post #31. Revisa cableado y conexiones porque lo he probado físicamente y funciona a la perfección.

Ok. Lo volveré ha revisar, es lo que había hecho pero por si acaso he preferido preguntar. Gracias.

He cambiado y revisado las conexiones y sigue sin funcionar. Mañana cambiaré el motor y el controlador, se encienden las luces del controlador al pulsar piso 1, pero el motor no dice ni pio.

¿ Y no vibra al tocarlo ?

@cuantron tienes razón en que hay que tener en cuenta ciertas cosas. Lo que dependiendo de cómo se plantee el programa, algunas pueden ser solucionadas como “efecto secundario”.

Para detectar el piso en que se encuentra doy por hecho dos cosas: la primera, que el final de carrera detecta el ascensor cuando está en el sitio en que se ha de parar, ni antes ni después. Esto simplifica mucho el que quede ubicado en la posición correcta, ya que basta con parar el motor en el mismo instante que se detecta el paso por el final de carrera. Si no fuera así, se nos complicaría un poco la cosa. La segunda cosa que doy por hecho es que el ascensor no será detectado por ningún final de carrera siempre que el ascensor no esté situado correctamente en uno de los pisos. Esto sólo es un verdadero problema cuando se enciende el Arduino ya que, en principio, si el ascensor no está siendo detectado por ningún final de carrera no sabremos dónde se encuentra. Si en algún momento detectamos el ascensor en alguno de los pisos, a partir de entonces cuando movemos el ascensor, podemos asumir que el ascensor está en algún punto entre el piso anterior y el siguiente. Aunque en realidad, para desplazarnos de un piso a otro, sólo necesitamos saber en qué piso estábamos inicialmente y cuándo ha llegado al piso de destino. Los pisos intermedios, en principio, no nos importa. Otra cosa es que queramos, por tema de seguridad, controlar que se detecta que pasa por los pisos intermedios (si se “salta” algún piso, es que tal vez falla el final de carrera de ese piso) o que no transcurre más tiempo del debido en ir de un piso a otro (posible fallo de final de carrera, bloqueo del ascensor, rotura de la transmisión del movimiento del motor al ascensor, fallo del motor. Lo que está claro es que sería una anomalía el que tardase demasiado en detectar el paso de un piso a otro). Existe pues la posibilidad de detectar ciertos fallos y en tal caso parar el motor, indicar por el puerto serie lo que se ha detectado y dejar el sistema completamente detenido. La detección, si bien es algo deseable, no es imprescindible. Lo que sí que es necesario es saber qué hacer cuando se enciende el Arduino y no se tiene información de qué piso está la cabina. En este caso, yo movería el ascensor hacia abajo si piden ir a un piso de la mitad inferior y hacia arriba si piden ir a un piso de la mitad superior (el piso de en medio, en el caso de ser impar el número de pisos, es indiferente si subir o si bajar). En este caso sí que habría que tener en cuenta cuál es el primer piso al que llega la cabina, porque puede ser que lo mandemos a subir y tenga que bajar. En el caso de ir en el sentido equivocado, habría que decidir si parar el ascensor (sabiendo ya en qué piso está) o si simplemente cambiamos de sentido y continuamos hasta llegar al piso deseado.

En este caso en concreto, creo que evitar que el usuario pulse botones a lo loco es algo relativamente sencillo, si para controlar el ascensor se utiliza una máquina de estados. Primer botón que se detecta pulsado, sea el que sea, se le hace caso y listo, ignorando los demás hasta que el ascensor llegue a su destino. Cuando el ascensor se encuentra detenido, la máquina de estado estará esperando a que se pulse cualquier botón. Una vez se pulse un botón, la máquina de estados pasa al estado «ascensor moviéndose» y no hará caso a ningún botón. Insisto, en este caso que es un «modelo sencillo» en donde no vamos a memorizar que se ha pulsado más de un botón para que haga diferentes paradas. Aún así, tampoco es difícil recordar todos los botones que se han pulsado e ir haciendo las diferentes paradas. Ya que con una máquina de estados es fácil controlar si está parado, subiendo o bajando e ir parando un tiempo en cada piso invocado, según llega a él y cambiando de sentido si aún le quedan pisos por recorrer en sentido contrario. Pero creo que eso tendría más sentido de implementar si tenemos luces que nos indican qué botones han sido pulsados y están aún pendientes de «atender». Pero insisto, me parece que en este caso no tiene sentido (aunque no lo descarto definitivamente).

Hacer el programa que controle el ascensor no ha de ser muy complicado ya veo que más de uno está dispuesto a ayudar y retocar el programa para llevarlo a término. La complicación la veo en la parte mecánica y de conexionado de los elementos porque es más difícil ver qué es lo que se está haciendo y dónde puede estar el problema o solución. Ahí dependemos de la habilidad y del material de que dispone @1952jose. Por esto último, el material de que dispone, es por lo que le he propuesto usar el motor de corriente contínua de 12 voltios que @1952jose dice tener ya montado. Que poco tiene que ver con un motor paso a paso y menos aún con un servo de 360 grados. Descarto un servo normal porque mecánicamente no creo que sea lo más eficiente y práctico, aunque desconozco la altura total que se ha de desplazar el ascensor.

Lo cierto es que creo que lo ideal sería poder usar el motor paso a paso y que el montaje tuviera la característica de que no se perdiera ningún paso. Porque si fuera así, se podría hacer con un único final de carrera en uno de los extremos de su movimiento. Al encender el Arduino, la primera vez que se pulse uno de los botones, el ascensor se desplazaría hacia el lado del final de carrera y ese sería «el cero», de tal forma que ya sabemos dónde está el ascensor. Habiendo calculado en su momento el número de pasos necesarios para llegar a cada uno de los pisos, ya sabemos cuántos pasos ha de dar en un sentido u otro para ir al piso deseado. Y siempre que no pierda ningún paso, no necesitaremos finales de carreras en ningún otro lugar. Además que siempre se puede volver a poner a «cero» cada vez que se desplace al piso en donde está el único final de carrera.

Por cierto, @1952jose, una curiosidad que tengo: ¿cuáles son las dimensiones del ascensor?

Por último, @1952jose, ten en cuenta que dependiendo del tipo de motor que se use, el conexionado es diferente y algunas partes del programa también son diferentes. Mi propuesta de programa era para el motor de corriente continua de 12 voltios. Que lleva un conexionado de puente en H. Si no tienes claro de qué se trata, busca en internet o pregunta.

Quedo a la espera de ver si te funciona el motor de 12 voltios con mi programa u otro cualquiera o si te funciona el motor paso a paso con cualquier programa con el que logres hacerlo rodar. En principio no importa cual es el camino por el que se vaya, pero sí que importa saber qué camino vamos a seguir (eso no quita que a mitad de trayecto se cambie de criterio. Pero, como he dicho, los programas varían un poco si se trata de uno y otro tipo de motor).

Si, la altura total de desplazamiento del ascensor es el problema y el tamaño de la maqueta para instalar el tambor que iría unido al servo normal.
En cuanto a eficiente y practico pienso que seria lo mejor, (si es posible), incluso se ahorrarían los contactos de fin de carrera de cada piso, simplificando enormemente el codigo, bastaria con 4 "if" de los botones y si se ha pulsado alguno un "servo.write()" al piso correspondiente, 0, 60, 120 y 180.

@1952jose Mira si esto cabe en tu casa de muñecas, creo que no, seria mucha suerte.

No, ni se inmuta. Al pulsar el piso 1 ó 2, se encienden los 4 leds del controlador y un pilotito naranja de la placa Arduino, pero el motor lo tengo en la mano por si vibra y nada de nada :face_with_raised_eyebrow: :laughing:

La altura de desplazamiento del ascensor es de 74 cm, aproximadamente, lo que me daría un diámetro de 47 cm.. En principio me parece inviable, salvo error en operaciones. De todas formas una vuelta de 74 cm, (2pi R), entonces el diámetro sería 74 : 3,14 = 23,56. Sigue siendo grande. Me tengo que marchar, saludos.

Si demasiado grande. Revisa cuidadosamente el cableado porque vuelto a probarlo y me funciona correctamente:

Pregunta: El programa que me enviaste es el que hay que utilizar para probar el motor, no??
Porque no habrá que incluirlo dentro del que yo envié, y es que no me he enterado de nada!!

Si, tal como esta, el del post #34, sin tocar ni añadir nada.

Perdona, se me había olvidado indicar las dimensiones del ascensor: 85 x 70 x 165 mm. y el recorrido total del ascensor es de 740 mm.
De momento sigo con el motor paso a paso con el que empecé, si no funciona pues a por el de 12 v. , para ello tendría que adquirir el controlador, así que ya veremos.
Gracias por todo.

Si, es lo que he hecho. Las conexiones las he repasado, y he puesto motor y controlador nuevos. Voy a repasar el programa que aunque me da bien la verificación, igual me he confundido en alguna línea.

Por fin!!!, El motor gira en un sentido cuando pulso piso 1, y en el sentido contrario cuando pulso el 2.
Se encienden los 4 leds mientras estoy pulsando y al dejar de pulsar se quedan encendidas 2 leds, pero no siempre es igual., pero el motor gira.

Creí que ya tendrías el controlador para el motor de 12 voltios y que incluso lo tenías instalado en el ascensor. Así que mal entendido por mi parte. Ya veo que has logrado que funcione el motor paso a paso. Así que el primer paso ya está completado, el motor se mueve.

¿Podrías confirmar qué programa y qué esquema es el que has utilizado para que te funcione? ¿E indicar si el movimiento del motor es de subida o de bajada al pulsar el botón 1?

El programa de prueba que mando "gonpezzi", en el post #34.
Pulsando piso 1- gira en el sentido horario, y pulsando 2, antihorario