Project

General

Profile

Implementación » History » Version 3

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