Project

General

Profile

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.