Objetivos
Material requerido.
Kit inicio UNO | |
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.
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.
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.
El diagrama de conexión será:
Y aquí tenemos el esquema de protoboard
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:
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: