# msmro/fluorimetro_lowcost architecture

> Architecture diagram of the GitHub repository msmro/fluorimetro_lowcost, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/msmro/fluorimetro_lowcost
- Repository: https://github.com/msmro/fluorimetro_lowcost

## Overview

Este repositorio reúne prototipos de firmware y varias interfaces para medir fluorescencia con sensores espectrales. El flujo principal del Mega es que el instrumento lee canales del AS7341, aplica ajustes de captura y excitación, y presenta resultados en el Nokia 5110; una interfaz de escritorio puede intercambiar comandos y datos por USB serial. También hay firmwares PyBadge para medición y visualización. Las capacidades de análisis de escritorio se reflejan en los módulos del árbol; sus conexiones internas no se detallan porque no se muestreó su implementación.

Main entry points: [`2_UI/UI_Miguel/Firmware/IO_Rodeo_PyBadge/v3.0_as7341/src/colorimeter.py`](https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Firmware/IO_Rodeo_PyBadge/v3.0_as7341/src/colorimeter.py) (Gestor colorímetro), [`2_UI/UI_Miguel/Firmware/Arduino_Mega_AS7341/v1.0/firmware/mega_as7341_multichannel/firmware.cpp`](https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Firmware/Arduino_Mega_AS7341/v1.0/firmware/mega_as7341_multichannel/firmware.cpp) (Firmware Mega), [`2_UI/UI_Miguel/Software/Arduino_Mega_AS7341_GUI/v1.0/desktop_gui/serial_client.py`](https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Software/Arduino_Mega_AS7341_GUI/v1.0/desktop_gui/serial_client.py) (Cliente serial), [`2_UI/UI_Miguel/Software/Arduino_Mega_AS7341_GUI/v1.0/desktop_gui/app.py`](https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Software/Arduino_Mega_AS7341_GUI/v1.0/desktop_gui/app.py) (Aplicación GUI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_mega["Mega AS7341"]
  node_mega_fw["Firmware Mega<br/>[firmware.cpp]"]
  node_as7341["Sensor AS7341"]
  node_nokia["Pantalla Nokia"]
  node_led["LED excitación"]
end

subgraph group_desktop["Interfaces escritorio"]
  node_gui_app["Aplicación GUI<br/>[app.py]"]
  node_mega_serial["Cliente serial<br/>[serial_client.py]"]
  node_mega_protocol["Protocolo<br/>[protocol.py]"]
  node_mega_window["Ventana principal<br/>[main_window.py]"]
  node_acquisition["Adquisición<br/>[acquisition.py]"]
  node_analysis["Análisis<br/>[analysis.py]"]
  node_experiments["Experimentos<br/>[experiments.py]"]
  node_exporter["Exportación<br/>[exporter.py]"]
end

subgraph group_badge["PyBadge colorímetro"]
  node_badge_entry["Firmware PyBadge<br/>[code.py]"]
  node_badge_app["Gestor colorímetro<br/>[colorimeter.py]"]
  node_badge_measure["Mediciones<br/>[measurement.py]"]
  node_badge_sensor["Sensores ópticos<br/>[light_sensor.py]"]
  node_badge_screen["Pantallas medición<br/>[measure_screen.py]"]
  node_badge_menu["Menú<br/>[menu_screen.py]"]
  node_badge_protocol["Protocolo USB"]
  node_badge_config["Configuración<br/>[configuration.py]"]
end

subgraph group_legacy["Prototipos y sensores"]
  node_tsl_gui["GUI TSL2591<br/>[main_window.py]"]
  node_ui3["Monitor prototipo<br/>[UI3.py]"]
  node_mega_test["Prueba I2C<br/>[main.cpp]"]
end

node_operator(("Operador"))

node_operator -->|"inicia"| node_gui_app
node_gui_app -->|"crea ventana"| node_mega_window
node_mega_fw -->|"lee canales"| node_as7341
node_mega_fw -->|"actualiza pantalla"| node_nokia
node_mega_fw -->|"controla PWM"| node_led
node_mega_fw -->|"JSON Lines"| node_mega_serial
node_mega_serial -->|"codifica y decodifica"| node_mega_protocol
node_mega_serial -->|"envía comandos"| node_mega_fw
node_mega_fw -->|"envía estado"| node_mega_serial
node_badge_entry -->|"ejecuta"| node_badge_app
node_badge_app -->|"selecciona medición"| node_badge_measure
node_badge_app -->|"configura sensores"| node_badge_sensor
node_badge_app -->|"actualiza pantalla"| node_badge_screen
node_badge_app -->|"muestra menú"| node_badge_menu
node_badge_app -->|"intercambia mensajes"| node_badge_protocol
node_badge_app -->|"lee ajustes"| node_badge_config
node_operator -->|"usa"| node_tsl_gui
node_operator -->|"usa"| node_ui3

click node_mega_fw "https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Firmware/Arduino_Mega_AS7341/v1.0/firmware/mega_as7341_multichannel/firmware.cpp"
click node_gui_app "https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Software/Arduino_Mega_AS7341_GUI/v1.0/desktop_gui/app.py"
click node_mega_serial "https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Software/Arduino_Mega_AS7341_GUI/v1.0/desktop_gui/serial_client.py"
click node_mega_protocol "https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Software/Arduino_Mega_AS7341_GUI/v1.0/desktop_gui/protocol.py"
click node_mega_window "https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Software/Arduino_Mega_AS7341_GUI/v1.0/desktop_gui/main_window.py"
click node_acquisition "https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Software/Arduino_Mega_AS7341_GUI/v1.0/desktop_gui/acquisition.py"
click node_analysis "https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Software/Arduino_Mega_AS7341_GUI/v1.0/desktop_gui/analysis.py"
click node_experiments "https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Software/Arduino_Mega_AS7341_GUI/v1.0/desktop_gui/experiments.py"
click node_exporter "https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Software/Arduino_Mega_AS7341_GUI/v1.0/desktop_gui/exporter.py"
click node_badge_entry "https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Firmware/IO_Rodeo_PyBadge/v3.0_as7341/code.py"
click node_badge_app "https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Firmware/IO_Rodeo_PyBadge/v3.0_as7341/src/colorimeter.py"
click node_badge_measure "https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Firmware/IO_Rodeo_PyBadge/v3.0_as7341/src/measurement.py"
click node_badge_sensor "https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Firmware/IO_Rodeo_PyBadge/v3.0_as7341/src/light_sensor.py"
click node_badge_screen "https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Firmware/IO_Rodeo_PyBadge/v3.0_as7341/src/measure_screen.py"
click node_badge_menu "https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Firmware/IO_Rodeo_PyBadge/v3.0_as7341/src/menu_screen.py"
click node_badge_config "https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Firmware/IO_Rodeo_PyBadge/v3.0_as7341/src/configuration.py"
click node_tsl_gui "https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Software/IO_Rodeo_TSL2591_GUI/v1.0/upch_gui/main_window.py"
click node_ui3 "https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UIs-env/UI3.py"
click node_mega_test "https://github.com/msmro/fluorimetro_lowcost/blob/main/1_Circuito/2_Receptor/1_TEST_i2c/Test_i2c/src/main.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_mega_fw,node_as7341,node_nokia,node_led toneBlue
class node_gui_app,node_mega_serial,node_mega_protocol,node_mega_window,node_acquisition,node_analysis,node_experiments,node_exporter toneAmber
class node_badge_entry,node_badge_app,node_badge_measure,node_badge_sensor,node_badge_screen,node_badge_menu,node_badge_protocol,node_badge_config toneMint
class node_tsl_gui,node_ui3,node_mega_test toneRose
class node_operator toneIndigo
```

## Components

### Mega AS7341

- [Firmware Mega](https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Firmware/Arduino_Mega_AS7341/v1.0/firmware/mega_as7341_multichannel/firmware.cpp): `2_UI/UI_Miguel/Firmware/Arduino_Mega_AS7341/v1.0/firmware/mega_as7341_multichannel/firmware.cpp`
- **Sensor AS7341**
- **Pantalla Nokia**
- **LED excitación**

### Interfaces escritorio

- [Aplicación GUI](https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Software/Arduino_Mega_AS7341_GUI/v1.0/desktop_gui/app.py): `2_UI/UI_Miguel/Software/Arduino_Mega_AS7341_GUI/v1.0/desktop_gui/app.py`
- [Cliente serial](https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Software/Arduino_Mega_AS7341_GUI/v1.0/desktop_gui/serial_client.py): `2_UI/UI_Miguel/Software/Arduino_Mega_AS7341_GUI/v1.0/desktop_gui/serial_client.py`
- [Protocolo](https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Software/Arduino_Mega_AS7341_GUI/v1.0/desktop_gui/protocol.py): `2_UI/UI_Miguel/Software/Arduino_Mega_AS7341_GUI/v1.0/desktop_gui/protocol.py`
- [Ventana principal](https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Software/Arduino_Mega_AS7341_GUI/v1.0/desktop_gui/main_window.py): `2_UI/UI_Miguel/Software/Arduino_Mega_AS7341_GUI/v1.0/desktop_gui/main_window.py`
- [Adquisición](https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Software/Arduino_Mega_AS7341_GUI/v1.0/desktop_gui/acquisition.py): `2_UI/UI_Miguel/Software/Arduino_Mega_AS7341_GUI/v1.0/desktop_gui/acquisition.py`
- [Análisis](https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Software/Arduino_Mega_AS7341_GUI/v1.0/desktop_gui/analysis.py): `2_UI/UI_Miguel/Software/Arduino_Mega_AS7341_GUI/v1.0/desktop_gui/analysis.py`
- [Experimentos](https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Software/Arduino_Mega_AS7341_GUI/v1.0/desktop_gui/experiments.py): `2_UI/UI_Miguel/Software/Arduino_Mega_AS7341_GUI/v1.0/desktop_gui/experiments.py`
- [Exportación](https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Software/Arduino_Mega_AS7341_GUI/v1.0/desktop_gui/exporter.py): `2_UI/UI_Miguel/Software/Arduino_Mega_AS7341_GUI/v1.0/desktop_gui/exporter.py`

### PyBadge colorímetro

- [Firmware PyBadge](https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Firmware/IO_Rodeo_PyBadge/v3.0_as7341/code.py): `2_UI/UI_Miguel/Firmware/IO_Rodeo_PyBadge/v3.0_as7341/code.py`
- [Gestor colorímetro](https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Firmware/IO_Rodeo_PyBadge/v3.0_as7341/src/colorimeter.py): `2_UI/UI_Miguel/Firmware/IO_Rodeo_PyBadge/v3.0_as7341/src/colorimeter.py`
- [Mediciones](https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Firmware/IO_Rodeo_PyBadge/v3.0_as7341/src/measurement.py): `2_UI/UI_Miguel/Firmware/IO_Rodeo_PyBadge/v3.0_as7341/src/measurement.py`
- [Sensores ópticos](https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Firmware/IO_Rodeo_PyBadge/v3.0_as7341/src/light_sensor.py): `2_UI/UI_Miguel/Firmware/IO_Rodeo_PyBadge/v3.0_as7341/src/light_sensor.py`
- [Pantallas medición](https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Firmware/IO_Rodeo_PyBadge/v3.0_as7341/src/measure_screen.py): `2_UI/UI_Miguel/Firmware/IO_Rodeo_PyBadge/v3.0_as7341/src/measure_screen.py`
- [Menú](https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Firmware/IO_Rodeo_PyBadge/v3.0_as7341/src/menu_screen.py): `2_UI/UI_Miguel/Firmware/IO_Rodeo_PyBadge/v3.0_as7341/src/menu_screen.py`
- **Protocolo USB**
- [Configuración](https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Firmware/IO_Rodeo_PyBadge/v3.0_as7341/src/configuration.py): `2_UI/UI_Miguel/Firmware/IO_Rodeo_PyBadge/v3.0_as7341/src/configuration.py`

### Prototipos y sensores

- [GUI TSL2591](https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UI_Miguel/Software/IO_Rodeo_TSL2591_GUI/v1.0/upch_gui/main_window.py): `2_UI/UI_Miguel/Software/IO_Rodeo_TSL2591_GUI/v1.0/upch_gui/main_window.py`
- [Monitor prototipo](https://github.com/msmro/fluorimetro_lowcost/blob/main/2_UI/UIs-env/UI3.py): `2_UI/UIs-env/UI3.py`
- [Prueba I2C](https://github.com/msmro/fluorimetro_lowcost/blob/main/1_Circuito/2_Receptor/1_TEST_i2c/Test_i2c/src/main.cpp): `1_Circuito/2_Receptor/1_TEST_i2c/Test_i2c/src/main.cpp`

### Other components

- **Operador**

## Connections

- Operador → Aplicación GUI: inicia
- Aplicación GUI → Ventana principal: crea ventana
- Firmware Mega → Sensor AS7341: lee canales
- Firmware Mega → Pantalla Nokia: actualiza pantalla
- Firmware Mega → LED excitación: controla PWM
- Firmware Mega → Cliente serial: JSON Lines
- Cliente serial → Protocolo: codifica y decodifica
- Cliente serial → Firmware Mega: envía comandos
- Firmware Mega → Cliente serial: envía estado
- Firmware PyBadge → Gestor colorímetro: ejecuta
- Gestor colorímetro → Mediciones: selecciona medición
- Gestor colorímetro → Sensores ópticos: configura sensores
- Gestor colorímetro → Pantallas medición: actualiza pantalla
- Gestor colorímetro → Menú: muestra menú
- Gestor colorímetro → Protocolo USB: intercambia mensajes
- Gestor colorímetro → Configuración: lee ajustes
- Operador → GUI TSL2591: usa
- Operador → Monitor prototipo: usa
