El proyecto consiste en un sistema de alarma como respuesta al movimiento, el movimiento es generado por un simulador de sismos que cuenta con tres motores y una botonera para seleccionar la intensidad del movimiento (suave, intermedio y fuerte) a travez de sensores se detectara el nivel del sismo creando una grafica para encender las luces de emergencias, los buzzer, apagar maquinaria y cerrar una electrovalvula.
Codigo del Proyecto
Codigo del sistema de vibracion
// Definición de pines del L298N
const int motorA_SpeedPin = 3;
const int motorA_Direction1Pin = 4;
const int motorA_Direction2Pin = 5;
const int motorB_SpeedPin = 6;
const int motorB_Direction1Pin = 7;
const int motorB_Direction2Pin = 8;
const int boton1Pin = 9; // Pin del botón
const int boton2Pin = 10; // Pin del botón
const int boton3Pin = 11; // Pin del botón
const int relePin = 12; // Pin del relé
bool releCerrado = false;
unsigned long tiempoInicioBoton1 = 0; // Tiempo de inicio del botón 1
unsigned long tiempoInicioBoton2 = 0; // Tiempo de inicio del botón 2
unsigned long tiempoInicioBoton3 = 0; // Tiempo de inicio del botón 3
const unsigned long tiempoAccion = 20000; // 20 segundos en milisegundos
void setup() {
// Configurar los pines como salidas
pinMode(motorA_SpeedPin, OUTPUT);
pinMode(motorA_Direction1Pin, OUTPUT);
pinMode(motorA_Direction2Pin, OUTPUT);
pinMode(motorB_SpeedPin, OUTPUT);
pinMode(motorB_Direction1Pin, OUTPUT);
pinMode(motorB_Direction2Pin, OUTPUT);
pinMode(boton1Pin, INPUT_PULLUP); // Configura el pin del botón como entrada con resistencia pull-up interna
pinMode(boton2Pin, INPUT_PULLUP);
pinMode(boton3Pin, INPUT_PULLUP);
pinMode(relePin, OUTPUT); // Configura el pin del relé como salida
}
void loop() {
int estadoBoton = digitalRead(boton3Pin);
if (digitalRead(boton1Pin) == LOW){
if (digitalRead(boton1Pin) == LOW) {
if (tiempoInicioBoton1 == 0) {
tiempoInicioBoton1 = millis();
if (millis() - tiempoInicioBoton1 < tiempoAccion) {
motorAForward(128);
delay(2000);
motorAStop();
delay(1000);
motorABackward(128);
delay(2000);
motorAStop();
delay(1000); }
else{
stopmotor();
tiempoInicioBoton1 = 0;
}
}
else if (digitalRead(boton2Pin) == LOW) {
if (tiempoInicioBoton2 == 0) {
millis();}
if (millis() - tiempoInicioBoton2 < tiempoAccion) {
motorAForward(128);
delay(2000);
motorAStop();
delay(1000);
motorABackward(128);
delay(2000);
motorAStop();
delay(1000);
motorBForward(128);
delay(2000);
motorBStop();
delay(1000);
motorBBackward(128);
delay(2000);
motorBStop();
delay(1000); }
else {
stopmotor();
tiempoInicioBoton2 = 0; }
else {
stopmotor();
tiempoInicioBoton1 = 0;
tiempoInicioBoton2 = 0; }
if (estadoBoton == LOW) { // Si el botón se presiona
if (tiempoInicioBoton3 == 0) {
void motorAForward(int speed) {
digitalWrite(motorA_Direction1Pin, HIGH);
digitalWrite(motorA_Direction2Pin, LOW);
analogWrite(motorA_SpeedPin, speed);}
void motorABackward(int speed) {
digitalWrite(motorA_Direction1Pin, LOW);
digitalWrite(motorA_Direction2Pin, HIGH);
analogWrite(motorA_SpeedPin, speed);}
void motorAStop() {
digitalWrite(motorA_Direction1Pin, LOW);
digitalWrite(motorA_Direction2Pin, LOW);
analogWrite(motorA_SpeedPin, 0);}
void motorBForward(int speed) {
digitalWrite(motorB_Direction1Pin, HIGH);
digitalWrite(motorB_Direction2Pin, LOW);
analogWrite(motorB_SpeedPin, speed);}
void motorBBackward(int speed) {
digitalWrite(motorB_Direction1Pin, LOW);
digitalWrite(motorB_Direction2Pin, HIGH);
analogWrite(motorB_SpeedPin, speed);}
void motorBStop() {
digitalWrite(motorB_Direction1Pin, LOW);
digitalWrite(motorB_Direction2Pin, LOW);
analogWrite(motorB_SpeedPin, 0);}
void stopMotor() {
digitalWrite(motorA_Direction1Pin, LOW);
digitalWrite(motorA_Direction2Pin, LOW);
digitalWrite(motorB_Direction1Pin, LOW);
digitalWrite(motorB_Direction2Pin, LOW);}
Codigo del sistema de alarma sismica
#include "I2Cdev.h"
#include "MPU6050.h"
#include "Wire.h"
MPU6050 mpu;
const int motorrepresentativo=9;
const int verdepin=14;
const int amarillopin=15;
const int rojopin=16;
const int buzzerpin=20;
const int rele= 26;
bool releCerrado = false;
bool procesoActivo = false;
unsigned long tiempoInicio = 0;
const unsigned long tiempoDuracion = 20000;
void setup(){
Serial.begin(9600);
Wire.begin();
mpu.initialize();
pinMode(buzzerpin,OUTPUT);
pinMode(motorrepresentativo,OUTPUT);
pinMode(verdepin,OUTPUT);
pinMode(amarillopin,OUTPUT);
pinMode(rojopin,OUTPUT);
pinMode(rele,OUTPUT);
}
void loop(){
int16_t aceleracionX, aceleracionY, aceleracionZ;
int16_t giroscopioX, giroscopioY, giroscopioZ;
mpu.getMotion6(&aceleracionX, &aceleracionY, &aceleracionZ, &giroscopioX, &giroscopioY, &giroscopioZ);
float aX = aceleracionX / 500.0;
float aY = aceleracionY / 500.0;
float aZ = aceleracionZ / 500.0;
// Actualizar la gráfica o realizar acciones relacionadas con la gráfica aquí
// Por ejemplo, imprimir los valores en cada iteración
Serial.print(150);
Serial.print(",");
Serial.print(aX);
Serial.print(aZ);
Serial.print(",");
Serial.println(-150);
// Tu lógica para el LED y otras acciones aquí
if (aX > 40) {
digitalWrite(rele,LOW);
}
else {digitalWrite(rele,HIGH);}
}
Presupuesto
Conclusión
Nuestro prototipo con sensores de movimiento advierte el nivel de peligro/amenaza de un movimiento sísmico, y como reaccionaria un sistema en base a nuestro prototipo en el día a día, apagando los sistemas de maquinaria, cortando gas y encendiondo luces y alarmas de emergencia esto ayudará a las empresas que tienen uso de maquinaria pesada, evitando que en caso de terremotos o sismos ocurran accidentes en cuestión a la maquinaria activa.
En este contexto, el desarrollo de un sistema de alarma sísmica se vuelve esencial para reducir el impacto de los terremotos en la sociedad.