SISTEMA DE LA ALARMA



CODIGO DEL SISTEMA

const int ledRojo = 2;

const int ledAzul = 3;

const int ledVerde = 4;

const int botonConfig = 5;

const int botonMovimiento = 6;

const int fotoCelda = A0;

const int potPin = A1;


int tiempoParpadeo = 0;          // Duración de cada parpadeo en segundos

int nivelParpadeos = 0;          // Cantidad de parpadeos configurados

int contadorPulsos = 0;          // Para contar los pulsos del botón de configuración

bool configurado = false;

bool azulEncendido = false;

bool verdeEncendido = false;

bool ultimaLecturaBoton = HIGH;

bool ultimaLecturaFinal = HIGH;


unsigned long tiempoUltimoPulsador = 0;

unsigned long tiempoUltimoFinal = 0;


void setup() {

  Serial.begin(9600);


  pinMode(ledRojo, OUTPUT);

  pinMode(ledAzul, OUTPUT);

  pinMode(ledVerde, OUTPUT);

  pinMode(botonConfig, INPUT_PULLUP);

  pinMode(botonMovimiento, INPUT_PULLUP);


  digitalWrite(ledRojo, LOW);

  digitalWrite(ledAzul, LOW);

  digitalWrite(ledVerde, LOW);


  solicitarTiempoParpadeo();

}


void loop() {

  if (!azulEncendido) {

    detectarPulsosIniciales();

  } else if (!verdeEncendido) {

    leerPotenciometro();

    detectarFinalConfiguracion();

  } else if (configurado) {

    verificarAlarma();

  }

}


void solicitarTiempoParpadeo() {

  Serial.println("Ingrese un número entre 1 y 3 (duración del parpadeo en segundos):");

  while (true) {

    if (Serial.available() > 0) {

      int valor = Serial.parseInt();

      if (valor >= 1 && valor <= 3) {

        tiempoParpadeo = valor;

        Serial.print("Tiempo de parpadeo configurado: ");

        Serial.print(valor);

        Serial.println(" segundos.");

        break;

      } else {

        Serial.println("ERROR: Valor inválido. Ingrese un número entre 1 y 3.");

      }

    }

  }

}


void detectarPulsosIniciales() {

  bool lectura = digitalRead(botonConfig);

  if (lectura == LOW && ultimaLecturaBoton == HIGH) {

    contadorPulsos++;

    Serial.print("Pulsos detectados: ");

    Serial.println(contadorPulsos);

    delay(300);

  }

  ultimaLecturaBoton = lectura;


  if (contadorPulsos >= 3) {

    digitalWrite(ledAzul, HIGH);

    azulEncendido = true;

    Serial.println("¡3 pulsos detectados! LED azul encendido.");

  }

}


void leerPotenciometro() {

  int valor = analogRead(potPin);

  int nivel = map(valor, 0, 1023, 1, 5);

  if (nivel != nivelParpadeos) {

    nivelParpadeos = nivel;

    Serial.print("Nivel de parpadeos configurado: ");

    Serial.println(nivelParpadeos);

    delay(200);

  }

}


void detectarFinalConfiguracion() {

  bool lectura = digitalRead(botonConfig);

  if (lectura == LOW && ultimaLecturaFinal == HIGH) {

    contadorPulsos++;

    Serial.print("Pulsos totales: ");

    Serial.println(contadorPulsos);

    delay(300);

  }

  ultimaLecturaFinal = lectura;


  if (contadorPulsos >= 5) {

    digitalWrite(ledVerde, HIGH);

    verdeEncendido = true;

    configurado = true;

    Serial.println("Configuración completa. LED verde encendido.");

  }

}


void verificarAlarma() {

  int luz = analogRead(fotoCelda);

  bool noche = luz < 500;  // Ajusta este valor según la iluminación del entorno


  bool movimiento = digitalRead(botonMovimiento) == LOW;


  if (noche && movimiento) {

    Serial.println("¡Alarma activada por movimiento nocturno!");

    activarAlarma();

    delay(1000);

  }

}


void activarAlarma() {

  for (int i = 0; i < nivelParpadeos; i++) {

    digitalWrite(ledRojo, HIGH);

    delay(tiempoParpadeo * 1000);

    digitalWrite(ledRojo, LOW);

    delay(tiempoParpadeo * 1000);

  }

  Serial.println("Alarma completada.");

}


 El sistema permite al usuario:

  1. Configurar la duración de parpadeo de la alarma mediante consola serial.

  2. Confirmar configuración con pulsaciones en un botón.

  3. Elegir la cantidad de parpadeos de la alarma con un potenciómetro.

  4. Activar la alarma automáticamente si se detecta movimiento durante la noche (usando una fotocelda).

  5. Señalizar estados del sistema con LEDs de colores.


Materiales Utilizados

  • Arduino UNO

  • 3 LEDs: Rojo (alarma), Azul (pulsos detectados), Verde (configuración completada)

  • 2 Pulsadores:

    • Uno para configurar

    • Uno para simular movimiento

  • 1 Potenciómetro (configura nivel de alarma)

  • 1 Fotocelda (detecta iluminación)

  • Resistencias adecuadas

  • Protoboard y cables


Flujo del Programa

1. Inicio del sistema (setup)

  • Configura pines como entrada/salida.

  • Apaga todos los LEDs.

  • Solicita al usuario por consola serial un número entre 1 y 3, que representa la duración de cada parpadeo de la alarma (en segundos).

2. Ciclo principal (loop)

a. Fase de conteo de pulsos iniciales

  • El usuario debe presionar el botón de configuración al menos 3 veces.

  • Al llegar a 3 pulsos:

    • Se enciende el LED azul, indicando que se puede continuar.

b. Fase de configuración de nivel

  • El usuario mueve el potenciómetro, y el sistema lee su valor.

  • El nivel se mapea de 1 a 5 y representa la cantidad de parpadeos de la alarma.

  • Este valor se muestra por consola serial.

  • Luego, el usuario debe volver a presionar el botón hasta llegar a 5 pulsos totales.

  • Se enciende el LED verde, indicando que la configuración ha finalizado correctamente.

c. Fase de vigilancia

  • El sistema lee la fotocelda para determinar si es de noche (luz < 500).

  • Si es de noche y se presiona el botón de movimiento (simulando movimiento):

    • Se activa la alarma.


Activación de la Alarma (activarAlarma)

  • El LED rojo parpadea según:

    • La duración configurada (tiempoParpadeo)

    • La cantidad de parpadeos (nivelParpadeos)

  • Cada parpadeo es un ciclo de LED encendido y apagado por el tiempo configurado.


Comentarios

Entradas populares de este blog

PRACTICA DE ARDUINO SOBRE UN PULSADOR

TAREA DE ARQUITECTRA EN SISTEMAS

EJERCICIOS DE ARQUITECTURA DE COMPUTADORAS SABADO 29