Medir vibración con Arduino y sensor SW-18020P


arduino-sw18020p

¿Que es un sensor de vibración?

Un sensor de vibración es un dispositivo que reacciona ante movimientos bruscos, golpes, o vibraciones, pero no a movimientos constantes o progresivos. En el caso de detectar una vibración genera una señal digital, que cesa al finalizar la vibración.

El principio de funcionamiento es muy sencillo. El dispositivo dispone de un cilindro, con dos contactos. Uno de los contactos está unido a una varilla metálica ubicada en el centro del cilindro. A su alrededor, el otro contacto se arrolla a su alrededor en forma de muelle.

En caso de una vibración, el muelle se deforma por efecto de la inercia, estableciendo contacto en varios puntos con el contacto fijo. De esta forma, se establece una conexión eléctrica entra ambos contactos, que puede ser leida con un microprocesador, como si fuera un pulsador, como vimos en entradas digitales en Arduino.

Anuncio:

arduino-vibracion-sw18020p-funcionamiento

Precio

Los sensores de vibración SW-18020P son dispositivos baratos. Podemos encontrar 10 sensores de vibración por 1€ en vendedores internacionales en Ebay o AliExpress.

sw18020p

Esquema eléctrico

El esquema eléctrico que necesitamos es el siguiente.

arduino-vibracion-sw18020p-esquema

Esquema montaje

Mientras que el montaje en una protoboard sería el siguiente.

arduino-vibracion-sw18020p-montaje

Ejemplo de código

A continuación tenemos un ejemplo de código para realizar la lectura del sensor. Leemos el estado del sensor mediante la entrada digital, usando la resistencia internar de Pull Up. Por otro lado, empleamos el valor shakeTime y la variable estado previo para controlar el cambio de estado, y así detectar la vibración.

const int sensorPin = 2;
const int ledPin = 13;

int tiltSensorPreviousValue = 0;
int tiltSensorCurrentValue = 0;
long lastTimeMoved = 0;
int shakeTime = 50;

void setup() {
    pinMode(sensorPin, INPUT);
    digitalWrite(sensorPin, HIGH);  //activamos la resistencia interna PULL UP
    pinMode(ledPin, OUTPUT);
}

void loop() {
    tiltSensorCurrentValue = digitalRead(sensorPin);
    if (tiltSensorPreviousValue != tiltSensorCurrentValue) {
        lastTimeMoved = millis();
        tiltSensorPreviousValue = tiltSensorCurrentValue;
    }
    if (millis() - lastTimeMoved < shakeTime) {
        digitalWrite(ledPin, HIGH);
    }
    else {
        digitalWrite(ledPin, LOW);
    }
}
Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección Tutoriales de Arduino
0 0 vote
Article Rating

Anuncio:

Previous Las 3 claves de la mejora de procesos
Next Medir temperatura con Arduino y sensor LM35
5 Comments
oldest
newest
Inline Feedbacks
View all comments
javi
5 years ago

Hola, muchas gracias por tu artículo.

Cres que con este sensor, ubicado en el salpicadero de un coche, sería capaz de distinguir si el motor está en encendido o apagado ?

Muchas gracias de antemano,

Javi

luisllamas
5 years ago
Reply to  javi

Lo veo casi imposible

pedro
5 years ago

se puede hacer lo mismo pero con la raspberry pi?

luisllamas
5 years ago
Reply to  pedro

Si, por supuesto 🙂

Alberto
2 years ago

Buenas, podría detectar vibraciones pequeñas venidas del piso superior?. Gracias