Índice:
- Panorama General
- Organización del Proyecto
- Planificación de los procesos de gestión
- Planificación de los procesos técnicos
- Implementación
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()
Reporte de revisión¶
Revisión de Código:- Se verificó la correcta implementación de las funcionalidades principales del sistema, incluyendo la lectura del sensor, la representación visual de los niveles de ruido y la actualización automática de la interfaz gráfica.
- Los módulos de código fueron probados individualmente para garantizar su correcto funcionamiento antes de integrarlos al sistema completo.
- Se realizaron pruebas de conexión entre la Raspberry Pi y los sensores de ruido para confirmar la estabilidad y precisión de los datos recopilados.
- Se evaluó la funcionalidad y estética de las tres ventanas principales (pantalla principal, ventana de información y ventana de alerta).
- La barra dinámica que representa los niveles de ruido fue revisada para garantizar una visualización proporcional y clara.