Project

General

Profile

Implementación » History » Version 2

Version 1 (Javier Huanca, 12/02/2024 11:07 PM) → Version 2/3 (Javier Huanca, 12/02/2024 11:09 PM)

*Índice*:

* [[Panorama General| Panorama General]]
* [[Organización del Proyecto | Organización del Proyecto]]
* [[Planificación de los procesos de gestión | Planificación de los procesos de gestión]]
* [[Planificación de los procesos técnicos | Planificación de los procesos técnicos]]
* [[Implementación | Implementación]]

h1. Implementación

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

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

h2. +Módulos de implementación+

h3. Interfaz de la pagina principal

<pre><code class="python">
# 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
</code></pre>

h3. Interfaz de mas información

<pre><code class="python">
# 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)
</code></pre>

h3. Interfaz de alerta

<pre><code class="python">
# Botón para cerrar la alerta
def cerrar_alerta():
ventana.destroy()
</code></pre>

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

Revisión de Hardware:
* 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.

Revisión de la Interfaz Gráfica:
* 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.