Manual Mestre da Yara Box

Status global: 📝 em construção Última atualização: 2026-05-14 Responsável: Rodrigo Belli Idioma: português (PT-BR) Objetivo: permitir a reprodução completa de uma Yara Box do zero, do projeto à instalação técnica em campo


Como usar este manual

Mapa visual do manual mestre da Yara Box

Figura 00.1 — Mapa visual do manual mestre: sequência dos 10 capítulos e 3 apêndices, com status e função de cada bloco.

O manual é dividido em 10 capítulos temáticos (visão → eletrônica → mecânica → elétrica → firmware → cloud → montagem → testes → instalação → operação) e 3 apêndices (BOM, esquemáticos, calibração bruta).

Cada capítulo declara no topo:

  • Status: 📝 rascunho · 🚧 bloqueado · ✅ pronto
  • Audiência
  • Última atualização (ISO YYYY-MM-DD)
  • TOC interno

Bloqueadores externos aparecem em blocos:

🚧 BLOQUEADO — aguardando <o quê> de <quem> TODO ao destravar: <ação concreta>

Convenções de notação:

  • Refs cruzadas: [Cap N — Título](NN_xxx.md)
  • Refs a código (firmware): link permanente GitHub agua-camelo-cs/YB-<repo>/blob/main/<path>#L<linha> (repos privados — acesso restrito à organização)
  • Refs a materiais Embrapii: caminho relativo (../Macroentregas_Embrapii/...)
  • Diagramas: Mermaid inline para fluxos/arquitetura; PNG/JPG em imagens/<NN_capitulo>/ para fotos e renders

Índice

#CapítuloStatusResumo
1Visão & Arquitetura✅ prontoO que é o Wara Box, três inovações centrais, arquitetura macro, ecossistema IP
2Eletrônica✅ pronto3 PCBs (Principal-DevKit, Joker-Core, Seletor de Alimentação) + DAQ Shield
3Mecânico & Hidráulico✅ prontoEstrutura, chapas PEAD cotadas, P&ID formal com tags ISA-5.1
4Elétrico✅ prontoHierarquia de 5 fontes, bateria 3S3P, limiares e consumo
5Firmware✅ prontoESP32-S3, 14 estados, 15 módulos lib/, config.json
6Backend & Cloud✅ prontoVPS Vultr + Docker Compose + ThingsBoard CE + Nginx + SSL
7Montagem física🚧 bloqueado (parcial)Estrutura conceitual + workaround. Aguardando sessão presencial PICG para passo-a-passo formal
8Testes & Calibração✅ prontoProcedimentos formais PICG (pressão, vazão, dosadora) + ensaios Fundenor
9Instalação técnica🚧 bloqueado (parcial)Estrutura conceitual + checklist. Aguardando sessão presencial PICG para comissionamento formal
10Operação & Manutenção✅ prontoUI Yara Box, limiares, manutenção preventiva, troubleshooting
AApêndice A — BOM completo✅ prontoBOM consolidada (77 SKUs gerada automaticamente do xlsx) + 7 chapas PEAD cotadas
BApêndice B — Esquemáticos✅ prontoPDFs dos esquemáticos, KiCad sources, P&ID, datasheets
CApêndice C — Calibração bruta✅ prontoValores reais da unidade 001 + tabelas brutas PICG + foto do caderno

Linha do tempo de versões

DataEventoImpacto
2026-05-14Manual iniciado. PICG entregou itens 2/3/4 do email (P&ID + 2D chapas + procedimentos calibração). Sessão de infra concluída (VPS Vultr + TB CE).5 bloqueadores → 1 (sessão presencial)
2026-05-14v1 do manual fechada. 14 arquivos .md (~5.300 linhas). 11 capítulos/apêndices ✅ pronto, 2 capítulos 🚧 bloqueado parcial (Cap 7 Montagem + Cap 9 Instalação — ambos aguardando sessão presencial PICG). Script gerador de BOM versionado em scripts/bom_xlsx_to_md.py.Manual publicável internamente; aguarda complementos PICG para fechar 100%

Bloqueadores externos abertos

#BloqueadorCapítulos afetadosStatusOwner
1Sessão presencial de montagem física + passo-a-passo formalCap 7, Cap 9🚧 aguardandoPICG/IFF (item 1 do email 11/05)
2Procedimento específico de calibração de tensões (bateria/bomba)Cap 8 §tensões⚠️ gap pequenoPICG/IFF (follow-up curto)

Glossário rápido

TermoSignificado
Yara Box / Wara BoxUnidade portátil de tratamento de água para consumo humano, instrumentada com IoT. "Yara" é a marca; "Wara" é a empresa que fabrica (Wara Tech).
ESP32-S3Microcontrolador dual-core que roda o firmware embarcado
PCB JokerPlaca principal final (com módulo JNG-E, Eneltec) — adotada após reunião 27/03/2025
PCB Seletora v1.1.1Placa de chaveamento entre 5 fontes de energia (CMA51H × 3 relés)
JNG-EMódulo da Eneltec adotado pra viabilizar suporte pós-Embrapii pela Água Camelo
SIM7080GMódulo GSM/3G/4G + GPS
ADS1115ADC I2C 16-bit, 4 canais — usado para pressão e tensões
PCF8574Expansor I/O I2C — usado para LEDs, solenóides, chaves de nível, botões
A4988Driver de motor de passo da bomba dosadora
ThingsBoard CEPlataforma IoT open source — broker MQTT + DB + UI web
Tenant (ThingsBoard)Organização isolada na plataforma. No nosso modelo, 1 cliente = 1 tenant
AP modeYara Box virando ponto de acesso WiFi próprio (yarabox_AP) para configuração local
OTAOver-the-air update (firmware/config atualizados remotamente)
P&IDPiping and Instrumentation Diagram — diagrama técnico com tags ISA-5.1
PEADPolietileno de Alta Densidade — material das chapas estruturais
EMBRAPII PIFF-2412.0051Projeto que financiou o desenvolvimento original (IFFluminense + Água Camelo)
Portaria GM/MS Nº 888/2021Norma brasileira para potabilidade de água de consumo humano

Créditos

Desenvolvimento original (EMBRAPII PIFF-2412.0051):

  • PICG / Instituto Federal Fluminense — Polo de Inovação, Campos dos Goytacazes
    • Coordenador do projeto: Vitor Rangel da Silva
    • Pesquisadores: Eduardo Atem de Carvalho, William da Silva Vianna
    • Estudantes: Marllon Batista da Conceição, Valmir Monteiro Júnior, Matheus Vieira dos Santos, João Vitor Bernardo Moreira da Silva, Marcos Sabino Magro Sales de Oliveira
  • Água Camelo / Wara Tech
    • Responsável: Rodrigo Belli

Financiamento: EMBRAPII — Empresa Brasileira de Pesquisa e Inovação Industrial


Documento-fonte

Handoff original: HANDOFF_Manual_Mestre_Yara_Box.md

CAP 01 — VISÃO

Capítulo 1 — Visão & Arquitetura

Status: ✅ pronto Última atualização: 2026-05-14 Responsável: Rodrigo Belli Tempo de leitura estimado: 15 minutos


Sumário


1. O que é a Yara Box

Visão geral ilustrada da Yara Box

Figura 01.1 — Visão geral do produto: identidade física da Yara Box, principais subconjuntos, dimensões e destaques tecnológicos.

A Yara Box é uma unidade portátil e autônoma de tratamento de água para consumo humano, instrumentada com IoT. Em uma única caixa de até 25 kg e dimensões de 80×40×40 cm, integra:

  • Filtração em 4 estágios (grade → disco 130 μm → microfiltração 0,2 μm → ultrafiltração 0,01 μm)
  • Cloração ativa proporcional à vazão, controlada por uma bomba peristáltica com motor de passo
  • Telemetria remota via Wi-Fi e GSM, com publicação MQTT em ThingsBoard
  • Operação híbrida — alimentada por até cinco fontes diferentes de energia (rede AC, 12 VDC direto, gerador, painéis solares ou bomba manual), com bateria 18650 para autonomia de até 72 horas sem energia externa
  • Capacidade de até 300 L/h (parametrizável até 600 L/h)

A Yara Box foi desenvolvida no âmbito do projeto EMBRAPII PIFF-2412.0051 ("Desenvolvimento de uma Unidade Portátil Instrumentada com Tecnologia IoT para o Tratamento de Água para Consumo Humano"), em parceria entre o Polo de Inovação do IFFluminense (PICG) e a Água Camelo, com financiamento da EMBRAPII.

A unidade é projetada para atender comunidades em áreas rurais, remotas, emergenciais ou com infraestrutura elétrica precária, e atende à Portaria GM/MS Nº 888/2021 (norma brasileira de potabilidade) — em particular o intervalo de 0,2–2 mg/L de cloro residual livre, ver §6.


2. Audiência e estrutura deste manual

Este manual destina-se a um profissional com formação técnica, mesmo sem conhecimento prévio do projeto. O objetivo é permitir que essa pessoa reproduza uma Yara Box do zero — projete e fabrique as PCBs, montagem mecânica/hidráulica, instale o firmware, suba o backend e calibre a unidade — usando apenas este manual, os repositórios de código vinculados e a BOM consolidada.

O conteúdo está organizado em 10 capítulos temáticos (este, mais 9) e 3 apêndices (BOM, esquemáticos, calibração bruta). Cada capítulo declara no topo seu status (📝 rascunho, 🚧 bloqueado, ✅ pronto), audiência específica e data ISO da última atualização.

Os capítulos podem ser lidos de forma linear (ordem natural: visão → eletrônica → mecânica → ... → operação) ou consultados como referência por tópico. Refs cruzadas linkam capítulos relacionados.

Documentos-fonte usados na construção deste manual (referência permanente):

  • Três Macroentregas do projeto EMBRAPII PIFF-2412.0051 (Manual de configuração, Manual do desenvolvedor, Projeto do sistema, etc.)
  • Repositórios agua-camelo-cs/YB-* no GitHub (mirrors privados dos repos originais do GitLab PICG)
  • Resposta complementar do PICG de 14/05/2026 (procedimentos de calibração, P&ID formal, 2D cotado das chapas PEAD)
  • Backup operacional da unidade Yara Box 001 em produção (/11-Confidencial/YaraBox_001_Backup_Config.md)
  • Sessão de infraestrutura de 14/05/2026 (migração do backend de iot.picg.iff.edu.br para yarabox.aguacamelo.com.br)

3. Três inovações centrais

A Yara Box combina filtração + cloração + telemetria + autonomia energética em uma única unidade transportável. Três diferenciais sustentam essa proposta:

3.1. Cloração inteligente proporcional à vazão

A bomba peristáltica dosadora, acionada por motor de passo (via driver A4988), doseia hipoclorito de sódio (4%) em tempo real com base na vazão instantânea de água tratada. A cada ciclo de leitura do sensor de vazão Hall (FE300), o microcontrolador calcula o número de passos do motor pela fórmula:

D = (C × Q) / E

Onde:

  • D — passos do motor a executar no ciclo
  • C — concentração-alvo de cloro residual (mg/L), configurável
  • Q — vazão instantânea medida (L/min)
  • E — eficiência volumétrica da bomba dosadora (mL/passo, calibrável)

Parâmetros configuráveis ficam em data/config.json (ver Cap 5 — Firmware):

  • Dosagem-alvo: 5–50 μL/L (dose_hipoclorito_ug-L)
  • Calibração da dosadora: ~0,333 mL/passo padrão; 0,32078445 mL/passo medido em laboratório PICG e em uso na unidade 001 (ver Apêndice C)
  • Calibração da vazão: 0,253526896 mL/pulso na unidade 001

Diferencial competitivo: mantém concentração de cloro residual aproximadamente constante mesmo com flutuações de pressão e vazão — comportamento superior a sistemas Venturi (dosagem dependente de pressão diferencial) ou a sistemas de dosagem por tempo fixo.

Pegadinha histórica documentada: no Ensaio 1 da Fundenor (03/03/2026), o cloro residual ficou em 0,1 mg/L (fora do padrão 0,2–5,0). Causa raiz: o cálculo usava concentração de hipoclorito de 12% quando o produto real era 4%. Após a correção do parâmetro (concentracao_hipoclorito_porcentagem: 4), o cloro subiu para 0,8 mg/L (dentro do padrão) no Ensaio 2 (11/03/2026). Detalhes em Cap 8 §6.

3.2. Rastreabilidade e telemetria IoT

A Yara Box transmite telemetria via MQTT para uma instância de ThingsBoard Community Edition, hospedada em VPS própria da Água Camelo (yarabox.aguacamelo.com.br). Dois canais redundantes:

  • Wi-Fi quando há rede local disponível
  • GSM/3G/4G via módulo SIM7080G (com GPS embutido) — consumo de apenas ~5 μA em sleep

Dados publicados a cada 30 segundos (publicação parcial) e a cada 10 minutos (publicação completa):

  • Pressão em até 4 pontos do circuito hidráulico (PT100, PT101, PT102, PT103)
  • Vazão instantânea e acumulada
  • Nível do reservatório de hipoclorito (LSL200, LSLL200)
  • Tensão de alimentação e tensão de bateria
  • Volume total tratado e volume desde a última manutenção
  • Geolocalização (GPS), quando disponível
  • Estado da máquina (Tratamento / Idle / Lavagem / Calibração / Teste)

Alertas automáticos: dosagem fora da faixa, baixo cloro, pressão anormal, nível crítico de hipoclorito, tensão crítica de bateria.

Manutenção preditiva por volume tratado desde a última intervenção (lavagem 10 mil L, limpeza 50 mil L, troca de filtro 100 mil L ou 365 dias, recalibração 100 mil L) — configurável via config.json (ver Cap 10 — Operação & Manutenção).

3.3. Unidade integrada plug-and-play

Mecânica modular construída em perfis de alumínio estruturais (ALU-01 a ALU-04) com fechamentos em chapas de PEAD (polietileno de alta densidade) — sete chapas distintas com geometrias cotadas, ver Cap 3 §2.2 e Apêndice A.

Dimensões alvo: 80×40×40 cm, até 25 kg, com quatro rodízios para deslocamento. Modelo 3D completo em STEP files no repositório YB-projeto-mecanico-hidraulico. Renderização e revisão de débitos técnicos do CAD em Macroentregas_Embrapii/Macroentrega_3/revisao_3D_claude/.

Energia híbrida via PCB Seletora v1.1.1 (chaveamento entre 5 fontes — ver Cap 4 — Elétrico) e bateria 18650 em arranjo 3S3P (11,1 V nominal, 6,48 Ah, autonomia ~72 h sem bombeamento).


4. Arquitetura macro (5 camadas)

Arquitetura macro em 5 camadas da Yara Box

Figura 01.2 — Arquitetura macro em 5 camadas: tratamento hidráulico, sensores/atuadores, controle embarcado, energia híbrida e cloud.

Olhando do macro pro micro, a Yara Box organiza-se em cinco camadas funcionais:

Cada camada é detalhada em capítulo próprio:

CamadaFunção primáriaCapítulo
1. HidráulicaCaptação → filtração → cloração → saída + retrolavagemCap 3 — Mecânico & Hidráulico
2. EletrônicaSensoriamento + controle + I/O + comunicaçãoCap 2 — Eletrônica
3. EnergiaMúltiplas fontes + chaveamento + bateria + autonomiaCap 4 — Elétrico
4. FirmwareMáquina de estados + telemetria + UI local + OTACap 5 — Firmware
5. BackendPlataforma IoT + MQTT broker + UI web + multi-tenancyCap 6 — Backend & Cloud

Dentro da Camada 4 (Firmware), a organização interna do código segue arquitetura clássica em camadas (Aplicação → Lógica → Serviços → HAL → Hardware), com processamento dual-core distribuído via FreeRTOS — núcleo 0 cuida de sensoriamento e comunicação externa, núcleo 1 cuida de UI local e acionamento do motor de passo. Detalhe completo em Cap 5 §4.


5. Drivers de produto

A evolução do produto é orientada por dois drivers mensuráveis, não por fases temporais. Toda decisão de engenharia (componente, firmware, mecânica, software) precisa puxar pelo menos um deles.

Driver A — Custo por litro entregue (R$/L)

  • Por que importa: define margem unitária, viabiliza preço competitivo, abre o mercado de pasto (24× maior em volume que confinamento, mas com poder aquisitivo menor).
  • Métrica: R$ por m³ de água tratada entregue ao bebedouro.
  • Baseline atual: ~R$ 1,87/m³ (COGS R$ 728/Box/mês ÷ 12.960 L/dia × 30 dias).
  • Alavancas: BOM (R$ 8K protótipo → R$ 4K escala), vazão (540 L/h → mais nas próximas gerações), vida útil dos filtros UF, eficiência de cloração, manutenção preditiva, self-cleaning.

Driver B — Autonomia (operação sem humano)

  • Por que importa: reduz necessidade de equipe operacional, permite escalar volume sem inflar headcount, viabiliza operação em locais sem energia/sinal estáveis (pasto, áreas isoladas).
  • Métrica: tempo médio entre intervenções humanas; % de eventos resolvidos sem intervenção.
  • Baseline atual: ESP32 com 14 estados, buffer 72 h offline, failsafe mecânico, manutenção física mensal.
  • Alavancas: patentes P1/P2/P3 (ver §8), manutenção preditiva, detecção de anomalia em tempo real, conectividade redundante (Wi-Fi → GSM → LoRa → satélite), self-cleaning de filtros.

Régua de decisão: antes de qualquer mudança de produto, perguntar (1) quanto reduz R$/L? (2) quanto aumenta autonomia? Se a resposta a ambas é "nada", a mudança é cosmética e fica adiada.


6. Conformidade regulatória

A Yara Box é projetada para atender à Portaria GM/MS Nº 888/2021 do Ministério da Saúde brasileiro, que estabelece os procedimentos de controle e vigilância da qualidade da água para consumo humano e seu padrão de potabilidade.

Parâmetros monitorados em campo (telemetria):

  • Vazão instantânea (controle proporcional da cloração)
  • Pressão em pontos críticos do circuito
  • Nível do reservatório de hipoclorito (controle de continuidade da desinfecção)
  • Tensão de alimentação (continuidade operacional)

Parâmetros validados em ensaios laboratoriais (Fundenor, Campos dos Goytacazes — RJ):

ParâmetroPadrão 888Ensaio 1 (saída)Ensaio 2 (saída)Conformidade
Coliformes TotaisAusência00
Escherichia coliAusência00
Turbidez0–5 NTU0,30,4
Cor Aparente≤15 mgPtCo/L7,03,0
Ferro≤0,30 mg/L0,02n/a
Manganês≤0,10 mg/L0,00n/a
pH6,0–9,07,1–7,2n/a
Cloro Residual Livre0,2–5,0 mg/L0,1 (❌)0,8 (✅)✅ após correção

Detalhes completos em Cap 8 §6 e fonte primária Macroentregas_Embrapii/Macroentrega_3/Testes/consolidado-ensaios.md.

Gargalo identificado nos ensaios: o filtro de microfiltração (MF, 0,2 μm, cartucho descartável) saturou após ~400–450 L com água de 140 NTU — autonomia comercialmente inviável. Substituição em avaliação com filtro tipo "Camelo" (carcaça inox, lavável, retrolavável). Resultado do teste de substituição em Cap 8 §6.3.


7. Linha do tempo do desenvolvimento (Embrapii)

O projeto EMBRAPII PIFF-2412.0051 foi estruturado em três macroentregas:

Macroentrega 1 — aceita

  • Detalhamento dos parâmetros principais, conceituais e tecnológicos
  • Projeto preliminar mecânico, eletro-eletrônico e software
  • Relação de aquisição de itens comerciais e tecnológicos
  • Critérios de aceitação definidos

Macroentrega 2 — aceita em 03/11/2025

  • Desenvolvimento eletro-eletrônico e de software (projeto atualizado com adoção do módulo JNG-E da Eneltec na PCB Core, após reunião de 27/03/2025 — decisão estratégica para viabilizar suporte pós-projeto pela Água Camelo)
  • Testes preliminares dos subsistemas (PCB Seletora de Alimentação fabricada, testada e validada via JLCPCB)
  • Montagem preliminar do protótipo (estrutura com painel, sistema hidráulico visível)
  • Visita técnica em 24/10/2025 (fotos do protótipo montado disponíveis em Macroentregas_Embrapii/Macroentrega_2/Fotos da Visita 24out25/)

Macroentrega 3 — em andamento (atual)

  • Ensaios laboratoriais Fundenor (eficácia bacteriológica >99% comprovada, problema de cálculo de cloro resolvido)
  • Eletrônica nova validada (4 painéis solares funcionais, GPS validado em ambiente aberto)
  • Gargalo do filtro de microfiltração identificado e em avaliação de substituição
  • Resposta complementar do PICG em 14/05/2026 com procedimentos formais de calibração (pressão, vazão, dosadora), fluxograma P&ID com tags ISA-5.1 e 2D cotado das 7 chapas PEAD

Em paralelo — infraestrutura própria

