Revista Informática

24.- Tilt Sensor24.- Tilt Sensor

Publicado el 14 diciembre 2013 por Practicandoarduino @PracticaArduino

Vamos a hacer un circuito que detecte terremotos, para probarlo bastará con menearlo, a no ser que haya un terremoto donde vivis, en cuyo caso no me esperaría a ver si funciona xD. Bromas a parte, usaremos un tilt sensor, en mi caso es un módulo, por lo que mi esquema no corresponde con el video pero a efectos prácticos es lo mismo. Este sensor tiene mercurio en su interior, si se mueve de su posición “estable” envía una señal HIGH, lo que nosotros haremos será mantener 2 LEDs encendidos mientras no pase nada y si hay movimiento se apagan.
suficiente
Necesitamos:

1 Placa Arduino Uno
1 Protoboard
1 Tilt sensor
2 LEDs
2 Resistencias de 220Ω
1 Resistencia de 10kΩ
Cables para realizar las conexiones

Lo primero que haremos será conectar los pines GND y 5V de la placa a sus respectivas líneas de la protoboard, una vez hecho esto, conectamos las 3 resistencias a GND, los cátodos de los LEDs a las resistencias de 220Ω y sus ánodos a los pines digitales que vamos a usar (en nuestro caso el 4 y el 8), el sensor lo conectamos a la resistencia de 10kΩ y al pin digital 2.
El resultado sería este:

sensorfalta_bb

Código fuente:

int SensorPin = 2; 
int LED1 = 4;
int LED2 = 8; 
 
int estado = HIGH; 
int current; 
int previous = LOW;
long time = 0;
long rebote = 50;
 
void setup(){
  pinMode(SensorPin, INPUT);
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
}
 
void loop(){
  current = digitalRead(SensorPin);
  if (current != previous) {
    time = millis();
  } 
  if ((millis() - time) > rebote) {
    if (current == HIGH)
      estado = LOW;
    else
      estado = HIGH;
    }
digitalWrite(LED1, estado);
digitalWrite(LED2, estado);
previous = current;
}

Primero declaro los pines que voy a usar como variables globales, e inicializo las que voy a usar, la única “rara” es rebote, que marcará el umbral en el cual consideramos que se está moviendo el sensor, podemos ajustarlo para que sea más o menos sensible. En el void setup() configuramos los pines simplemente.
En el void loop() leemos el sensor, si el valor leido es distinto al que teníamos antes actualizamos la variable time con el valor de tiempo actual, y cada ciclo la comparamos con tiempo actual, cuando la diferencia sea mayor que nuestro umbral significa que hay movimiento, por lo tanto, si el estado era “reposo” y ahora no, apagamos los LEDs, si nuestro estado a pasado de movimiento a reposo los encendemos.



style="display:inline-block;width:728px;height:15px"
data-ad-client="ca-pub-3868159888315364"
data-ad-slot="7639712738">

We will make a circuit that detects earthquakes, to prove it, shaking it will be enough, unless there’s an earthquake where you live , in which case I wouldn´t expect to see if it works xD. Jokes aside , we´ll use a tilt sensor , in my case it´s a module, so my schedule doesn’t match the video but for practical purposes is the same. This sensor has mercury in it , if you move it from its “stable ” position it sends a HIGH signal, which we will be is keeping 2 LEDs turned on while nothing happens, and turned off if there is movement.

We need:

1 Arduino Uno board
1 Protoboard
1 Tilt sensor
2 LEDs
2 Resistors of 220Ω
1 Resistor of 10kΩ
Cables for connections

The first thing we will do is to connect the 5V and GND pins of the board to their respective lines of the breadboard , once done , we connect the 3 resistors to GND, we connect cathodes of the LEDs to 220Ω resistors and anodes to the digital pin that we’ll use (in our case 4 and 8), we connect the tilt sensor to 10kΩ resistor and to the digital pin 2.
El resultado sería este:

sensorfalta_bb

Source code:

int SensorPin = 2; 
int LED1 = 4;
int LED2 = 8; 
 
int estado = HIGH; 
int current; 
int previous = LOW;
long time = 0;
long rebote = 50;
 
void setup(){
  pinMode(SensorPin, INPUT);
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
}
 
void loop(){
  current = digitalRead(SensorPin);
  if (current != previous) {
    time = millis();
  } 
  if ((millis() - time) > rebote) {
    if (current == HIGH)
      estado = LOW;
    else
      estado = HIGH;
    }
digitalWrite(LED1, estado);
digitalWrite(LED2, estado);
previous = current;
}

First i declare the pins that will be used as global variables, and I initialize that I will use, the only “weird” is rebote, it will mark the threshold at which i consider the sensor is moving, we can set it to be more or less sensitive. In void setup () simply configure the pins.
In void loop () we read the sensor, if the read value is different than the one we had before we update the time variable with the current time value, and each cycle we compare to the current time, when the difference is greater than our threshold it means that there is movement, so, if the state was ” resting ” and now there is movement, we turn off the LEDs, if our state is movement and we pass to resting we turn on the LEDs.



style="display:inline-block;width:728px;height:15px"
data-ad-client="ca-pub-3868159888315364"
data-ad-slot="7639712738">


Volver a la Portada de Logo Paperblog