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. |