Project

General

Profile

Implementación » History » Version 1

Version 1/3 - Next » - Current version
Javier Huanca, 12/02/2024 11:07 PM


Índice:

Implementación

Plan de integración

El plan de integración se organiza en tres fases generales para estructurar la implementación del sistema de manera eficiente:
Fase 1: Configuración inicial
- Realizar una lluvia de ideas y definir la problemática principal.
- Desarrollar los elementos base del proyecto, como la maqueta inicial y el diseño de los primeros componentes del sistema.
- Redactar y presentar el informe de la primera fase del proyecto.

Fase 2: Desarrollo del sistema
- Estudiar y configurar los componentes de hardware, como los sensores y la Raspberry Pi.
- Elaborar y validar los casos de uso para las funcionalidades principales del sistema.
- Redactar y presentar el informe de la segunda fase del proyecto.

Fase 3: Integración y finalización
- Implementar la arquitectura completa del sistema, integrando hardware y software.
- Realizar pruebas exhaustivas del sistema para garantizar su funcionamiento correcto.
- Redactar y presentar el informe de la tercera fase, manual de usuario y póster del proyecto.

Modelo de implementación

El desarrollo del sistema "Ruidoso" se realizó utilizando el lenguaje de programación Python en el entorno de desarrollo Visual Studio Code, usando las siguientes librerías:

- Tkinter: Utilizada para construir la interfaz gráfica del usuario.
- Grovepi: Utilizada para la comunicación con el sensor de ruido conectado a la Raspberry Pi.
- Threading: Utilizada para ejecutar procesos simultáneos
- Time: Utilizada para manejar las pausas entre las lecturas del sensor.
- Subprocess: Utilizada para ejecutar procesos externos desde el programa principal.

Módulos de implementación

Interfaz de la pagina principal

# Función para abrir la ventana de alerta
def abrir_ventana_alerta():
    global alerta_activa, recomendaciones_set
    alerta_activa = True

    # Pasar el conjunto de recomendaciones como argumento al archivo de alerta
    proceso_alerta = subprocess.Popen(["python3", "interfaz_emergente.py", str(recomendaciones_set)])
    recomendaciones_set = (recomendaciones_set + 1) % 2  # Alternar entre 0 y 1

    # Esperar a que el proceso termine y reiniciar alerta_activa
    threading.Thread(target=esperar_cierre_alerta, args=(proceso_alerta,)).start()

def esperar_cierre_alerta(proceso):
    global alerta_activa
    proceso.wait()  # Esperar a que el proceso de la ventana emergente termine
    alerta_activa = False  # Reiniciar alerta_activa

# Función para leer el sensor y actualizar la interfaz
def Actualizar_Nivel_Ruido():
    while True:
        try:
            # Leer el valor bruto del sensor
            raw_value = grovepi.analogRead(sound_sensor)

            # Convertir a decibeles (ajusta el rango según tu calibración)
            decibeles = (raw_value / 1023) * 100

            # Calcular el tamaño dinámico de la barra
            altura = int((decibeles / 100) * 200)  # Altura máxima: 200 px
            grosor = 40   # Grosor máximo: 50 px

            # Ajustar la barra en el canvas
            canvas.delete("barra")  # Eliminar la barra anterior
            canvas.create_rectangle(
                20 - grosor // 2,  # Izquierda
                200 - altura,       # Arriba
                20 + grosor // 2,  # Derecha
                200,                # Abajo
                fill=Color_Segun_Db(decibeles),
                tags="barra" 
            )

            # Actualizar el texto de decibeles
            etiqueta_db.config(text=f"{int(decibeles)} Db")

            # Actualizar el estado (texto de arriba)
            if decibeles < 40:
                etiqueta_estado.config(text="Silencioso", bg="green")
            elif 40 <= decibeles < 70:
                etiqueta_estado.config(text="Moderado", bg="yellow")
            else:
                etiqueta_estado.config(text="Ruidoso", bg="red")

                # Abrir ventana de alerta si supera los 80 dB y no está activa
                if decibeles > 70 and not alerta_activa:
                    abrir_ventana_alerta()

            time.sleep(0.2)  # Pausa para evitar saturación
        except IOError:
            print("Error al leer el sensor.")
        except KeyboardInterrupt:
            break

# Función para determinar el color según el nivel de decibeles
def Color_Segun_Db(decibeles):
    if decibeles < 40:
        return "green" 
    elif 40 <= decibeles < 70:
        return "yellow" 
    else:
        return "red" 

# Función para ir a la interfaz de más información
def Mas_Informacion():
    ventana.destroy()
    import interfaz_informacion

Interfaz de mas información

# Función para ir a la interfaz principal
def Volver():
    ventana.destroy()
    import interfaz_principal

# Sección para cada nivel de ruido
def create_noise_section(container, db_range, bg_color, text_color, description):
    frame = tk.Frame(container, bg=bg_color, pady=10)
    frame.pack(fill=tk.X, padx=10, pady=5)
    db_label = tk.Label(frame, text=f"{db_range}", bg=bg_color, fg=text_color, font=("Arial", 10, "bold"))
    db_label.pack(anchor="w", padx=10)
    desc_label = tk.Label(frame, text=description, bg=bg_color, fg=text_color, justify="left", wraplength=230, font=("Arial", 10))
    desc_label.pack(anchor="w", padx=20)

Interfaz de alerta

# Botón para cerrar la alerta
def cerrar_alerta():
    ventana.destroy()