Que tipo de sensor necesito?

Muy buenas amigos.

Tras varias semanas probando mi arduino duemilanove con varios componentes, ha llegado la hora de desarrollar un proyecto real. Para este proyecto necesito detectar el movimiento de una pieza que está paralela a otra. Es decir, hay dos barras metálicas paralelas, separadas por unos pocos centímetros. Una está fija y la otra se mueve hacia la derecha o hacia la izquierda y tras cada movimiento siempre vuelve al mismo punto de partida. En esta imagen se puede ver el ejemplo.

El funcionamiento sería:

La pieza 1 siempre está fija. La pieza 2 hace movimientos a la derecha o a la izquierda hasta cualquiera de los dos topes y vuelve al punto central.

Mi pregunta es:

¿que tipo de sensor es el que tengo que buscar en el mercado para detectar dichos movimientos?

El trabajo de arduino será detectar los movimientos de la pieza movil e ir encendiendo determinados leds.

Supongo que necesitaré un sensor similar al que llevan los ratones para detectar el movimiento de la bola no?

Gracias por vuestra paciencia.

Espero documentar bien todo el proyecto e ir publicándolo para la comunidad.

Hola,

Si es movimiento en un solo eje, puedes usar un potenciómetro lineal.

¿Como es el tamaño de la pieza 2?

Igor R.

Otra opcion seria usar un sensor "Hall Effect"

use este imán High-strength 'rare earth' magnet : ID 9 : $2.50 : Adafruit Industries, Unique & fun DIY electronics and kits

conecta un imán a la pieza movil y el sensor en la pieza fija. cuando el iman pasa cerca al sensor, usted podra detectar su presencia.

de esta forma no tiene que modificar su aparato except por anadir el sensor e imán.

Buena suerte.

Andres

Igor_R:

¿Como es el tamaño de la pieza 2?

Igor R.

Hola Igor. Gracias por tu ayuda.

Se trata de una Motocicleta (Honda Shadow 600CC) y lo que quiero es que cada vez que se mueve la palanca de cambios en una u otra dirección, arduino sepa en qué marcha va (1ª, 2ª, 3ª, etc.)

Yo había pensado usar la barra unida a la palanca de cambios que es una barra cilíndrica de unos 30 ó 40 cms. de largo y como el dedo meñique de diámetro. Por eso pensaba en usar algún tipo de sensor óptico similar al que deben utilizar los ratones de bola.

Me problema es que desconozco por completo qué tipo de materiales tengo a mi disposición, aunque no dejo de investigar por la red.

Gracias de nuevo y un saludo.

A ver si hago alguna foto de las piezas y la cuelgo.

Saludos, Pakoff.

Reply #2 - Today at 18:07:24
Otra opcion seria usar un sensor "Hall Effect"
http://www.adafruit.com/index.php?main_page=product_info&cPath=35&products_id=15...

use este imán High-strength 'rare earth' magnet : ID 9 : $2.50 : Adafruit Industries, Unique & fun DIY electronics and kits

conecta un imán a la pieza movil y el sensor en la pieza fija. cuando el iman pasa cerca al sensor, usted podra detectar su presencia.

de esta forma no tiene que modificar su aparato except por anadir el sensor e imán.

Buena suerte.

Andres

Hola Andrés.

Muchas gracias por tu ayuda. Muy interesante... investigaré un poco.

Gracias de nuevo.

Saludos, Pakoff.

Humm.... Tu le das para arriba o para abajo, y gira el barrel , pero la palanca se queda en su sitio original... ¿no? En los cambios secuenciales se suele poner un potenciometro rotativo unido al barrel.

Otra cosa que se puede hacer es que con la velocidad y con las rpm, se sabe en que relación de marchas estas. Por lo que entrando estos dos canales al arduino, podrías sacarlo.

Humm.... Tu le das para arriba o para abajo, y gira el barrel , pero la palanca se queda en su sitio original... ¿no? En los cambios secuenciales se suele poner un potenciometro rotativo unido al barrel.

Efectivamente al hacer la foto he visto que hay que también hay una parte cilíndrica que rota y también vuelve a la posición original, aunque mi idea inicial era la de utilizar la barilla.

Aquí hay un par de fotos:

Quizás instalando un pequeño interruptor que detecte ambos sentidos en el barril señalado en azul?

Sobre lo de tener acceso a las RPM eso sería genial, pero ya tendría que recurrir a un taller, porque desde luego lo que no me atrevo es a desmontar nada del motor, je, je...

Gracias Igor por tu ayuda.

Pakoff.

Lo que me refiero, a que cuando le das a la palanca hacia arriba ó hacia abajo, vuelve a su sitio. No te da una información en absoluto en que marcha te encuentras. En las cajas de cambios secuenciales, cuando pones un sensor, es un poti rotativo en el barrel (barra selectora). Esté te indica en absoluto la posición en la que esta y por lo tanto la marcha. Pero claro, no vas a mecanizar la caja para sacar esto.... :smiley:

En una moto tiene que ser sencillo sacarle la señal de rpm y de velocidad. Normalmente son sensores tipo Hall ó inductivo. Esta señal puedes introducirla en las dos entradas de interrupción del arduino.

La V=(Radio_ruedaw_motor)/(nang)

donde:
W_motor=(PI*RPM)/30 en rad/s
V= velocidad
na=relación grupo final
ng=relación de la marcha

Por lo que si tienes V y RPM, ya sólo tienes que despeja la marcha en la que estas.

:wink:

Igor R.

Re: Que tipo de sensor necesito?
Reply #7 - Today at 09:12:32
Lo que me refiero, a que cuando le das a la palanca hacia arriba ó hacia abajo, vuelve a su sitio. No te da una información en absoluto en que marcha te encuentras.

Ok. Efectivamente no se en que marcha me encuentro. Sin embargo, se que cuando arranca está en Punto Muerto. Luego ya tengo un punto de partida correcto que es 0. Además, la moto tiene un piloto indicador verde N de Neutral (led o bombilla) que se ilumina cuando está en Punto Muerto, con lo que ya tengo un punto de referencia para corregir posibles errores de Arduino. Mi intención es colocar un sensor en cada punto al que llega la palanca de cambios (uno cuando se mueve hacia arriba y otro hacia abajo) para que arduino lo detecte y sume o reste una marcha. Es decir, que vaya llevando la cuenta. Es simple pero estoy seguro que si lo ajusto bien, funcionará.

En las cajas de cambios secuenciales, cuando pones un sensor, es un poti rotativo en el barrel (barra selectora). Esté te indica en absoluto la posición en la que esta y por lo tanto la marcha. Pero claro, no vas a mecanizar la caja para sacar esto....

En una moto tiene que ser sencillo sacarle la señal de rpm y de velocidad. Normalmente son sensores tipo Hall ó inductivo. Esta señal puedes introducirla en las dos entradas de interrupción del arduino.

La V=(Radio_ruedaw_motor)/(nang)

donde:
W_motor=(PI*RPM)/30 en rad/s
V= velocidad
na=relación grupo final
ng=relación de la marcha

Por lo que si tienes V y RPM, ya sólo tienes que despeja la marcha en la que estas.

Ok. Ya comprendo. El problema es que para obtener las RPM necesito acudir a un taller. Es posible que en un futuro lo haga, pero de momento me inclino por la opción más básica que es la de los sensores de movimiento de la palanca. Lo veo completamente asequible a mis conocimientos y como ya te digo, creo que puede funcionar bien.

También estoy pensando que posiblemente, algún tipo de interruptor, que ofrezca poca resistencia, como los que usan una palanquita metálica tipo lengueta, que podrían ser accionados por una leva o algo así.

Muchas gracias por tu interés Igor.

Pakoff.

Yo no me complicaría tanto. Usa los clásicos interruptores final de carrera, los hay muy pequeños y siempre puedes rescatar muchos desguazando equipos. Ajusta bien su posición para que salten más o menos con la mitad del desplazamiento de la palanca hacia cada lado, el resto del desplazamiento al final lo absorbe la lengueta propia del final de carrera sin dañar nada. Acuérdate de poner una rutina antirrebotes en el arduino, o verás como pasas de 1ª a 6ª en un toque... :slight_smile:

De todas maneras lo de detectar las revoluciones del motor no tiene que ser complicado. De hecho es fácil que simplemente tratando la misma tensión del +12v de la batería, con un filtro paso alto y posiblemente algo de amplificación, detectes los pulsos del alternador. Igual tienes que dividir por un valor pues frecuentemente el alternador se compone de varias bobinas, con lo que se generan varios pulsos con cada vuelta.
Suerte!

Eeeeso era lo que andaba buscando.

Un final de carrera o microrruptor como este:

Acuérdate de poner una rutina antirrebotes en el arduino, o verás como pasas de 1ª a 6ª en un toque...

Supongo que te refieres a que arduino detectará que la palanca está pulsada durante varios ciclos de la función loop no?

Es decir, la función loop comprobará contínuamente si se ha pulsado uno de los dos microrruptores, y esto lo hará por ejemplo 50 veces por segundo. Suponiendo que en un cambio de marcha la palanca se pulsara durante 0,5 segundos, arduino detectaría 25 veces seguidas la pulsación de un microrruptor. ¿Te refieres a eso con lo de "antirrebotes"?

Lo delas RPM, lo dejo para una segunda versión del proyecto :). De momento me conformo con que funcione la Versión 0.1, je, je...

Gracias Eduardo.

Pakoff.

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

http://www.ladyada.net/learn/arduino/lesson5.html

:wink:

Realmente no me refiero a que detecte varias veces el pulso, sino a que los interruptores mecánicos tienen siempre un efecto rebote, es decir, cuando activas un interruptor o pulsador, la señal no pasa de 0 a 1 y ya está, ese es el efecto ideal. El efecto real es que durante las milésimas de segundo mientras las placas de cobre estan empezando a tocarse dentro de interruptor, se generarán decenas de pulsos intermitentes, que el programa interpretaría que se ha activado el pulsador decenas de veces.
Lo que se hace para esto es ignorar los cambios de estado durante unas décimas de segundo tras cada cambio de estado.

El mecanismo suele ser tener un contador interno inicialmente a 0. Cuando detectas que la señal ha cambiado, pones a incrementar el contador. Mientras el contador no supere un valor predeterminado, ignoras cualquier cambio en esa entrada. Puedes poner un valor alto para filtrar pues al ser un cambio de marchas dificilmente habrá más de un cambio real en menos de 1 segundo.

Ejemplo en pseudocódigo:

contador=0; bloqueado=FALSE;

repetir {
if cambio_marcha AND NOT bloqueado THEN bloqueado=TRUE; marcha++ (o marcha--); //Solo efectua cambio si NO esta bloqueado
if bloqueado == TRUE THEN contador++ // Si esta bloqueado va incrementando contador pero no atiende a cambios de señal
if contador == 100 THEN bloqueado=FALSE; contador=0 // Cuando pasa el tiempo de rebotes, se desbloquea
}

Saludos.
Eduardo

Yo sigo teniendo mis dudas que el sistema funcione bien....

¿Le vas a meter la señal de punto muerto(la del led) al Arduino? Para que el sistema se resetee siempre que se quede en punto muerto.

De motos no se mucho.. una pregunta...¿siempre que le das a la palanca de cambio se efectua mecánicamente? Me refiero, si por lo que sea, no se engrana la marcha, pues el sistema se creerá que estas en una marcha que no es cierta. Ya que no existe ningun tipo de realimentación.

Yo conozco un poco mejor cambios secuenciales de coche, y eso no siempre ocurre, por eso lo digo...

Pero bueno, esta interesante probarlo.... :wink:

Igor R.

Igor te respondo yo mismo que si que gasto moto. Efectivamente puede darse el caso de que pises el cambio y la marcha no cambie, o se quede a medias y tengaas que volver a pisar.
En mi opinion también sería mejor método dividir la velocidad por las RPM, de hecho como comentaba antes, seguramente pueda sacar los pulsos del alternador del mismo borne + de la batería.

Saludos

Es lo que me imaginaba.... :wink:

La manera más "pro" es un poti rotativo en el barrel (Selector), pero eso es imposible a nivel usuario. (es como van las cajas secuenciales de competición). Asi que la descartamos...

La segunda manera, que requiere un poco tunning, es la de usar RPM y VELOCIDAD para saber la marcha, pero también tiene su cosilla.... Al embragar no funciona; despues de un cambio exiten muchas oscilaciones,.... De hecho, los kits de motos que puedes comprar con visor de marchas, van asi.

