Implementación » History » Version 2
Javier Huanca, 12/02/2024 11:09 PM
| 1 | 1 | Javier Huanca | *Índice*: |
|---|---|---|---|
| 2 | 1 | Javier Huanca | |
| 3 | 1 | Javier Huanca | * [[Panorama General| Panorama General]] |
| 4 | 1 | Javier Huanca | * [[Organización del Proyecto | Organización del Proyecto]] |
| 5 | 1 | Javier Huanca | * [[Planificación de los procesos de gestión | Planificación de los procesos de gestión]] |
| 6 | 1 | Javier Huanca | * [[Planificación de los procesos técnicos | Planificación de los procesos técnicos]] |
| 7 | 1 | Javier Huanca | * [[Implementación | Implementación]] |
| 8 | 1 | Javier Huanca | |
| 9 | 1 | Javier Huanca | h1. Implementación |
| 10 | 1 | Javier Huanca | |
| 11 | 1 | Javier Huanca | h2. +Plan de integración+ |
| 12 | 1 | Javier Huanca | |
| 13 | 1 | Javier Huanca | El plan de integración se organiza en tres fases generales para estructurar la implementación del sistema de manera eficiente: |
| 14 | 1 | Javier Huanca | Fase 1: Configuración inicial |
| 15 | 1 | Javier Huanca | - Realizar una lluvia de ideas y definir la problemática principal. |
| 16 | 1 | Javier Huanca | - Desarrollar los elementos base del proyecto, como la maqueta inicial y el diseño de los primeros componentes del sistema. |
| 17 | 1 | Javier Huanca | - Redactar y presentar el informe de la primera fase del proyecto. |
| 18 | 1 | Javier Huanca | |
| 19 | 1 | Javier Huanca | Fase 2: Desarrollo del sistema |
| 20 | 1 | Javier Huanca | - Estudiar y configurar los componentes de hardware, como los sensores y la Raspberry Pi. |
| 21 | 1 | Javier Huanca | - Elaborar y validar los casos de uso para las funcionalidades principales del sistema. |
| 22 | 1 | Javier Huanca | - Redactar y presentar el informe de la segunda fase del proyecto. |
| 23 | 1 | Javier Huanca | |
| 24 | 1 | Javier Huanca | Fase 3: Integración y finalización |
| 25 | 1 | Javier Huanca | - Implementar la arquitectura completa del sistema, integrando hardware y software. |
| 26 | 1 | Javier Huanca | - Realizar pruebas exhaustivas del sistema para garantizar su funcionamiento correcto. |
| 27 | 1 | Javier Huanca | - Redactar y presentar el informe de la tercera fase, manual de usuario y póster del proyecto. |
| 28 | 1 | Javier Huanca | |
| 29 | 1 | Javier Huanca | h2. +Modelo de implementación+ |
| 30 | 1 | Javier Huanca | |
| 31 | 1 | Javier Huanca | 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: |
| 32 | 1 | Javier Huanca | |
| 33 | 1 | Javier Huanca | - Tkinter: Utilizada para construir la interfaz gráfica del usuario. |
| 34 | 1 | Javier Huanca | - Grovepi: Utilizada para la comunicación con el sensor de ruido conectado a la Raspberry Pi. |
| 35 | 1 | Javier Huanca | - Threading: Utilizada para ejecutar procesos simultáneos |
| 36 | 1 | Javier Huanca | - Time: Utilizada para manejar las pausas entre las lecturas del sensor. |
| 37 | 1 | Javier Huanca | - Subprocess: Utilizada para ejecutar procesos externos desde el programa principal. |
| 38 | 1 | Javier Huanca | |
| 39 | 1 | Javier Huanca | h2. +Módulos de implementación+ |
| 40 | 1 | Javier Huanca | |
| 41 | 1 | Javier Huanca | h3. Interfaz de la pagina principal |
| 42 | 1 | Javier Huanca | |
| 43 | 1 | Javier Huanca | <pre><code class="python"> |
| 44 | 1 | Javier Huanca | # Función para abrir la ventana de alerta |
| 45 | 1 | Javier Huanca | def abrir_ventana_alerta(): |
| 46 | 1 | Javier Huanca | global alerta_activa, recomendaciones_set |
| 47 | 1 | Javier Huanca | alerta_activa = True |
| 48 | 1 | Javier Huanca | |
| 49 | 1 | Javier Huanca | # Pasar el conjunto de recomendaciones como argumento al archivo de alerta |
| 50 | 1 | Javier Huanca | proceso_alerta = subprocess.Popen(["python3", "interfaz_emergente.py", str(recomendaciones_set)]) |
| 51 | 1 | Javier Huanca | recomendaciones_set = (recomendaciones_set + 1) % 2 # Alternar entre 0 y 1 |
| 52 | 1 | Javier Huanca | |
| 53 | 1 | Javier Huanca | # Esperar a que el proceso termine y reiniciar alerta_activa |
| 54 | 1 | Javier Huanca | threading.Thread(target=esperar_cierre_alerta, args=(proceso_alerta,)).start() |
| 55 | 1 | Javier Huanca | |
| 56 | 1 | Javier Huanca | def esperar_cierre_alerta(proceso): |
| 57 | 1 | Javier Huanca | global alerta_activa |
| 58 | 1 | Javier Huanca | proceso.wait() # Esperar a que el proceso de la ventana emergente termine |
| 59 | 1 | Javier Huanca | alerta_activa = False # Reiniciar alerta_activa |
| 60 | 1 | Javier Huanca | |
| 61 | 1 | Javier Huanca | # Función para leer el sensor y actualizar la interfaz |
| 62 | 1 | Javier Huanca | def Actualizar_Nivel_Ruido(): |
| 63 | 1 | Javier Huanca | while True: |
| 64 | 1 | Javier Huanca | try: |
| 65 | 1 | Javier Huanca | # Leer el valor bruto del sensor |
| 66 | 1 | Javier Huanca | raw_value = grovepi.analogRead(sound_sensor) |
| 67 | 1 | Javier Huanca | |
| 68 | 1 | Javier Huanca | # Convertir a decibeles (ajusta el rango según tu calibración) |
| 69 | 1 | Javier Huanca | decibeles = (raw_value / 1023) * 100 |
| 70 | 1 | Javier Huanca | |
| 71 | 1 | Javier Huanca | # Calcular el tamaño dinámico de la barra |
| 72 | 1 | Javier Huanca | altura = int((decibeles / 100) * 200) # Altura máxima: 200 px |
| 73 | 1 | Javier Huanca | grosor = 40 # Grosor máximo: 50 px |
| 74 | 1 | Javier Huanca | |
| 75 | 1 | Javier Huanca | # Ajustar la barra en el canvas |
| 76 | 1 | Javier Huanca | canvas.delete("barra") # Eliminar la barra anterior |
| 77 | 1 | Javier Huanca | canvas.create_rectangle( |
| 78 | 1 | Javier Huanca | 20 - grosor // 2, # Izquierda |
| 79 | 1 | Javier Huanca | 200 - altura, # Arriba |
| 80 | 1 | Javier Huanca | 20 + grosor // 2, # Derecha |
| 81 | 1 | Javier Huanca | 200, # Abajo |
| 82 | 1 | Javier Huanca | fill=Color_Segun_Db(decibeles), |
| 83 | 1 | Javier Huanca | tags="barra" |
| 84 | 1 | Javier Huanca | ) |
| 85 | 1 | Javier Huanca | |
| 86 | 1 | Javier Huanca | # Actualizar el texto de decibeles |
| 87 | 1 | Javier Huanca | etiqueta_db.config(text=f"{int(decibeles)} Db") |
| 88 | 1 | Javier Huanca | |
| 89 | 1 | Javier Huanca | # Actualizar el estado (texto de arriba) |
| 90 | 1 | Javier Huanca | if decibeles < 40: |
| 91 | 1 | Javier Huanca | etiqueta_estado.config(text="Silencioso", bg="green") |
| 92 | 1 | Javier Huanca | elif 40 <= decibeles < 70: |
| 93 | 1 | Javier Huanca | etiqueta_estado.config(text="Moderado", bg="yellow") |
| 94 | 1 | Javier Huanca | else: |
| 95 | 1 | Javier Huanca | etiqueta_estado.config(text="Ruidoso", bg="red") |
| 96 | 1 | Javier Huanca | |
| 97 | 1 | Javier Huanca | # Abrir ventana de alerta si supera los 80 dB y no está activa |
| 98 | 1 | Javier Huanca | if decibeles > 70 and not alerta_activa: |
| 99 | 1 | Javier Huanca | abrir_ventana_alerta() |
| 100 | 1 | Javier Huanca | |
| 101 | 1 | Javier Huanca | time.sleep(0.2) # Pausa para evitar saturación |
| 102 | 1 | Javier Huanca | except IOError: |
| 103 | 1 | Javier Huanca | print("Error al leer el sensor.") |
| 104 | 1 | Javier Huanca | except KeyboardInterrupt: |
| 105 | 1 | Javier Huanca | break |
| 106 | 1 | Javier Huanca | |
| 107 | 1 | Javier Huanca | # Función para determinar el color según el nivel de decibeles |
| 108 | 1 | Javier Huanca | def Color_Segun_Db(decibeles): |
| 109 | 1 | Javier Huanca | if decibeles < 40: |
| 110 | 1 | Javier Huanca | return "green" |
| 111 | 1 | Javier Huanca | elif 40 <= decibeles < 70: |
| 112 | 1 | Javier Huanca | return "yellow" |
| 113 | 1 | Javier Huanca | else: |
| 114 | 1 | Javier Huanca | return "red" |
| 115 | 1 | Javier Huanca | |
| 116 | 1 | Javier Huanca | # Función para ir a la interfaz de más información |
| 117 | 1 | Javier Huanca | def Mas_Informacion(): |
| 118 | 1 | Javier Huanca | ventana.destroy() |
| 119 | 1 | Javier Huanca | import interfaz_informacion |
| 120 | 1 | Javier Huanca | </code></pre> |
| 121 | 1 | Javier Huanca | |
| 122 | 1 | Javier Huanca | |
| 123 | 1 | Javier Huanca | h3. Interfaz de mas información |
| 124 | 1 | Javier Huanca | |
| 125 | 1 | Javier Huanca | <pre><code class="python"> |
| 126 | 1 | Javier Huanca | # Función para ir a la interfaz principal |
| 127 | 1 | Javier Huanca | def Volver(): |
| 128 | 1 | Javier Huanca | ventana.destroy() |
| 129 | 1 | Javier Huanca | import interfaz_principal |
| 130 | 1 | Javier Huanca | |
| 131 | 1 | Javier Huanca | # Sección para cada nivel de ruido |
| 132 | 1 | Javier Huanca | def create_noise_section(container, db_range, bg_color, text_color, description): |
| 133 | 1 | Javier Huanca | frame = tk.Frame(container, bg=bg_color, pady=10) |
| 134 | 1 | Javier Huanca | frame.pack(fill=tk.X, padx=10, pady=5) |
| 135 | 1 | Javier Huanca | db_label = tk.Label(frame, text=f"{db_range}", bg=bg_color, fg=text_color, font=("Arial", 10, "bold")) |
| 136 | 1 | Javier Huanca | db_label.pack(anchor="w", padx=10) |
| 137 | 1 | Javier Huanca | desc_label = tk.Label(frame, text=description, bg=bg_color, fg=text_color, justify="left", wraplength=230, font=("Arial", 10)) |
| 138 | 1 | Javier Huanca | desc_label.pack(anchor="w", padx=20) |
| 139 | 1 | Javier Huanca | </code></pre> |
| 140 | 1 | Javier Huanca | |
| 141 | 1 | Javier Huanca | h3. Interfaz de alerta |
| 142 | 1 | Javier Huanca | |
| 143 | 1 | Javier Huanca | <pre><code class="python"> |
| 144 | 1 | Javier Huanca | # Botón para cerrar la alerta |
| 145 | 1 | Javier Huanca | def cerrar_alerta(): |
| 146 | 1 | Javier Huanca | ventana.destroy() |
| 147 | 1 | Javier Huanca | </code></pre> |
| 148 | 2 | Javier Huanca | |
| 149 | 2 | Javier Huanca | h2. +Reporte de revisión+ |
| 150 | 2 | Javier Huanca | |
| 151 | 2 | Javier Huanca | Revisión de Código: |
| 152 | 2 | Javier Huanca | * 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. |
| 153 | 2 | Javier Huanca | * Los módulos de código fueron probados individualmente para garantizar su correcto funcionamiento antes de integrarlos al sistema completo. |
| 154 | 2 | Javier Huanca | |
| 155 | 2 | Javier Huanca | Revisión de Hardware: |
| 156 | 2 | Javier Huanca | * 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. |
| 157 | 2 | Javier Huanca | |
| 158 | 2 | Javier Huanca | Revisión de la Interfaz Gráfica: |
| 159 | 2 | Javier Huanca | * Se evaluó la funcionalidad y estética de las tres ventanas principales (pantalla principal, ventana de información y ventana de alerta). |
| 160 | 2 | Javier Huanca | * La barra dinámica que representa los niveles de ruido fue revisada para garantizar una visualización proporcional y clara. |