Em 14/05/2026, a Água Camelo concluiu a migração do backend de iot.picg.iff.edu.br (PICG) para yarabox.aguacamelo.com.br (VPS Vultr SP própria, ThingsBoard CE 4.2.1, Docker Compose, Nginx + Let's Encrypt). Documentação completa em Cap 6 — Backend & Cloud.


8. Ecossistema de propriedade intelectual

A Yara Box é base de um ecossistema de IP sustentado por três patentes de software já depositadas no INPI em 18/03/2026 (titularidade 100% Rodrigo Machado Belli) e uma patente de hardware em preparação (titularidade compartilhada 50/50 entre IFFluminense e Água Camelo):

PatenteNúmero INPIReivindicaçõesFunção
P1 — Open RouterBR 10 2026 006358-420Classifica perfil da água de entrada e roteia para a sequência ótima de tratamento dentro da unidade
P2 — Water Network FabricBR 10 2026 006359-213Coordena múltiplos pipelines de filtro internos à unidade para atingir parâmetros de saída
P3 — Digital TwinBR 10 2026 006360-619Gêmeo digital da unidade — simula antes de implementar, prevê falha, recomenda ação
Hardwareem preparaçãoPatente da Yara Box como sistema integrado (titularidade 50/50 IFF/Água Camelo)

Importante: as três patentes descrevem roteamento de fluido entre filtros DENTRO de uma única unidade Yara Box — não orquestração de múltiplas unidades em rede. Princípio: entra água com perfil X, sistema identifica, roteia pelos filtros necessários, output bate parâmetros desejados.

Total: 52 reivindicações de software depositadas.


9. Como navegar pelo restante do manual

Próximas leituras sugeridas conforme objetivo:

Quero entender...Vá para
As placas (PCBs Joker, Seletora, DevKit) e seus subcircuitosCap 2 — Eletrônica
Gabinete, chapas PEAD cotadas, filtros, P&ID hidráulico formalCap 3 — Mecânico & Hidráulico
Hierarquia de 5 fontes de energia + bateria + limiaresCap 4 — Elétrico
Como o firmware é organizado, máquina de 14 estados, config.jsonCap 5 — Firmware
Subir um backend ThingsBoard CE do zero (VPS + Docker + SSL)Cap 6 — Backend & Cloud
Montar fisicamente uma Yara Box em bancadaCap 7 — Montagem física (parcial)
Calibrar sensores e validar a unidade em laboratórioCap 8 — Testes & Calibração
Instalar a unidade no cliente finalCap 9 — Instalação técnica (parcial)
Operar e manter uma Yara Box no dia a diaCap 10 — Operação & Manutenção
Lista de materiais completa e fornecedoresApêndice A — BOM
Esquemáticos PDF, sources KiCad, datasheetsApêndice B — Esquemáticos
Valores reais de calibração da unidade 001 + dados brutos PICGApêndice C — Calibração bruta

Fontes deste capítulo

  • Arquitetura_Yara_Box/Visao_Tecnica_Wara_Box.md (consolidação técnica)
  • Arquitetura_Yara_Box/arquitetura_produto.md (drivers A/B e régua de decisão de produto)
  • Macroentregas_Embrapii/Macroentrega_3/fontes códigos e projetos/modulo-basico/ARCHITECTURE.md (arquitetura em 4 camadas do firmware)
  • Macroentregas_Embrapii/.../picg-resposta-2026-05-14/Fluxogramas.docx (créditos da equipe PICG)
  • Macroentregas_Embrapii/Macroentrega_3/Testes/consolidado-ensaios.md (resultados Fundenor)
  • 11-Confidencial/YaraBox_001_Backup_Config.md (parâmetros operacionais reais)
CAP 02 — ELETRÔNICA

Capítulo 2 — Eletrônica (PCBs)

Status: ✅ pronto Última atualização: 2026-05-14 Audiência: engenheiro eletrônico (KiCad, ESP32, datasheets) Tempo de leitura estimado: 20 minutos


Sumário


1. Visão geral das placas

Ecossistema eletrônico da Yara Box

Figura 02.1 — Ecossistema eletrônico: relação entre Principal-DevKit, Joker/Core, Seletora de Alimentação e DAQ Shield.

A eletrônica da Yara Box é composta por três PCBs próprias (mais uma PCB auxiliar de instrumentação):

PCBFunçãoStatusRepositório
Principal-DevKit-ESP32S3PCB de prototipagem usada para bring-up de firmware. ESP32-S3 em formato DevKit, sem JNG-E.Em uso para bancadaYB-modulo-basico-pcb-principal-devkit-esp32s3
Joker (Core)Placa principal final com módulo JNG-E (Eneltec) — substituiu projeto próprio do ESP32-S3 em 27/03/2025 para viabilizar suporte pós-projeto pela Água CameloEm desenvolvimento (V1.1)YB-modulo-basico-pcb-principal-joker
Seletora de Alimentação v1.1.1Chaveamento automático entre 5 fontes (rede AC, 12 VDC direto, gerador, solar MPPT, bomba manual) via 3 relés CMA51HFabricada, testada, validada via JLCPCB. Melhorias planejadas para v2YB-modulo-basico-pcb-seletor-de-alimentacao
DAQ Shield (Datalogger)PCB auxiliar montada sobre Arduino Nano ATmega328 para instrumentação de testes (não vai no produto final)FabricadaYB-dataloggerpcb

Todos os projetos KiCad estão clonados localmente em:

Macroentregas_Embrapii/Macroentrega_3/fontes códigos  e projetos/
├── modulo-basico-pcb-principal-devkit-esp32s3-main/
├── modulo-basico-pcb-principal-joker-main/
├── modulo-basico-pcb-seletor-de-alimentacao-main/
└── (DAQ shield em `YB-dataloggerpcb` apenas no GitHub)

A relação entre as PCBs no sistema é:

Para detalhes do projeto elétrico geral (fiação fora das PCBs, hierarquia de fontes, bateria), ver Cap 4 — Elétrico.


2. PCB Principal-DevKit-ESP32S3 (prototipagem)

Repositório: YB-modulo-basico-pcb-principal-devkit-esp32s3 (privado)

Versão de prototipagem desenhada antes da decisão pelo módulo JNG-E. Usa o módulo ESP32-S3-WROOM diretamente no formato DevKit (o board é o mesmo esp32-s3-devkitc-1 da Espressif). Função: permitir desenvolvimento e validação do firmware enquanto a PCB Joker (Core final com JNG-E) está sendo finalizada.

Quando usar: desenvolvimento em bancada, debug com gravação USB, antes de migrar para o Joker em produção. Quando não usar: unidades de produção — usar o Joker.


3. PCB Joker — Core final com módulo JNG-E

PCB Joker anotada com componentes principais

Figura 02.2 — PCB Joker/Core anotada: MCU, comunicação, sensoriamento, atuadores, UI local e armazenamento funcional.

Repositório: YB-modulo-basico-pcb-principal-joker (privado) Repo local: Macroentregas_Embrapii/Macroentrega_3/fontes códigos e projetos/modulo-basico-pcb-principal-joker-main/

3.1. Visão geral e o porquê do JNG-E

A PCB Joker é a placa principal final da Yara Box e centraliza:

  • O MCU (módulo JNG-E da Eneltec, com ESP32-S3-WROOM)
  • O módulo de comunicação celular SIM7080G (GSM/3G/4G + GPS, consumo em sleep ~5 μA)
  • Interfaces I²C para sensores analógicos (ADS1115) e I/O digital (PCF8574)
  • Drivers de motor de passo (A4988) para a bomba dosadora
  • Drivers de válvula (IRLZ44N)
  • Conectores para sensores de pressão, vazão, nível, e display SH1107

Por que JNG-E? Reunião técnica de 27/03/2025 decidiu migrar do ESP32-S3 direto (projeto próprio do PICG) para o módulo JNG-E da Eneltec. Razão: garantir suporte e manutenibilidade pós-projeto pela Água Camelo (a Eneltec é um fornecedor brasileiro estabelecido, com BSP testado e suporte técnico contínuo). Trade-off aceito: BOM unitário ligeiramente maior, em troca de viabilidade operacional de longo prazo.

3.2. Sub-esquemáticos (9 sheets KiCad)

A PCB Joker está organizada em uma sheet principal (modulo-basico-pcb-principal-joker.kicad_sch) com 8 sub-sheets dedicadas:

Sub-esquemáticoFunção
ALIMENTAÇÃO.kicad_schRegulação de tensão (entrada via J2 da Seletora + bateria 3S3P), distribuição interna
Bombas.kicad_schDrivers para bomba elétrica (saída PWM via LEDC) e bomba dosadora (passos via A4988)
SENSORES DE PRESSÃO.kicad_schInterface ADS1115 (I²C @ 0x48) para 4 transmissores PT100/101/102/103 (4–20 mA convertido para tensão via shunt)
SENSOR DE VAZÃO.kicad_schEntrada digital com interrupção em GPIO 16 — sensor Hall FE300
CHAVE DE NÍVEL.kicad_schEntradas para LSL200 e LSLL200 (chaves discretas de nível do hipoclorito) via PCF8574
Válvula Solenoide.kicad_schDrivers IRLZ44N para válvulas solenóide 12 V (retrolavagem dos filtros UF)
EXPANSÃO DE PINO.kicad_schExpansores I²C PCF8574 (@ 0x20 e 0x24) para LEDs, solenóides, chaves, botões
SINALIZAÇÃO.kicad_schLEDs de status + buzzer (alarmes audiovisuais)
(sheet principal)Top-level: conecta todas as sub-sheets + ESP32-S3-WROOM/JNG-E + SIM7080G + conectores externos

3.3. Mapeamento de pinos

Resumo dos pinos do ESP32-S3 usados (detalhamento em Cap 5 §15):

GPIOFunçãoSub-esquemático
4Encoder rotativo — canal AEXPANSÃO DE PINO
6Encoder rotativo — canal BEXPANSÃO DE PINO
8I²C SDA(compartilhado: ADS1115, PCF8574, SH1107)
9I²C SCL(compartilhado)
16Sensor de vazão FE300 (interrupção rising edge)SENSOR DE VAZÃO
17Bomba elétrica (LEDC PWM canal 0, duty fixo 255)Bombas
18Bomba dosadora — pino STEPBombas
(par)Bomba dosadora — pino DIRBombas
UART2 RX/TXSIM7080G (GSM + GPS)(sheet principal)

Endereços I²C:

  • ADS1115 #1 — 0x48 (PT100-103)
  • ADS1115 #2 — 0x49 (canais de expansão futuros)
  • PCF8574 #1 — 0x20 (relés/válvulas/LEDs principais)
  • PCF8574 #2 — 0x24 (expansão de I/O)
  • SH1107 (display) — 0x3C

3.4. Artefatos prontos no repositório

Em Macroentregas_Embrapii/.../modulo-basico-pcb-principal-joker-main/Documentos/:

Documentos/
├── bom/                       ← BOM da PCB Joker
├── datasheet/                 ← Datasheets dos componentes principais
├── esquematico.pdf            ← Esquemático completo em PDF (referência rápida)
├── layout.pdf                 ← Layout da PCB em PDF
└── mod_eneltec/               ← Documentação do módulo JNG-E

Também em IMGs/: imagens da arquitetura do sistema, do circuito LED-BUZZER, e dos módulos PCF8574, ADS1115 e do sensor capacitivo.

PDFs e artefatos completos referenciados em Apêndice B §1.


4. PCB Seletora de Alimentação v1.1.1

PCB Seletora de Alimentação anotada

Figura 02.3 — PCB Seletora v1.1.1: componentes, conectores e lógica de prioridade de fontes.

Repositório: YB-modulo-basico-pcb-seletor-de-alimentacao (privado) Repo local: Macroentregas_Embrapii/Macroentrega_3/fontes códigos e projetos/modulo-basico-pcb-seletor-de-alimentacao-main/ Status: ✅ fabricada via JLCPCB, testada e validada (ME2 aceita em 03/11/2025)

4.1. Função

Placa dedicada ao chaveamento automático entre 5 fontes de energia (ver Cap 4 para a lógica de hierarquia A→E). Implementa:

  • Retificação e filtragem das entradas AC/DC
  • Controle MPPT solar (CN3722)
  • Regulação Buck (XL4015) e Boost (XL6019) de tensão
  • Seleção da fonte ativa via 3 relés CMA51H (12 V, 15–20 A) controlados pela lógica interna
  • Saída separada para bomba elétrica (12 V/20 A) e lógica de controle (sinal para PCB Core via conector J2)
  • Chave ON/OFF geral

Princípio crítico: separa fisicamente a alimentação da bomba da alimentação lógica. Isto permite manter telemetria viva (PCB Core + bateria) mesmo quando não há energia disponível para bombeamento.

4.2. Sub-esquemáticos

A PCB Seletora tem uma sheet principal + 3 sub-sheets:

Sub-esquemáticoFunção
SELETOR_DE_FONTE.kicad_schLógica de seleção via 3 relés CMA51H
retifificacao_filtragem.kicad_schRetificação (diodos 20A10) e filtragem (capacitores eletrolíticos 1000 μF) das entradas AC/DC
CHAVE_ON-OFF.kicad_schControle de liga/desliga geral
(sheet principal)Top-level + conectores P1-P7 + J2

4.3. Componentes-chave e conectores

Componentes principais (BOM completa no repo):

ComponenteReferênciaQuantidadeFunção
CN3722 (módulo MPPT)U11Controlador de carga solar Maximum Power Point Tracking
XL4015 (módulo Step-Down / Buck)U21Regulação Buck para tensão de saída
XL6019 (módulo Step-Up / Boost)U31Regulação Boost para tensão de saída
CMA51H-S-DC12V-CK1, K2, K33Relés de seleção de fonte (12 V, 15–20 A)
SI4483ADYQ11MOSFET P-channel para chaveamento
20A10D1–D66Diodos retificadores (proteção e retificação)
1000 μF eletrolíticoC1–C55Filtragem de tensão

Conectores de entrada/saída:

ConectorFunção
P1Fonte AC 12 V (retificada internamente)
P2Entrada 12 VDC direta (mín. 5 A)
P3Painel Solar 1
P4Painel Solar 2
P6Bateria 3S Li-ion (11,1 V)
P7Saída BOMBA (12 V/20 A para bomba elétrica)
J2Sinal de alimentação para PCB Core (sinal_alimentação_core)

4.4. Bibliotecas KiCad customizadas

libsSeletor/ contém modelos 3D para os componentes principais (CN3722, XL4015, XL6019, CMA51H). Permite visualizar a placa em 3D para validação mecânica antes da fabricação.

4.5. Artefatos prontos

Em Macroentregas_Embrapii/.../modulo-basico-pcb-seletor-de-alimentacao-main/documentos/:

documentos/
├── ESQUEMATICO.pdf            ← esquemático em PDF
├── layout.pdf                 ← layout final
├── BOM/                       ← BOM completa para JLCPCB
├── Gerbers/                   ← arquivos de produção Gerber
├── positions/                 ← arquivos de posicionamento de componentes (pick-and-place)
└── netlist/                   ← netlist do projeto

Pronto para fabricação via JLCPCB. Custo unitário em volume baixo (~10 placas): da ordem de R$ 30–60/placa SMT-assembly inclusive.


5. PCB DAQ Shield (Datalogger para Arduino Nano)

Repositório: YB-dataloggerpcb (privado)

Shield de aquisição de dados projetado em KiCad para instrumentação de testes em bancada e campo. Montada sobre Arduino Nano ATmega328 (não vai no produto final).

5.1. Características do hardware

  • Isolação óptica via optoacopladores LTV-817 (entradas digitais/analógicas)
  • MOSFET SI4483ADY para chaveamento de cargas
  • Reguladores de tensão L78xx (fixos) e LM317 (ajustável)
  • Proteção ESD com TVS LESD5D5 nas entradas
  • Conectores industriais: 7 pinos e 3 pinos (pitch 9,5 mm); 2 pinos (pitch 5 mm, potência)

5.2. Variantes de firmware do Datalogger

Existem dois firmwares para a mesma PCB DAQ (selecionáveis na hora de gravar o Arduino):

Variante A — JSON Serial

Comunica via serial 115200 baud em formato request/response:

  • Cliente envia "readAll" → Arduino responde JSON com leituras de A0, D2/D3 (counters + frequência), D4 (estado lógico)
  • Aceita comando PWM para o pino 9 (0–255)
  • Cálculo de frequência a cada 10 s com debounce

Repositório: YB-datalogger (privado).

Variante B — Modbus RTU

Mesma PCB DAQ, firmware diferente. Protocolo Modbus RTU Slave (ID=1, 115200 baud, 8N1):

  • Input Registers (FC 04): IREG 0–5 (A0–A5), IREG 6 (estado D4–D7 compactado), IREG 7/8 (counter+freq D2), IREG 9/10 (counter+freq D3)
  • Holding Register (FC 06): HREG 0 (saída PWM pino 9, 0–255)
  • Funções Modbus suportadas: FC 01, 02, 03, 04, 05, 06, 0F, 10
  • Watchdog de 4 s habilitado (auto-reset em hang)
  • Limites: MAX_REGS=32, MAX_FRAME=128

Vantagens da variante Modbus: protocolo industrial padrão, compatível com CLPs e supervisórios, lê 6 canais analógicos (vs. 1 na JSON), watchdog para robustez.

Repositório: YB-datalogger-modbus (privado).

5.3. Dashboard Node-RED

Dashboard local separado do ThingsBoard, para visualização e logging em bancada. Roda em PC conectado ao Arduino via serial (/dev/ttyUSB0, 9600 baud).

Funcionalidades:

  • Gauge de vazão instantânea (L/h): frequência × 1.759 × 60 / 1000
  • 4 gauges de pressão estática (PT100–PT103) com calibração linear a × raw + b
  • Pressão diferencial em 3 filtros (PT100−PT101, PT101−PT102, PT102−PT103)
  • Slider PWM (0–255) com gauge de duty cycle
  • Logging CSV automático em /home/<user>/.node-red/dados/datalogger.csv com colunas: cont, vazaoInst, vazaoTotal, pwm, potencia, pt100–pt103, pdfiltro1–3
  • Gráfico histórico de pressão (line chart)

Constantes de calibração no Node-RED (referência cruzada com Cap 8):

SensorabUnidade
Vazão1.759L/min por pulso/s
PT1000.117847−11.9955psi
PT1010.120783−10.2665psi

6. Como fabricar (Gerbers, BOM JLCPCB)

Para fabricar uma cópia da Yara Box, o fluxo recomendado é:

6.1. PCB Seletora (mais simples — pronta)

  1. Baixar o repo YB-modulo-basico-pcb-seletor-de-alimentacao.
  2. Em documentos/Gerbers/, zipar os arquivos.
  3. No painel da JLCPCB: novo pedido → upload do zip → escolher SMT-assembly (opcional, recomendado).
  4. Subir a BOM e o arquivo de posicionamento (positions/).
  5. Confirmar componentes não fabricados (rotular como "Skip" — alguns são THT).
  6. Encomendar (R$ 30–60/placa em quantidades pequenas).

6.2. PCB Joker

  1. Abrir o projeto em KiCad 8.x.
  2. Verificar ERC/DRC (Electrical Rules Check / Design Rules Check).
  3. Gerar Gerbers e arquivos de posicionamento via PCBNew → Plot.
  4. Submeter na JLCPCB.
  5. Atenção: o módulo JNG-E não é fabricado pela JLCPCB — comprar separadamente da Eneltec e montar manualmente, ou via fabricante local que aceite componente fornecido pelo cliente.

6.3. PCB Principal-DevKit-ESP32S3

Igual à Joker, mas SEM o JNG-E (usa o módulo ESP32-S3-WROOM diretamente). Mais simples para fabricar em pequena escala.

6.4. PCB DAQ (opcional)

Só necessária para instrumentação de bancada. Submeter Gerbers do YB-dataloggerpcb.


7. Validações e testes preliminares (ME2)

A Macroentrega 2 (aceita em 03/11/2025) incluiu testes preliminares dos subsistemas eletrônicos:

SubsistemaStatusObservação
PCB Seletora de Alimentação v1.1.1✅ ValidadaChaveamento entre as 5 fontes testado em bancada; relés CMA51H operando corretamente em 12 V
Sensor de vazão FE300✅ CalibradoTabela de aferição em Macroentregas_Embrapii/Macroentrega_2/3.3 Testes preliminares dos subsistemas/tabela_aferição sensor de vazão 1_4 pol.jpeg
GPS (SIM7080G)✅ ValidadoFunciona em ambiente aberto. Não funciona sob estrutura de concreto fechada
ADS1115 + PT100/101✅ ValidadosCalibração via procedimento PICG, ver Cap 8 §2
PT102/PT103⚠️ Não calibrados nesta unidadeDefaults a=0.063, b=-18.14 em uso; quando sensores forem instalados, calibrar conforme procedimento
PCB Joker (Core)🟡 Em desenvolvimento (V1.1)Validação final pendente das macroentregas seguintes

Documentação de testes preliminares: Macroentregas_Embrapii/Macroentrega_2/3.3 Testes preliminares dos subsistemas/Testes preliminares dos subsistemas.docx.


Fontes deste capítulo

  • Repositórios locais em Macroentregas_Embrapii/Macroentrega_3/fontes códigos e projetos/:
    • modulo-basico-pcb-principal-joker-main/ (sheets KiCad + esquemático/layout PDFs + datasheets + IMGs)
    • modulo-basico-pcb-seletor-de-alimentacao-main/ (BOM completa, Gerbers, positions, ESQUEMATICO.pdf)
    • modulo-basico-pcb-principal-devkit-esp32s3-main/
  • Repositórios GitHub (mirrors privados): agua-camelo-cs/YB-modulo-basico-pcb-*
  • Macroentregas_Embrapii/Macroentrega_2/Relatório da PCB Seletor de Alimentação.pdf
  • Macroentregas_Embrapii/Macroentrega_2/3.3 Testes preliminares dos subsistemas/
  • Macroentregas_Embrapii/Macroentrega_3/5.1 .../Projeto do sistema.docx
  • Arquitetura_Yara_Box/Visao_Tecnica_Wara_Box.md §3.2

Esquemáticos completos e datasheets: ver Apêndice B.

CAP 03 — MECÂNICO

Capítulo 3 — Projeto Mecânico & Hidráulico

Status: ✅ pronto Última atualização: 2026-05-14 Audiência: engenheiro mecânico/hidráulico (sem conhecimento prévio do projeto) Tempo de leitura estimado: 20 minutos


Sumário


1. Visão geral do gabinete

Abertura do capítulo mecânico e hidráulico

Figura 03.1 — Opener técnico do sistema mecânico e hidráulico, com cadeia de tratamento e circuito hidráulico destacado.

A Yara Box é montada em um gabinete modular de até 80 × 40 × 40 cm e até 25 kg de peso total. A estrutura usa perfis de alumínio para o esqueleto e chapas de PEAD (polietileno de alta densidade) para os fechamentos. Quatro rodízios na base permitem deslocamento manual; uma alça superior facilita o transporte de curtas distâncias.

Princípio mecânico: modularidade + manutenibilidade em campo. A tampa lateral é abrível para acesso direto ao sistema hidráulico, à bateria 18650 e às PCBs. Sensores são posicionados em pontos específicos do circuito para acesso visual e troca rápida.


2. Estrutura mecânica

2.1. Perfis de alumínio

Quatro tipos de perfis estruturais conformam o esqueleto:

CódigoComprimentoQuantidade típica
ALU-01680 mm6
ALU-02300 mm4
ALU-03(cotado no projeto)
ALU-04490 mm4

Junções com cantoneiras (CANT-01) e parafusos M5/M6 conforme padrão de perfis 30×30 mm ou 40×40 mm (a especificação exata está na BOM consolidada — ver Apêndice A).

2.2. Chapas PEAD (7 chapas cotadas)

Os fechamentos do gabinete usam 7 chapas distintas de PEAD, todas com 5 mm de espessura. Os 2D cotados em formato ABNT foram entregues pelo PICG em 12/05/2026 (autor: Marllon Batista) e estão prontos para envio a fornecedores de corte:

ChapaDimensõesPDF cotado
Grande Lateral Esquerda500 × 250 × 5 mmPDF
Grande Superior e Inferior(cotado em PDF)PDF
Lateral Direita Interna(cotado em PDF)PDF
Pequena Lateral Esquerda(cotado em PDF)PDF
Pequena Superior e Inferior(cotado em PDF)PDF
Posterior Externa(cotado em PDF)PDF
Posterior Interna(cotado em PDF)PDF

PDFs em formato técnico ABNT, escala apropriada para fabricação por corte CNC ou roteamento. Material padrão: PEAD branco ou natural, 5 mm, classificado para uso em contato com água potável.

2.3. Acessórios

ComponenteFunção
SUP-ROD (4 rodízios)Deslocamento da unidade (peso até 25 kg)
DOB-01 (2 dobradiças)Tampa lateral abrível para manutenção
TAMPO-01Tampo superior
PEAD-DIVChapa divisória interna (separação sistema hidráulico vs eletrônico)
ALC-01Alça de transporte metálica (parte superior)
FRM-540x500Frame estrutural interno (suporte para PCBs e bateria)
SUP-RES-HIPOSuporte do reservatório de hipoclorito
SUP-BOM-PERISuporte da bomba peristáltica
MANOM-01Manômetro analógico 0–7 kgf/cm² (frontal do gabinete, indicação visual de pressão da bomba E)

Detalhamento e quantidades exatas na BOM consolidada — ver Apêndice A.


3. Sistema hidráulico (4 estágios + cloração)

O fluxo segue captação → 4 estágios de filtração → cloração proporcional → saída:

Cada estágio em detalhe:

3.1. Filtro 0 — Pré-captação (grade)

Grade ou pré-filtro grosseiro para reter partículas grandes (folhas, detritos, areia grossa) que possam danificar a bomba elétrica. Sem media filtrante substituível — limpeza por enxágue.

3.2. Filtro 1 — Disco 130 μm

Filtro de disco para remoção de partículas grandes, sedimentos e detritos antes dos filtros de membrana. Pressão máxima de trabalho: 0,79 MPa (≈115 psi).

Catálogo do fornecedor sugerido: ver Macroentregas_Embrapii/.../picg-resposta-2026-05-14/Fluxogramas.docx (link interno do PICG).

3.3. Filtro 2 — Microfiltração 0,2 μm

Membrana de polipropileno 0,2 μm, capacidade de até 300 L/h, pressão de trabalho 0,1–0,4 MPa.

⚠️ Gargalo identificado nos ensaios Fundenor (ME3): o cartucho descartável atual (não lavável, não plissado) satura após ~400–450 L com água de 140 NTU. Inviabilidade comercial em fontes de alta turbidez. Avaliação em curso de filtro alternativo tipo "Camelo" (carcaça inox, lavável, retrolavável) como substituto. Detalhes em Cap 8 §6 e em Macroentregas_Embrapii/Macroentrega_3/Testes/consolidado-ensaios.md.

3.4. Filtro 3A / 3B — Ultrafiltração 0,01 μm (dois em paralelo)

Membranas tubulares/capilares de 0,01 μm, dois cartuchos em paralelo (3A e 3B) com chaveamento por solenóides S1 e S2 para permitir retrolavagem alternada. Capacidade: até 300 L/h cada, pressão de trabalho 0,1–0,4 MPa.

O modelo 3D atual inclui 2 filtros UF físicos (decisão confirmada por Rodrigo em 07/05/2026 — modelo 3D está correto; BOM precisava ser atualizada para qty 2).

3.5. Cloração — Bomba peristáltica + misturador estático

A bomba dosadora peristáltica (Bomba D) injeta hipoclorito de sódio 4% do reservatório TQ Cloro (1,5–2 L) na linha após os filtros UF. O misturador estático (MIX) garante homogeneização sem partes móveis adicionais.

Cálculo da dosagem (referência cruzada com Cap 5 §10):

velocidade_passo = calibracao_bomba_dosadora × vazao_minuto × dose_hipoclorito

Concentração-alvo configurável (5–50 μg/L); dose default 4000 μg/L.

Capacidade do reservatório: ~36.000 L tratados por recarga de hipoclorito (com dosagem default).


4. P&ID formal (tags ISA-5.1)

A nomenclatura segue ISA-5.1 (Standard for Instrumentation Symbols and Identification). O fluxograma técnico completo está em Macroentregas_Embrapii/.../picg-resposta-2026-05-14/Fluxogramas.docx (PICG, 14/05/2026).

4.1. Diagrama

P&ID hidráulico completo da Yara Box

Figura 03.2 — P&ID hidráulico completo: captação, bombeamento, filtração, UF, cloração proporcional, instrumentação e drenos.

4.2. Tabela completa de tags

TagCategoriaFunçãoTipoComponente físico
Filtro 0FiltraçãoGrade ou pré-filtro para partículas grandesPassivoTela metálica / pré-filtro
FV301VálvulaRetenção logo após a grade (impede refluxo)PassivoVálvula de retenção
Bomba EAtuadorPressurização da água nos filtrosPWM 12VMotor-bomba diafragma 12V 160psi 8 L/min
Filtro 1FiltraçãoDisco 130 μm — pré-filtragem mecânicaPassivoFiltro de disco
Filtro 2FiltraçãoMF 0,2 μm — microfiltraçãoPassivoMembrana polipropileno
Filtro 3AFiltraçãoUF 0,01 μm — ultrafiltração (linha A)PassivoMembrana tubular/capilar
Filtro 3BFiltraçãoUF 0,01 μm — ultrafiltração (linha B)PassivoMembrana tubular/capilar
MIXMisturaHomogeneização água + hipocloritoPassivoMisturador estático
Bomba DAtuadorDosagem proporcional de hipocloritoMotor passoBomba peristáltica + driver A4988
Bomba manualAtuadorBackup mecânico sem energiaManualBomba pistão 300 L/min
FE300SensorSensor de vazão (entrada para controle FIQC300)Hall (frequência até 40 Hz)Sensor de vazão Hall — GPIO 16 (interrupção)
PT100, PT101, PT102, PT103SensorTransmissores de pressão em 4 pontosAnalógico 4–20 mA → ADS1115Transmissor de pressão industrial
TQ CloroReservatórioArmazenamento de hipoclorito de sódioPassivoTanque fechado 1,5–2 L
LSL200SensorChave de nível baixo de hipocloritoDiscretoPCF8574 — pino BP4
LSLL200SensorChave de nível muito baixo (intertravamento)DiscretoPCF8574 — pino BP5
S1, S2AtuadorVálvulas solenóides para retrolavagem dos filtros 3A e 3B12 VDC máx 3 ASolenóide + driver IRLZ44N — pinos AP4, AP5
PAHH100AlarmePressão muito alta nos filtros (intertravamento)LógicoDriver de buzzer + display
PLH100SinalizaçãoLâmpada de pressão alta nos filtros (manutenção)DisplaySH1107 display
PLL100SinalizaçãoLâmpada de pressão baixa (bomba defeituosa, vazamento)DisplaySH1107 display
LLL200SinalizaçãoLâmpada de nível baixo do reservatório de cloroSinaleiro + displayLED + display
LALL200AlarmeNível muito baixo do reservatório (intertravamento)Sinaleiro + displayLED + display
FIQC300ControladorControle/indicação/totalização de fluxo (loop de cloração proporcional)LógicoFirmware ESP32-S3 (estado Tratamento)
HS500OperadorChave seletora bombeamento elétrico vs manualDiscretoChave seletora — pino BP0
HS501OperadorBotoeira "iniciar processo"DiscretoBotoeira física — pino BP1
HS502OperadorBotoeira "parar processo"DiscretoBotoeira física — pino BP2
HS503OperadorEncoder rotativo + push-button (menu local)DiscretoEncoder mecânico — GPIO 4, 6, BP3
YL400SinalizaçãoLâmpada de status de funcionamento do tratamentoDiscretoLED — pino AP3
BuzzerAlarmeAlarme sonoro e visualDiscretoBuzzer piezoelétrico — pino AP2

Convenção de pinos:

  • GPIO XX — pinos diretos do ESP32-S3
  • APx — pinos do PCF8574 expansor 1 (I²C @ 0x20) — atuadores (LEDs, buzzer, solenóides)
  • BPx — pinos do PCF8574 expansor 2 (I²C @ 0x24) — entradas (chaves, botoeiras, nível)

Esses pinos são detalhados em Cap 5 §15.

4.3. Loops de controle

Três loops automáticos são implementados pelo firmware (sem PID — controle on/off ou proporcional simples):

Loop FIQC300 — Cloração proporcional à vazão:

FE300 (vazão) → MCU (estado Tratamento) → Bomba D (motor passo proporcional)

Calculado a cada ciclo de 250 ms no Núcleo 1 do ESP32. Detalhes em Cap 5 §10.

Loop PAHH100 — Intertravamento por sobrepressão:

PT100 ou PT101 > limiar muito_alto (40 psi) → MCU → desliga Bomba E

Limiar configurável em config.pressao_bomba.estado_muito_alto.

Loop LALL200 — Intertravamento por falta de desinfetante:

LSLL200 (nível crítico) → MCU → desliga Bomba E (bombeamento manual continua permitido)

5. Linhas de retrolavagem e drenos

O sistema inclui linhas de retrolavagem automática dos filtros UF (3A e 3B), comandadas pelo estado EstadoControlarLavagem do firmware (Cap 5 §6):

Sequência típica:

  1. Solenóides S1 e S2 abrem por 30 segundos (inversão de fluxo nos filtros)
  2. Bomba E aciona por 60 segundos (vazão reversa para remover particulado)
  3. Solenóides fecham, sistema retorna ao Idle

Recomendação automática de lavagem por volume tratado: cada 10.000 L (parâmetro volume_recomendado_nova_lavagem_filtro no config.json). Limpeza completa cada 50.000 L; troca cada 100.000 L ou 365 dias.

Dreno: saída inferior do gabinete para descarte do efluente de retrolavagem (água com particulado retido).


6. Capacidade e dimensões

ParâmetroValor
Vazão nominalaté 300 L/h
Vazão máxima configurável600 L/h (config.limite_maximo_vazao_hora)
Cloração5–50 μg/L (configurável); default 4000 μg/L
Reservatório de hipoclorito1,5–2 L (~36.000 L tratados por recarga)
Dimensões externas80 × 40 × 40 cm (alvo)
Peso totalaté 25 kg (alvo)
Material de fechamentoChapas PEAD 5 mm (7 chapas, ver §2.2)
Material estruturalPerfis de alumínio
Pressão máxima0,79 MPa (~115 psi) — limite do Filtro 1 (disco)
Pressão de trabalho dos filtros 2/30,1–0,4 MPa

Detalhes regulatórios (Portaria GM/MS Nº 888/2021) em Cap 1 §6.


7. Modelo 3D (STEP files)

Repositório: YB-projeto-mecanico-hidraulico (privado) Repo local: Macroentregas_Embrapii/Macroentrega_3/fontes códigos e projetos/projeto-mecanico-hidraulico-main/

Arquivo STEPConteúdoBbox aproximado
Montagem_Sistema_Hidraulico_e_mecanico.stepMontagem completa do sistema745 × 602 × 347 mm (12 MB, 236 solids)
Sitema_Hidraulico_isolado.stepSubsistema hidráulico isolado578 × 525 × 255 mm (10 MB, 96 solids)
conexao_bomba_manual.stepPeça avulsa de conexão para bomba manual48 × 47 × 48 mm
suporte_bomba_peristaltica.stepSuporte da bomba peristáltica74 × 46 × 64 mm
suporte_sensor_nivel.stepSuporte do sensor de nível148 × 100 × 118 mm

Modelo CAD principal em Fusion 360 (Autodesk). Idioma: PT-BR. Padrão de cotagem: ABNT.


8. Débito técnico do CAD

A revisão técnica do modelo 3D vs BOM realizada em 07/05/2026 (Macroentregas_Embrapii/Macroentrega_3/revisao_3D_claude/Revisao_Projeto_e_Plano_Fusion.md) identificou inconsistências entre modelo 3D e BOM/projeto que precisam ser resolvidas antes da produção em volume:

ItemBOM dizModelo temStatus (14/05/2026)
Painéis solaresqty 4qty 2⚠️ em correção
Sensor de pressão SEN-02qty 2qty 1⚠️ em correção
Filtro Althy FIL-03 (UF)qty 1qty 2✅ resolvido — modelo correto, BOM atualizada para qty 2
Perfil ALU-04 (490 mm)qty 4qty 3⚠️ em correção
Bomba manual BOM-03existe na BOMpeça avulsa não montada no assembly⚠️ aguardando
Componentes "fantasma" no modelo (válvula retenção, misturador estático, filtro bomba)não na BOMpresentes⚠️ aguardando atualização BOM
Origem do mundo no assemblyZ=0 esperadoZ=418 mm⚠️ atrapalha exports/desenhos técnicos

Princípio diretor (definido por Rodrigo, 07/05/2026):

O modelo 3D deve ser espelho fiel do protótipo real — mesmas peças, mesmas dimensões gerais exatas. Diferenças entre modelo e real são bugs a corrigir.

Detalhes da auditoria completa em Macroentregas_Embrapii/Macroentrega_3/revisao_3D_claude/Revisao_Projeto_e_Plano_Fusion.md. As correções são tracked no backlog 00-Backlog/tasks.md (item "Refazer 3D no Fusion").


Fontes deste capítulo

  • Macroentregas_Embrapii/Macroentrega_3/5.1 Transferência da tecnologia ao cliente/picg-resposta-2026-05-14/Fluxogramas.docx (P&ID formal + tabela de tags ISA-5.1 + parâmetros do sistema embarcado)
  • Macroentregas_Embrapii/Macroentrega_3/5.1 Transferência da tecnologia ao cliente/picg-resposta-2026-05-14/Desenhos 2D cotados das Chapas/ (7 PDFs ABNT cotados, Marllon Batista, 12/05/2026)
  • Macroentregas_Embrapii/Macroentrega_3/fontes códigos e projetos/projeto-mecanico-hidraulico-main/ (STEP files)
  • Macroentregas_Embrapii/Macroentrega_3/revisao_3D_claude/Revisao_Projeto_e_Plano_Fusion.md (auditoria cross-check BOM ↔ 3D)
  • Macroentregas_Embrapii/Macroentrega_3/5.1 .../Projeto do sistema.docx (especificações originais)
  • Arquitetura_Yara_Box/Visao_Tecnica_Wara_Box.md §3.1 (sistema hidráulico)
  • Macroentregas_Embrapii/Macroentrega_3/Testes/consolidado-ensaios.md (gargalo do filtro MF)

BOM consolidada com quantidades: ver Apêndice A. P&ID original em PDF: ver Apêndice B.

CAP 04 — ELÉTRICO

Capítulo 4 — Projeto Elétrico

Status: ✅ pronto Última atualização: 2026-05-14 Audiência: engenheiro elétrico/eletrônico


Sumário


1. Visão geral (sistema híbrido de 5 fontes)

Arquitetura elétrica híbrida em cinco fontes

Figura 04.1 — Arquitetura elétrica híbrida: cinco fontes, PCB Seletora, bateria 3S3P, saídas independentes e fallback manual.

A Yara Box é projetada para operar em locais com infraestrutura elétrica precária ou ausente. Para isso, suporta cinco fontes diferentes de energia com chaveamento automático sem interrupção do processamento. Permite, por exemplo, alimentar a unidade simultaneamente a partir da rede AC do cliente e do banco solar, com a bateria como tampão para o caso de queda das duas.

Característica fundamental: separa fisicamente a alimentação da bomba elétrica da alimentação lógica (PCB Core + bateria). Quando não há energia disponível para bombeamento, a telemetria continua funcionando — o sistema relata a falha em vez de simplesmente apagar.


2. Hierarquia de prioridade A → E

A PCB Seletora seleciona automaticamente a fonte ativa conforme ordem de prioridade decrescente:

PrioridadeFonteTensão nominalCorrente mínimaConector na Seletora
ARede AC 110/220V → fonte chaveada 12 VDC12 V20 AP1
BEntrada 12 VDC direta12 V5 AP2
CGerador 12 VDC12 V(usar P2 ou P1 conforme tipo)
DPainel solar → controlador MPPT (CN3722)18–22 Vaté MPPTP3 e/ou P4 (até 2 painéis)
EBomba/geração manual(backup mecânico — não passa pela Seletora)

A lógica de seleção é:

  1. Se A está disponível → A
  2. Senão, se B ou C disponível → B/C
  3. Senão, se D fornece energia suficiente → D
  4. Em paralelo: bateria (P6) cobre transições e atua como tampão de até 72 h para a eletrônica (sem bombeamento) — ver §5
  5. Em todos os casos: E (bombeamento manual via bomba pistão 300 L/min) está sempre disponível como fallback mecânico — independente de eletrônica

3. Detalhe de cada fonte

3.1. Fonte A — Rede AC 110/220V

  • Entrada via P1 da Seletora (AC retificada internamente)
  • Requer fonte chaveada externa AC → 12 VDC / 20 A (ex: Mean Well S-250-12 ou equivalente)
  • Prioridade máxima: sempre que disponível, é a fonte primária
  • Recomendado para instalações fixas em locais com rede confiável

3.2. Fonte B — Entrada 12 VDC direta

  • Entrada via P2 da Seletora
  • Mínimo 5 A (para alimentar bomba elétrica de 8 L/min com folga)
  • Use casos:
    • Banco de baterias externo (12 V)
    • Painel solar com controlador externo já fornecendo 12 V regulado
    • Adaptador de veículo (12 V do alternador)

3.3. Fonte C — Gerador 12 VDC

  • Geradores portáteis a combustível com saída 12 VDC
  • Pode entrar via P2 (se já regulado) ou P1 (se via inversor AC + fonte chaveada)
  • Recomendado para instalações temporárias ou emergenciais

3.4. Fonte D — Painel solar + MPPT (CN3722)

  • Entradas via P3 e P4 (até 2 painéis solares 18–22 V)
  • O CN3722 na Seletora faz Maximum Power Point Tracking automaticamente
  • 4 painéis solares funcionais validados em ME3 (ver consolidado-ensaios.md)
  • Recomendado para instalações off-grid em áreas com boa insolação

3.5. Fonte E — Bomba/geração manual

  • Bomba pistão 300 L/min com baixa pressão
  • Independente da eletrônica: funciona mesmo com Yara Box desligada
  • Backup absoluto — garante acesso à água tratada (sem cloração ativa nem telemetria) em situação de falha total

4. Chaveamento automático via PCB Seletora

PCB Seletora como referência visual do chaveamento

Figura 04.2 — PCB Seletora v1.1.1 como referência visual do chaveamento automático e da separação bomba vs. lógica.

A PCB Seletora de Alimentação v1.1.1 implementa o chaveamento sem interrupção do processamento via 3 relés CMA51H (12 V, 15–20 A). Detalhes da placa em Cap 2 §4.

Lógica: os relés são acionados pelo bloco SELETOR_DE_FONTE.kicad_sch, que monitora a presença de tensão em cada entrada e prioriza conforme §2.

Características elétricas:

  • Capacidade do relé: 15–20 A (suficiente para bomba elétrica 12 V/8 L/min em pico de carga)
  • Tensão de bobina: 12 V
  • Tipo: SPDT (1 contato normal aberto + 1 contato normal fechado)
  • Isolamento: garante que tensões de diferentes fontes não se misturem

5. Bateria 18650 (3S3P)

Configuração: 9 células 18650 Li-ion, arranjo 3 bancos × 3 em série:

  • 3 células em série por banco → 11,1 V nominal (3 × 3,7 V)
  • 3 bancos em paralelo → 6,48 Ah total (3 × 2,16 Ah típico por célula)
  • Energia total: ~72 Wh

Conector: P6 na PCB Seletora.

Autonomia:

  • Apenas eletrônica (PCB Core + display + comunicação MQTT) → até ~72 h
  • Eletrônica + bombeamento (bomba elétrica em duty cycle típico de operação) → da ordem de horas, conforme uso
  • Recarga: automática quando a fonte A/B/C/D está ativa e a tensão de bateria está abaixo do limite normal

BMS (Battery Management System): recomendado mas não obrigatório — o controle de proteção mínima é feito pelo firmware via leitura tensao_bateria (ver §7). Para produção em volume, integrar BMS dedicado para proteção contra over-discharge, balanceamento entre células e proteção térmica.


6. Separação alimentação bomba vs alimentação lógica

A PCB Seletora tem duas saídas independentes:

SaídaConectorCargaComportamento
Bomba elétricaP712 V / 20 A para a bomba diafragmaEnergizada apenas durante o ciclo de tratamento; desligada em Idle
Sinal alimentação coreJ2Alimentação para PCB Core (~12 V regulado)Sempre ativa enquanto há qualquer fonte (A-D) ou bateria com carga

Razão da separação: garantir que a telemetria continua mesmo sem energia para bombear. Cenários típicos:

  • Painéis solares fornecem energia suficiente apenas para a eletrônica (luz fraca) → o sistema continua telemetrando, reporta vazão zero, e o operador remoto sabe que não houve tratamento
  • Bateria cai abaixo do limite para acionar bomba → bomba desliga, mas eletrônica continua até esgotar a bateria; o evento é registrado e publicado

Isso é diferente de muitos sistemas IoT industriais que perdem comunicação ao mesmo tempo que a função principal — design crítico para áreas remotas onde manutenção é cara.


7. Limiares de tensão configuráveis

Os limiares ficam em data/config.json (ver Cap 5 §5) e podem ser ajustados via AP mode ou OTA sem reflashar o firmware:

Tensão de alimentação (P1/P2/P3/P4 chegando ao Core via J2)

"tensao_alimentacao": {
    "estado_normal":       12.4,   // V
    "estado_baixo":        10.0,   // V — começa a alertar
    "estado_muito_baixo":   8.0    // V — corta acionamentos
}

Tensão de bateria (P6)

"tensao_bateria": {
    "estado_normal":       12.3,   // V
    "estado_baixo":        10.5,   // V — alerta no display + telemetria
    "estado_muito_baixo":  10.0    // V — modo de proteção (desliga bomba)
}

Calibração das leituras

As leituras de tensão passam pelo ADS1115 (I²C @ 0x48) através de um divisor de tensão, e o firmware aplica regressão linear y = a · x + b. Coeficientes reais da unidade 001 (ver Apêndice C §5):

CanalabRange nominal
Tensão alimentação(atual calibracao_tensao_bomba_a) 0,00972490610,0~12–14 V
Tensão bateria0,0043795620−0,1883211678~10–12,6 V

Procedimento de calibração em Cap 8 §5.


8. Consumo estimado e balanço energético

Consumo estimado total da Yara Box (todos subsistemas operando, com fator térmico de 30% aplicado):

SubsistemaConsumo típico (mW)
ESP32-S3 + JNG-E (Core)~500
Display SH1107 (128×128, sempre ligado)~50
Sensores (ADS1115, PCF8574, PT100-103, FE300)~80
SIM7080G (GSM + GPS, ativos)~300 (pico até 1000 mW em transmissão)
LEDs de sinalização~30
Bomba dosadora (motor de passo, duty cycle médio)~200
Válvulas solenóide (intermitentes)~100 (média)
Bomba elétrica 12 V/8 L/min — não incluída (operada via P7 separado)~96 W (8 A × 12 V em pico)
Margem térmica (30%)~400
Total (apenas lógica + atuadores leves)~2.359 mW (≈2,4 W)

Implicações para autonomia da bateria 6,48 Ah / 11,1 V (72 Wh):

  • Apenas eletrônica: 72 Wh ÷ 2,4 W = 30 horas teóricas (na prática, ~72 h com sleep dinâmico do SIM7080G e periodicidade de publicação MQTT)
  • Com bomba elétrica em duty cycle típico de operação intermitente: bateria não é dimensionada para alimentar a bomba sozinha por períodos longos — a bomba consome 40× mais do que a eletrônica

Recomendação operacional: a bateria serve como tampão para a eletrônica durante quedas momentâneas das fontes A-D. Para operação contínua de bombeamento em locais off-grid, dimensionar o banco solar adequadamente (D) ou prever recarga periódica via fonte A/B.


9. Esquema elétrico geral (projeto-eletrico)

Repositório: YB-projeto-eletrico (privado) Repo local: Macroentregas_Embrapii/Macroentrega_3/fontes códigos e projetos/projeto-eletrico-main/

Esse projeto complementa as PCBs próprias documentando a fiação geral entre PCBs, sensores externos, atuadores, conectores no gabinete e o banco de baterias. Não é uma PCB — é o esquemático em KiCad da instalação elétrica completa da unidade.

Artefatos:

  • projeto-eletrico.kicad_sch — sheet principal
  • 6 sub-esquemáticos (ver §10)
  • projeto-eletrico.kicad_pcb — não é PCB própria, é placeholder para footprint mecânico
  • DOCS/ — PDFs consolidados, datasheets de componentes externos

10. Sub-esquemáticos do projeto elétrico

O projeto-eletrico está organizado em 6 sub-sheets:

Sub-esquemáticoCobre
Alimentacao.kicad_schDistribuição entre PCB Seletora ↔ PCB Core ↔ bateria ↔ atuadores; fusíveis, bornes
Bombas.kicad_schFiação para bomba elétrica (P7 Seletora → motor) e bomba dosadora (Core → A4988 → motor de passo)
Botoeiras.kicad_schBotões físicos do painel frontal (HS500 chave seletora, HS501/HS502 botoeiras) + encoder rotativo
Sensores.kicad_schCabeamento de PT100/101/102/103, FE300 (sensor de vazão), LSL200/LSLL200 (chaves de nível) até a PCB Core
Sinalizacao.kicad_schLEDs do painel + buzzer de alarme (driver via PCF8574 e/ou GPIO direto)
Valvulas.kicad_schSolenóides A e B (retrolavagem dos filtros UF 3A/3B) — IRLZ44N driver + flyback diode

Cada sub-sheet referencia conectores no gabinete físico e nomeia os fios para facilitar a montagem em campo. Detalhamento do sistema hidráulico que esses atuadores e sensores integram está em Cap 3.


Fontes deste capítulo

  • Repositório local: Macroentregas_Embrapii/Macroentrega_3/fontes códigos e projetos/projeto-eletrico-main/
  • Repositório GitHub: agua-camelo-cs/YB-projeto-eletrico (privado)
  • PCB Seletora (referência cruzada): Cap 2 §4
  • Arquitetura_Yara_Box/Visao_Tecnica_Wara_Box.md §3.3 (sistema de energia)
  • Macroentregas_Embrapii/Macroentrega_2/Relatório da PCB Seletor de Alimentação.pdf
  • Macroentregas_Embrapii/Macroentrega_3/5.1 .../Projeto do sistema.docx
  • 11-Confidencial/YaraBox_001_Backup_Config.md (valores reais de calibração de tensão)
  • data/config.json do firmware (limiares operacionais)

Esquemáticos PDF e sources KiCad completos: ver Apêndice B §5.

CAP 05 — FIRMWARE

Capítulo 5 — Firmware (ESP32-S3)

Status: ✅ pronto Última atualização: 2026-05-14 Audiência: engenheiro de firmware embarcado (C++, ESP32, PlatformIO, FreeRTOS, ArduinoJson) Tempo de leitura estimado: 25 minutos


Sumário


1. Visão geral do firmware

Arquitetura em camadas do firmware Yara Box

Figura 05.1 — Arquitetura em camadas do firmware: hardware, HAL/drivers, serviços, lógica de aplicação e interfaces.

O firmware roda em um ESP32-S3-DevKitC-1 (dual-core Xtensa LX7 a 240 MHz, 8 MB PSRAM, 16 MB flash QIO). É escrito em C++17 sobre o framework Arduino e construído com PlatformIO.

Versão atual em produção (unidade 001): v2.1.4-alpha (SDK Espressif v4.4.7-dirty).

A organização em alto nível segue arquitetura clássica em quatro camadas:

┌─────────────────────────────────────────────────────────┐
│  Aplicação    → main.cpp (callbacks Arduino + delegação)│
├─────────────────────────────────────────────────────────┤
│  Lógica       → MaquinaEstado (Singleton) + 14 estados  │
├─────────────────────────────────────────────────────────┤
│  Serviços     → display, mqtt, wifi, gsm, filesystem... │
├─────────────────────────────────────────────────────────┤
│  HAL          → ADS1115, PCF8574, SH1107, SIM7080G      │
└─────────────────────────────────────────────────────────┘
                          ▼
                   Hardware ESP32-S3

Nenhuma lógica de negócio mora em main.cpp — ele apenas inicializa o sistema e delega para MaquinaEstado::get_estado_boot()->on_setup(). Todo o comportamento de runtime é dirigido por eventos e transições de estado.

Principal arquivo de referência interna: ARCHITECTURE.md no repositório (~60 KB, 1700+ linhas) — leia este capítulo primeiro, depois consulte o ARCHITECTURE.md quando precisar do nível de detalhe das classes/funções.


2. Stack e dependências

Plataforma

  • Framework: Arduino (via PlatformIO)
  • Plataforma: espressif32@^6.11.0 (Arduino-ESP32 core)
  • Board: esp32-s3-devkitc-1
  • Toolchain: platformio/tool-esptoolpy@^2.40900.250804
  • Linguagem: C++17 com -fexceptions -frtti
  • Filesystem: LittleFS (block 4096, page 256)
  • Particionamento: custom (ver §4)
  • Memória: QIO + QSPI + PSRAM QIO

Bibliotecas (declared em platformio.ini)

BibliotecaVersãoPara quê
bblanchon/ArduinoJson^6.0.0Parse e serialização de config.json e payloads MQTT
paulstoffregen/TimelatestManipulação de timestamps
waspinator/AccelStepper^1.64Motor de passo da bomba dosadora
adafruit/Adafruit SH110X^2.1.10Display OLED SH1107 128×128
wollewald/ADS1115_WE^1.5.4ADC ADS1115 (4 canais por chip, até 2 chips)
adafruit/Adafruit PCF8574^1.1.2Expansor I/O I²C
madhephaestus/ESP32Encoder^0.11.8Encoder rotativo
thingsboard/ThingsBoard^0.15.0Cliente MQTT high-level com suporte a atributos e RPC
vshymanskyy/TinyGSM^0.12.0Modem GSM (SIM7080G) — fallback de conectividade
esp32async/AsyncTCP^3.4.7TCP assíncrono (base do ESPAsyncWebServer)
esp32async/ESPAsyncWebServer^3.8.0Servidor HTTP do modo AP
pangodream/ESP2SOTA^1.0.2OTA via HTTP server local
adafruit/RTClib^2.1.4RTC interno

Fonte: platformio.ini.


3. Estrutura do projeto

modulo-basico/
├── platformio.ini             ← config de build/plataforma/libs
├── custom_partitions.csv      ← layout das partições de flash
├── Doxyfile                   ← config Doxygen (geração de docs)
├── README.md                  ← guia local de uso (26 KB)
├── ARCHITECTURE.md            ← arquitetura detalhada (60 KB, 1700+ linhas)
├── src/
│   ├── main.cpp               ← setup() + callbacks Arduino
│   └── main.h
├── lib/                       ← 15 módulos próprios (ver §7)
│   ├── maquina_estado/
│   ├── display/
│   ├── dispositivos_ads/
│   ├── dispositivos_pcf/
│   ├── dosadora/
│   ├── access_point/
│   ├── ota_update/
│   ├── filesystem/
│   ├── global_members/
│   ├── gps/
│   ├── gsm/
│   ├── mqtt/
│   ├── rtos_/
│   ├── SIM7080/
│   ├── wifi/
│   └── (cada um com README.md + src/)
└── data/                      ← uploadado para LittleFS
    ├── config.json            ← configuração runtime (override de fábrica)
    ├── config-padrao-fabrica.json
    ├── leituras.json          ← últimas leituras persistidas
    └── AP/                    ← HTML/CSS/JS do portal de configuração

Cada módulo em lib/<nome>/ é uma biblioteca PlatformIO autocontida, com seu próprio README.md. Detalhes em §7.


4. Particionamento de flash

Layout customizado para suportar OTA (duas partições de aplicação) e LittleFS grande:

nvs,      data, nvs,      0x9000,   0x5000     # 20 KB
otadata,  data, ota,      0xe000,   0x2000     # 8 KB
app0,     app,  ota_0,    0x10000,  0x300000   # 3 MB (firmware ativo)
app1,     app,  ota_1,    0x310000, 0x300000   # 3 MB (OTA buffer)
coredump, data, coredump, 0x610000, 0x20000    # 128 KB (debug crash)
spiffs,   data, spiffs,   0x630000, 0x9D0000   # ~10 MB (LittleFS)

Total: ~16 MB. O processo OTA grava o novo binário em app1, altera otadata para apontar para app1, e reinicia. Em caso de falha de boot, fallback automático para app0.

Fonte: custom_partitions.csv.


5. Configuração externa via config.json

Princípio de design: zero configuração hardcoded. Tudo que pode mudar entre unidades (Wi-Fi, MQTT, calibrações, limiares, intervalos de manutenção) está em data/config.json, gravado em LittleFS.

Schema completo (extraído do data/config.json da unidade 001):

{
  // Conectividade Wi-Fi (modo STA — produção)
  "ssid_wifi": "<rede do cliente>",
  "psk_wifi":  "<senha>",

  // Modo Access Point (configuração local)
  "ssid_ap":     "yarabox_AP",
  "psk_ap":      "",              // aberto
  "dominio_ap":  "yarabox.local",

  // Modo OTA (atualização remota)
  "ssid_ota":    "yarabox_OTA",
  "psk_ota":     "@gu@c@m3l0",
  "dominio_ota": "yarabox-ota.local",

  // Credenciais do portal admin (AP mode)
  "user_conf":   "camelo",
  "pass_conf":   "@gu@c@m3l0",

  // MQTT (ThingsBoard)
  "token_mqtt":  "<access token do device no TB>",
  "server_mqtt": "yarabox.aguacamelo.com.br",   // ver Cap 6

  // GSM (fallback de conectividade)
  "pin_gsm":  "0",
  "user_gsm": "vivo",
  "pass_gsm": "vivo",
  "apn_gsm":  "zap.vivo.com.br",

  // NTP (sincronização de hora)
  "ntp_server": {
    "1": "br.pool.ntp.org",
    "2": "a.st1.ntp.br",
    "3": "pool.ntp.org"
  },
  "ntp_gmt_offset":      -3,        // BRT
  "ntp_daylight_offset": 3600,
  "rtc_sincronizado_ntp":     false,
  "horario_verao_habilitado": false,

  // Limites operacionais
  "limitar_volume_tratado":      false,
  "valor_limite_volume_tratado": 0,
  "pwm_bomba_eletrica":          115,    // duty cycle padrão
  "velocidade_bomba_dosadora":   50,
  "hipoclorito_habilitado":      true,
  "limite_maximo_vazao_hora":    600,    // L/h

  // Calibrações (regressão linear y = a·x + b — ver Cap 8)
  "calibracao_vazao":             0.253526896,
  "calibracao_pt100_a":           0.02909090,
  "calibracao_pt100_b":          -8.79708816,
  "calibracao_pt101_a":           0.04210526,
  "calibracao_pt101_b":         -13.38947261,
  "calibracao_pt102_a":           0,      // não calibrado nesta unidade
  "calibracao_pt102_b":           0,
  "calibracao_pt103_a":           0,
  "calibracao_pt103_b":           0,
  "calibracao_tensao_bateria_a":  0.0043795620,
  "calibracao_tensao_bateria_b": -0.1883211678,
  "calibracao_tensao_bomba_a":    0.0097249061,
  "calibracao_tensao_bomba_b":    0.0,
  "calibracao_bomba_dosadora":    0.32078445,

  // Cloração
  "concentracao_hipoclorito_porcentagem": 4,
  "dose_hipoclorito_ug-L": {
    "valor":          4000,
    "limite_minimo":  200,
    "limite_maximo":  5000
  },

  // Limiares e alarmes (ver Cap 10)
  "nivel_hipoclorito":  { "estado_muito_baixo": 0,   "estado_baixo": 30, "estado_normal": 100 },
  "pressao_bomba":      { "estado_muito_baixo": 5,   "estado_baixo": 10, "estado_alto": 30, "estado_muito_alto": 40 },
  "tensao_alimentacao": { "estado_normal": 12.4, "estado_baixo": 10.0, "estado_muito_baixo": 8.0 },
  "tensao_bateria":     { "estado_normal": 12.3, "estado_baixo": 10.5, "estado_muito_baixo": 10.0 },
  "vazao_litros_hora":  { "estado_muito_baixo": 150, "estado_baixo": 300, "estado_normal": 330, "estado_alto": 600, "estado_muito_alto": 650 },

  // Manutenção preventiva
  "volume_tratado_desde_ultima_lavagem_filtro":    0,
  "volume_tratado_desde_ultima_limpeza_filtro":    0,
  "volume_tratado_desde_ultima_troca_filtro":      0,
  "volume_tratado_desde_ultima_calibracao_vazao":  0,
  "volume_recomendado_nova_lavagem_filtro":        10000,
  "volume_recomendado_nova_limpeza_filtro":        50000,
  "volume_recomendado_nova_troca_filtro":          100000,
  "volume_recomendado_nova_calibracao_vazao":      100000,
  "data_ultima_troca_filtro":                      "01/01/2025",
  "dias_recomendado_nova_troca_filtro":            365
}

Fonte: data/config.json (template) e data/config-padrao-fabrica.json (defaults imutáveis).

Persistência: o módulo filesystem (ver §7) carrega config.json no boot. Se o arquivo está corrompido ou não existe, faz fallback para config-padrao-fabrica.json e copia para config.json no primeiro write. Todas as alterações via menu local ou AP mode reescrevem config.json atomicamente.

Para uma placa nova/resetada: restaurar valores reais a partir do backup operacional documentado em /11-Confidencial/YaraBox_001_Backup_Config.md — procedimento em Apêndice C §8.


6. Máquina de estados (14 estados, dual-core)

O coração lógico do firmware é uma máquina de estados implementada com State Pattern clássico. A interface IEstado é o contrato base:

class IEstado {
public:
    virtual void on_enter() = 0;          // executado uma vez na transição para o estado
    virtual void on_setup() = 0;          // inicialização única (recursos pesados)
    virtual void on_loop()  = 0;          // executado a cada tick da task do núcleo
    virtual void on_exit()  = 0;          // determina o próximo estado
    virtual void on_input(InteracaoUsuario evento) = 0;  // reação a eventos do encoder/botão
};

MaquinaEstado é Singleton e mantém ponteiros para todos os 14 estados (criados via std::unique_ptr no construtor — padrão Factory implícito). Cada estado roda em um dos dois núcleos do ESP32-S3:

Estados do Núcleo 0 (sensoriamento, UI, comunicação externa)

EstadoFunção
EstadoSequenciaBootInicialização do sistema (delegada a partir de main.cpp::setup()). Logo animado por 6 s.
EstadoLerDispositivosLeitura contínua de sensores. Vazão a cada 3 s, pressão a cada 2 s, PCF a cada 200 ms. Aplica média móvel de 5 amostras nos analógicos.
EstadoLerInputProcessa encoder rotativo + botões do PCF8574 (debounce 200 ms). Executado antes de cada transição.
EstadoExibirDadosRenderização no display SH1107 128×128. Alternância entre tela gráfica (4 quadrantes) e textual a cada 30 s.
EstadoSinalizarAtualização de LEDs e popups de alarme baseados em flags de GlobalMembers.
EstadoPublicarDadosPublicação MQTT (parcial 30 s, completa 10 min) + gravação em flash a cada 15 min.
EstadoMenuUINavegação em menus (hipoclorito, volume, vazão, filtro, data/hora, remoto, geral).
EstadoAccessPointServidor web local de configuração (http://yarabox.local).
EstadoOTAUpdateServidor de upload de firmware (http://yarabox-ota.local).

Estados do Núcleo 1 (controle de atuadores)

EstadoFunção
EstadoControlarTratamentoLoop principal: bomba elétrica + dosadora proporcional à vazão. 250 ms por ciclo.
EstadoControlarIdleModo ocioso seguro (sem acionamento automático). 250 ms por ciclo.
EstadoControlarLavagemRetrolavagem automática: válvulas (30 s) → bombeamento (60 s) → fechamento.
EstadoControlarTesteTeste manual de LEDs, solenóides e bombas (timeout 10 s).
EstadoControlarCalibracaoCalibração assistida do sensor de vazão. Implementado mas inativo no fluxo atual — reservado para uso futuro.

Por que dual-core?

Isolar os estados de controle de atuadores no Núcleo 1 garante que o ciclo de acionamento do motor de passo e da bomba elétrica não sofra interferência das operações de UI, rede ou persistência executadas no Núcleo 0. Em particular: o pulso do motor de passo da dosadora precisa de timing preciso (ms), e qualquer jitter introduzido por publicação MQTT ou redesenho do display comprometeria a dosagem proporcional.

Diagrama de fluxo

Máquina de estados dual-core do firmware

Figura 05.2 — Máquina de estados de 14 estados em arquitetura dual-core, com fluxos normais, serviço/configuração e falhas.

O loop "estável" do Núcleo 0 é Ler → Exibir → Sinalizar → Publicar → Ler (com Input processado antes de cada transição). O Núcleo 1 alterna entre Idle ↔ Tratamento conforme comandos do usuário e proteções automáticas.

Fonte completa (com diagrama ASCII expandido e código de transições): ARCHITECTURE.md §"Diagrama de Estados Completo".


7. Módulos lib/ (15 módulos)

Cada módulo é uma biblioteca PlatformIO autocontida em lib/<nome>/ com src/ próprio e README.md documentando responsabilidade e API.

MóduloHardware/Lib externaResponsabilidade primária
maquina_estadoSingleton + 14 estados; orquestra o sistema
displaySH1107 @ I²C 0x3CRenderização gráfica (medidores, gauges, menus, popups, animações)
dispositivos_adsADS1115 @ I²C 0x48 e 0x49Leitura analógica: pressão (4 canais PT100-103), tensão bateria, tensão bomba
dispositivos_pcfPCF8574 @ I²C 0x20 e 0x24I/O digital: LEDs, válvulas solenóide, chaves de nível, botões
dosadoraA4988 driver via GPIOControle do motor de passo da bomba dosadora (AccelStepper)
wifiWi-Fi nativo ESP32Conexão STA + reconexão automática + NTP
mqttThingsBoard SDK + PubSubClientTelemetria + atributos compartilhados + RPC
gsmSIM7080G @ UART2 + TinyGSMFallback celular (GPRS/LTE-M) quando Wi-Fi falha
gpsSIM7080G (mesmo UART)NMEA parsing → lat/lon/altitude
SIM7080SIM7080GDriver de baixo nível compartilhado por gsm e gps
rtos_FreeRTOSCriação de 5 tasks + 8 mutexes + watchdog
access_pointESPAsyncWebServerPortal HTTP local de configuração (modo AP)
ota_updateESP2SOTAAtualização remota de firmware via HTTP
filesystemLittleFSI/O atômico de config.json + leituras.json + arquivos AP
global_membersRepositório thread-safe (~60 flags/contadores) com getters/setters protegidos por mutex

Convenção de refs: snippets curtos inline no manual + link permanente para cada módulo no GitHub:

  • https://github.com/agua-camelo-cs/YB-modulo-basico/tree/main/lib/<nome>/src/

Cada lib/<nome>/README.md é leitura obrigatória ao tocar no módulo correspondente.


8. Padrões de projeto adotados

PadrãoOndePor quê
State PatternIEstado + 14 classes concretasEncapsulamento da lógica de cada modo operacional; transições explícitas em on_exit()
SingletonMaquinaEstadoÚnica instância garantida; ambos os núcleos acessam o mesmo contexto de execução
Classe EstáticaDisplay, RedeWifi, ThingsBoardMQTT, FileSystem, PCFRecursos únicos de hardware acessados globalmente — sem overhead de heap nem verificação de instância
RepositoryGlobalMembersAcesso centralizado e thread-safe a ~60 flags/contadores compartilhados
Producer-Consumerloop_publicacao_nucleo_0() + GlobalMembers::get_json_publicacao()Desacopla geração de telemetria da transmissão de rede
Factory (implícita)Construtor de MaquinaEstadoCriação centralizada de todos os estados via make_unique
RAIIstd::unique_ptr para estados e auxiliares (MediaMovel, etc.)Evita memory leaks; ownership clara
Observer (implícito)Estados observam flags em GlobalMembersMais simples que registrar callbacks; trade-off é acoplamento

Trade-offs aceitos (documentados em ARCHITECTURE.md §"Decisões de Design"):

  • Singleton/estática dificulta testes unitários (mocking complexo) — aceito por simplicidade
  • Repository pattern com flags acopla módulos — aceito por performance
  • Média móvel simples (5 amostras) vs Kalman — aceito por baixo custo computacional

9. Sincronização (FreeRTOS)

5 tasks pinadas a núcleos

TaskNúcleoStackPrioridadeFunção
loop_principal_nucleo_008 KB1Estados Ler, Input, Exibir, Sinalizar, Menu, AP, OTA
loop_SIM7080_nucleo_0010 KB1RedeGSM::loop() + MQTT GSM + GPS::loop()
loop_publicacao_nucleo_006 KB1Consome buffer JSON e publica via MQTT
loop_principal_nucleo_118 KB1Estados Tratamento, Idle, Lavagem, Teste, Calibracao + Dosadora::movimentar_motor()
loop_rede_nucleo_118 KB1RedeWifi::manter_conexao() + ThingsBoardMQTT::manter_conexao()

8 mutexes (em RTOS)

class RTOS {
public:
    static SemaphoreHandle_t xMutex_copia_parametros;   // protege configurações
    static SemaphoreHandle_t xMutex_testes;             // flags de teste manual
    static SemaphoreHandle_t xMutex_controle;           // flags de controle (vazão, bomba, etc.)
    static SemaphoreHandle_t xMutex_conexao;            // estado de rede
    static SemaphoreHandle_t xMutex_serial_gsm;         // UART do modem (write/read exclusivos)
    static SemaphoreHandle_t xMutex_7080_habilitado;    // flag GSM ativo/dormindo
    static SemaphoreHandle_t xMutex_leitura_gps;        // dados de coordenada
    static SemaphoreHandle_t xMutex_publicacao;         // buffer MQTT (Producer-Consumer)
};

Padrão de uso (em GlobalMembers):

void GlobalMembers::set_vazao_l_min(float valor) {
    if (xSemaphoreTake(RTOS::xMutex_controle, INTERVALO_MAXIMO_MUTEX)) {
        vazao_l_min = valor;
        xSemaphoreGive(RTOS::xMutex_controle);
    } else {
        // log de falha (mutex timeout)
    }
}

Watchdog Timer

O WDT é habilitado para todas as tasks. Em loops longos (típicos do GSM, que pode bloquear segundos esperando resposta do modem), o WDT é alimentado entre operações com esp_task_wdt_reset() para evitar reset espúrio. Se o WDT estoura por descuido, o ESP32 reinicia automaticamente — mecanismo de segurança essencial em campo.

void RTOS::loop_SIM7080_nucleo_0() {
    RedeGSM::loop();
    esp_task_wdt_reset();

    ThingsBoardMQTT::manter_conexaoGSM();
    esp_task_wdt_reset();

    GPS::loop();
    esp_task_wdt_reset();
}

10. Loop principal de controle (Tratamento)

EstadoControlarTratamento::on_loop() roda no Núcleo 1 a cada 250 ms. É o coração funcional da Yara Box.

Fluxo

  1. Verificar tensão de alimentação. Se abaixo do limiar crítico (tensao_alimentacao.estado_muito_baixo, default 8 V), interrompe o tratamento e transiciona para Idle.
  2. Acionar bomba elétrica via ledcWrite(CANAL_BOMBA_ELETRICA, 255) (LEDC PWM em duty fixo — variação de velocidade foi removida por incompatibilidade com o circuito de acionamento atual).
  3. Calcular velocidade da dosadora com base na vazão instantânea e na configuração:
    velocidade_passo = calibracao_bomba_dosadora × vazao_minuto × dose_hipoclorito
    
    Onde dose_hipoclorito vem de config.dose_hipoclorito_ug-L.valor (5–50 μg/L, default 4000).
  4. Acionar dosadora via Dosadora::set_velocidade(velocidade_passo). O motor de passo é chamado diretamente no loop do Core 1 para garantir pulsos precisos sem interferência de rede.

Cálculo da dosagem (relembrando do Cap 1)

D = (C × Q) / E
  • D — passos do motor a executar
  • C — dose-alvo (μg/L), vem de config.dose_hipoclorito_ug-L.valor
  • Q — vazão instantânea (L/min), vem do sensor FE300
  • E — eficiência volumétrica da dosadora (mL/passo), inverso de calibracao_bomba_dosadora

Exemplo numérico com valores da unidade 001 (vazão hipotética 5 L/min, dose 4000 μg/L):

calibracao_bomba_dosadora = 0.32078445
velocidade_passo = 0.32078445 × 5 × 4000 = 6415,69 passos/min ≈ 107 passos/s

Condições de saída

  • tratamento_permitido == false → transição para Idle
  • limite_volume_atingido → transição para Idle (quando limitar_volume_tratado está ativo)

Proteções automáticas (intertravamentos)

  • PAHH100 — pressão alta extrema (PT100/101 > pressao_bomba.estado_muito_alto, default 40 psi) → desliga bomba E
  • LALL200 — nível crítico de hipoclorito (LSLL200) → desliga bomba E (bombeamento manual continua permitido)
  • Tensão de alimentação crítica (< 8 V) → desliga bomba E e dosadora

Fonte: lib/maquina_estado/src/ — arquivos estado_controlar_tratamento.cpp e similares.


11. Telemetria MQTT (Producer-Consumer)

O fluxo de publicação é desacoplado em 3 etapas:

Etapa 1 — EstadoPublicarDados::on_loop() (publicador)

  • Publicação parcial a cada 30 s (apenas valores que mudaram)
  • Publicação completa a cada 10 min (todos os ~30 parâmetros)
  • Coleta dados de leituras_dispositivos (estrutura ArduinoJson global) → serializa → grava em GlobalMembers::set_json_publicacao(json_string) (protegido por xMutex_publicacao)

Etapa 2 — loop_publicacao_nucleo_0() (consumidor)

void RTOS::loop_publicacao_nucleo_0() {
    String json_buffer = GlobalMembers::get_json_publicacao();
    if (!json_buffer.isEmpty()) {
        ThingsBoardMQTT::publicar_json(json_buffer);
        GlobalMembers::set_json_publicacao("");  // limpa buffer
    }
}

Etapa 3 — ThingsBoardMQTT::publicar_json()

Usa o SDK thingsboard/ThingsBoard@^0.15.0:

tb.sendTelemetryJson(json_payload.c_str());

O transporte (Wi-Fi ou GSM) é selecionado automaticamente pelo módulo mqtt com base em conectividade. Em produção, Wi-Fi é prioritário; GSM serve como fallback.

Payload típico (publicação completa)

{
  "pressao_pt100":         2.5,
  "pressao_pt101":         2.3,
  "pressao_pt102":         null,
  "pressao_pt103":         null,
  "vazao_l_min":           15.7,
  "vazao_media_litros_hora": 942,
  "volume_total_litros":   125430,
  "tensao_alimentacao":    12.6,
  "tensao_bateria":        12.4,
  "nivel_hipoclorito":     100,
  "estado":                "TRATAMENTO",
  "timestamp":             1747260000,
  "lat":                   -22.7470,
  "lon":                   -41.3196
}

Em alta latência (rede 4G ruim, MQTT lento): o Producer continua escrevendo no buffer; o Consumer transmite quando possível. Buffer é sobrescrito, não enfileirado — telemetria mais antiga é descartada em favor da mais recente. Para arquivamento histórico, ver §12.

Detalhes da infra do broker (VPS, Nginx, SSL): Cap 6 — Backend & Cloud.


12. Persistência (LittleFS)

Dois fluxos de escrita:

Fluxo A — config.json (configuração)

Acionado sob demanda quando o usuário salva parâmetros no menu local ou via AP mode:

EstadoMenuUI::salvar_configuracoes()
    ou
EstadoAccessPoint::POST /save_config
        │
        ▼
FileSystem::write("/config.json", json_serializado)
        │
        ▼
LittleFS.open("/config.json", "w") → escreve → fecha

Escrita atômica via rewrite completo — não há append nem mutação parcial. Reduz risco de corrupção.

Fluxo B — leituras.json (histórico local)

Acionado periodicamente a cada 15 min pelo EstadoPublicarDados:

EstadoPublicarDados::on_loop()  (timer 15 min)
        │
        ▼
FileSystem::write("/leituras.json", leituras_serializadas)

Permite reconstituir histórico local em caso de queda de conectividade prolongada.

Leitura no boot

EstadoSequenciaBoot::on_setup() chama FileSystem::read("/config.json"). Se o arquivo está corrompido ou ausente, faz fallback automático para config-padrao-fabrica.json e copia para config.json.

Arquivos típicos no LittleFS

/config.json                        ← configuração runtime (override de fábrica)
/config-padrao-fabrica.json         ← defaults imutáveis
/leituras.json                      ← snapshot periódico das leituras
/AP/index.html                      ← portal de configuração (HTML)
/AP/styles.css
/AP/script.js
/AP/configuracoes.html
/AP/calibracoes.html

13. Configuração via AP mode

Quando ativado (via menu local ou no boot se Wi-Fi STA falha por N tentativas), o firmware sobe uma rede Wi-Fi própria:

ParâmetroValor
SSIDyarabox_AP
Senha(aberto, sem senha)
Domínio mDNSyarabox.local
IP padrão192.168.4.1

Fluxo do usuário

  1. Conectar celular/notebook à rede yarabox_AP.
  2. Abrir http://yarabox.local (ou http://192.168.4.1).
  3. Acesso Restrito — login: usuário camelo, senha @gu@c@m3l0 (defaults; podem ser trocados em config.json).
  4. Editar campos (Wi-Fi do cliente, MQTT server, token, calibrações, limiares).
  5. Salvar → o firmware reescreve config.json e reinicia.

Stack interna

  • Servidor HTTP assíncrono: ESPAsyncWebServer@^3.8.0 (sobre AsyncTCP@^3.4.7)
  • Servidor DNS captive: redireciona qualquer domínio para o IP do AP, garantindo que o browser do celular sempre caia no portal
  • Autenticação: Basic Auth — credenciais em config.user_conf / config.pass_conf

Fonte: lib/access_point/src/ + arquivos HTML em data/AP/.


14. OTA Update

Atualização remota de firmware via biblioteca ESP2SOTA@^1.0.2. Estado dedicado: EstadoOTAUpdate.

ParâmetroValor
SSIDyarabox_OTA
Senha@gu@c@m3l0
Domínioyarabox-ota.local

Fluxo

  1. Usuário ativa modo OTA via menu local (ou via comando MQTT no futuro).
  2. Firmware desconecta Wi-Fi STA, sobe rede yarabox_OTA.
  3. Usuário conecta na rede e acessa http://yarabox-ota.local.
  4. Upload do arquivo .bin do novo firmware.
  5. ESP2SOTA grava em app1, atualiza otadata, reinicia.
  6. Em caso de boot falho do app1, fallback automático para app0.

Pré-requisito de segurança: OTA via AP local apenas. Não há OTA via internet pública nesta versão — evita exposição da superfície de ataque (decisão técnica, ver ARCHITECTURE.md §"Decisões").

Fonte: lib/ota_update/src/.


15. Mapeamento de pinos

GPIOFunçãoBibliográfico
4Encoder rotativo — canal AESP32Encoder
6Encoder rotativo — canal BESP32Encoder
8I²C SDAADS1115, PCF8574, SH1107
9I²C SCLADS1115, PCF8574, SH1107
16Sensor de vazão FE300Interrupção (rising edge) — contador
17Bomba elétrica (PWM)LEDC canal 0, duty fixo 255
18Bomba dosadora — STEPAccelStepper (A4988 driver)
(par)Bomba dosadora — DIRAccelStepper
UART2 RX/TXSIM7080G (GSM + GPS)TinyGSM

Endereços I²C:

  • ADS1115 #1 — 0x48 (sensores PT100-103 principais)
  • ADS1115 #2 — 0x49 (canais de expansão)
  • PCF8574 #1 — 0x20 (relés, válvulas, LEDs principais)
  • PCF8574 #2 — 0x24 (expansão de saídas/entradas)
  • SH1107 (display) — 0x3C

Mapeamento detalhado por sub-circuito está em Cap 2 §3.3 e nos esquemáticos do Apêndice B.


16. Compilar, gravar e debugar

Pré-requisitos

  • Sistema: macOS, Linux ou Windows
  • PlatformIO Core (CLI) ou extensão PlatformIO IDE no VS Code
  • Driver USB-Serial: CP210x ou CH340 (depende da revisão do ESP32-S3-DevKitC-1) — normalmente reconhecido nativamente em macOS e Linux recentes

Clone e setup

gh repo clone agua-camelo-cs/YB-modulo-basico
cd YB-modulo-basico
pio pkg install   # instala todas as libs declaradas em platformio.ini

Build

pio run                              # compila firmware
pio run -t buildfs                   # constrói imagem do LittleFS (data/ → spiffs.bin)

Gravar firmware via USB

pio run -t upload                    # grava firmware
pio run -t uploadfs                  # grava conteúdo de data/ no LittleFS
pio device monitor                   # serial monitor 115200 baud + esp32_exception_decoder

Gravar firmware via OTA (placa já em produção)

  1. Ativar OTA mode (via menu local).
  2. Conectar à rede yarabox_OTA.
  3. Acessar http://yarabox-ota.local no navegador.
  4. Upload do .bin em .pio/build/esp32-s3-devkitc-1/firmware.bin.
  5. Aguardar reinício automático.

Debug

  • esp32_exception_decoder já está habilitado em monitor_filters — qualquer crash resulta em backtrace legível no monitor serial.
  • Coredump partition (128 KB) salva dump completo em caso de panic — pode ser extraído via espcoredump.py.
  • pio device monitor --filter esp32_exception_decoder força o filtro mesmo fora do contexto do platformio.ini.

Geração de docs

doxygen Doxyfile                     # gera HTML em docs/ a partir dos comentários do código

Fontes deste capítulo

  • Repositório de firmware (local): Macroentregas_Embrapii/Macroentrega_3/fontes códigos e projetos/modulo-basico/
    • ARCHITECTURE.md (1700+ linhas — referência primária para detalhes)
    • README.md (26 KB — guia de uso)
    • platformio.ini
    • custom_partitions.csv
    • src/main.cpp, src/main.h
    • lib/<15 módulos>/
    • data/config.json, data/config-padrao-fabrica.json, data/AP/
  • Repositório GitHub (mirror privado): agua-camelo-cs/YB-modulo-basico
  • Macroentregas_Embrapii/Macroentrega_3/5.1 .../Manual do desenvolvedor.docx
  • Macroentregas_Embrapii/Macroentrega_3/5.1 .../manual-do-desenvovedor-módulo-básico.pdf
  • Arquitetura_Yara_Box/Visao_Tecnica_Wara_Box.md §3.4
  • Backup operacional da unidade 001: /11-Confidencial/YaraBox_001_Backup_Config.md
CAP 06 — BACKEND

Capítulo 6 — Backend & Cloud

Status: ✅ pronto Última atualização: 2026-05-14 Audiência: engenheiro DevOps / infra (Linux, Docker, Nginx, DNS, TLS) Tempo de leitura estimado: 30 minutos Pré-requisito: acesso a uma máquina cliente com SSH, terminal, e capacidade de provisionar VPS em algum provedor


Sumário


1. Visão geral da arquitetura

Infraestrutura cloud e telemetria da Yara Box

Figura 06.1 — Infraestrutura cloud e telemetria: device em campo, Wi‑Fi/GSM, MQTT, VPS Vultr, Docker, ThingsBoard, Nginx e dashboards.

A Yara Box é um produto IoT que precisa de três camadas de backend em produção:

  1. Broker MQTT — para os devices em campo conectarem e publicarem telemetria
  2. Plataforma IoT — armazena telemetria, gerencia devices, regras, alarmes, dashboards
  3. Web frontend (UI/admin) — para humanos acessarem o sistema via navegador, com HTTPS e autenticação

A solução escolhida usa ThingsBoard Community Edition (CE) como peça central porque resolve as 3 camadas em um único produto open source bem mantido: ele é broker MQTT, plataforma IoT, e tem UI web embutida. O sistema roda em uma VPS Linux controlada pela Água Camelo / Wara Tech, atrás de um Nginx que faz proxy reverso e termina TLS via Let's Encrypt, com DNS apontado pelo registrador do domínio.

┌─────────────────────────────────────────────────────────────────┐
│                  INTERNET                                       │
└─────────────────────────────────────────────────────────────────┘
        │                                       │
        │ HTTPS (443)                          │ MQTT plain (1883)
        │ acesso humano                        │ devices Yara Box
        ▼                                       ▼
┌─────────────────────────────────────────────────────────────────┐
│  VPS Vultr — São Paulo, BR                                      │
│  216.238.100.81 | aguacamelo-tb | Ubuntu 24.04 LTS              │
│                                                                 │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │ UFW (firewall) → portas: 22, 80, 443, 1883, 8883         │   │
│  │ fail2ban → bane SSH brute force                          │   │
│  └──────────────────────────────────────────────────────────┘   │
│                                                                 │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │ Nginx (HTTP/HTTPS) — porta 80→redirect 443→proxy 8080    │   │
│  │   SSL Let's Encrypt (renovação automática via certbot)   │   │
│  └────────────────────────┬─────────────────────────────────┘   │
│                           │                                     │
│                           ▼                                     │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │ Docker Compose                                            │   │
│  │   container: thingsboard (imagem tb-postgres:latest)      │   │
│  │     - escuta 127.0.0.1:8080 (HTTP web UI, só localhost)   │   │
│  │     - escuta 0.0.0.0:1883 (MQTT, exposto publicamente)    │   │
│  │     - volumes nomeados: tb-data, tb-logs                  │   │
│  │     - Postgres embutido (banco interno)                   │   │
│  └──────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────┘

DNS: o subdomínio yarabox.aguacamelo.com.br aponta para o IP fixo da VPS via A record no registrador (GoDaddy no caso atual; qualquer registrador serve).

Em produção (validado em 14/05/2026): https://yarabox.aguacamelo.com.br responde HTTP/1.1 200 OK com nginx 1.24.0 e certificado Let's Encrypt válido. MQTT :1883 recebe telemetria da unidade YB-001 a cada 30 s.


2. Decisões arquiteturais e o porquê

2.1. Provedor da VPS

Escolhido: Vultr Cloud Compute, datacenter São Paulo. Plano: vhf-2c-4gb (High Frequency, 2 vCPU, 4 GB RAM, 128 GB NVMe). Custo: ~$36/mês + ~$5/mês de auto-backup = ~$41/mês total.

Por que não outros:

  • Hostinger VPS BR: parecia óbvio pelo "pagamento em real, NF", mas Hostinger não tem datacenter no Brasil para VPS (só compartilhado/cloud hosting comum). Verificar antes de comprar.
  • DigitalOcean: sem São Paulo. Latência maior pra IoT (~120 ms vs ~10 ms da VPS SP).
  • AWS Lightsail: tem SP, preço parecido. Boa alternativa se for migrar para o ecossistema AWS depois.
  • Magalu Cloud: brasileira, datacenter BR, mais nova (menos provada).
  • GoDaddy VPS: sem datacenter BR, painel limitado para Linux puro.

Critério decisor: datacenter no Brasil para minimizar latência MQTT (IoT em campo, redes 4G instáveis, packets pesam) + provedor maduro com snapshots/firewall/API.

2.2. Sistema operacional

Escolhido: Ubuntu 24.04 LTS x64. Por que: distribuição mais comum, LTS até 2029, documentação abundante para Docker e systemd.

2.3. ThingsBoard CE vs PE

Escolhido: Community Edition (open source, gratuito). Por que: CE tem todas as features que o MVP precisa (MQTT, REST API, devices, telemetria, dashboards, regras, alarmes, multi-tenant). PE custa $$$/device/mês e oferece extras (white-label, scheduling avançado, integrations enterprise) que não justificam o gasto enquanto há ~1 unidade em operação.

Quando reconsiderar PE: se passar de ~50 devices em produção e/ou precisar white-label fortemente para revender SaaS.

2.4. Imagem Docker do ThingsBoard

Escolhido: thingsboard/tb-postgres:latest (monolítica, Postgres embutido). Por que: simples, um único container roda TB + DB. Backup vira backup do volume.

Quando trocar: quando precisar escalar Postgres separado (com replicação, gerência dedicada), trocar para thingsboard/tb-node (TB stateless) + container Postgres separado + volume dedicado.

2.5. Volumes Docker — nomeados, NÃO bind mount

Pegadinha crítica: se usar bind mount (./tb-data:/data), o usuário interno do container (UID do processo thingsboard) não tem permissão de escrever na pasta do host (que pertence ao UID 1001 do usuário admin). Erro fatal na primeira inicialização:

mkdir: cannot create directory '/data/db': Permission denied

Solução: usar volumes nomeados (tb-data:/data), gerenciados pelo Docker. O Docker resolve a permissão automaticamente.

2.6. Mapeamento de portas

PortaBindDestino internoPara quem
22públicosshdadmin (você) via SSH
80públiconginxredireciona para 443
443públiconginx → 127.0.0.1:8080 (TB)UI web HTTPS
1883públicocontainer TBdevices MQTT plain
8883públicocontainer TB (a configurar)devices MQTT TLS (futuro)
8080127.0.0.1 onlycontainer TBnunca exposto direto — só via nginx

Por que 8080 só em localhost: se exposto publicamente, a interface admin do TB ficaria acessível em HTTP plain (login passa em texto claro). Forçar o tráfego pelo nginx garante TLS obrigatório.

2.7. SSH — desabilitar root e senha

Práticas básicas mas essenciais:

  • Cria usuário não-root com sudo (aguacamelo neste caso) e configura NOPASSWD para sudo, já que login só por SSH key.
  • Copia a chave SSH do root para o usuário novo antes de desabilitar root.
  • Desabilita PermitRootLogin (sem login root direto, mesmo com chave).
  • Desabilita PasswordAuthentication (força chave SSH sempre).

⚠️ Pegadinha crítica do sshd no Ubuntu: o sshd lê arquivos drop-in em /etc/ssh/sshd_config.d/ em ordem alfabética, e o primeiro valor encontrado prevalece — não o último. Por isso o arquivo de hardening precisa começar com 00- para ganhar precedência sobre 50-cloud-init.conf (que vem com PasswordAuthentication yes por padrão na Vultr).

2.8. Firewall UFW + fail2ban

UFW define política deny incoming por padrão e libera apenas: 22 (SSH), 80, 443, 1883, 8883. Tudo mais é bloqueado.

fail2ban monitora /var/log/auth.log (SSH) e bane IPs após 5 falhas em 10 minutos por 1 h. Cobertura mínima viável; pode expandir para nginx/MQTT depois.

2.9. SSL Let's Encrypt automático

certbot com plugin nginx faz todo o ciclo:

  • Solicita certificado válido para o domínio
  • Reescreve /etc/nginx/sites-available/ adicionando bloco server { listen 443 ssl; ... }
  • Adiciona redirect HTTP→HTTPS no bloco da porta 80
  • Configura certbot.timer no systemd para tentar renovação 2× por dia (renova quando faltam ≤30 dias)

Custo zero. Certificado válido por 90 dias, renovado automaticamente.

2.10. DNS

Escolhido: registrador do domínio mantém o DNS (no caso, GoDaddy). A record yarabox → IP da VPS, TTL 600 s (10 min — adequado para migrações futuras).

Não foi preciso Cloudflare ou DNS de terceiros porque o tráfego é baixo e não há ataque DDoS plausível para justificar proxying.


3. Setup passo a passo (comandos reais)

Os comandos abaixo são reproduzíveis verbatim, testados em 14/05/2026. Substitua <IP> pelo IP público da sua VPS quando aparecer.

3.1. Provisionar VPS (no painel da Vultr)

  • Deploy → Cloud Compute → Shared CPU → Intel Regular (ou AMD High Performance)
  • Localização: São Paulo
  • Imagem: Ubuntu 24.04 LTS x64
  • Plano: vhf-2c-4gb (~$36/mo base + ~$4.80 backups = ~$41/mês em SP)
  • SSH Key: cadastrar a chave pública (~/.ssh/id_ed25519.pub no Mac local). Antes, gerar a chave se ainda não houver:
    ssh-keygen -t ed25519 -C "rodrigo@waratech" -f ~/.ssh/id_ed25519 -N ""
    cat ~/.ssh/id_ed25519.pub  # copiar e colar no Vultr
    
  • Hostname/Label: aguacamelo-tb
  • Auto-backups: ✅ Enabled
  • IPv6:
  • Deploy → aguardar status "Running" (~2–5 min)
  • Anotar o IP público (no exemplo histórico: 216.238.100.81)

3.2. Conectar via SSH

No Mac local:

ssh root@<IP>   # primeira vez, confirmar fingerprint com "yes"

Se aparecer "Connection refused", aguardar mais 1 minuto (boot do sshd).

3.3. Hardening — atualizações, timezone e swap

Dentro da VPS:

# Em background protegido (sobrevive a queda de SSH)
nohup bash -c '
apt update && apt upgrade -y
timedatectl set-timezone America/Sao_Paulo

if [ "$(swapon --show | wc -l)" -eq 0 ]; then
  fallocate -l 4G /swapfile
  chmod 600 /swapfile
  mkswap /swapfile
  swapon /swapfile
  echo "/swapfile none swap sw 0 0" >> /etc/fstab
  echo "Swap de 4GB criado"
else
  echo "Swap ja existe"
fi
' > /tmp/setup.log 2>&1 &

# Acompanhar
tail -f /tmp/setup.log

A Vultr já provisiona ~8 GB de swap por padrão. Se já existe, o script só verifica.

Configurar SSH keep-alive no Mac local (evitar conexões caindo durante apt upgrade longo):

cat >> ~/.ssh/config <<'EOF'

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3
EOF

3.4. Hardening — usuário não-root

adduser --gecos "" --disabled-password aguacamelo
usermod -aG sudo aguacamelo

mkdir -p /home/aguacamelo/.ssh
cp /root/.ssh/authorized_keys /home/aguacamelo/.ssh/authorized_keys
chown -R aguacamelo:aguacamelo /home/aguacamelo/.ssh
chmod 700 /home/aguacamelo/.ssh
chmod 600 /home/aguacamelo/.ssh/authorized_keys

# sudo sem senha (login só por chave SSH, então senha não é "second factor" útil)
echo 'aguacamelo ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/90-aguacamelo
chmod 440 /etc/sudoers.d/90-aguacamelo

Validar ANTES de fechar SSH como root: em outra janela, ssh aguacamelo@<IP> deve entrar direto, e sudo -n whoami deve retornar root.

3.5. Hardening — SSH (desabilitar root + senha)

Drop-in que ganha precedência alfabética:

cat > /etc/ssh/sshd_config.d/00-hardening.conf <<EOF
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication no
KbdInteractiveAuthentication no
EOF
chmod 644 /etc/ssh/sshd_config.d/00-hardening.conf

sshd -t && systemctl reload ssh
sshd -T | grep -iE "^permitrootlogin|^passwordauthentication|^pubkeyauthentication"

Teste de fogo:

  • ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no root@<IP> → deve falhar com Permission denied (publickey)
  • ssh aguacamelo@<IP> → deve entrar normal

3.6. Hardening — UFW + fail2ban

sudo apt install -y ufw fail2ban

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp comment 'HTTP (nginx → ThingsBoard)'
sudo ufw allow 443/tcp comment 'HTTPS (nginx → ThingsBoard)'
sudo ufw allow 1883/tcp comment 'MQTT plain'
sudo ufw allow 8883/tcp comment 'MQTT TLS'
sudo ufw --force enable

sudo tee /etc/fail2ban/jail.local > /dev/null <<EOF
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5

[sshd]
enabled = true
port = ssh
EOF

sudo systemctl enable --now fail2ban
sudo ufw status verbose
sudo fail2ban-client status sshd

3.7. Instalar Docker

curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker aguacamelo
sudo systemctl enable --now docker

# Reconectar SSH para o grupo docker valer na sessão
exit
ssh aguacamelo@<IP>

docker run --rm hello-world   # validação

3.8. Subir ThingsBoard via Docker Compose

sudo mkdir -p /opt/thingsboard
sudo chown aguacamelo:aguacamelo /opt/thingsboard
cd /opt/thingsboard

cat > docker-compose.yml <<'EOF'
services:
  thingsboard:
    image: thingsboard/tb-postgres:latest
    container_name: thingsboard
    restart: always
    ports:
      - "127.0.0.1:8080:9090"   # HTTP UI — só localhost (nginx faz proxy)
      - "1883:1883"              # MQTT plain — exposto publicamente
    environment:
      TB_QUEUE_TYPE: in-memory
    volumes:
      - tb-data:/data
      - tb-logs:/var/log/thingsboard

volumes:
  tb-data:
  tb-logs:
EOF

docker compose up -d
docker compose logs -f

Aguardar a linha Started ThingsBoardServerApplication in XX seconds no log (3–5 min na primeira inicialização, porque cria schema do Postgres). Depois Ctrl+C no tail.

3.9. Apontar DNS

No painel do registrador (GoDaddy → DNS → Records):

  • Tipo: A
  • Nome: yarabox
  • Valor: <IP da VPS>
  • TTL: 600

Aguardar propagação (10–60 min, em geral muito rápido). Validar:

dig +short yarabox.aguacamelo.com.br
# deve retornar o IP da VPS

3.10. Nginx + SSL Let's Encrypt

sudo apt install -y nginx certbot python3-certbot-nginx

sudo tee /etc/nginx/sites-available/thingsboard > /dev/null <<'EOF'
server {
    listen 80;
    listen [::]:80;
    server_name yarabox.aguacamelo.com.br;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # WebSocket support (TB usa para real-time)
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 86400;
    }

    location /.well-known/acme-challenge/ {
        root /var/www/html;
    }
}
EOF

sudo ln -sf /etc/nginx/sites-available/thingsboard /etc/nginx/sites-enabled/
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t && sudo systemctl reload nginx

# Solicitar cert + ativar HTTPS automático com redirect HTTP→HTTPS
sudo certbot --nginx \
  -d yarabox.aguacamelo.com.br \
  --non-interactive \
  --agree-tos \
  -m rodrigobelli@aguacamelo.com.br \
  --redirect

Validação final:

curl -I https://yarabox.aguacamelo.com.br/   # deve retornar HTTP/1.1 200 ou 3xx
systemctl list-timers | grep certbot         # deve mostrar certbot.timer ativo

4. Setup inicial dentro do ThingsBoard

4.1. Primeiro login (sysadmin)

Abra https://yarabox.aguacamelo.com.br no navegador.

CampoValor (default ThingsBoard)
Emailsysadmin@thingsboard.org
Senhasysadmin

Imediatamente o TB força troca de senha. Crie uma senha forte (24+ chars de password manager) e salve no cofre de credenciais ANTES de submeter (se perder, fica trancado fora do sysadmin sem recovery built-in).

Em seguida, vá em Profile → troque o email do sysadmin para algo institucional (ex: o email do dono da plataforma, não @thingsboard.org). Reduz superfície de ataque.

4.2. Criar Tenant

Como sysadmin: Locatários (Tenants)+ → preencher:

CampoValor sugerido
TitleÁgua Camelo (nome da empresa cliente operacional)
Tenant profileDefault
Emailemail institucional do cliente
Country / CityBrasil / (cidade)

Padrão arquitetural: tenant = empresa operacional. Não usar "Yara Box" como nome de tenant — Yara Box é o produto. Cada cliente que opera Yara Boxes é um tenant separado. Isolamento de dados é design fundamental do TB.

4.3. Criar Tenant Admin

Na linha do tenant → ícone de pessoa (Tenant Administrators) → +:

  • Email: do admin operacional (no caso, sócio que vai operar)
  • Send activation mail: desmarcar (SMTP ainda não configurado)
  • Display activation link: marcar (TB vai te dar URL de ativação na hora)

Copie o link de ativação, abra em uma aba nova, defina senha forte, salve no cofre. Conta agora ativa.

⚠️ Pegadinha: o link de ativação aponta para localhost:8080 se você está acessando via SSH tunnel. Se for repassar para outra pessoa em outra máquina, o link só funciona após o DNS+SSL estarem prontos (assim aponta direto para o domínio real). Boa prática: ativar você mesmo, salvar a senha, repassar email+senha para a pessoa via canal seguro depois.

4.4. Como o sysadmin acessa dashboards do tenant

Sysadmin NÃO vê dashboards diretamente (design do TB — separação plataforma vs operação). Para acessar:

  • Locatários → linha do tenant → "Login as Tenant Administrator" (impersonação)
  • Interface muda para visão do tenant admin
  • Pode criar/editar dashboards, devices, etc.

4.5. Device Profile

Como tenant admin: Profiles → Device profiles+Adicionar perfil de dispositivo (NÃO "Importar" — vai dar erro por refs quebradas se importar JSON do TB antigo).

Preencher:

  • Name: Perfil <Tipo de Device> (ex: Perfil Água Camelo)
  • Profile type / Transport type: Default
  • Demais campos: deixar em branco

Você pode adicionar alarms depois (na seção Alarm rules dentro do profile).

⚠️ Por que NÃO importar JSON: profiles do TB antigo carregam defaultRuleChainId apontando para rule chain do servidor antigo (UUID que não existe na instância nova). Erro: "Can't assign non-existent rule chain". Criar manual evita o problema.

4.6. Criar device

Entidades → Dispositivos+Adicionar dispositivo:

CampoValor
Namenome único do device (ex: YB-001)
Etiquetadescrição livre
Device profileo profile criado acima
É gateway❌ (Yara Box é device, não gateway)
Clientevazio por enquanto

Após criar, clique no device → aba/seção "Credenciais" → copie o Access Token (string tipo L89lNbR77bcBCf7hSPeT). Esse token é o que o firmware vai usar para autenticar no MQTT.


5. Configurar o device para conectar

A Yara Box lê configurações em runtime do arquivo data/config.json (não hardcoded no firmware — ver Cap 5 §5). Dois caminhos para atualizar:

5.1. Via AP mode (mais simples, requer acesso físico/proximidade)

  1. Liga a Yara Box. Ela cria rede Wi-Fi própria yarabox_AP (sem senha).
  2. Conecta o celular/notebook nessa rede.
  3. Abre http://yarabox.local ou http://192.168.4.1 no navegador.
  4. Faz login em "Acesso Restrito": usuário camelo / senha @gu@c@m3l0 (defaults do firmware atual).
  5. Edita campos:
    • Servidor MQTT = yarabox.aguacamelo.com.br
    • Token MQTT = o Access Token copiado do TB no §4.6
  6. Salvar e reiniciar.

5.2. Via OTA Wi-Fi (avançado, remoto)

A Yara Box também sobe rede OTA (yarabox_OTA, senha no firmware — ver Cap 5 §14). Permite upload de novo config.json sem acesso físico. Procedimento detalhado no manual do desenvolvedor.

5.3. Validar telemetria chegando

No ThingsBoard como tenant admin:

  • Dispositivos → clique no device → aba "Última telemetria"
  • State deve mudar de Inactive para 🟢 Active em até 30 s após o boot
  • Aba Last Telemetry mostra as keys (pressao_pt100, pressao_pt101, vazao_l_min, tensao_alimentacao, tensao_bateria, nivel_hipoclorito, estado, etc.) com timestamps recentes

Detalhes do payload em Cap 5 §11.


6. Compartilhamento de acesso

6.1. Sysadmin (admin total)

Login via email + senha. Salvar credenciais no cofre. Nunca compartilhar.

6.2. Tenant Admin (gerencia o tenant)

Login com email + senha. Pode haver múltiplos por tenant. Cada um com conta própria.

6.3. URL pública read-only (sem login)

Para mandar para funcionários internos ou demos rápidas, o ThingsBoard suporta tornar dashboard + devices "públicos":

  1. No device → menu de ações → "Make public"
  2. No dashboard → 3 pontinhos → "Make public dashboard"
  3. TB gera URL tipo https://<dominio>/dashboard/<UUID>?publicId=<UUID>
  4. Qualquer pessoa com a URL vê os dados read-only, sem login

Trade-offs:

Zero fricçãoURL é "secret-by-obscurity": se vazar, vazou
Read-only por designSem auditoria de quem viu
Funciona com 1 cliqueNão dá para revogar individualmente (só "make private" tira todos)

Boa prática: usar para demos e prospecção. Para clientes pagantes, criar Customer + Customer User no tenant (acesso com login auditado, permissões granulares).


7. Operação contínua

7.1. Comandos úteis

Reiniciar TB:

cd /opt/thingsboard && docker compose restart

Ver logs em tempo real:

cd /opt/thingsboard && docker compose logs -f

Atualizar TB para nova versão:

cd /opt/thingsboard
docker compose pull
docker compose up -d

Status do sistema:

free -h                                # memória
df -h /                                # disco
systemctl status nginx
systemctl status fail2ban
sudo fail2ban-client status sshd

Renovar SSL manualmente (caso certbot.timer falhe):

sudo certbot renew --dry-run     # teste
sudo certbot renew                # real
sudo systemctl reload nginx

7.2. Backup

Camada 1 — Vultr Auto-Backup ($4.80/mês): snapshot semanal completo da VPS. Restore via painel. Bom para "voltar ao estado de uma semana atrás". Ruim para perda de dados recentes (até 7 dias podem se perder).

Camada 2 — Backup específico do volume tb-data (não configurado ainda, recomendado):

docker run --rm \
  -v thingsboard_tb-data:/data \
  -v "$(pwd)":/backup \
  alpine \
  tar czf /backup/tb-data-$(date +%Y%m%d).tar.gz /data

Pode ser scheduled via cron, mandando para S3/Vultr Object Storage. Permite backup diário granular e restore parcial (só DB).

7.3. Monitoring (não configurado ainda)

Recomendação futura: Prometheus + Grafana lendo métricas de node_exporter, nginx_exporter, cadvisor. Dashboards com uso de CPU/RAM/disco, latência HTTP, MQTT connection count, alertas via Slack/email.


8. Custos recorrentes

ItemValor
VPS Vultr vhf-2c-4gb SP~$36/mo
Vultr Auto-Backup~$4.80/mo
Domínio (já existia, GoDaddy)~$15/ano
SSL Let's Encrypt$0 (gratuito)
Total mensal infra Yara Box~$41 USD/mês (~R$ 220–240/mês)

Cresce linearmente com:

  • Upgrade de plano (mais devices, mais dashboards pesados) → próximo tier ~$48/mês
  • Backup externo dedicado (S3/Vultr Object) → ~$5–10/mês conforme volume

9. Troubleshooting comum

SintomaCausa provávelSolução
Permission denied (publickey) ao tentar SSHHardening ativo (root desabilitado, password disabled)Logar como aguacamelo
Container TB com loop Connecting to Postgres, N attempts leftBind mount com UID mismatch (/data/db permission denied aparece antes)Trocar para volume nomeado no docker-compose.yml (ver §2.5)
Login sysadmin rejeitando senha default sysadmin após criaçãoSenha trocada e perdida — TB força troca no primeiro acessoRestaurar a partir de backup OU acesso direto ao Postgres do volume para resetar
https://... retorna 502 Bad GatewayContainer TB caiu OU está bootandodocker compose ps e docker compose logs -f
Telemetria não chega ao TBToken errado, server_mqtt errado, ou rede da YB sem internetVerificar data/config.json da YB (ver Cap 5 §5); ver logs no broker MQTT
apt upgrade derrubou conexão SSHConexão TCP idleSSH keep-alive (ServerAliveInterval no ~/.ssh/config do cliente) + nohup em comandos longos
Certbot falha ao validarDNS ainda propagando OU porta 80 fechada no UFWAguardar propagação; conferir ufw status

10. Pontos em aberto / próximos passos da infra

  • MQTT TLS na porta 8883 (atualmente devices usam 1883 plain — tráfego em texto claro). Requer certificado adicional para o broker MQTT e ajuste no firmware (módulo mqtt).
  • Backup específico do Postgres com retenção (diário 7d + semanal 4w + mensal 12m) para S3/Vultr Object Storage.
  • Monitoring (Prometheus + Grafana + alertas).
  • DNS records secundários quando criar mqtt.aguacamelo.com.br ou app.aguacamelo.com.br para separar broker MQTT do painel web.
  • Customer Users quando passar a ter clientes pagantes (substitui URL pública para acesso oficial).
  • Multi-tenant ativo (hoje só tenant Água Camelo). Adicionar tenants conforme clientes onboardados.
  • Frontend próprio consumindo TB API — substitui a UI default do TB pela cara branded da Wara Tech. Projeto separado (ver /01-Produto/Produto_Yara_Box/Dashboard_yara_box/HANDOFF_Dashboard_Wara_Tech.md).

11. Glossário rápido

TermoSignificado
TenantOrganização isolada dentro do TB. No nosso modelo, = 1 empresa cliente
Tenant AdminUsuário que opera dentro de um tenant. Cria devices, dashboards, etc.
CustomerSubdivisão de um tenant (ex: cliente final do cliente). Não usado no MVP
SysadminAdmin da plataforma TB toda. Cria tenants
DeviceRepresentação no TB de um dispositivo físico (uma Yara Box = um device)
Device ProfileTemplate de configuração compartilhado entre devices similares
Access TokenCredencial MQTT do device (string que o firmware envia para autenticar)
Rule ChainPipeline de regras (filtros, transformações, alertas) aplicadas à telemetria
DashboardUI visual de dados de um ou mais devices
AP modeYara Box virando ponto de acesso Wi-Fi próprio para configuração local (ver Cap 5 §13)
OTAOver-the-air update (firmware/config atualizados remotamente — ver Cap 5 §14)

Fontes deste capítulo

Referência histórica (substituída pela infra atual): Macroentregas_Embrapii/Macroentrega_3/5.1 Transferência da tecnologia ao cliente/Manual de configuração do VPS.docx (144 pgs, doc do PICG/Embrapii). Não usar como fonte primária — descreve a infra no servidor antigo iot.picg.iff.edu.br, descontinuada em 14/05/2026.

CAP 07 — MONTAGEM

Capítulo 7 — Montagem Física

Status: 🚧 bloqueado (parcial) Última atualização: 2026-05-14 Audiência: engenheiro/técnico de bancada (montagem mecânica + hidráulica + eletrônica)


🚧 BLOQUEADO — aguardando sessão presencial com o PICG (item 1 do email Embrapii de 11/05/2026 — não retornado até 14/05/2026)

TODO ao destravar:

  • Capturar passo-a-passo formal de montagem (sequência exata, torques, ferramentas)
  • Fotos profissionais (ou vídeo) de cada etapa significativa
  • Tempo estimado de montagem (hh:mm) com 1 técnico vs 2 técnicos
  • Lista de ferramentas necessárias (Allen, torquímetro, alicate de crimpar, etc.)
  • Lista de consumíveis (vedação, parafusos, conectores, fios)
  • Checklist de inspeção de qualidade pós-montagem

Este capítulo documenta a estrutura conceitual da montagem com base no que JÁ está documentado em ME2, mas o passo-a-passo formal só será autoritativo após a sessão presencial.


Sumário


1. Pré-requisitos

Antes de iniciar a montagem:

1.1. Peças prontas

  • PCBs fabricadas e testadas: Joker (Core), Seletora v1.1.1 (ver Cap 2)
  • 7 chapas PEAD cortadas conforme PDFs cotados (ver Cap 3 §2.2)
  • Perfis de alumínio dimensionados (ALU-01, ALU-02, ALU-03, ALU-04 — ver Apêndice A)
  • Filtros Filtro 1 (disco 130 μm), Filtro 2 (MF 0,2 μm), Filtro 3A e 3B (UF 0,01 μm)
  • Bombas: Bomba E (elétrica 12V/8L/min), Bomba D (peristáltica dosadora), Bomba manual (pistão)
  • Sensores: PT100, PT101 (calibrados); PT102, PT103 (opcional); FE300; LSL200; LSLL200
  • Atuadores: Solenóides S1 e S2; LED YL400; buzzer
  • Conexões hidráulicas: T-fittings, joelhos, adaptadores, válvula de retenção (FV301)
  • Reservatório de hipoclorito (TQ Cloro 1,5–2 L)
  • Display SH1107, encoder rotativo, botoeiras HS500/501/502
  • Bateria 18650 3S3P carregada
  • Firmware gravado na PCB Joker (ver Cap 5 §16)

1.2. Ferramentas (lista preliminar — confirmar com PICG)

  • Chave Allen (jogo completo)
  • Chave de fenda Phillips e Pozidriv
  • Alicate de bico
  • Alicate de crimpar (terminais)
  • Torquímetro (para parafusos M5/M6 dos perfis)
  • Soldador (para conexões elétricas críticas)
  • Multímetro
  • Computador com PlatformIO para flash e debug

1.3. Área de trabalho

  • Bancada limpa, plana, com pelo menos 1×1 m livre
  • Tomada elétrica próxima
  • Iluminação adequada para inspeção visual

2. Topologia da montagem em 4 camadas

Montagem física em quatro camadas da Yara Box

Figura 07.1 — Topologia de montagem em 4 camadas: estrutura, hidráulica, eletrônica, elétrica/bateria e fechamento do gabinete.

A montagem segue bottom-up, em 4 camadas:

┌─────────────────────────────────────────────────────┐
│  Camada 4: Sistema elétrico + bateria + fechamento  │
├─────────────────────────────────────────────────────┤
│  Camada 3: Sistema eletrônico                       │
│     (PCBs + sensores + display + atuadores)         │
├─────────────────────────────────────────────────────┤
│  Camada 2: Sistema hidráulico                       │
│     (filtros + bombas + conexões + reservatório)    │
├─────────────────────────────────────────────────────┤
│  Camada 1: Estrutura (perfis + chapas PEAD)         │
└─────────────────────────────────────────────────────┘
                       ▲
                     Rodízios

Cada camada deve estar inspecionada e validada antes da próxima ser instalada.


3. Camada 1 — Estrutura (perfis alumínio + chapas PEAD)

3.1. Conceito

Montar o esqueleto em perfis de alumínio, fixar chapas PEAD como fechamentos. As 7 chapas têm posições específicas (ver Cap 3 §2.2).

3.2. Sequência conceitual

  1. Posicionar os 6 perfis ALU-01 (680 mm) como esqueleto vertical e horizontal principal.
  2. Conectar com cantoneiras (CANT-01) e parafusos M5/M6.
  3. Adicionar perfis ALU-02 (300 mm), ALU-03 e ALU-04 (490 mm) conforme projeto.
  4. Verificar esquadro com esquadro de marceneiro antes de apertar parafusos finais.
  5. Fixar a divisória interna (PEAD-DIV) que separa o compartimento hidráulico do eletrônico.
  6. Aplicar os 4 rodízios (SUP-ROD) na base, parafusados.
  7. Instalar as 2 dobradiças (DOB-01) na tampa lateral.
  8. Instalar tampo superior (TAMPO-01) e alça de transporte (ALC-01).
  9. Reservar as 7 chapas PEAD — serão instaladas após Camadas 2 e 3.

🚧 Detalhes pendentes da sessão presencial PICG: torque exato dos parafusos, sequência de aperto, posicionamento exato de cada chapa, tolerâncias dimensionais.


4. Camada 2 — Sistema hidráulico

4.1. Conceito

Montar o circuito hidráulico completo no compartimento inferior, antes de fechar a tampa.

4.2. Sub-camadas

4.2.1. Fixação dos filtros

  1. Posicionar Filtro 0 (grade/pré-filtro) na captação.
  2. Fixar Filtro 1 (disco) com suporte adequado.
  3. Fixar Filtro 2 (MF 0,2 μm) em posição vertical.
  4. Fixar Filtros 3A e 3B (UF, em paralelo).

4.2.2. Conexões hidráulicas

Seguir o diagrama do Cap 3 §3:

  • Captação → Filtro 0 → válvula de retenção FV301 → Bomba E → Filtro 1 → Filtro 2 → (Filtros 3A e 3B em paralelo) → ponto de mistura MIX → saída
  • Reservatório TQ Cloro → Bomba D → ponto de mistura MIX
  • Dreno de retrolavagem com solenóides S1/S2

Vedação: fita teflon ou pasta vedante em todas as conexões roscadas. Verificar com pressurização (até 0,5 MPa) antes da Camada 3.

4.2.3. Instalação dos sensores

  • PT100, PT101 em pontos críticos do circuito (ver Cap 3 §4.2)
  • FE300 (sensor de vazão) em linha após o ponto de mistura MIX
  • LSL200 e LSLL200 no reservatório de hipoclorito (TQ Cloro)
  • Cabos roteados para o compartimento eletrônico via passa-fios na divisória PEAD-DIV

4.2.4. Instalação das bombas

  • Bomba E (elétrica) em suporte rígido para minimizar vibração
  • Bomba D (dosadora peristáltica) em suporte dedicado (SUP-BOM-PERI), com mangueira pelos rolos da bomba
  • Bomba manual (pistão) montada de modo que possa ser operada externamente sem abrir o gabinete

4.2.5. Reservatório de hipoclorito

Reservatório TQ Cloro (1,5–2 L) em suporte SUP-RES-HIPO, com tampa abrível pelo topo do gabinete para reposição em campo sem desmontagem.

4.3. Validação da Camada 2

Antes de prosseguir para a Camada 3:

  • Teste de estanqueidade com água a 0,5 MPa em todos os pontos
  • Verificar que Bomba E impulsiona água pelo circuito sem vazamentos
  • Verificar que Bomba D injeta volume conhecido (calibração simples — ver Cap 8 §4)

5. Camada 3 — Sistema eletrônico

5.1. Conceito

Montar PCBs, display, encoder, botoeiras e fiação no compartimento eletrônico (acima da divisória PEAD-DIV).

5.2. Sequência

  1. Fixar PCB Joker (Core) em suporte na divisória.
  2. Fixar PCB Seletora em suporte na divisória (próxima à entrada de fontes externas).
  3. Cabear sensores (PT100/101/102/103, FE300, LSL200, LSLL200) à PCB Core via conectores apropriados.
  4. Conectar atuadores:
    • Bomba E → saída P7 da Seletora
    • Bomba D → saída controlada pela Joker (driver A4988)
    • Solenóides S1/S2 → saídas da Joker (drivers IRLZ44N)
  5. Conectar alimentação: PCB Seletora → PCB Joker via J2.
  6. Display SH1107 na frente da tampa principal, conectado ao barramento I²C.
  7. Encoder rotativo + push-button (HS503) ao lado do display.
  8. Botoeiras HS500/501/502 no painel frontal.
  9. LED YL400 e buzzer no painel frontal.
  10. Conectar antena GSM externa do SIM7080G (cabo coaxial) — antena deve sair do gabinete para campo aberto.

5.3. Validação da Camada 3

  • Ao ligar (provisoriamente, com bateria de bancada), o display mostra logo de boot
  • Encoder rotativo navega no menu
  • Botoeiras respondem corretamente
  • Sensores reportam leituras coerentes no display
  • LEDs e buzzer testados via menu Geral → Teste
  • Conexão Wi-Fi STA funciona (após configurar via AP mode)

6. Camada 4 — Sistema elétrico e bateria

6.1. Sequência

  1. Instalar banco de bateria 18650 3S3P em suporte com BMS (se aplicável).
  2. Conectar bateria à PCB Seletora via P6.
  3. Instalar conectores externos P1 (AC), P2 (12VDC), P3/P4 (solar), P7 (saída bomba) nas laterais do gabinete.
  4. Fixar fusíveis em cada linha de alimentação principal.
  5. Cabear seguindo o projeto-eletrico (Cap 4 §10) — todas as conexões nomeadas conforme os sub-esquemáticos.
  6. Aterrar o chassi do gabinete (perfis de alumínio) ao GND comum.

6.2. Validação da Camada 4

  • Tensão de cada conector externo medida com multímetro
  • Sistema liga com cada uma das 5 fontes individualmente (testar A, B, D — solar e gerador testáveis em bancada com fontes simuladas)
  • Chaveamento automático entre fontes funciona ao desconectar a fonte primária
  • Bateria recarrega quando há fonte externa ativa

7. Fechamento do gabinete

  1. Instalar as 7 chapas PEAD conforme posicionamento (Cap 3 §2.2):
    • Chapa Posterior Interna (primeiro, do lado de dentro)
    • Chapa Posterior Externa
    • Chapa Lateral Direita Interna
    • Chapa Grande Lateral Esquerda (com janelas para sensores se houver)
    • Chapa Pequena Lateral Esquerda
    • Chapa Grande Superior e Inferior
    • Chapa Pequena Superior e Inferior
  2. Fechar a tampa lateral com as 2 dobradiças (DOB-01) e travamento (ver Manual de Instalação e Operação - Tampa lateral).
  3. Instalar manômetro analógico (MANOM-01) no painel frontal — verificar conexão hidráulica.

8. Inspeção final

Antes de enviar a unidade para ensaios ou para o cliente, validar todos os checklists das Camadas 2, 3 e 4 + esta lista final:

  • Sem vazamentos sob pressão de 0,5 MPa por 30 minutos
  • Bomba E aciona/desliga conforme comandos
  • Bomba D doseia volume conhecido em tempo conhecido (validação rápida — sem calibrar)
  • Todos os sensores reportam valores plausíveis no display
  • Telemetria chega ao ThingsBoard em até 30 s após o boot (verificar na URL https://yarabox.aguacamelo.com.br)
  • Calibrações restauradas conforme Apêndice C §8
  • Concentração de hipoclorito (config.concentracao_hipoclorito_porcentagem) bate com o produto usado
  • Rótulo de identificação afixado no gabinete (número de série, data de fabricação, contato do fabricante)
  • Cabos externos protegidos contra umidade (conectores estanques se uso externo)

9. Material de apoio disponível (workaround atual)

Enquanto a sessão presencial com o PICG não acontece, os seguintes materiais cobrem ~50% da documentação de montagem:

9.1. Fotos da visita técnica de 24/10/2025

Em Macroentregas_Embrapii/Macroentrega_2/Fotos da Visita 24out25/:

  • protótipo - vista do sistema hidráulico.JPG
  • protótipo - teste iniciais com painéis solares.JPG
  • protótipo - frontal painel.JPG
  • IMG_1906.JPG, IMG_1907.JPG, IMG_1908.JPG, IMG_1910.JPG (vistas adicionais)

9.2. Documento original de montagem preliminar

Macroentregas_Embrapii/Macroentrega_2/3.4 Montagem preliminar do protótipo/Montagem do protótipo.docx

Descreve a montagem inicial do protótipo conforme realizada pelo PICG em ME2 (aceita em 03/11/2025). É a melhor referência atual até a sessão presencial.

9.3. Modelo 3D em STEP

Macroentregas_Embrapii/Macroentrega_3/fontes códigos e projetos/projeto-mecanico-hidraulico-main/

Permite visualizar a montagem completa em 3D para inferir posicionamento de peças (com a ressalva dos débitos técnicos documentados em Cap 3 §8).

9.4. PDFs cotados das chapas PEAD

Macroentregas_Embrapii/Macroentrega_3/5.1 .../picg-resposta-2026-05-14/Desenhos 2D cotados das Chapas/ (7 PDFs ABNT) — permitem fabricar as chapas em qualquer fornecedor de corte.


Fontes deste capítulo

  • Macroentregas_Embrapii/Macroentrega_2/3.4 Montagem preliminar do protótipo/Montagem do protótipo.docx
  • Macroentregas_Embrapii/Macroentrega_2/Fotos da Visita 24out25/
  • Macroentregas_Embrapii/Macroentrega_3/fontes códigos e projetos/projeto-mecanico-hidraulico-main/ (STEP)
  • Macroentregas_Embrapii/.../picg-resposta-2026-05-14/Desenhos 2D cotados das Chapas/
  • Cap 3 — Mecânico & Hidráulico, Cap 2 — Eletrônica, Cap 4 — Elétrico, Cap 5 — Firmware
CAP 08 — TESTES

Capítulo 8 — Testes & Calibração

Status: ✅ pronto Última atualização: 2026-05-14 Audiência: técnico/engenheiro de bancada (instrumentação, metrologia básica) Tempo de leitura estimado: 25 minutos


Sumário


1. Princípio geral — regressão linear via ADS1115

Fluxo visual de testes e calibração da Yara Box

Figura 08.1 — Fluxo de testes e calibração: pressão, vazão FE300, bomba dosadora, tensões e validação final.

Todos os sensores analógicos da Yara Box (pressão PT100/101/102/103, tensão da bateria, tensão da bomba) passam pelo conversor ADS1115 (I²C, 16-bit, 4 canais) e usam a mesma equação de conversão:

y = a · x + b

Onde:

  • x — valor lido pelo módulo ADS1115 (em mV ou unidade ADC bruta, conforme configuração)
  • y — valor estimado da grandeza física (PSI para pressão, V para tensão)
  • a — coeficiente angular da reta
  • b — coeficiente linear

Os coeficientes ficam em data/config.json do firmware (ver Cap 5 §5) com chaves do tipo calibracao_<sensor>_a e calibracao_<sensor>_b. Podem ser atualizados via AP mode ou OTA sem reflashar o firmware.

Por que regressão linear simples (2 pontos)?

  • Os sensores PT100-103 e o divisor de tensão usam sinais inerentemente lineares ao longo de sua faixa de operação.
  • 2 pontos bem espaçados na faixa de interesse capturam tanto offset (b) quanto ganho (a).
  • Procedimento de bancada simples, reproduzível por técnicos com calibrador básico.
  • Caso o sensor mostre não-linearidade significativa no futuro, migrar para polinômio de 2º grau via firmware é um ajuste pontual no módulo dispositivos_ads.

Princípio do ADS1115 documentado pelo PICG:

"Para realizar a calibração da leitura do sinal proveniente do divisor de tensão, primeiramente aplicamos uma tensão na entrada do circuito e verificamos qual o valor foi lido pelo módulo ADS1115. Considerando que a razão entre os valores da tensão na entrada do circuito e o valor lido pelo módulo sempre será constante, podemos utilizar os resultados de duas medições, com valores de entrada distintos, para calcular os coeficientes de uma equação reduzida da reta na forma y = Ax + B."

Fonte: Macroentregas_Embrapii/.../picg-resposta-2026-05-14/procedimento_calibracao_sensor_vazão_bomba_dosadora.pdf (Apêndice A, página 19).


2. Calibração dos sensores de pressão

Procedimento formal entregue pelo PICG em 14/05/2026.

Fonte: Macroentregas_Embrapii/.../picg-resposta-2026-05-14/procedimento_calibracao_sensor_pressao.pdf.

2.1. Setup de bancada

Ar comprimido → Filtro regulador com manômetro → Sensor de pressão (DUT)
                                                ↓
                                                Manômetro de referência ou calibrador certificado

Materiais necessários:

  • Fonte de ar comprimido (compressor de bancada com regulagem fina)
  • Filtro regulador com manômetro (Festo, SMC ou equivalente)
  • Manômetro de referência ou calibrador de pressão certificado (faixa 0–30 PSI mínimo)
  • Mangueiras e adaptadores T para conectar simultaneamente o sensor (DUT) e o manômetro de referência
  • Multímetro ou notebook para ler o ADS1115 via I²C (ou usar o próprio firmware com debug serial)

Yara Box em modo de leitura: ligar a unidade, garantir que o display mostra leitura da pressão (estados Ler/Exibir ativos). Alternativamente, conectar diretamente o sensor a uma bancada ADS1115 isolada com Arduino/ESP32 de testes.

2.2. Procedimento de 2 pontos

Passo 1: Ajustar a pressão de entrada para 0 PSI (válvula totalmente fechada). Passo 2: Registrar a leitura bruta do ADS1115 — anotar valor x₁. Passo 3: Ajustar a pressão para 20 PSI (faixa cobrindo a operação típica do sensor). Passo 4: Aguardar estabilização (~30 s). Passo 5: Registrar leitura ADS — anotar valor x₂. Passo 6: Calcular a e b conforme §2.3.

Recomendações operacionais:

  • Evitar histerese: subir e descer a pressão pelo menos 2 ciclos antes de tomar leituras finais.
  • Tomar a média de 3 leituras em cada ponto para reduzir ruído.
  • Documentar temperatura ambiente e umidade — sensores capacitivos têm leve deriva com condições ambientais.
  • Anotar todos os valores brutos em planilha (ver Apêndice C) para rastreabilidade.

2.3. Cálculo dos coeficientes

Dados dois pontos (x₁, y₁) e (x₂, y₂):

a = (y₂ - y₁) / (x₂ - x₁)
b = y₁ - a · x₁

Em código (pseudocódigo Python ou planilha):

y1, y2 = 0, 20          # PSI conhecidos
x1, x2 = 318, 793       # leituras ADS1115 medidas

a = (y2 - y1) / (x2 - x1)
b = y1 - a * x1

print(f"a = {a:.8f}")
print(f"b = {b:.8f}")
print(f"PSI = {a:.8f} × leitura {b:+.8f}")

2.4. Exemplo trabalhado (PT101 da unidade 001)

Dados reais do procedimento PICG anexados ao PDF:

PressãoLeitura ADS1115
0 PSI318
20 PSI793

Cálculo:

a = (20 - 0) / (793 - 318) = 20 / 475 = 0,04210526
b = 0 - 0,04210526 × 318 = -13,38947268

PSI = 0,04210526 × leitura - 13,38947268

✅ Match perfeito com a unidade 001 em produção:

"calibracao_pt101_a": 0.04210526,
"calibracao_pt101_b": -13.38947268

Este é o procedimento exato que originou os coeficientes em uso. Sempre validar contra YaraBox_001_Backup_Config.md em caso de dúvida.

📷 Foto do registro manual (cálculo no caderno do operador): ver Apêndice C §7.

2.5. Aplicação dos coeficientes no firmware

Via AP mode (recomendado em bancada):

  1. Conectar à rede yarabox_AP
  2. Acessar http://yarabox.local → login camelo / @gu@c@m3l0
  3. Em Calibrações → Pressão, atualizar a e b para cada PT.
  4. Salvar → firmware reinicia e usa os novos valores.

Via edição direta (avançado — só em bancada, com placa desligada):

  1. Conectar via USB.
  2. Editar data/config.json manualmente.
  3. Gravar LittleFS: pio run -t uploadfs.
  4. Reiniciar.

3. Calibração do sensor de vazão (FE300)

Procedimento formal entregue pelo PICG em 14/05/2026.

Fonte: Macroentregas_Embrapii/.../picg-resposta-2026-05-14/procedimento_calibracao_sensor_vazão_bomba_dosadora.pdf (Apêndice A, página 19–20).

3.1. Princípio

O sensor de vazão funciona enviando um pulso sempre que um determinado volume fixo passar por ele. A calibração determina a resolução — qual volume precisa passar pelo sensor para gerar um pulso.

3.2. Setup de bancada

Reservatório de água → Mangueira → FE300 (sensor de vazão DUT) → Becker graduado

Materiais:

  • Reservatório elevado ou bomba para fornecer vazão constante
  • Mangueira compatível com a entrada do FE300 (1/4" ou conforme especificação)
  • Becker graduado com escala adequada (volume típico do teste: 1 L)
  • ESP32/Arduino para contar pulsos do FE300 (firmware Yara Box em modo de teste ou bancada isolada)
  • Cronômetro (apenas para taxa — não interfere no cálculo da resolução)

3.3. Procedimento

  1. Zerar o contador de pulsos no firmware.
  2. Posicionar o becker abaixo da saída.
  3. Abrir a válvula e deixar a água passar pelo sensor.
  4. Quando o becker estiver com volume conhecido (ex: 1000 mL), fechar a válvula.
  5. Ler o número de pulsos acumulados no firmware.
  6. Anotar par (volume, pulsos).
  7. Repetir pelo menos 4 vezes com volumes diferentes (mas conhecidos, lidos no becker).
  8. Calcular a resolução média em mL/pulso.

3.4. Tabela de medições (PICG, exemplo de bancada)

Volume (mL)Pulsos (P)Resolução (mL/P)
98041830,23428
107046630,22947
110548740,22671
127057610,22045
Média0,22773

3.5. Cálculo para uso no firmware

A unidade 001 está com calibracao_vazao = 0.253526896 no config.json, ligeiramente diferente da média do PDF. Isso é esperado — cada sensor tem variação individual e pode ser recalibrado após instalação.

Importante: o firmware trata o coeficiente como mL/pulso, então o valor de config.calibracao_vazao é diretamente a resolução medida. Para converter para pulsos/L (útil em cálculos externos):

pulsos_por_L = 1000 / calibracao_vazao
              = 1000 / 0.253526896
              ≈ 3944 pulsos/L

3.6. Drift progressivo — observação técnica do PICG

⚠️ Atenção operacional: "a leitura fornecida pelo sensor de vazão tem apresentado uma discrepância progressiva em relação ao volume real de água. Faz-se necessário investigar a correlação entre o desgaste operacional do equipamento e a deriva da calibração, a fim de estabelecer a periodicidade ideal para a recalibração do sensor de vazão."

procedimento_calibracao_sensor_vazão_bomba_dosadora.pdf, p. 19–20

Implicação: o intervalo padrão atual de recalibração da vazão é 100.000 L (config.volume_recomendado_nova_calibracao_vazao), mas pode ser ajustado em função de evidência empírica acumulada. Plano de recalibração detalhado em Cap 10 §10.


4. Calibração da bomba dosadora

Procedimento formal entregue pelo PICG em 14/05/2026.

Fonte: Macroentregas_Embrapii/.../picg-resposta-2026-05-14/procedimento_calibracao_sensor_vazão_bomba_dosadora.pdf.

4.1. Princípio

A bomba dosadora é movida por um motor de passo (driver A4988), que permite controle preciso do volume dispensado. A quantidade de fluido é proporcional ao número de passos executados.

O objetivo da calibração é encontrar a relação entre passos e volume dispensado em um intervalo conhecido.

4.2. Setup de bancada

Reservatório de água/cloro → Bomba dosadora (DUT) → Proveta graduada

Materiais:

  • Reservatório com líquido a dispensar (água destilada ou hipoclorito de teste)
  • Proveta graduada (escala adequada, tipicamente 10–50 mL)
  • Cronômetro
  • Bomba dosadora montada conforme produto final (com driver A4988 + motor de passo)
  • ESP32/Arduino para comandar a bomba (firmware Yara Box em modo de teste)

4.3. Procedimento

  1. Conectar a bomba ao reservatório e à proveta vazia.
  2. Configurar a bomba para operar a velocidade P passos/min por tempo T minutos.
  3. Acionar a bomba.
  4. Ao terminar T, parar a bomba e medir o volume V (mL) dispensado.
  5. Calcular a constante de calibração:
calibração = (P × T) / V
  1. Repetir com pelo menos 3 combinações diferentes de P e T para validar consistência.
  2. Calcular a média.

4.4. Tabela de medições (PICG, exemplo de bancada)

Velocidade (passo/min)Tempo (min)Volume (mL)Constante
100010310,32258065
50010160,31250000
36010110,32727273
Média0,32078446

4.5. Aplicação em runtime

O firmware usa o coeficiente para calcular a velocidade da bomba dosadora em função da vazão instantânea e da dose-alvo de hipoclorito:

velocidade_passo = calibração × vazao_minuto × dose_hipoclorito

Onde:

  • calibração — valor médio calibrado (ex: 0,32078446)
  • vazao_minuto — vazão instantânea em L/min (do FE300)
  • dose_hipoclorito — dose-alvo em mg/L (de config.dose_hipoclorito_ug-L.valor)

Match perfeito com a unidade 001:

"calibracao_bomba_dosadora": 0.32078445

(7 casas decimais batendo com a média do PDF — confirma que este foi o procedimento que originou o coeficiente em uso.)


5. Calibração de tensões (bateria, bomba)

⚠️ Gap pequeno — o procedimento formal do PICG cobre o princípio do ADS1115 mas não traz exemplo numérico específico de calibração de tensões.

5.1. Princípio (extrapolado)

A calibração segue o princípio idêntico ao da pressão (§2), pois ambas as grandezas (tensão e pressão) passam pelo mesmo módulo ADS1115 com divisor de tensão associado:

  1. Aplicar uma tensão conhecida V₁ (ex: 0 V curto-circuitando a entrada, ou usando fonte de bancada precisa).
  2. Ler a leitura do ADS1115 (x₁).
  3. Aplicar uma segunda tensão conhecida V₂ (ex: tensão nominal do banco — 12,6 V para bateria 3S Li-ion totalmente carregada).
  4. Ler o ADS1115 (x₂).
  5. Calcular a = (V₂ - V₁) / (x₂ - x₁) e b = V₁ - a × x₁.

5.2. Valores reais aplicados na unidade 001

CanalabFaixa nominal
Tensão bateria0,0043795620-0,1883211678~10,0–12,6 V
Tensão bomba0,00972490610,0~11,0–14,0 V

Fontes de bancada recomendadas para a calibração:

  • Tensão bateria: banco 3S Li-ion carregado em 12,6 V (medido com multímetro de referência) + curto-circuito em 0 V para o segundo ponto.
  • Tensão bomba: fonte de bancada ajustável (ex: 0 V e 14 V) — b = 0 na unidade 001 sugere que o divisor de tensão dela é linear sem offset, característica do circuito de entrada usado.

5.3. TODO

Pedir ao PICG, em follow-up curto, o exemplo numérico das medições brutas (V aplicado vs leitura ADS) para registro completo no Apêndice C.


6. Validação bacteriológica e físico-química (ensaios Fundenor)

Os ensaios laboratoriais validam o sistema completo (filtração + cloração) contra os parâmetros da Portaria GM/MS Nº 888/2021.

Laboratório: Fundenor — Campos dos Goytacazes, RJ. Fonte de água: Rio Paraíba do Sul. Referência completa: Macroentregas_Embrapii/Macroentrega_3/Testes/consolidado-ensaios.md.

6.1. Ensaio 1 — 03/03/2026 (água de alta turbidez, 139 NTU)

ParâmetroEntradaSaídaPadrão 888EficiênciaStatus
Coliformes Totais>1600 NMP/100 mL0Ausência>99,9%
E. Coli220 NMP/100 mL0Ausência100%
Turbidez139 NTU0,3 NTU0–5 NTU99,8%
Cor Aparente1017 mgPtCo/L7,0≤1599,3%
Ferro1,45 mg/L0,02≤0,3098,6%
Manganês0,02 mg/L0,00≤0,10100%
pH6,9–7,17,1–7,26,0–9,0estável
Cloro Residualn/d0,1 mg/L0,2–5,0❌ FORA

6.2. Ensaio 2 — 11/03/2026 (mesma fonte, condições melhores)

ParâmetroEntradaSaídaPadrão 888Status
Coliformes Totais>1600 NMP/100 mL0Ausência
E. Coli140 NMP/100 mL0Ausência
Turbidez45 NTU0,4 NTU0–5 NTU
Cor Aparente329 mgPtCo/L3,0≤15
Cloro Residualn/d0,8 mg/L0,2–5,0

6.3. Causa raiz do problema do cloro

Identificada após Ensaio 1: o cálculo de dosagem no firmware usava concentracao_hipoclorito_porcentagem = 12 quando o produto real era 4%.

Correção aplicada: ajustar para concentracao_hipoclorito_porcentagem = 4 no config.json. Cloro subiu de 0,1 para 0,8 mg/L (dentro do padrão).

⚠️ Aprendizado operacional: SEMPRE verificar config.concentracao_hipoclorito_porcentagem contra o produto que está efetivamente sendo usado. Ver Cap 10 §7.3.

6.4. Gargalo identificado: Filtro de Microfiltração (MF 0,2 μm)

O filtro MF (cartucho descartável, não lavável, não plissado) saturou após ~400–450 L com água de 140 NTU. 400 L de autonomia torna o produto inviável comercialmente em fontes de água de alta turbidez.

Plano: substituição por filtro tipo "Camelo" (carcaça inox, lavável, retrolavável). Resultado do teste de substituição (25/03/2026) pendente de incorporação aqui — ver consolidado-ensaios.md para status mais recente.


7. Recalibração — quando e como

7.1. Sensores de pressão (PT100, PT101)

  • Intervalo recomendado: a cada 100.000 L tratados ou quando o operador suspeitar de deriva (leitura inconsistente com manômetro analógico físico — MANOM-01 no painel frontal).
  • Procedimento: §2 — requer remover o sensor do circuito e levar à bancada.
  • Alternativa em campo: calibração de 1 ponto (offset) sem remover — comparar leitura com manômetro de referência conectado em paralelo, ajustar b mantendo a.

7.2. Sensor de vazão

  • Intervalo recomendado: a cada 100.000 L (atual) — mas atenção ao drift documentado pelo PICG (§3.6).
  • Procedimento: §3.
  • Em campo: difícil de fazer com precisão sem becker graduado. Recomendar troca preventiva se o drift exceder ±5% antes do intervalo.

7.3. Bomba dosadora

  • Intervalo recomendado: a cada troca de bomba ou anualmente. A bomba peristáltica desgasta a tubulação interna com o tempo.
  • Procedimento: §4.
  • Validação rápida em campo: verificar visualmente se o cloro residual está dentro de 0,2–2 mg/L (sentido organoléptico ou teste DPD). Se está consistentemente baixo, recalibrar.

7.4. Tensões

  • Intervalo recomendado: anualmente ou após troca de placa.
  • Procedimento: §5.

8. Validação após troca de placa ou reset

Quando uma placa é substituída ou o firmware é resetado para fábrica, todos os coeficientes devem ser restaurados a partir do backup operacional da unidade.

8.1. Procedimento

  1. Localizar o backup da unidade específica: /11-Confidencial/YaraBox_<NNN>_Backup_Config.md (para a unidade 001, é YaraBox_001_Backup_Config.md).
  2. Conectar à rede yarabox_AP (sem senha).
  3. Acessar http://yarabox.local → login camelo / @gu@c@m3l0.
  4. Em Calibrações, inserir cada coeficiente do backup (todos os valores a e b).
  5. Em MQTT, inserir o token e o server.
  6. Em Wi-Fi, inserir SSID e senha do cliente.
  7. Salvar → unidade reinicia.

8.2. Validação pós-restauração (checklist)

  • Display mostra leituras coerentes (pressão 0–30 PSI, vazão na faixa esperada, hipoclorito ~100%, tensão bateria ~12 V)
  • LED YL400 reflete o estado correto
  • No ThingsBoard, a unidade volta a aparecer 🟢 Active em até 30 s após o boot
  • Dashboard mostra os valores corretos
  • Comandos remotos (iniciar/parar tratamento) funcionam
  • Ciclo de retrolavagem manual completa sem erros

Se qualquer item falhar, não devolver a unidade ao serviço — investigar antes.


Fontes deste capítulo

  • Macroentregas_Embrapii/Macroentrega_3/5.1 Transferência da tecnologia ao cliente/picg-resposta-2026-05-14/procedimento_calibracao_sensor_pressao.pdf (procedimento formal de pressão)
  • Macroentregas_Embrapii/Macroentrega_3/5.1 Transferência da tecnologia ao cliente/picg-resposta-2026-05-14/procedimento_calibracao_sensor_vazão_bomba_dosadora.pdf (procedimentos de vazão e dosadora + observação sobre drift)
  • Macroentregas_Embrapii/Macroentrega_2/3.3 Testes preliminares dos subsistemas/Testes preliminares dos subsistemas.docx
  • Macroentregas_Embrapii/Macroentrega_3/Testes/consolidado-ensaios.md (ensaios Fundenor)
  • Macroentregas_Embrapii/Macroentrega_3/Testes/análise eficiência protótipo - rascunho - teste 1.pdf
  • /11-Confidencial/YaraBox_001_Backup_Config.md (coeficientes reais da unidade 001)
  • Código firmware: modulo-basico/lib/dispositivos_ads/ (implementação y = a·x + b)

Dados brutos completos (tabelas, foto do caderno do operador, exemplos numéricos): ver Apêndice C.

CAP 09 — INSTALAÇÃO

Capítulo 9 — Instalação Técnica (no cliente)

Status: 🚧 bloqueado (parcial) Última atualização: 2026-05-14 Audiência: técnico de campo / engenheiro de implantação


🚧 BLOQUEADO — aguardando sessão presencial com o PICG + experiência operacional acumulada com clientes reais

TODO ao destravar:

  • Procedimento formal de comissionamento em campo (checklist completo)
  • Tempo total estimado e número de pessoas necessárias (1 ou 2 técnicos)
  • Lista definitiva de ferramentas + materiais de consumo
  • Documentação fotográfica de instalações reais (3+ unidades de referência)
  • Critérios objetivos de aceite pelo cliente
  • Lições aprendidas das primeiras instalações de campo

Este capítulo cobre o que JÁ é conhecido a partir da unidade 001 em operação na Água Camelo, da documentação Embrapii e dos parâmetros do firmware. O passo-a-passo de comissionamento será fechado após operação acumulada.


Sumário


1. Pré-requisitos no local de instalação

Guia visual de instalação técnica e comissionamento

Figura 09.1 — Instalação técnica e comissionamento: pré-requisitos, posicionamento, conexões, conectividade, aceite e entrega ao cliente.

1.1. Infraestrutura hidráulica

  • Fonte de água a ser tratada: poço, rio, lago ou reservatório com profundidade adequada para captação (mín. 1 m da superfície para evitar materiais flutuantes).
  • Linha de saída para o reservatório de água tratada (ex: caixa d'água, bebedouro animal).
  • Linha de dreno para o efluente da retrolavagem (água com particulado retido). Pode descarregar em solo natural ou em sumidouro — não retornar à fonte de captação.

1.2. Infraestrutura elétrica

Identificar qual das 5 fontes está disponível no local (ver Cap 4 §3):

  • A — Rede AC 110/220V: verificar tomada com tensão estável (variação <10%) e capacidade mínima de 20A para a fonte chaveada externa
  • B — 12 VDC direto: banco de baterias externo com tensão estável e capacidade ≥5A
  • C — Gerador: combustível e capacidade adequada para uso intermitente
  • D — Solar: insolação >5 horas/dia útil em média; espaço para 2–4 painéis (depende da demanda local)
  • E — Manual: sempre disponível como fallback (não precisa de pré-requisito)

1.3. Conectividade

  • Wi-Fi do cliente: SSID + senha disponíveis; sinal verificado no local de instalação (mín. -75 dBm para conexão estável)
  • GSM: sinal 3G/4G verificado no local com SIM card da Vivo, Claro, Tim ou Oi (Yara Box atualmente configurada para APN Vivo zap.vivo.com.br). Para outras operadoras, ajustar config.apn_gsm antes da instalação
  • Sem conectividade? A Yara Box funciona offline; telemetria é perdida mas tratamento continua. Avaliar caso a caso

2. Posicionamento da Yara Box

2.1. Espaço necessário

  • Footprint: 80 × 40 cm da Yara Box + ≥1 m de cada lado para manutenção
  • Altura: ~40 cm da unidade + espaço acima para acessar a tampa de hipoclorito (~30 cm) = 70 cm mínimos
  • Piso: plano, nivelado, resistente ao peso de até 30 kg (Yara Box + 2 L de hipoclorito + água em filtros)

2.2. Proteção ambiental

  • Cobertura de chuva: abrigo simples, sem fechamento total para ventilação dos componentes eletrônicos
  • Sol direto: evitar exposição prolongada (PEAD pode descolorir; bateria sofre com calor excessivo). Idealmente posicionar em sombra parcial
  • Inundação: posicionar em piso elevado se houver risco

2.3. Acessibilidade

  • A tampa lateral deve abrir completamente sem obstrução
  • O reservatório de hipoclorito deve ser acessível pelo topo para reabastecimento sem desmontagem
  • Conectores externos (entradas P1-P4, saída P7) acessíveis para troca rápida de fontes

3. Conexões hidráulicas

3.1. Entrada (captação)

  1. Posicionar a captação na fonte de água com pré-filtro grosseiro externo (peneira ou tela) se a água tem sedimentos pesados — protege o Filtro 0 interno.
  2. Mangueira de captação até a entrada da Yara Box (verificar diâmetro compatível — tipicamente 1/2" ou 3/4").
  3. Conectar à entrada usando engate rápido ou rosca padrão.

3.2. Saída (água tratada)

  1. Mangueira de saída até o reservatório de armazenamento (caixa d'água, bebedouro).
  2. Altura de saída: acima do reservatório receptor para evitar contraflução.

3.3. Dreno (retrolavagem)

  1. Conectar a linha de dreno à saída inferior do gabinete.
  2. Direcionar para área de descarte permitida (não a fonte de captação).
  3. Considerar válvula manual no dreno para permitir purga do sistema antes de manutenção.

3.4. Validação rápida

  • Pressurizar manualmente com a bomba manual (HS500 em "manual" + acionar bomba pistão) — verificar ausência de vazamentos nas conexões
  • Encher os filtros (Filtros 2, 3A, 3B podem precisar de ciclo de pré-uso conforme instrução do fabricante)

4. Conexões elétricas

Conforme Cap 4 §2:

4.1. Fonte primária

Conectar uma das fontes disponíveis ao conector correspondente da PCB Seletora:

Fonte disponívelConector da SeletoraCuidado
Rede AC 110/220V (via fonte chaveada externa 12VDC/20A)P1Verificar tensão de saída da fonte antes de conectar
12 VDC direto (banco baterias ou similar)P2Mínimo 5A; respeitar polaridade
Gerador 12 VDCP2Verificar regulação de tensão (não conectar saída direta de alternador sem regulador)
Painéis solares 18–22VP3 e/ou P4Conectar antes de expor ao sol; usar diodo de bloqueio se reverso

4.2. Bateria 18650

A bateria já vem instalada no compartimento (Camada 4 — ver Cap 7 §6). Conectar via P6 da Seletora se a montagem foi feita fora do gabinete.

4.3. Saída para Bomba E

A Bomba E está conectada internamente à saída P7 da Seletora (Cap 4 §6). Nenhuma ação externa.

4.4. Validação visual

  • LED de status na PCB Seletora aceso (fonte ativa detectada)
  • Tensão de bateria normal (>12,3V) no display após boot
  • LED YL400 do painel responde ao estado da unidade

5. Conectividade (configurar device)

5.1. Antes da chegada ao cliente — pré-configuração na Água Camelo

  1. Criar device no ThingsBoard (ver Cap 6 §4.6) com nome YB-<NNN> (próximo número de série).
  2. Copiar Access Token gerado.
  3. Configurar config.json do firmware via AP mode em bancada com:
    • token_mqtt = Access Token copiado
    • server_mqtt = yarabox.aguacamelo.com.br
    • Outros parâmetros conforme calibração da unidade

5.2. Em campo — Wi-Fi do cliente

  1. Conectar à rede yarabox_AP (sem senha) com celular ou notebook.
  2. Acessar http://yarabox.local → login camelo / @gu@c@m3l0.
  3. Inserir SSID e senha do Wi-Fi do cliente em ssid_wifi / psk_wifi.
  4. Salvar → unidade reinicia e conecta no Wi-Fi do cliente.

5.3. Em campo — GSM (fallback automático)

Se o Wi-Fi do cliente falhar, a unidade automaticamente cai para GSM. Pré-requisitos:

  • SIM card inserido no slot do SIM7080G (na PCB Joker)
  • APN configurado para a operadora do SIM (apn_gsm, user_gsm, pass_gsm)
  • Sinal de celular adequado no local

5.4. Configurar NTP e fuso horário

  • Padrão atual: NTP servers br.pool.ntp.org, a.st1.ntp.br, pool.ntp.org
  • Fuso: ntp_gmt_offset = -3 (BRT)
  • Horário de verão: horario_verao_habilitado = false (atualmente desativado no Brasil)

6. Comissionamento

Sequência de testes antes de liberar a unidade para operação:

6.1. Teste de bombeamento (sem cloração)

  1. Desativar a cloração temporariamente: menu → Hipoclorito → desabilitar (hipoclorito_habilitado = false).
  2. Acionar HS500 → "elétrico", pressionar HS501 (iniciar).
  3. Observar:
    • Bomba E liga
    • Vazão estabiliza na faixa configurada (~300 L/h por padrão)
    • Sem vazamentos
    • Pressão estabiliza na faixa normal (10–30 psi nos PT100/101)
  4. Parar via HS502.

6.2. Teste de dosagem (ciclo curto manual)

  1. Reativar cloração: hipoclorito_habilitado = true.
  2. Acionar tratamento por 5 minutos com vazão controlada.
  3. Medir cloro residual livre na saída com teste DPD ou kit colorimétrico.
  4. Resultado esperado: 0,2–2,0 mg/L (Portaria 888).
  5. Se fora da faixa: ajustar dose_hipoclorito_ug-L.valor e repetir.

6.3. Teste de telemetria

  1. Acessar https://yarabox.aguacamelo.com.br como tenant admin.
  2. Verificar que o device YB-<NNN> aparece 🟢 Active em até 30 s.
  3. Aba Last Telemetry: confirmar valores coerentes com leitura do display local.
  4. Disparar publicação manual via menu → Remoto → Publicar agora (se disponível) ou aguardar próximo ciclo (30 s).

6.4. Teste de retrolavagem

  1. Menu → Filtro → Retrolavar agora.
  2. Verificar sequência:
    • Solenóides S1 e S2 abrem (escutar clique)
    • Bomba E liga em sentido reverso
    • Após ~90 s, sistema retorna a Idle
  3. Verificar dreno (água saindo pelo dreno externo).

6.5. Critérios de aceite

  • Tratamento contínuo por 30 minutos sem alarmes
  • Cloro residual livre dentro da faixa em pelo menos 2 medições consecutivas
  • Pressão e vazão estáveis dentro da faixa normal
  • Telemetria chegando ao ThingsBoard
  • Comandos remotos (start/stop) funcionam

7. Entrega ao cliente

7.1. Demonstração da UI local

Treinar o operador do cliente em:

  • Como ligar/desligar (chave ON/OFF + HS501/HS502)
  • Como ler o display (telas gráfica e textual)
  • Como navegar pelo menu via encoder rotativo
  • Como reabastecer o hipoclorito (ver Cap 10 §7)
  • Como acionar a bomba manual em caso de queda de energia (HS500 → "manual")
  • Como interpretar alarmes (LEDs piscando, popups no display, buzzer)

7.2. Credenciais admin

  • Senha admin padrão de fábrica: camelo / @gu@c@m3l0
  • Orientar o operador a trocar a senha na primeira oportunidade via menu → Geral → Senha (se a unidade ficar exposta a terceiros)

7.3. Manual do usuário final

Entregar versão impressa ou digital do manual simplificado: Macroentregas_Embrapii/Macroentrega_3/5.1 Transferência da tecnologia ao cliente/Manual de Instalação e Operação - Tampa lateral - Yarabox .pdf

Este manual cobre operação básica do ponto de vista do usuário final (sem detalhes técnicos).

7.4. Cronograma de manutenção

Imprimir ou colar no painel:

  • Lavagem do filtro: a cada 10.000 L (automática + manual quando alerta)
  • Limpeza do filtro: a cada 50.000 L
  • Troca do filtro: a cada 100.000 L ou 365 dias (o que vier primeiro)
  • Recalibração da vazão: a cada 100.000 L

Detalhes em Cap 10 §5.

7.5. Contato de suporte

  • Telefone / WhatsApp da Água Camelo (suporte Wara Tech)
  • Email de suporte
  • URL do dashboard com login do cliente

8. Documentação da instalação

Para cada unidade instalada, criar um registro de instalação (template a ser desenvolvido):

CampoConteúdo
Número de sérieYB-<NNN>
Data de instalaçãoISO YYYY-MM-DD
ClienteNome + contato
LocalizaçãoEndereço + GPS (lat/lon)
Fonte de energia primáriaA/B/C/D + observações
Tipo de conectividadeWi-Fi / GSM / Wi-Fi+GSM / sem rede
Operador treinadoNome + data do treinamento
Fotos da instalação3+ fotos (entrada, saída, posicionamento, painel frontal)
Cloro residual medido na entregaValor (mg/L) e método
Ressalvas / pendênciasTexto livre

Arquivar em /02-Comercial/Instalações/YB-<NNN>/ ou local equivalente.


Fontes deste capítulo

  • /11-Confidencial/YaraBox_001_Backup_Config.md (parâmetros de rede e GSM da unidade 001)
  • Macroentregas_Embrapii/Macroentrega_3/5.1 .../Manual de Instalação e Operação - Tampa lateral - Yarabox .pdf (manual do usuário)
  • Arquitetura_Yara_Box/Visao_Tecnica_Wara_Box.md §3.1 (sistema hidráulico), §3.3 (energia)
  • Cap 4 — Elétrico, Cap 6 — Backend & Cloud, Cap 10 — Operação & Manutenção
CAP 10 — OPERAÇÃO

Capítulo 10 — Operação & Manutenção

Status: ✅ pronto Última atualização: 2026-05-14 Audiência: operador da Yara Box (usuário final) + técnico de manutenção preventiva Tempo de leitura estimado: 20 minutos


Sumário


1. Interface local da Yara Box

Painel de serviço e interface local da Yara Box

Figura 10.1 — Painel de serviço e interface local: controles físicos, display, alarme, alerta, botoeiras, seletores e conectores de campo.

A Yara Box tem uma interface local self-contained acessível pela tampa frontal:

  • Display gráfico SH1107 (128×128 pixels, OLED branco, contraste alto)
  • Encoder rotativo (com push-button) — navegação e seleção
  • Botoeiras físicas:
    • HS500 — chave seletora bombeamento elétrico vs manual
    • HS501 — botoeira "iniciar processo"
    • HS502 — botoeira "parar processo"
  • Lâmpada YL400 — status visual de operação
  • Buzzer — alarme sonoro

1.1. Display (alternância entre 2 telas)

UI local da Yara Box com telas e navegação

Figura 10.2 — UI local: telas gráfica/textual, árvore de menus e guia de controle pelo encoder HS503.

O display alterna automaticamente entre 2 telas a cada 30 segundos:

Tela gráfica (4 quadrantes):

  • Quadrante 1: pressão (PT100/101 atuais + indicador visual de range)
  • Quadrante 2: vazão instantânea (gauge tipo velocímetro)
  • Quadrante 3: nível de hipoclorito (barra vertical 0–100%)
  • Quadrante 4: status (Tratamento / Idle / Lavagem / etc.) + tensão de bateria

Tela textual:

  • Linhas com leitura numérica precisa de todos os parâmetros
  • Volume tratado (sessão + total acumulado)
  • Última publicação MQTT (timestamp)
  • IP atual (se em rede Wi-Fi)

1.2. Encoder rotativo (HS503)

AçãoEfeito
Girar (sem clicar)Navegar entre opções do menu
Push-button (clique simples)Selecionar / Confirmar
Push-button longo (2+ s)Voltar / Cancelar

Debounce: 200 ms (configurado no firmware).

1.3. Menus disponíveis

Acessar via clique no encoder em qualquer momento. Estrutura:

Menu Principal
├── Hipoclorito (dose, concentração, nível atual)
├── Volume (total, sessão, limites)
├── Vazão (calibração, limites mín/máx)
├── Filtro (data troca, volumes desde manutenção)
├── Data/Hora (configurar NTP, fuso horário, horário de verão)
├── Remoto (MQTT server, token, status conexão)
└── Geral (Wi-Fi, AP mode, OTA, reset)

Cada item permite edição inline via encoder (valores numéricos) ou enter para submenu (configurações complexas como NTP).


2. Fluxos operacionais

2.1. Ligar a Yara Box

  1. Conectar uma fonte de alimentação A/B/C/D (ver Cap 4 §2) ou garantir que a bateria tem carga suficiente.
  2. Pressionar a chave ON/OFF geral na PCB Seletora.
  3. Tela de boot aparece: logo Wara Box animado por 6 segundos.
  4. Sistema entra no estado Idle (modo seguro, sem acionamento automático).

2.2. Iniciar tratamento (modo automático)

  1. Garantir que HS500 está em "elétrico" (não manual).
  2. Verificar que o reservatório de hipoclorito tem nível adequado (> LSL200, ver §7).
  3. Pressionar HS501 ("iniciar processo").
  4. Sistema transiciona para Tratamento:
    • Bomba elétrica liga (PWM 255, duty fixo)
    • Bomba dosadora começa a injetar hipoclorito proporcionalmente à vazão
    • Display mostra ícone "TRATAMENTO" em destaque
    • LED YL400 acende

2.3. Modo idle

  • Sistema sempre retorna a Idle quando o tratamento é interrompido (manual ou automaticamente por intertravamento).
  • Atuação a cada 250 ms (apenas verificações de segurança; nenhum atuador ligado).
  • Display continua atualizando leituras.

2.4. Modo teste

Acessível via menu Geral → Teste. Permite acionar individualmente:

  • LEDs (1 por 1)
  • Solenóides S1 e S2
  • Bomba E (sem fluxo)
  • Bomba D (sem dosagem real)

Timeout automático: 10 s por teste (proteção contra esquecimento).

2.5. Modo retrolavagem

Acionável via menu Filtro → Retrolavar agora ou automaticamente quando volume_tratado_desde_ultima_lavagem_filtro >= 10000 L.

Sequência:

  1. Solenóides S1 e S2 abrem por 30 segundos (inversão de fluxo).
  2. Bomba E aciona por 60 segundos (vazão reversa para descolar particulado).
  3. Solenóides fecham, sistema retorna a Idle.
  4. Contador volume_tratado_desde_ultima_lavagem_filtro é resetado para 0.

2.6. Modo calibração (sensor de vazão)

Acessível via menu Vazão → Calibrar. Procedimento de bancada — detalhes em Cap 8 §3.

Nota interna: o estado EstadoControlarCalibracao está implementado no firmware mas inativo no fluxo de execução atual (reservado para uso futuro). A calibração da vazão hoje é feita externamente em bancada e o resultado é gravado em config.calibracao_vazao via menu local ou AP mode.


3. Sinalização e alarmes

A Yara Box monitora 5 parâmetros principais com limiares configuráveis e dispara alarmes visuais (LEDs, popups no display) e sonoros (buzzer):

3.1. Pressão (PT100/101 — bomba elétrica)

EstadoLimiar (psi)Ação
Muito baixo< 5Alerta "PLL100" (bomba defeituosa ou vazamento)
Baixo< 10Sinalização preventiva
Normal10 – 30
Alto> 30Sinalização "PLH100" (necessário limpar/trocar filtros)
Muito alto> 40Alarme PAHH100 + intertravamento (desliga Bomba E)

Configuráveis em config.pressao_bomba.*.

3.2. Vazão (FE300)

EstadoLimiar (L/h)Ação
Muito baixo< 150Alerta (bomba pode ter falhado)
Baixo< 300Sinalização preventiva
Normal300 – 330
Alto> 600Alerta (acima do limite configurado)
Muito alto> 650Alerta crítico

Configuráveis em config.vazao_litros_hora.*.

3.3. Nível de hipoclorito (LSL200, LSLL200)

EstadoNívelAção
Muito baixo (LSLL200)0% (crítico)Alarme LALL200 + intertravamento (desliga Bomba E; bombeamento manual continua permitido)
Baixo (LSL200)< 30%Alerta "LLL200" — reabastecer
Normal100% (cheio)

Configuráveis em config.nivel_hipoclorito.*.

3.4. Tensão de alimentação

EstadoLimiar (V)Ação
Normal> 12,4
Baixa< 10,0Alerta + reduz consumo (desliga LEDs decorativos, etc.)
Crítica< 8,0Desliga bomba E e dosadora

Configuráveis em config.tensao_alimentacao.*.

3.5. Tensão de bateria

EstadoLimiar (V)Ação
Normal> 12,3
Baixa< 10,5Alerta no display
Crítica< 10,0Modo de proteção (apenas telemetria essencial até desligar)

Configuráveis em config.tensao_bateria.*.

3.6. Sinalização agregada

Além dos alarmes específicos, o LED YL400 fica:

  • Apagado: Idle ou desligado
  • Aceso fixo: Tratamento normal
  • Piscando: Alarme ativo (verificar display)

Buzzer toca por 2 segundos em alarmes críticos (PAHH100, LALL200, tensão crítica).


4. Telemetria remota (ThingsBoard)

A Yara Box publica telemetria via MQTT no broker yarabox.aguacamelo.com.br:1883 (ver Cap 6). O operador remoto acessa dados via interface web do ThingsBoard.

4.1. O que o operador vê

Publicação parcial (30 s): apenas valores que mudaram. Permite acompanhamento near-real-time.

Publicação completa (10 min): todos os ~30 parâmetros. Permite recuperação histórica completa.

Dashboard típico do operador (V8 importado da PICG, será substituído pelo dashboard próprio Wara Tech):

  • Indicador discreto: tratamento ativo / bombeamento / bomba elétrica / hipoclorito
  • Gauge de velocidade: vazão instantânea
  • Tabela de estado do sistema
  • Botões de ação: iniciar/parar/selecionar bomba

4.2. Alarmes automáticos no ThingsBoard

Configurados nas rule chains do tenant:

  • Pressão alta sustentada → email para operador
  • Bateria crítica → SMS via integração (futuro)
  • Sem telemetria por > 2 horas → alerta de unidade offline
  • Volume tratado próximo do limite → lembrete de manutenção

Configuração detalhada em Cap 6 §4 (criar device profile com alarm rules).


5. Manutenção preventiva por volume

Guia visual de manutenção preventiva e troubleshooting

Figura 10.3 — Operação, manutenção preventiva e troubleshooting: intervalos de manutenção, reposição de hipoclorito e matriz de diagnóstico.

A Yara Box rastreia o volume tratado desde a última intervenção de cada tipo. Quando o limite é atingido, o display mostra alerta de manutenção.

5.1. Intervalos padrão (configuráveis em config.json)

ManutençãoIntervalo padrãoParâmetro JSON
Lavagem do filtro (retrolavagem)10.000 Lvolume_recomendado_nova_lavagem_filtro
Limpeza do filtro (manual, com desmontagem parcial)50.000 Lvolume_recomendado_nova_limpeza_filtro
Troca do filtro100.000 L ou 365 diasvolume_recomendado_nova_troca_filtro + dias_recomendado_nova_troca_filtro
Recalibração da vazão100.000 Lvolume_recomendado_nova_calibracao_vazao

Ao trocar um filtro, o operador deve resetar o contador correspondente via menu local (Menu → Filtro → Resetar contador) ou via comando MQTT remoto.

5.2. Procedimento de lavagem (retrolavagem)

Já documentado em §2.5 — modo automático. Pode também ser disparado manualmente.

5.3. Procedimento de limpeza (manual)

  1. Acionar o modo bombeamento manual (HS500 → "manual") para garantir que a bomba elétrica não liga acidentalmente.
  2. Desligar a alimentação principal da Seletora.
  3. Despressurizar o sistema abrindo as válvulas de dreno.
  4. Desmontar a tampa lateral.
  5. Remover o cartucho do filtro MF (Filtro 2).
  6. Enxaguar manualmente em água limpa (lado de dentro pra fora).
  7. Inspecionar visualmente — se há colmatação severa, considerar troca.
  8. Remontar.
  9. Religar e validar pressão/vazão estáveis antes de retornar à operação.

5.4. Procedimento de troca de filtro

Similar ao da limpeza, mas substituindo o cartucho. Após a troca:

  • Atualizar data_ultima_troca_filtro no menu (formato DD/MM/YYYY).
  • Resetar contadores de volume.

5.5. Recalibração da vazão

Procedimento detalhado em Cap 8 §3. Atenção ao drift progressivo documentado pelo PICG (§10).


6. Manutenção preditiva (ThingsBoard)

Além dos intervalos fixos, o ThingsBoard pode aplicar rule chains preditivas baseadas em padrões nos dados:

  • Pressão diferencial crescente entre PT100 e PT101 → filtros próximos do final de vida (colmatação). Alarme antes do limite de troca.
  • Vazão caindo com pressão alta → indicação de colmatação severa, recomenda lavagem imediata.
  • Variação anômala da vazão com bomba ligada → sensor FE300 derivando (ver §10) ou problema mecânico.
  • Consumo de hipoclorito acima do esperado por volume → vazamento do reservatório ou erro de calibração da dosadora.

Implementação das rule chains: pendente. Plano: derivar curvas a partir de dados de 3+ unidades em operação por 6 meses.


7. Reposição de hipoclorito

7.1. Quando reabastecer

  • LSL200 dispara (nível < 30%): display mostra "LLL200 — reabastecer hipoclorito"
  • LSLL200 dispara (nível crítico): bomba elétrica é intertravada (não desliga a manual). Reabastecer imediatamente.

7.2. Como reabastecer

  1. Reduzir o tratamento ao mínimo necessário ou parar via HS502.
  2. Abrir a tampa do reservatório (TQ Cloro).
  3. Encher com hipoclorito de sódio 4% (NaClO 4% massa/volume).
  4. Fechar bem para evitar evaporação/contaminação.
  5. Reiniciar o tratamento via HS501.

7.3. Concentração correta — pegadinha histórica documentada

⚠️ Atenção: o parâmetro config.concentracao_hipoclorito_porcentagem deve refletir a concentração real do produto que está sendo usado. Se você comprar hipoclorito 6% ou 12% e o firmware está configurado para 4%, a dosagem será proporcionalmente errada.

Histórico: no Ensaio 1 da Fundenor (03/03/2026), o cloro residual ficou em 0,1 mg/L (fora do padrão 0,2–5,0). Causa raiz: o firmware estava configurado com concentracao = 12% mas o produto real era 4%. Após corrigir para 4%, o cloro subiu para 0,8 mg/L (Ensaio 2, 11/03/2026, dentro do padrão). Detalhes em Cap 8 §6.

Sempre verifique este parâmetro ao trocar o fornecedor do hipoclorito.


8. Troubleshooting comum

SintomaCausa provávelAção
Telemetria não chega ao ThingsBoardToken MQTT errado, server errado, ou rede da Yara Box sem internetVerificar data/config.json da Yara Box via AP mode (ver Cap 6 §5.1). Verificar logs no broker.
Pressão muito alta (intertravamento PAHH100 constante)Filtros colmatados; abertura de saída obstruídaLavagem (§2.5); limpeza manual (§5.3); inspecionar conexões pós-filtros
Bomba elétrica não ligaLSLL200 disparado (sem desinfetante); tensão alimentação crítica; HS500 em "manual"; tratamento não iniciadoVerificar nível do hipoclorito; verificar fonte de alimentação; chave em "elétrico"; pressionar HS501
Sensor de vazão "deriva" progressivamente (vazão exibida ≠ real)Desgaste mecânico do FE300 (drift documentado pelo PICG)Recalibrar via procedimento Cap 8 §3. Considerar troca se o drift for severo (ver §10)
AP mode (yarabox_AP) não aparece após bootBoot incompleto; firmware travadoAguardar até 60 s após boot. Se persistir: desligar/religar; se ainda persistir, reset via menu (§9.1)
OTA falha durante uploadArquivo .bin corrompido; rede instável durante uploadRe-baixar o .bin do build (pio run -t buildfs); refazer o upload com cabo curto e rede estável
Display em branco mas LEDs piscandoCabo flat I²C do display solto; SH1107 falhouAbrir tampa, reconectar cabo. Se persistir, trocar o display
Encoder rotativo não respondeCabo solto ou encoder oxidadoVerificar conexão; em campo, limpar com álcool isopropílico
Cloro residual fora do padrãoConcentração configurada não bate com produto real (§7.3); calibração da dosadora (§5.5); filtro UF rompido (deixa passar cloro consumível)Verificar cada hipótese na ordem listada
Dashboard ThingsBoard mostra "Inactive" mas LED YL400 acesoMQTT perdeu conexão; Wi-Fi caiuVerificar conectividade (AP mode → testar ping yarabox.aguacamelo.com.br); verificar token MQTT

Para troubleshooting do backend / VPS, ver Cap 6 §9.


9. Reset e restauração

9.1. Reset suave (reiniciar firmware)

Via menu local: Menu → Geral → Reiniciar. Equivalente a um power-cycle, sem perder configurações.

9.2. Reset de configuração (volta para fábrica)

Via menu local: Menu → Geral → Reset de fábrica. CUIDADO — apaga todas as configurações personalizadas e volta para data/config-padrao-fabrica.json. Senha admin necessária.

Após o reset, restaurar coeficientes de calibração reais — ver §9.3.

9.3. Restaurar a partir do backup

Procedimento completo em Apêndice C §8. Resumo:

  1. Conectar à rede Wi-Fi yarabox_AP (sem senha).
  2. Abrir http://yarabox.local ou http://192.168.4.1.
  3. Em "ACESSO RESTRITO": user camelo / senha @gu@g@m3l0.
  4. Em "Calibrações", inserir os coeficientes do backup operacional (/11-Confidencial/YaraBox_001_Backup_Config.md).
  5. Salvar e reiniciar.

9.4. Trocar placa principal (PCB Joker)

Se a PCB Joker precisa ser substituída:

  1. Antes de remover: garantir que o backup operacional está atualizado (/11-Confidencial/YaraBox_<NNN>_Backup_Config.md para a unidade específica).
  2. Trocar a placa.
  3. Gravar firmware (pio run -t upload via USB; ver Cap 5 §16).
  4. Restaurar config.json conforme §9.3.
  5. Validar telemetria chegando no ThingsBoard.

10. Plano de recalibração em aberto

⚠️ Observação técnica do PICG (relevante para manutenção contínua):

"A leitura fornecida pelo sensor de vazão tem apresentado uma discrepância progressiva em relação ao volume real de água. Faz-se necessário investigar a correlação entre o desgaste operacional do equipamento e a deriva da calibração, a fim de estabelecer a periodicidade ideal para a recalibração do sensor de vazão."

Fonte: procedimento_calibracao_sensor_vazão_bomba_dosadora.pdf (PICG, 14/05/2026).

Implicação operacional: o intervalo padrão atual de recalibração da vazão é 100.000 L, mas pode estar inadequado conforme o sensor envelhece. Em unidades de produção, recomendamos:

  1. Coletar dados de drift comparando vazão lida pelo FE300 vs vazão real medida por becker graduado, a cada trimestre durante o primeiro ano de operação.
  2. Plotar curva de erro acumulado vs volume tratado.
  3. Derivar periodicidade definitiva quando houver dados de 3+ unidades por 6+ meses.
  4. Considerar troca preventiva do sensor se o drift exceder ±5% antes de 100.000 L.

TODO Wara Tech: acumular esses dados de campo e atualizar config.volume_recomendado_nova_calibracao_vazao com base em evidência empírica.


Fontes deste capítulo

  • Macroentregas_Embrapii/Macroentrega_3/5.1 Transferência da tecnologia ao cliente/Manual de configuração.docx (~70 pgs — UI completa da Yara Box, fluxos de operação, calibração da vazão via menu)
  • Macroentregas_Embrapii/Macroentrega_3/5.1 .../Manual de Instalação e Operação - Tampa lateral - Yarabox .pdf (manual de usuário final)
  • Macroentregas_Embrapii/.../picg-resposta-2026-05-14/procedimento_calibracao_sensor_vazão_bomba_dosadora.pdf (alerta sobre drift do sensor de vazão)
  • Arquitetura_Yara_Box/Visao_Tecnica_Wara_Box.md §3.1 (manutenção preventiva), §3.4 (limiares)
  • data/config.json do firmware (limiares e intervalos atuais)
  • Macroentregas_Embrapii/Macroentrega_3/Testes/consolidado-ensaios.md (pegadinha histórica do cloro 12%→4%)

Para procedimentos de calibração em bancada: ver Cap 8 — Testes & Calibração. Para troubleshooting do backend/VPS: ver Cap 6 §9. Para valores reais da unidade 001: ver Apêndice C.

APÊNDICE A — BOM

Apêndice A — BOM Consolidada + Fornecedores

Status: ✅ pronto Última atualização: 2026-05-14 Audiência: engenheiro de compras / planejamento de produção Fonte primária: 01-Produto/Produto_Yara_Box/BOM/Yara_Box_BOM.xlsx Geração: automática via scripts/bom_xlsx_to_md.py (openpyxl, leitura read-only) Total de SKUs: 77


Sumário


1. Visão geral

Referência visual das famílias de componentes da BOM

Figura A.1 — Referência visual para leitura da BOM: famílias mecânica, hidráulica, eletrônica e elétrica organizadas por camada de montagem.

A BOM consolidada da Yara Box está mantida em Yara_Box_BOM.xlsx no caminho 01-Produto/Produto_Yara_Box/BOM/. O Excel é o source-of-truth e tem 11 abas com informações operacionais:

AbaConteúdo
BOMTabela principal com todos os 77 SKUs
PainelDashboard de status
FornecedoresCadastro de fornecedores
CotacoesHistórico de cotações
MovimentacoesHistórico de movimentação de estoque
ProduzidosRegistro de unidades produzidas
PCBDetalhamento de PCBs
Kits_FasesAgrupamento por fase de montagem
Inconsistencias_ECOIssues abertas no controle de mudanças
Opcoes_DropdownListas padronizadas para preenchimento
Como_usarInstruções de uso da planilha

A tabela MD abaixo é uma projeção da aba BOM com as colunas mais úteis para o manual (SKU, descrição, quantidade, tipo, fornecedor, MPN, preço 10u, status). Para detalhes adicionais (leadtime, MOQ, NCM, alíquotas, certificações), consultar o .xlsx diretamente.

Distribuição por categoria:

CategoriaSKUs
Eletroeletrônica21
Hidráulica (var. acentuada)24
Mecânica/Estrutura (var. acentuada)16
Hidraulica (var. sem acento)7
Mecanica/Estrutura (var. sem acento)8
Produto1
Total77

⚠️ Inconsistência conhecida na planilha: existem duplicações de categoria sem/com acento (Hidraulica vs Hidráulica, Mecanica/Estrutura vs Mecânica/Estrutura). Isso reflete a evolução histórica da planilha — alguns SKUs antigos foram cadastrados sem acento. Normalizar é um TODO de manutenção da BOM (não bloqueia produção). Ver 00-Backlog/tasks.md item "BOM Mestre v2".


2. Inventário das 7 chapas PEAD (PDFs cotados)

Entregue pelo PICG em 12/05/2026 (autor: Marllon Batista). Material: PEAD 5 mm, padrão de cotagem ABNT, prontas para fabricação por corte CNC.

ChapaDimensõesPDF cotado
Grande Lateral Esquerda500 × 250 × 5 mmPDF
Grande Superior e Inferior(cotado em PDF)PDF
Lateral Direita Interna(cotado em PDF)PDF
Pequena Lateral Esquerda(cotado em PDF)PDF
Pequena Superior e Inferior(cotado em PDF)PDF
Posterior Externa(cotado em PDF)PDF
Posterior Interna(cotado em PDF)PDF

Correspondência aproximada com SKUs da BOM (a confirmar — a numeração PEAD-01 a PEAD-07 precisa ser conferida contra os nomes do PICG):

Possível SKUChapa do PICGDimensões da BOM
PEAD-01(a confirmar)690 × 50 mm × 2 unidades
PEAD-02(a confirmar)690 × 503 mm × 1 unidade
PEAD-03(a confirmar)540 × 500 mm × 3 unidades
PEAD-04(a confirmar)250 × 460 mm × 1 unidade
PEAD-05(a confirmar)250 × 500 mm × 1 unidade
PEAD-06(a confirmar)50 × 500 mm × 1 unidade
PEAD-07(a confirmar)690 × 250 mm × 2 unidades

TODO: mapear cada PDF do PICG para o SKU correspondente na BOM (com auxílio do desenho dimensional). Item do backlog "BOM Mestre v2".


3. BOM completa por categoria

Eletroeletrônica (21 SKUs)

Alimentação

SKUDescriçãoQtdTipoFornecedorMPNPreço 10u (R$)Status
ELE-02Conector Fêmea JST XH 4 Pinos 2.54mm com cabo1 pçcomponenteAliExpress8
ELE-03Conector Fêmea JST XH 3 Pinos 2.54mm com cabo2 pçcomponenteAliExpress8
ELE-04Conector Fêmea JST XH 5 Pinos 2.54mm com cabo1 pçcomponenteAliExpress8
ELE-08Bateria Li-ion 18650 12.6V 10.4Ah Com BMS de 40A1 pçcomponente_criticoMercado Livre235
ELE-15Placa Solar Flexível 50W Monocristalina ZTROON ZTF-50MT4 pçpcbaNeosolar200
ELE-16Par De Conector MC4 Painel Solar2 pçcomponenteEstimativa Claude (placeholder)36
ELE-17Conector Mc4 Painel Solar Tipo Y Paralelo Par Macho + Femea Preto2 pçcomponenteEstimativa Claude (placeholder)40
ELE-18Par De Conectores De Energia XT60BE-M e / XT60-F1 pçcomponenteEstimativa Claude (placeholder)24
ELE-20Prensa-Cabo PG13.53 pçcomponenteEstimativa Claude (placeholder)6
ELE-21Prensa-Cabo PG115 pçcomponenteEstimativa Claude (placeholder)5

Controle

SKUDescriçãoQtdTipoFornecedorMPNPreço 10u (R$)Status
ELE-01Placa Core **1 pçpcbaEstimativa Claude (placeholder)200
ELE-05Placa Seletora de Alimentação **1 pçpcbaJLCPCB100
ELE-06Display OLed SSD1351 / 1.5 pol 128x1281 pçcomponenteAliExpress90
ELE-07Fonte De Alimentação Blindada 12V 20A 240W IP671 pçcomponente_criticoMercado Livre130
ELE-09Botoeira Dupla Com Iluminação B10BG2L1 22mm1 pçcomponenteMercado Livre28
ELE-10Sinaleiro Amarelo / L20-AR9-Y / 12V 22mm1 pçcomponenteEstimativa Claude (placeholder)12
ELE-11Botão Power Com Trava / 12 - 24V 19mm1 pçcomponenteEstimativa Claude (placeholder)16
ELE-12Chave Seletora Comutadora 2 posições / 22 mm1 pçcomponenteMercado Livre22
ELE-13Led Buzzer Alarme Áudio Visual 12V1 pçcomponenteMercado Livre13
ELE-14Módulo Encoder Rotativo / CE11 5V1 pçcomponenteMercado Livre24
ELE-19Caixa de junção à prova d'água ip66, plástico abs com fivela de dobradiça, caixa de distribuição de energia eletrônica1 pçcomponenteEstimativa Claude (placeholder)75

Hidraulica (7 SKUs)

Nota: estes SKUs estão na variante "Hidraulica" (sem acento) — agrupamento que reflete adições posteriores à BOM. Itens compatíveis com a categoria "Hidráulica" abaixo.

Dosagem

SKUDescriçãoQtdTipoFornecedorMPNPreço 10u (R$)Status
TUB-PERITubo silicone bomba peristaltica 30x120mm1 pçconsumivelDistribuidor BR18PENDENTE_DADOS
SUP-BOM-PERISuporte da bomba peristaltica (ABS)1 pçcomponenteFabricação local22PENDENTE_DADOS
MIS-ESTMisturador estatico PVC inline (265mm)1 pçcomponenteDistribuidor BR72PENDENTE_DADOS

Entrada

SKUDescriçãoQtdTipoFornecedorMPNPreço 10u (R$)Status
JOE-FEMJoelho femea engate 1/2"3 pçcomponentePluinox (BR)11PENDENTE_DADOS
MANOM-01Manometro analogico escala 0-7 kgf/cm² (frontal)1 pçcomponenteDistribuidor BR32PENDENTE_DADOS
VAL-RETValvula de retencao (latao)1 pçcomponenteDistribuidor BR28PENDENTE_DADOS

Pré-filtração

SKUDescriçãoQtdTipoFornecedorMPNPreço 10u (R$)Status
FIL-BOMPré-filtro de linha da bomba (inox)1 pçcomponenteDistribuidor BR72PENDENTE_DADOS

Hidráulica (24 SKUs)

Dosagem

SKUDescriçãoQtdTipoFornecedorMPNPreço 10u (R$)Status
RES-01Reservatório de hipoclorito 1L1 pçcomponenteEstimativa Claude (placeholder)28

Entrada

SKUDescriçãoQtdTipoFornecedorMPNPreço 10u (R$)Status
ADP-01Adaptador plástico flange ½''4 pçcomponenteAliExpress8
COT-01Cotovelo dmfit engate ½''4 pçcomponenteEstimativa Claude (placeholder)13
Y-01Y dmfit engate ½''2 pçcomponenteEstimativa Claude (placeholder)16
T-01T engate rápido ½''x½''x¼''3 pçcomponenteEstimativa Claude (placeholder)14
JOE-01Joelho 90° rosca ½''3 pçcomponenteEstimativa Claude (placeholder)10
CON-02Conector macho rosca ½'' P/ engate ½''8 pçestruturalEstimativa Claude (placeholder)11
CON-03Conector fêmea rosca ½'' P/ engate ½''5 pçestruturalEstimativa Claude (placeholder)11
CON-04Conector fêmea rosca ¾'' P/ engate ½''2 pçestruturalEstimativa Claude (placeholder)13
JOE-02Joelho fêmea rosca ¼'' P/ engate ¼''4 pçcomponenteEstimativa Claude (placeholder)9
COT-02Cotovelo engate para macho ½''1 pçcomponenteEstimativa Claude (placeholder)14
BOM-01Bomba de superfície Seaflo 3,0 GPM1 pçcomponente_criticoEstimativa Claude (placeholder)550
BOM-02Bomba Peristáltica P40SMD1 pçcomponente_criticoEstimativa Claude (placeholder)220
BOM-03Bomba manual0 pçcomponente_criticoEstimativa Claude (placeholder)REMOVIDO
TUB-01Tubo flexível ½'' 3m1 pçcomponenteEstimativa Claude (placeholder)32
TUB-02Tubo flexível ¼'' 2m1 pçcomponenteEstimativa Claude (placeholder)18
SEN-01Sensor de vazão de engrenagem ½''1 pçcomponente_criticoEstimativa Claude (placeholder)65
VAL-01Válvula esfera motorizada (servo) 12V3 pçcomponenteMercado Livre115
SEN-02Sensor de pressão inox 150 PSI1 pçcomponente_criticoEstimativa Claude (placeholder)115
SEN-03Sensor capacitivo de nível de líquido2 pçcomponente_criticoAliExpress45
NIP-01Niple ½''3 pçcomponenteEstimativa Claude (placeholder)PENDENTE6PENDENTE

MF (Microfiltração)

SKUDescriçãoQtdTipoFornecedorMPNPreço 10u (R$)Status
FIL-02Filtro microbiológico 0,2 micro ½''1 pçconsumivelFastFiltros105

Pré-filtração

SKUDescriçãoQtdTipoFornecedorMPNPreço 10u (R$)Status
FIL-01Filtro Disco ¾"1 pçconsumivelEra Ambiental105

UF (Ultrafiltração)

SKUDescriçãoQtdTipoFornecedorMPNPreço 10u (R$)Status
FIL-03Filtro membrana Althy 0,01 micro2 pçconsumivelEra Ambiental240

Mecanica/Estrutura (8 SKUs)

Nota: estes SKUs estão na variante "Mecanica/Estrutura" (sem acento) — adições posteriores à BOM.

Estrutura

SKUDescriçãoQtdTipoFornecedorMPNPreço 10u (R$)Status
SUP-RODSuporte de rodízio (placa fixação) inox4 pçcomponenteFabricação local18PENDENTE_DADOS
CANT-01Cantoneira de canto da estrutura (alumínio)8 pçcomponenteAluminix / Yawl (BR)10PENDENTE_DADOS
PEAD-DIVDivisória PEAD eletro/hidráulica1 pçcomponenteSansuy / Polifusa (BR)56PENDENTE_DADOS
TAMPO-01Tampo do gabinete (PEAD 490x440mm) - adesivado1 pçcomponenteSansuy / Polifusa (BR)96PENDENTE_DADOS
DOB-01Dobradiça do tampo (inox com furos)2 pçcomponenteDistribuidor BR24PENDENTE_DADOS
ALC-01Alça de transporte metálica superior1 pçcomponenteFabricação local36PENDENTE_DADOS
SUP-RES-HIPOSuporte do reservatório de hipoclorito1 pçcomponenteFabricação local22PENDENTE_DADOS
FRM-540x500Moldura/frame estrutural 540x500mm (alumínio)1 pçcomponenteAluminix / Yawl (BR)110PENDENTE_DADOS

Mecânica/Estrutura (16 SKUs)

Estrutura

SKUDescriçãoQtdTipoFornecedorMPNPreço 10u (R$)Status
ALU-01Perfil de alumínio (20x20) 680 mm6 pçestruturalEstimativa Claude (placeholder)24
ALU-02Perfil de alumínio (20x20) 300 mm4 pçestruturalEstimativa Claude (placeholder)11
ALU-03Perfil de alumínio (20x20) 523 mm4 pçestruturalEstimativa Claude (placeholder)18
ALU-04Perfil de alumínio (20x20) 490 mm4 pçestruturalEstimativa Claude (placeholder)17
ALU-05Perfil de alumínio (20x20) 250 mm2 pçestruturalEstimativa Claude (placeholder)9
ROD-01Rodízio 2" com trava4 pçestruturalEstimativa Claude (placeholder)24
PEAD-01Chapa PEAD 690x50 mm2 pçestruturalEstimativa Claude (placeholder)60
PEAD-02Chapa PEAD 690x503 mm1 pçestruturalEstimativa Claude (placeholder)110
PEAD-03Chapa PEAD 540x500 mm3 pçestruturalEstimativa Claude (placeholder)88
PEAD-04Chapa PEAD 250x460 mm1 pçestruturalEstimativa Claude (placeholder)44
PEAD-05Chapa PEAD 250x500 mm1 pçestruturalEstimativa Claude (placeholder)48
PEAD-06Chapa PEAD 50x500 mm1 pçestruturalEstimativa Claude (placeholder)16
PEAD-07Chapa PEAD 690x250 mm2 pçestruturalEstimativa Claude (placeholder)64
PAR-01Parafuso mosca M4 5mm24 pçestruturalEstimativa Claude (placeholder)0,50
CON-01Conector 3 vias perfil de Alum. Base 208 pçestruturalEstimativa Claude (placeholder)5
PAR-02Parafuso Philips M4 cabeça chata 25mm8 pçestruturalEstimativa Claude (placeholder)1

Produto (1 SKU)

Produto final

SKUDescriçãoQtdTipoFornecedorMPNPreço 10u (R$)Status
YB-000Yara Box - unidade completa1 pçproduto_finalEM_DESENVOLVIMENTO

4. Notas sobre a BOM

4.1. Status dos preços

  • Itens com fornecedor "Estimativa Claude (placeholder)" têm preços estimados e precisam de cotação real. Documentado no backlog 00-Backlog/tasks.md (item "BOM Mestre v2").
  • Itens com status "PENDENTE_DADOS" ainda não foram totalmente caracterizados (fornecedor, MPN, leadtime).
  • Os 12 SKUs novos adicionados em 12/05/2026 (SUP-ROD, CANT-01, PEAD-DIV, TAMPO-01, DOB-01, JOE-FEM, TUB-PERI, MANOM-01, ALC-01, SUP-RES-HIPO, FRM-540x500, SUP-BOM-PERI, VAL-RET, MIS-EST, FIL-BOM) estão na situação "PENDENTE_DADOS".

4.2. Componentes críticos (componente_critico)

São os SKUs cuja falha compromete diretamente a função do produto:

  • ELE-07 (Fonte 12V/20A/240W IP67)
  • ELE-08 (Bateria Li-ion 18650 com BMS)
  • BOM-01 (Bomba de superfície Seaflo)
  • BOM-02 (Bomba Peristáltica P40SMD)
  • BOM-03 (Bomba manual) — removido (status REMOVIDO)
  • SEN-01 (Sensor de vazão)
  • SEN-02 (Sensor de pressão inox 150 PSI)
  • SEN-03 (Sensor capacitivo de nível) × 2

Esses devem ter fornecedores alternativos mapeados antes da produção em volume.

4.3. Componentes consumíveis (consumivel)

São substituídos periodicamente em manutenção (ver Cap 10 §5):

  • FIL-01 (Filtro Disco ¾")
  • FIL-02 (Filtro microbiológico 0,2 μm) — gargalo identificado (~400 L de autonomia, ver Cap 8 §6.4)
  • FIL-03 (Filtro membrana Althy 0,01 μm) × 2
  • TUB-PERI (Tubo silicone da bomba peristáltica) — desgasta com o tempo, recalibrar dosadora após troca

4.4. PCBs (pcba)

São SKUs que internamente têm BOM própria (sub-BOM):


5. Referência cruzada com PCB Seletora (BOM dedicada)

A PCB Seletora v1.1.1 (SKU ELE-05) tem BOM detalhada no próprio repositório KiCad — pronta para fabricação JLCPCB. Componentes principais (Cap 2 §4.3):

ComponenteReferênciaQuantidadeFunção
CN3722 (módulo MPPT)U11Controlador de carga solar
XL4015 (módulo Buck)U21Step-down 5A
XL6019 (módulo Boost)U31Step-up 5A
CMA51H-S-DC12V-CK1, K2, K33Relés 12V 15-20A
SI4483ADYQ11MOSFET P-channel
20A10D1-D66Diodos retificadores
1000 μF eletrolíticoC1-C55Filtragem

BOM completa em Macroentregas_Embrapii/Macroentrega_3/fontes códigos e projetos/modulo-basico-pcb-seletor-de-alimentacao-main/documentos/BOM/.


6. Como atualizar este apêndice

A tabela MD da §3 é gerada automaticamente. Para atualizar quando o Yara_Box_BOM.xlsx for editado:

# 1. Garantir que o Excel está fechado (verificar ~lock):
ls "/Users/rodrigobelli/Documents/Wara Tech/01-Produto/Produto_Yara_Box/BOM/.~lock.Yara_Box_BOM.xlsx#"

# 2. Rodar o script gerador:
python3 "/Users/rodrigobelli/Documents/Wara Tech/01-Produto/Produto_Yara_Box/manual-mestre/scripts/bom_xlsx_to_md.py" > /tmp/bom_table.md

# 3. Revisar /tmp/bom_table.md e copiar/colar na seção §3 deste arquivo.

O script bom_xlsx_to_md.py é versionado em manual-mestre/scripts/ e usa apenas openpyxl (read-only — não interfere com Excel aberto se for o caso).


Fontes deste apêndice

  • 01-Produto/Produto_Yara_Box/BOM/Yara_Box_BOM.xlsx (source-of-truth da BOM consolidada)
  • Macroentregas_Embrapii/Macroentrega_3/5.1 .../picg-resposta-2026-05-14/Desenhos 2D cotados das Chapas/ (7 PDFs ABNT das chapas PEAD)
  • Macroentregas_Embrapii/.../modulo-basico-pcb-seletor-de-alimentacao-main/documentos/BOM/ (BOM dedicada da PCB Seletora)
  • Macroentregas_Embrapii/.../modulo-basico-pcb-principal-joker-main/Documentos/bom/ (BOM dedicada da PCB Joker)
  • Macroentregas_Embrapii/Macroentrega_1/RELAÇÃO - Aquisição de itens conforme requisitos tecnológicos.docx (BOM original)
  • Macroentregas_Embrapii/Macroentrega_1/RELAÇÃO - Aquisição dos itens comerciais.docx (BOM original)
  • 00-Backlog/tasks.md (item "BOM Mestre v2 — evoluir pro world-class")
  • Script: manual-mestre/scripts/bom_xlsx_to_md.py
APÊNDICE B — ESQUEMÁTICOS

Apêndice B — Esquemáticos PDF + KiCad Sources

Status: ✅ pronto Última atualização: 2026-05-14 Audiência: engenheiro eletrônico/elétrico Função: índice consolidado de todos os esquemáticos, layouts e datasheets do projeto Yara Box


Sumário


1. PCB Joker (Core final com JNG-E)

Atlas visual dos esquemáticos eletrônicos

Figura B.1 — Atlas visual dos esquemáticos eletrônicos: relação entre PCBs, energia, Core, sensores, atuadores e ferramentas de teste.

1.1. Esquemáticos e layout

ArquivoTipoConteúdo
modulo-basico-pcb-principal-joker.kicad_schKiCad sheetTop-level: ESP32-S3-WROOM via JNG-E + SIM7080G + conectores externos
ALIMENTAÇÃO.kicad_schKiCad sheetRegulação e distribuição interna
Bombas.kicad_schKiCad sheetDrivers de bombas E e D
SENSORES DE PRESSÃO.kicad_schKiCad sheetInterface ADS1115 → PT100-103
SENSOR DE VAZÃO.kicad_schKiCad sheetEntrada digital FE300
CHAVE DE NÍVEL.kicad_schKiCad sheetLSL200/LSLL200 via PCF8574
Válvula Solenoide.kicad_schKiCad sheetDrivers IRLZ44N para S1/S2
EXPANSÃO DE PINO.kicad_schKiCad sheetExpansores PCF8574
SINALIZAÇÃO.kicad_schKiCad sheetLEDs + buzzer
modulo-basico-pcb-principal-joker.kicad_pcbKiCad PCBLayout físico (rastreado)

1.2. PDFs e iBOM

Em Macroentregas_Embrapii/.../modulo-basico-pcb-principal-joker-main/Documentos/:

ArquivoConteúdo
esquematico.pdfEsquemático completo exportado em PDF (referência rápida)
layout.pdfLayout da PCB exportado em PDF
bom/BOM da PCB Joker
datasheet/Datasheets dos componentes principais
mod_eneltec/Documentação técnica do módulo JNG-E (Eneltec)

Em IMGs/:

  • Arquitetura do Sistema.png
  • LED-BUZZER - ALARME AUDIO VISUAL.png
  • MODULO PCF8574.jpg
  • MODULO ADS1115.jpeg
  • SENSOR CAPACITIVO.png

1.3. Como abrir

# Pré-requisito: KiCad 8.x instalado
cd "Macroentregas_Embrapii/Macroentrega_3/fontes códigos  e projetos/modulo-basico-pcb-principal-joker-main"
kicad modulo-basico-pcb-principal-joker.kicad_pro   # abre o projeto

Detalhes do hardware em Cap 2 §3.


2. PCB Seletora de Alimentação v1.1.1

2.1. Esquemáticos e layout

ArquivoTipoConteúdo
modulo-basico-pcb-seletor-de-alimentacao.kicad_schKiCad sheetTop-level: conectores P1-P7 + J2 + relés CMA51H
SELETOR_DE_FONTE.kicad_schKiCad sheetLógica de seleção (3 relés CMA51H)
retifificacao_filtragem.kicad_schKiCad sheetRetificação (diodos 20A10) + filtragem (caps 1000 μF)
CHAVE_ON-OFF.kicad_schKiCad sheetControle de liga/desliga geral
modulo-basico-pcb-seletor-de-alimentacao.kicad_pcbKiCad PCBLayout físico

2.2. Artefatos de produção (prontos para JLCPCB)

Em Macroentregas_Embrapii/.../modulo-basico-pcb-seletor-de-alimentacao-main/documentos/:

ArquivoConteúdo
ESQUEMATICO.pdfEsquemático completo em PDF
layout.pdfLayout da PCB em PDF
BOM/BOM completa para JLCPCB
Gerbers/Gerbers prontos para fabricação
positions/Arquivos de posicionamento (pick-and-place)
netlist/Netlist do projeto
libsSeletor/Biblioteca KiCad customizada (modelos 3D para CN3722, XL4015, XL6019, CMA51H)

2.3. Componentes-chave

ComponenteRefQtdFunção
CN3722 (módulo MPPT)U11Controlador de carga solar
XL4015 (módulo Buck)U21Regulação step-down
XL6019 (módulo Boost)U31Regulação step-up
CMA51H-S-DC12V-CK1–K33Relés 12V, 15–20A
SI4483ADYQ11MOSFET P-channel
20A10D1–D66Diodos retificadores
1000 μF eletrolíticoC1–C55Filtragem

Detalhes do hardware em Cap 2 §4, conectores em Cap 4 §2.


3. PCB Principal-DevKit-ESP32S3 (prototipagem)

Esta versão usa o módulo ESP32-S3-WROOM diretamente no formato DevKit (sem JNG-E). Útil para prototipagem, debug e bring-up. Não usar em unidades de produção — usar a Joker.

Detalhes em Cap 2 §2.


4. PCB DAQ Shield (Datalogger)

PCB auxiliar montada sobre Arduino Nano ATmega328 para instrumentação de bancada. Não vai no produto final.

Artefatos:

  • pcb_daq.pdf — esquemático em PDF
  • libs/mylibs/ — biblioteca KiCad customizada
  • Datasheets de LTV-817, SI4483ADY, L78xx, LM317, LESD5D5

Detalhes em Cap 2 §5.


5. Esquemático elétrico geral (projeto-eletrico)

Não é uma PCB própria — é o esquemático em KiCad da instalação elétrica completa entre PCBs, sensores externos, atuadores, bateria, conectores no gabinete.

5.1. Sub-esquemáticos

ArquivoCobre
projeto-eletrico.kicad_schSheet principal
Alimentacao.kicad_schDistribuição entre Seletora ↔ Core ↔ bateria ↔ atuadores
Bombas.kicad_schFiação para Bomba E (P7) e Bomba D (driver A4988 → motor passo)
Botoeiras.kicad_schBotões HS500/501/502 + encoder HS503
Sensores.kicad_schCabeamento PT100-103, FE300, LSL200/LSLL200 até a Core
Valvulas.kicad_schSolenóides S1/S2 (retrolavagem 3A/3B)
Sinalizacao.kicad_schLEDs + buzzer + lâmpada YL400

5.2. Artefatos

Em Macroentregas_Embrapii/.../projeto-eletrico-main/DOCS/:

  • PDFs consolidados
  • Datasheets de componentes externos

Detalhes em Cap 4 §9-10.


6. P&ID hidráulico formal (PICG)

P&ID hidráulico como referência do apêndice de esquemáticos

Figura B.2 — Referência visual do P&ID hidráulico formal, alinhada aos artefatos técnicos listados neste apêndice.

Fonte: Macroentregas_Embrapii/Macroentrega_3/5.1 Transferência da tecnologia ao cliente/picg-resposta-2026-05-14/Fluxogramas.docx

Documento entregue pelo PICG em 14/05/2026 contendo:

  • Arquitetura macro do sistema
  • Fluxograma P&ID do módulo básico
  • Tabela completa de tags ISA-5.1: FV301, FE300, PT100-103, LSL200, LSLL200, PAHH100, PLH100, PLL100, LLL200, LALL200, FIQC300, HS500-503, MIX, TQ Cloro, S1, S2, Bombas E/D/manual, Filtros 0/1/2/3A/3B, YL400, Buzzer
  • Mapeamento de pinos elétricos (GPIO ESP32, AP/BP expansores PCF8574, UART2 para SIM7080G)

Tabela e diagrama transpostos para Cap 3 §4.


7. Datasheets dos componentes principais

Compilados em cada repositório KiCad (Documentos/datasheet/ ou datasheet/). Lista de referência rápida:

ComponenteFunçãoFabricanteOnde encontrar
ESP32-S3-WROOMMCU principalEspressifrepo Joker Documentos/datasheet/
SIM7080GGSM/3G/4G + GPSSIMComrepo Joker Documentos/datasheet/
ADS1115ADC I²C 16-bit, 4 canaisTexas Instrumentsrepo Joker Documentos/datasheet/
PCF8574Expansor I/O I²CNXP / TIrepo Joker Documentos/datasheet/
A4988Driver motor de passoAllegrorepo Joker Documentos/datasheet/
IRLZ44NMOSFET N-channel powerInfineonrepo Joker Documentos/datasheet/
LM317Regulador ajustávelTI / STrepo Joker Documentos/datasheet/
SH1107OLED 128×128 driverSino Wealth(procurar online — não está nos repos)
CN3722Controlador MPPT solarConsonancerepo Seletora documentos/
XL4015Buck converter 5AXlsemirepo Seletora documentos/
XL6019Boost converter 5AXlsemirepo Seletora documentos/
CMA51H-S-DC12V-CRelé 12V SPDT 15-20AVariousrepo Seletora documentos/
SI4483ADYMOSFET P-channelVishayrepo Seletora + repo DAQ
20A10Diodo retificador 20AVariousrepo Seletora documentos/
LTV-817OptoacopladorLiteOnrepo DAQ datasheets/
LESD5D5TVS diodo proteção ESDVariousrepo DAQ datasheets/
AccelStepper (lib)Lib motor de passoMike McCauleyhttps://www.airspayce.com/mikem/arduino/AccelStepper/
ESP2SOTA (lib OTA)Lib OTApangodreamgithub.com/pangodream/ESP2SOTA
TinyGSM (lib)Lib SIM7080Gvshymanskyygithub.com/vshymanskyy/TinyGSM
ThingsBoard SDKLib MQTT high-levelThingsBoardgithub.com/thingsboard/thingsboard-client-sdk

Lista completa de bibliotecas externas em Cap 5 §2.


8. Convenções de nomenclatura

  • Tags ISA-5.1 seguem a convenção do PICG no Fluxogramas.docx (ver Cap 3 §4)
  • Referências de componente em PCB: padrão KiCad (U para CIs, R resistores, C capacitores, D diodos, Q transistores, K relés, J/P conectores)
  • Nomenclatura GPIO: GPIO XX (ESP32-S3) ou APx/BPx (PCF8574 expansor 1/2) — convenção da JNG-E adotada no Fluxogramas.docx
  • Endereços I²C: documentados em Cap 2 §3.3 e Cap 5 §15

Fontes deste apêndice

  • Todos os repositórios agua-camelo-cs/YB-modulo-basico-pcb-* e YB-projeto-eletrico (mirrors privados dos GitLab originais do PICG)
  • Macroentregas_Embrapii/Macroentrega_3/fontes códigos e projetos/ (clones locais)
  • Macroentregas_Embrapii/.../picg-resposta-2026-05-14/Fluxogramas.docx (P&ID + tags ISA)
APÊNDICE C — CALIBRAÇÃO

Apêndice C — Calibração Bruta da Unidade Yara Box 001

Status: ✅ pronto Última atualização: 2026-05-14 Audiência: técnico de bancada / engenheiro de metrologia Origem dos dados: unidade Yara Box 001 em operação (Água Camelo) + procedimentos PICG entregues em 14/05/2026


Sumário


1. Coeficientes em produção (firmware v2.1.4-alpha)

Fluxo visual de calibração usado como referência para dados brutos

Figura C.1 — Referência visual para interpretar os dados brutos de calibração: pressão, vazão, dosadora, tensões e aplicação dos coeficientes.

Backup operacional: /11-Confidencial/YaraBox_001_Backup_Config.md (snapshot tirado em 14/05/2026 durante a migração de infra PICG → Vultr).

1.1. Tabela completa de coeficientes

ParâmetroCoeficiente ACoeficiente BStatusObservação
calibracao_vazao0,253526896✅ calibradomL/pulso
calibracao_pt100_a/b0,02909090-8,79708816✅ calibradoPT100 — calibrado em laboratório PICG
calibracao_pt101_a/b0,04210526-13,38947268✅ calibradoPT101 — match perfeito com exemplo PICG (ver §2.2)
calibracao_pt102_a/b0,063-18,14⚠️ DEFAULTNão calibrado nesta unidade — valores padrão de firmware
calibracao_pt103_a/b0,063-18,14⚠️ DEFAULTNão calibrado nesta unidade — valores padrão de firmware
calibracao_tensao_bateria_a/b0,004379562-0,188321168✅ calibradoBateria 3S Li-ion
calibracao_tensao_bomba_a/b0,0097249060✅ calibradoTensão de bomba
calibracao_bomba_dosadora0,32078445✅ calibradoMatch perfeito com média PICG (ver §4)

1.2. Parâmetros de operação relacionados

ParâmetroValorObservação
concentracao_hipoclorito_porcentagem4Crítico — bateu com produto após correção (ver Cap 8 §6.3)
dose_hipoclorito_ug-L.valor4000Dose-alvo em μg/L
pwm_bomba_eletrica115Duty cycle padrão (vermelho: o firmware atual usa 255 fixo durante tratamento)
velocidade_bomba_dosadora50Velocidade padrão
limite_maximo_vazao_hora600Limite operacional (L/h)

2. Calibração de pressão — dados brutos

Procedimento formal entregue pelo PICG em 14/05/2026: Macroentregas_Embrapii/Macroentrega_3/5.1 .../picg-resposta-2026-05-14/procedimento_calibracao_sensor_pressao.pdf

2.1. Setup

Ar comprimido → Filtro regulador com manômetro → Sensor de pressão + manômetro/calibrador

Procedimento: 2 pontos (0 PSI e 20 PSI), regressão linear y = a · x + b. Detalhes em Cap 8 §2.

2.2. PT101 — match perfeito com o exemplo PICG

Exemplo numérico anexado ao PDF do PICG:

PressãoLeitura ADS1115
0 PSI318
20 PSI793

Cálculo:

a = (20 - 0) / (793 - 318) = 20 / 475 = 0,04210526
b = 0 - 0,04210526 × 318 = -13,38947268

Equação resultante:

PSI = 0,04210526 × leitura - 13,38947268

Match na unidade 001:

"calibracao_pt101_a": 0.04210526,
"calibracao_pt101_b": -13.38947268    // 8 casas decimais batendo

Esta é evidência forte de que o procedimento documentado pelo PICG foi exatamente o que gerou o coeficiente em uso na unidade 001.

2.3. PT100 — calibrado em laboratório (sem exemplo no PDF)

A unidade 001 está com:

"calibracao_pt100_a": 0.02909090,
"calibracao_pt100_b": -8.79708816

O PICG não anexou exemplo numérico específico para o PT100, mas o procedimento é idêntico ao do PT101. Inferindo de trás para frente — se aplicamos o mesmo intervalo (0 e 20 PSI):

20 / a = 20 / 0,02909090 ≈ 687,5     # diferença esperada nas leituras ADS
b = -a × leitura_em_0PSI
leitura_em_0PSI = -b / a = 8,79708816 / 0,02909090 ≈ 302,4
leitura_em_20PSI = 302,4 + 687,5 ≈ 989,9

Provavelmente os pontos medidos foram aproximadamente (0 PSI → ~302 ADS) e (20 PSI → ~990 ADS). Confirmação com PICG pendente (TODO de follow-up).


3. Calibração de vazão — dados brutos

Procedimento e tabela bruta entregues pelo PICG em 14/05/2026: Macroentregas_Embrapii/Macroentrega_3/5.1 .../picg-resposta-2026-05-14/procedimento_calibracao_sensor_vazão_bomba_dosadora.pdf

3.1. Tabela de medições (4 pontos)

Volume (mL)Pulsos (P)Resolução (mL/P)
98041830,23428
107046630,22947
110548740,22671
127057610,22045
Média0,22773 mL/P

3.2. Comparação com a unidade 001

A unidade 001 está com calibracao_vazao = 0.25352689, ligeiramente maior que a média do PDF do PICG (0,22773). Isso é esperado — cada sensor individual tem variação, e a unidade 001 provavelmente foi recalibrada após instalação.

Diferença relativa: ~10%. Para um sensor Hall com tubulação de 1/4", essa variação está dentro do esperado entre exemplares.

3.3. Observação técnica do PICG (drift)

Citação literal do PDF:

"a leitura fornecida pelo sensor de vazão tem apresentado uma discrepância progressiva em relação ao volume real de água. Faz-se necessário investigar a correlação entre o desgaste operacional do equipamento e a deriva da calibração, a fim de estabelecer a periodicidade ideal para a recalibração do sensor de vazão."

Implicações documentadas em Cap 10 §10. TODO Wara Tech: acumular dados de campo para derivar curva de drift.


4. Calibração da bomba dosadora — dados brutos

Mesma fonte: procedimento_calibracao_sensor_vazão_bomba_dosadora.pdf (PICG, 14/05/2026).

4.1. Tabela de medições (3 pontos)

Velocidade (passo/min)Tempo (min)Volume dispensado (mL)Constante (P × T) / V
100010310,32258065
50010160,31250000
36010110,32727273
Média0,32078446

4.2. Match perfeito com a unidade 001

"calibracao_bomba_dosadora": 0.32078445   // 7 casas decimais batendo com a média do PDF

Diferença de apenas 1 unidade na 8ª casa decimal — efetivamente match perfeito. Confirma que este foi o procedimento que originou o coeficiente em uso.

4.3. Aplicação em runtime

A constante é usada pelo firmware na fórmula:

velocidade_passo = calibracao_bomba_dosadora × vazao_minuto × dose_hipoclorito

Exemplo numérico (vazão 5 L/min, dose 4000 μg/L):

velocidade_passo = 0,32078445 × 5 × 4000 = 6.415,69 passos/min ≈ 107 passos/s

5. Calibração de tensões

5.1. Coeficientes em uso

"calibracao_tensao_bateria_a":  0.0043795620,
"calibracao_tensao_bateria_b": -0.1883211678,
"calibracao_tensao_bomba_a":    0.0097249061,
"calibracao_tensao_bomba_b":    0.0

5.2. Princípio (ADS1115, divisor de tensão)

Citação do PDF do PICG (Apêndice A, página 19):

"Para realizar a calibração da leitura do sinal proveniente do divisor de tensão, primeiramente aplicamos uma tensão na entrada do circuito e verificamos qual o valor foi lido pelo módulo ADS1115. Considerando que a razão entre os valores da tensão na entrada do circuito e o valor lido pelo módulo sempre será constante, podemos utilizar os resultados de duas medições, com valores de entrada distintos, para calcular os coeficientes de uma equação reduzida da reta na forma y = Ax + B."

5.3. Inferência dos pontos de medição (dados brutos não documentados)

⚠️ Gap pequeno — o PDF do PICG cobre o princípio mas não traz exemplo numérico específico para tensões.

Inferindo a partir dos coeficientes:

Tensão bateria (a = 0,0043795620, b = -0,1883211678):

  • Para V = 0: 0 = a × x - 0,188x ≈ 43 (leitura ADS quando entrada é 0 V)
  • Para V = 12,6 V (bateria 3S totalmente carregada): 12,6 = a × x - 0,188x ≈ 2.920

Tensão bomba (a = 0,0097249061, b = 0):

  • Para V = 0: x = 0 (offset zero, divisor sem offset)
  • Para V = 12 V: x ≈ 1.234

TODO: pedir ao PICG, em follow-up curto, os valores exatos das leituras (V_aplicado, x_lido) para registro completo.


6. PT102 e PT103 — sensores não calibrados nesta unidade

A unidade 001 está com:

"calibracao_pt102_a": 0.063,
"calibracao_pt102_b": -18.14,
"calibracao_pt103_a": 0.063,
"calibracao_pt103_b": -18.14

Esses são valores DEFAULT do firmware (em data/config-padrao-fabrica.json).

6.1. Hipóteses sobre status

HipótesePlausibilidadeConfirmação
(a) Sensores não foram fisicamente instalados nesta unidadeAlta — comum em protótiposA confirmar visualmente no equipamento
(b) Sensores estão instalados mas não foram calibrados em laboratórioMédiaA confirmar com histórico PICG
(c) Posições previstas no projeto que ainda não foram comissionadasMédiaA confirmar com Cap 3 §4.2

6.2. TODO ao confirmar

Se forem usados (qualquer das hipóteses acima):

  1. Realizar procedimento de calibração de pressão (Cap 8 §2)
  2. Atualizar calibracao_pt102_a/b e calibracao_pt103_a/b via AP mode
  3. Validar leituras coerentes no display e na telemetria

6.3. Implicação para o firmware

Mesmo com os defaults, o firmware lê e publica os valores de PT102/PT103. Para fins de telemetria, o ThingsBoard reportará valores absurdos (pressão "negativa" ou muito alta para condições normais) — fácil de identificar e ignorar até a calibração.

Os alertas de pressão (PAHH100/PLH100/PLL100) usam apenas PT100 e PT101 no firmware atual, então não há intertravamento espúrio causado pelos defaults.


7. Foto do registro manual no caderno do operador

Anexada ao PDF procedimento_calibracao_sensor_pressao.pdf do PICG, página 2.

Conteúdo do caderno (transcrição literal):

Exemplo:
 0 PSI = 318      ← leitura de entrada do
20 PSI = 793        ADS1115

 a = (y₂ - y₁) / (x₂ - x₁)
 a = (20 - 0) / (793 - 318)

 a = 20 / 475 = 0,04210526

E em outra folha:

↳ Cálculo para encontrar o b:
 y = a · x + b
 0 = 0,0421056 × 318 + b
 b = -13,389472681

Foto também inclui setup de bancada com manômetro analógico + sensor + filtro regulador.

Importância para o manual: documenta que o procedimento foi executado manualmente em bancada (não automatizado), pelo PICG, com cálculo verificado à mão. Confirma a rastreabilidade dos coeficientes que estão no firmware da unidade 001.


8. Como restaurar esses valores em uma placa nova

Procedimento detalhado (também referenciado em Cap 10 §9):

8.1. Pré-requisitos

  • Placa Joker (Core) gravada com firmware atual (ver Cap 5 §16)
  • Acesso ao backup operacional (/11-Confidencial/YaraBox_001_Backup_Config.md) — confidencial, contém credenciais
  • Wi-Fi disponível para conectar ao yarabox_AP

8.2. Passos

  1. Boot inicial: ligue a Yara Box. No primeiro boot após reset/troca de placa, o firmware carrega data/config-padrao-fabrica.json (defaults imutáveis) e copia para data/config.json.
  2. Conectar ao AP: desconecte do Wi-Fi local e conecte à rede yarabox_AP (sem senha).
  3. Acessar portal: abra http://yarabox.local ou http://192.168.4.1 no navegador.
  4. Login: usuário camelo, senha @gu@c@m3l0 (defaults — podem ser trocados depois).
  5. Configurar Wi-Fi do cliente (ssid_wifi, psk_wifi).
  6. Configurar MQTT:
    • server_mqtt = yarabox.aguacamelo.com.br
    • token_mqtt = Access Token específico da unidade (gerado no ThingsBoard — ver Cap 6 §4.6)
  7. Configurar GSM (se aplicável):
    • apn_gsm, user_gsm, pass_gsm conforme operadora
    • pin_gsm se o SIM card tem PIN
  8. Inserir coeficientes de calibração (tabela da §1.1 acima):
    • calibracao_vazao
    • calibracao_pt100_a / _b
    • calibracao_pt101_a / _b
    • calibracao_pt102_a / _b (manter default se não calibrado nesta unidade)
    • calibracao_pt103_a / _b (manter default se não calibrado)
    • calibracao_tensao_bateria_a / _b
    • calibracao_tensao_bomba_a / _b
    • calibracao_bomba_dosadora
  9. Outros parâmetros: concentracao_hipoclorito_porcentagem, dose_hipoclorito_ug-L.valor, limiares de alarme se diferentes do default.
  10. Salvar → unidade reinicia automaticamente.

8.3. Validação pós-restauração

Checklist da §Cap 8 §8.2:

  • Display mostra leituras coerentes (pressão 0–30 PSI, vazão na faixa esperada, hipoclorito ~100%, tensão bateria ~12 V)
  • LED YL400 reflete estado correto
  • No ThingsBoard, unidade aparece 🟢 Active em até 30 s
  • Dashboard mostra valores corretos
  • Comandos remotos funcionam
  • Ciclo de retrolavagem manual completa sem erros

Se algum item falhar, não devolver a unidade ao serviço — investigar antes.


Fontes deste apêndice

  • /11-Confidencial/YaraBox_001_Backup_Config.md (todos os coeficientes em produção na unidade 001)
  • Macroentregas_Embrapii/Macroentrega_3/5.1 Transferência da tecnologia ao cliente/picg-resposta-2026-05-14/procedimento_calibracao_sensor_pressao.pdf (procedimento + exemplo PT101 + foto do caderno)
  • Macroentregas_Embrapii/Macroentrega_3/5.1 Transferência da tecnologia ao cliente/picg-resposta-2026-05-14/procedimento_calibracao_sensor_vazão_bomba_dosadora.pdf (procedimento + tabelas brutas vazão e dosadora)
  • Macroentregas_Embrapii/Macroentrega_3/fontes códigos e projetos/modulo-basico/data/config.json (schema completo)
  • Macroentregas_Embrapii/Macroentrega_3/fontes códigos e projetos/modulo-basico/data/config-padrao-fabrica.json (defaults imutáveis)