Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
18d8a4d
docs: spec do firmware Uno v3 (supervisao por marcos e robustez)
MatheusNespolo Oct 3, 2026
117b2a0
docs: plano de implementacao do firmware Uno v3
MatheusNespolo Oct 3, 2026
0e50192
test(firmware): protocolo serial em logica pura com contrato do forma…
MatheusNespolo Oct 3, 2026
5e91ff3
feat(firmware): filtro de entrada e causa do reset em logica pura
MatheusNespolo Oct 3, 2026
d521a91
feat(firmware): supervisor de entrega por marcos (partida, transito, …
MatheusNespolo Oct 3, 2026
a8cf76b
fix(firmware): ocupouEm marcado apos a leitura de millis nao confirma…
MatheusNespolo Oct 3, 2026
8c015ea
feat(firmware): maquina de estados com checagem previa e debito so na…
MatheusNespolo Oct 3, 2026
749fdc6
fix(firmware): propriedade de debito por varredura, juncao ocupada an…
MatheusNespolo Oct 3, 2026
15922e7
feat(firmware): textos do LCD 16x2 por situacao
MatheusNespolo Oct 3, 2026
d5fa4c4
feat(firmware): Uno v3.0 modular com marcos, watchdog e diagnostico
MatheusNespolo Oct 3, 2026
a549e2f
fix(firmware): LCD com I2C preso desliga o LCD, watchdog para os moto…
MatheusNespolo Oct 3, 2026
283361c
docs(firmware): marcos, novos erros, campos opcionais, CI e roteiro d…
MatheusNespolo Oct 3, 2026
11166ec
docs(firmware): roteiro com peca no topo nos passos de falha e notas …
MatheusNespolo Oct 3, 2026
bd8cb27
fix(firmware): juncao ocupada no ciclo da partida vai para erro sem l…
MatheusNespolo Oct 3, 2026
816c524
fix(firmware): energizacao com PORF e BORF sai como energia, nao brow…
MatheusNespolo Oct 3, 2026
ad3ddd9
test(firmware): bordas do timeout (12499/12500 ms) e do pulso minimo …
MatheusNespolo Oct 3, 2026
9ee5ca7
fix(firmware): captura da juncao descarta pulso anterior a partida e …
MatheusNespolo Oct 3, 2026
f591263
fix(firmware): watchdog em volta do lcdIniciar, kick fora do tempo da…
MatheusNespolo Oct 3, 2026
5af4eb0
ci(firmware): fixa LiquidCrystal I2C 1.1.2 e lista firmware-logica no…
MatheusNespolo Oct 3, 2026
22f357a
docs(firmware): juncao ocupada na partida, limitador de rajada e caus…
MatheusNespolo Oct 3, 2026
2d9f2b6
docs: remove spec e plano do firmware v3
MatheusNespolo Oct 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 17 additions & 3 deletions .github/workflows/lint-and-security.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -114,13 +114,18 @@ jobs:

- name: Instalar bibliotecas Arduino
run: |
arduino-cli lib install "LiquidCrystal I2C" "ArduinoJson@6.21.5" "PubSubClient"
arduino-cli lib install "LiquidCrystal I2C@1.1.2" "ArduinoJson@6.21.5" "PubSubClient"

- name: Criar secrets.h de exemplo (arquivo real não é versionado)
run: cp esp32/gateway_mqtt/secrets.h.example esp32/gateway_mqtt/secrets.h

- name: Compilar Arduino Uno (principal)
run: arduino-cli compile --fqbn arduino:avr:uno --warnings all arduino/data_flow_inventory/data_flow_inventory.ino
- name: Compilar Arduino Uno (principal) e conferir RAM (máx. 65%)
run: |
set -o pipefail
arduino-cli compile --fqbn arduino:avr:uno --warnings all arduino/data_flow_inventory/data_flow_inventory.ino 2>&1 | tee uno.log
ram=$(grep -oP 'Global variables use \d+ bytes \(\K\d+' uno.log)
echo "RAM global do Uno: ${ram}%"
test "$ram" -le 65

- name: Compilar ESP32 (gateway MQTT)
run: arduino-cli compile --fqbn esp32:esp32:esp32 --warnings all esp32/gateway_mqtt/gateway_mqtt.ino
Expand Down Expand Up @@ -192,3 +197,12 @@ jobs:

- name: Testes das métricas e da infraestrutura de observabilidade (sem Docker)
run: cd test/server_metrics && npm test

firmware-logica:
runs-on: ubuntu-latest
steps:
- name: Checkout código
uses: actions/checkout@v4

- name: Testes da lógica do firmware do Uno (g++ no PC)
run: make -C test/firmware_uno test
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,6 @@ esp32/test_mqtt_cloud/secrets.h.example
test/frontend_smoke/test-results/
test/frontend_smoke/playwright-report/
test/frontend_smoke/capturas/

# Binário dos testes da lógica do firmware (test/firmware_uno)
test/firmware_uno/testes
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -244,9 +244,9 @@ O Arduino opera com **5 estados**:
|---|--------|-----------|
| 1 | **AGUARDANDO_PEDIDO** | Sistema em repouso, aguarda comandos remotos (botões físicos desabilitados) |
| 2 | **VERIFICANDO_ESTOQUE** | Verifica sensor do topo + contador interno |
| 3 | **ACIONANDO_ESTEIRA** | Liga motor da esteira secundária correspondente |
| 4 | **ENTREGANDO_PECA** | Monitora o sensor da junção (timeout de 12,5 s); só debita o estoque após a confirmação e mantém o motor 3 s depois dela |
| 5 | **ERRO** | Sinaliza falha no LCD, aguarda reset manual |
| 3 | **ACIONANDO_ESTEIRA** | Liga o motor da esteira escolhida (kick-start e depois o PWM de regime) |
| 4 | **ENTREGANDO_PECA** | Supervisão por marcos: topo livre em 3 s, junção em 12,5 s (débito na confirmação) e 3 s de saída |
| 5 | **ERRO** | Motores desligados; LCD e dashboard mostram onde falhou (ver `docs/ARCHITECTURE.md` §3); aguarda reset |

> 📊 Diagramas completos (máquina de estados, fluxo operacional e sequência de comunicação) em [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md#3-máquina-de-estados-arduino).
>
Expand Down
50 changes: 50 additions & 0 deletions arduino/data_flow_inventory/config.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
// ============================================================
// DATA FLOW INVENTORY — Configuração do firmware do Uno
// ------------------------------------------------------------
// Pinos (iguais ao firmware v2.x e ao diagrama elétrico) e parâmetros
// por esteira. Para calibrar uma esteira, mude só a linha dela.
// ============================================================
#pragma once
#include "src/logica/supervisor_entrega.h"

#define VERSAO_FIRMWARE "3.0"

// ---- Serial (deve ser IGUAL ao Serial2 do ESP32) --------------------------
#define BAUD_SERIAL 9600

// ---- Motores DC (IRF520: 1 pino PWM por motor) ----------------------------
#define MOTOR_A 9 // Timer1
#define MOTOR_B 10 // Timer1
#define MOTOR_C 11 // Timer2

// ---- Sensores TCRT5000 (LOW = peça detectada; INPUT_PULLUP) ---------------
#define SENSOR_TOPO_A A0
#define SENSOR_TOPO_B A1
#define SENSOR_TOPO_C A2
#define SENSOR_JUNCAO_J1 A3 // PCINT11 (porta C)
#define SENSOR_JUNCAO_J2 2 // PCINT18 (porta D)
#define SENSOR_JUNCAO_J3 4 // PCINT20 (porta D)

// ---- LCD I2C 16x2 (endereços procurados no boot) ---------------------------
#define LCD_ENDERECO_1 0x27
#define LCD_ENDERECO_2 0x3F

// ---- Sistema -----------------------------------------------------------------
#define ESTOQUE_INICIAL 15 // peças de cada tipo ao ligar (não persiste)
#define INTERVALO_AMOSTRA_MS 5 // amostragem dos sensores
#define FILTRO_TOPO_MS 20 // estabilidade exigida no sensor de topo
#define INTERVALO_PUBLICACAO 1000 // ciclo das mensagens periódicas
#define PASSOS_PUBLICACAO 4 // status, estoque, sensores, esteiras
#define TELA_ABERTURA_MS 2000 // "Data Flow / Inventory v3.0" no boot

// ---- Parâmetros por esteira (A, B, C) ----------------------------------------
// pwmRegime : PWM depois do kick (bancada: mínimo ~150 para mover com peça)
// kickMs : partida em PWM 255 para vencer o atrito estático
// prazoPartidaMs : M1 — o topo precisa ficar livre neste prazo
// timeoutMs : M2 — a junção precisa confirmar a passagem neste prazo
// saidaMs : M3 — motor ligado depois da confirmação
// pulsoMinJuncaoMs : pulso mínimo na junção para valer como passagem
// pwm kick partida timeout saida pulso
#define PARAM_ESTEIRA_A { 200, 150, 3000, 12500, 3000, 20 }
#define PARAM_ESTEIRA_B { 200, 150, 3000, 12500, 3000, 20 }
#define PARAM_ESTEIRA_C { 200, 150, 3000, 12500, 3000, 20 }
Loading
Loading