Salu2

Igor R.

Pues yo tambien gasto moto. A mi me gusta mas la idea (mas simple) de el detector de fin de carrera. Para evitar el efecto de rebote de los sensores mecanicos puedes plantearte usar los opticos. No he encontrado ninguna foto, pero en esencia, es una pieza en forma de U que lleva en un brazo un led y enfrente, un fotodiodo. Cuando algo se interpone entre los brazos de la U, el fotodiodo se corta . Metiendo la señal de salida del fotodiodo en una entrada digital de Arduino, esta solucionado.
Como solucion alternativa, con tres biestables y dos de estos dispositivos puedes organizar un circuito contador-decontador. Luego, puedes conectarlo con un demux a un display de 8 segmentos, o, simplemente, iluminar una fila de LEDS que te diga en que marcha vas.
De una manera u otra, lo que np veo claro es como se detecta el punto muerto. Con el detector, ni se me ocurre, y con el calculo de la desmultiplicacion, no se como vas a distinguir cuando la moto esta en PM de cuando esta embragada.
En cualquier caso, creo que el control que quieres no es tan crítico como para justificar hacer un diseño distinto del que a ti te apetezca ( en el fondo, los moteros sabemos que es una pijadica mas que una utilidad: cuando llevas una marcha corta, es el oido quien te dice si has de subir o no de marcha. La unica duda entra cuando vas en directa, y ante la duda, lo que hacemos todos es darle para arriba a ver si entra la septima ;)).
En cuanto a calcular la velocidad y el regimen de revoluciones, si que es muy interesante para tener una lectura del velocimetro EXACTA, mucho mas fiable que el de la moto. Ya que te planteas montar un arduino en la moto, te sugiero una idea que lleva ya tiempo rondandome, y es hacer un engrasador para la cadena. Yo habia pensado en poner un botecito de los que venden en la farmacia para los analisis de orina lleno de aceite. Un agujero para que respire, y un macarron hasta la cadena con una electrovalvula en el camino. Ya solo se trata de abrir la electrovalvula con la frecuencia adecuada. Si montas el sistema de contar vueltas de rueda, puedes abrirla durante una vuelta de cada cuatro (por ejemplo) o por tiempo... ya se trataria solo de verlo.
Ya que se pone un arduino en la moto, estaria muy bien poner un display hermosote, y sacar algo mas de partido. Otra cosica interesante que se podria hacer, es que Arduino 'sepa' cuando llevas puestos los intermitentes, y que haga algo llamativo cuando los lleves puestos demasiado tiempo. Ya rayandonos, un arduino con Bluetooth ¿podria darnos la informacion al bluetooth del casco?. Un GPS con GSM, podria mandarnos un SMS diciendonos donde esta la moto (como antirrobo o para los olvidadizos e incluso como medida de seguridad: mandandolo automaticamente si la moto se detiene a una velocidad demasiado brusca , o pierde la verticalidad).
Bueno, cuentanos como llevas el proyecto, y si no se complica, igual me monto yo otro...
Saludos Moteros.

Pofenas: no hablamos que los rebotes causados por un interruptor sea un problema (de hecho, no lo es), si no que cuando actuas sobre el pedal de cambio, no siempre se produce mecánicamente el cambio de marcha, pero si lo hará electricamente, ya que el sensor si detectará que has actuado sobre la palanca.

Imagina que quieres subir de marcha, actuas sobre el pedal, pero por lo que sea, la marcha no entra. Sin embargo, tu final de carrera si habrá detectado que has movido la palanca y te habrá aumentado el contador de la marcha en la que estas...Por lo que se te habrá desfasado tu contador de marchas con la realidad mecánica.

Se supone que en su moto hay un led que indica punto muerto, por lo que ya tienes ahí la señal que buscabas....

Esta claro que cada cual puede elegir el diseño que quiera...

Saludos

Buenas,

Si optas por los finales de carrera (aparentemente lo más sencillo) puedes tener otro punto de referencia, que es la marcha más alta (si sabes que tienes 5 nunca puedes pasar de ella)

En caso de que falles alguna de ellas cuando lleges a la ultima corregiras dicho error (pues sabes que no tienes sexta, por ejemplo).

Un saludo, y espero que sirva de algo... :wink: