En esta ocasión trabajaremos con el Sensor de Impacto KY-031, el cual manda una señal de salida en el momento que recibe un choque o contacto físico, esta señal es fácilmente procesada por alguna tarjeta de desarrollo UNO R3.
Adicional integraremos el módulo RGB KY-016,que es capaz de emitir la mezcla de colores del sistema RGB (rojo, verde y azul).
¿Cómo funciona el módulo KY-031?
El Sensor de Impacto KY-031 es un contacto normalmente abierto(NA), es decir, cuando está inactivo funciona como un dispositivo abierto y posteriormente cuando se interactúa con el módulo el interruptor se cierra, permitiendo a circulación eléctrica a través del sistema.
Para realizar este proyecto necesitamos los siguientes materiales:
- Tarjeta de Desarrollo UNO R3
- Cables Dupont
- Módulo KY-031 Sensor de Impacto
- Sensor Led RGB Módulo KY-016
Diagrama de Conexión Arduino y KY-031
Primero realizaremos la conexión simple entre nuestra placa UNO R3 y el sensor de impacto para comprobar que esté realizando su funcionamiento adecuado.
Código en Arduino IDE para probar el módulo KY-031
Para el siguiente programa no es necesaria ninguna librería extra, solo realizaremos la declaración de variables y usaremos el Monitor Serial para visualizar el golpe en el sensor, el LED integrado en tarjeta UNO R3 (Pin 13) encenderá cada vez que el KY-031 reciba un impacto.
//Declaración de variables int led=13; //Led correspondiente al PIN 13 de Arduino int hit=3; //Variable de entrada de datos a través del KY-031 int valor; //Variable entera para guardar el status del sensor KY-031 void setup() { Serial.begin(9600); // Velocidad de comunicación serial a 9600 baudios pinMode(Led,OUTPUT); // Se configura LED como pin de salida pinMode(hit,INPUT); //Se configura el KY-031 como entrada } void loop() { val=digitalRead(hit); // Se lee el valor digital del ky-031 y se asigna a valor if(valor==LOW){ // Como es su estado en reposo es NA su valor inicial es 0(LOW) Serial.print("Inactivo"); // Se imprime un texto en el monitor serial Inactivo... Serial.println (valor"); // ... y con valor 0 digitalRead(Led,LOW); // ademas el LED del pin 13 NO encenderá } else { // Sí el valor es igual a 1(HIGH) se ejecuta la instrucción Serial.print("Golpe Avisa"); // Se imprime Golpe Avisa Serial.println (valor"); // ... y con valor 1 digitalRead(Led,HIGH); // ademas el LED del pin 13 SI encenderá delay(2000); //este estado durara 2 segundos } }
Como se puede observar en el video, cuando sufre una perturbación el módulo KY-031, en el Monitor Serial imprime “Golpe Avisa” y enseguida el valor 1; adicionalmente prende el LED. Ahora procederemos a realizar la conexión con el módulo RGB KY-016.
Código en Arduino IDE para Módulos KY-016 y KY-031
El propósito del siguiente programa es que cada vez que el Módulo de Impacto KY-031 reciba un golpe, el Led RGB (KY-016) simule una sirena y cuando ambos dispositivos estén en reposo el LED RGB estará emitiendo luz verde.
int ky31 = 3; // Pin para el módulo de impacto KY031 int LR = 11; // Pin para el Pin del LED ROJO del módulo KY016 int LA = 10; // Pin para el Pin del LED AZUL del módulo KY016 int LV = 9; // Pin para el Pin del LED VERDE del módulo KY016 int valor; //Variable tipo entero que sera utilizada para guardar el dato del KY031 void setup() { Serial.begin(9600); // Inicializar el Monitor Serial a 9600 bd pinMode(ky31, INPUT); // Se declara al KY31 como pin de entrada pinMode(LR, OUTPUT); // Se declara al LED ROJO del KY016 como pin de salida pinMode(LA, OUTPUT); // Se declara al LED AZUL del KY016 como pin de salida pinMode(LV, OUTPUT); // Se declara al LED VERDE del KY016 como pin de salida } void loop() { valor= digitalRead (ky31); // Se asigna el dato registrado por el KY31 a la variable valor if (valor == LOW){ // Si esa variable esta en estado BAJO/LOW/0 entonces Serial.print("Inactivo"); // En el Monitor Serial imprimirá INACTIVO Serial.println (valor); // ..Y el valor registrado digitalWrite ( LA, 0) ; //Configuración de LED RGB... digitalWrite ( LV, 255) ; //...solo encenderá con luz Verde digitalWrite (LR, 0) ; } else // Si esa variable esta en estado ALTA/HIGH/1 entonces { Serial.print("Sirena"); // En el Monitor Serial imprimirá Sirena for (int t = 0; t < 10; t++) { //Loop de 10 repeticiones de la secuencia de colores por el LED RGB digitalWrite ( LA, 0) ; //Secuencia para encender solo luz ROJA digitalWrite ( LV, 0) ; digitalWrite (LR, 255) ; delay (100) ; //Duración de Led Rojo encendido 0.1 segundo digitalWrite ( LA, 255) ; //Secuencia para encender solo luz ROJA digitalWrite ( LV, 0) ; digitalWrite (LR, 0) ; delay (100) ; //Duración de Led Azul encendido 0.1 segundo digitalWrite ( LA, 0) ; //Secuencia para encender apagar LED RGB digitalWrite ( LV, 0) ; digitalWrite (LR, 0) ; } } }
Ahora ya contamos con un sistema que nos permite tener diferente estados de nuestro LED RGB dependiendo de la perturbación en nuestro módulo de impacto.