Sensor de inclinación (Tilt Switch)

Objetivos

 

  • Presentar un sensor de inclinación.
  • Montar un circuito de ejemplo.
  • Es una sesión de descanso, para que nos relajemos
  • Muestra un Debouncing sin delay.
  •  

    Material requerido.

     

    Kit Arduino Uno  Kit inicio UNO
    Kit Arduino MEGA Kit Inicio Mega

     

    Sensores de inclinación (Tilt Sensors)

     

    Para los que hace ya unos años jugábamos a las maquinas, entones llamadas de Petacos y hoy llamadas Pinball (Como cambian las cosas y los nombres) nos acostumbrábamos enseguida a que si te dejabas llevar por la emoción y le metías un empujón a la máquina, rápidamente marcaba Tilt y te impedía seguir jugando.

    Así que acabamos pensando que Tilt era algo así como falta, pero no.  En ingles Tilt es inclinar o ladear y se refiere a inclinar el plano de referencia sobre el que se asienta nuestro sistema de coordenadas (Movimiento que de no impedirse, nos aseguraríamos de que la bola nunca llegara abajo del Pinball, ya que bastaría con levantar de las patas más próximas al jugador).

    Creo recordar que en aquellas antiguas maquinas se realizaba mediante un péndulo, pero que podría haberse realizado mediante uno de los sensores que nos ocupan en esta sesión: Los sensores de inclinación o Tilt Sensors.

    Tilt switch

    Son sensores de unos pocos milímetros de longitud, que llevan en su interior una o dos pequeñas bolas conductoras, capaces de cerrar el circuito con los pines  metálicos inferiores del cilindro..

    Cuando hacen contacto permiten el paso de la corriente y cierran el contacto exactamente igual que si fueran un interruptor (Y de hecho se manejan igual)  pero que a partir de un cierto Angulo de inclinación dejan de hacer contacto y abren el contacto.

    Sensor de inclinacion

    No es una tecnología reciente, pues llevan en uso mucho tiempo, pero antes se hacían con una gotita de mercurio líquido, que es conductor y que al desplazarse por el interior del cilindro acababa por cerrar el circuito entre un par de contactos en el fondo.

    Pero dado que el mercurio es sumamente toxico para el entorno y para las personas que lo manejan, hace ya bastante tiempo que se han reemplazado por el modelo que vamos a usar, aunque aún es fácil encontrarnos con que se siguen llamando interruptores de mercurio.

    A todas luces se comportan igual que un interruptor sencillo y de hecho vamos a tener que hacer el debouncing igual que estos, porque si aquí rebotaban los contactos, podéis imaginaros los rebotes que van plantear las bolitas de poca masa.

    Veamos el circuito de prueba que vamos a usar

     

    Esquema de conexión

     

    Vamos a usar el mismo esquema de conexión que con un interruptor normal. Por ello necesitamos usar una resistencia de  pullup, y según el valor que leamos encendemos o apagamos un LED conectado al pin 13.

  • Por una vez, y sin que sirva de precedente conectaremos el LED al pin 13 sin resistencia, porque este pin ya lleva una en serie. Para cualquier otro pin deberíamos poner una resistencia de limitación o veremos un bonito plof con el LED.
  • Vamos a usar lógica negativa. Esto es una manera complicada de decir que puesto que en condiciones normales, el interruptor está cerrado, la señal de disparo será cuando leamos un LOW en el pin 2.
  •  

    El diagrama de conexión será:

    Circuito con Arduino y tilt switch

    Y aquí tenemos el esquema de protoboard

    Circuito con tilt switch

     

    Programa de control

     

    El programa va a ser muy similar al que usamos en la sesión previa, condicionales y botones. Pero por aquello de variar un poco, vamos a usar un debouncing de tiempo variable (que si no, nos aburrimos).

    Aquí tenéis el programa:

    Prog_28_1

    int outPin = 13;
    int lectura;
    int previo = LOW;

    long time = 0;            // Para guardar la hora de la inversion de valor
    long debounce = 50;       // Tiempo de rebote

    void setup()
    { pinMode(inPin, INPUT_PULLUP);
    pinMode(outPin, OUTPUT);
    }

    void loop()
    { lectura = digitalRead(inPin);
    if (lectura != previo)     // Si hay cambio en la lectura
    time = millis();
    if ((millis() – time) > debounce)
    digitalWrite(outPin, lectura);

    previo = lectura ;
    }

    No hay nada Nuevo en el programa. Con lectura vamos leyendo el pin 2 hasta que es diferente del último valor leído. A partir de esto comprobamos que ha transcurrido el tiempo de debouncing  para filtrar los rebotes y escribimos en el pin de salida lo que leemos.

    En la practica son bastante fáciles de manejar y os permiten detectar un movimiento brusco del sensor y también detectan una inclinación superior a un cierto angulo.

    No es difícil imaginárselo en un circuito que detecta si una puerta de garaje esta levantada o no, por ejemplo, o en un sensor de impacto. Por alguna razón que se me escapa estos sensores parecen ser muy populares entre nuestros  Arduino uno y Arduino mega.

    Aquí os dejo un minivideo con el resultado:

     

    Resumen de la sesión

     

    En este curso arduino hemos aprendido lo siguiente:

  • Hemos visto que estos pequeños sensores de inclinación son simples y razonablemente eficaces.
  • Se comportan exactamente igual que un interruptor de contacto, pero con mas rebote.
  • Hemos visto que se pueden usar como un sensor de movimiento brusco o inclinación.
  •  

     

     

    Deja una respuesta