
Intro to PCB
jtausif568/ATmega328P-Development-Board
An ATmega328P-based development board (Arduino-compatible) designed from scratch in KiCad

Controle de temperatura de uma câmara térmica por lógica fuzzy (Mamdani), com visualização em tempo real por um dashboard web via MQTT.
Controller is an open-source printed circuit board by DaviPRabelo, from the DaviPRabelo/Fuzzy_c213 repository on GitHub. It is a 2-layer board of 55 × 57.9 mm with 20 parts on 30 nets, routed with 77 tracks and 14 vias.
It is built around the LM1117T-ADJ, AP9565K and BC846, with the SS34 among its other parts. Its parts include 6 capacitors, 6 resistors, 3 connectors, 2 ICs and 2 transistors.
Controle de temperatura de uma câmara térmica por lógica fuzzy (Mamdani), com visualização em tempo real por um dashboard web via MQTT.
C213 · Sistemas Embarcados · Inatel
| Nome | Matrícula |
|---|---|
| DAVÍ PADULA RABELO | 1917 |
| KAUÃ VICTOR GARCIA SIÉCOLA | 1887 |
| MATHEUS RENÓ TORRES | 1954 |
flowchart LR
DASH["Dashboard<br/>(browser)"]
BROKER(["Broker MQTT · HiveMQ"])
ESP["ESP32 · controle fuzzy<br/>(pendente)"]
PLANT["Aquecedor / Cooler<br/>+ sensor de temperatura"]
DASH -->|setpoint| BROKER
BROKER -->|setpoint| ESP
ESP -->|telemetria JSON| BROKER
BROKER -->|telemetria| DASH
ESP -->|PWM| PLANT
PLANT -->|temperatura| ESP
classDef pending stroke-dasharray:5 5,fill:#fff7ed,stroke:#fb923c,color:#9a3412;
class ESP pending;O sistema tem três peças conceituais:
| Peça | Arquivo | Papel |
|---|---|---|
| Projeto do controlador | fuzzy.py | Define pertinências + 25 regras, valida e gera gráficos (roda no PC, offline) |
| Interface | dashboard.html | Mostra temperatura/setpoint/erro/ação em tempo real e envia o setpoint |
| Controle embarcado | (pendente) | Firmware do ESP32 que lê o sensor, roda o fuzzy, aciona PWM e publica MQTT |
O
fuzzy.pyé uma ferramenta offline: projeta o controlador, imprime testes de sinal e gera os gráficos das pertinências e da superfície de controle.
Toda a lógica segue uma convenção única, consistente entre o .py e o dashboard:
| Grandeza | Definição | Interpretação |
|---|---|---|
| erro | e = SP − T | e > 0 → está frio (T abaixo do setpoint) |
| Δe (delta_erro) | variação do erro entre amostras | tendência (esfriando / esquentando) |
| u (ação) | saída de controle em % | u > 0 → aquecer · u < 0 → resfriar |
Termos linguísticos: NG (negativo grande) … ZE (zero) … PG (positivo grande)
para as entradas; RF (resfriar forte) … MA (manter) … AF (aquecer forte) para a saída.
fuzzy_codigo/
├── fuzzy.py # controlador fuzzy + geração de gráficos (offline)
├── dashboard.html # painel web em tempo real (MQTT + Chart.js)
├── requirements.txt # dependências Python
├── pertinencias.png # gráfico das funções de pertinência (gerado pelo .py)
├── superficie.png # superfície de controle 3D (gerado pelo .py)
└── README.mdO controlador vive em fuzzy.py.
Crie um ambiente virtual e instale as dependências:
python -m venv .venv
# Windows
.venv\Scripts\activate
# Linux/macOS
source .venv/bin/activate
python -m pip install -r requirements.txtExecute:
python fuzzy.pyO script imprime três testes de sinal e gera os dois gráficos:
| Saída | O que mostra |
|---|---|
pertinencias.png | As funções de pertinência de erro, Δe e ação |
superficie.png | A superfície de controle 3D u = f(erro, Δe) |
O dashboard vive em dashboard.html.
[!TIP] Sirva o arquivo por HTTP — alguns navegadores bloqueiam WebSocket a partir de
file://.
python -m http.server 8080
# depois abra http://localhost:8080/dashboard.htmlO indicador de status mostra:
Os botões de setpoint (35 / 50 / 65 °C) publicam o novo SP no broker.
O dashboard reimplementa o controlador Mamdani em JavaScript (mesmas funções de
pertinência e as 25 regras de fuzzy.py) e mostra, em tempo real, o passo a
passo da inferência a cada amostra:
erro e Δe com o valor atual marcado
e os termos ativos destacados;Ku e a saturação em ±100 % (ver abaixo),
atualizados junto com a telemetria.O centroide do conjunto agregado nunca alcança as bordas do universo — mesmo com RF/AF
totalmente ativados ele satura em ≈ ±79 %. Por isso o controlador aplica a estrutura padrão
núcleo fuzzy → ganho de saída Ku ≈ 1,27 → saturação em ±100 %, usando toda a faixa
física do atuador (u>0 aquece, u<0 resfria). O painel de defuzzificação mostra as duas
grandezas: o centroide (tracejado) e o comando final (linha cheia).
| Item | Valor |
|---|---|
| Broker | broker.hivemq.com |
| Porta | 8000 (WebSocket) |
| Tópico de telemetria | inatel/c213/camara/dados — ESP32 → dashboard (JSON) |
| Tópico de setpoint | inatel/c213/camara/setpoint — dashboard → ESP32 (número como texto, retained) |
Formato do JSON em inatel/c213/camara/dados:
{ "temp": 31.4, "sp": 50, "erro": 18.6, "u": 73 }| Campo | Tipo | Descrição |
|---|---|---|
temp | número | temperatura medida (°C) |
sp | número | setpoint atual (°C) |
erro | número | e = sp − temp (°C) |
u | número | ação de controle em % (u>0 aquece, u<0 resfria) |
de | número (opcional) | variação do erro Δe; se ausente, o dashboard a deriva de amostras sucessivas |
O dashboard tolera campos ausentes e ignora payloads com JSON inválido ou campos mal-tipados (validação numérica em cada campo).
broker.hivemq.com é compartilhado e sem
autenticação/TLS; os tópicos são fixos. Para uso em laboratório, prefira WSS
(porta 8884) e prefixe os tópicos com um identificador único da equipe.| Qty | Value | Footprint | References |
|---|---|---|---|
| 2 | 100nF | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C2, C6 |
| 2 | 100uF | Capacitor_THT:C_Radial_D6.3mm_H11.0mm_P2.50mm | C1, C4 |
| 2 | 4.7KR | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R1, R3 |
| 1 | 100KR | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R4 |
| 1 | 100R | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R2 |
| 1 | 10uF | Capacitor_THT:C_Radial_D5.0mm_H11.0mm_P2.00mm | C5 |
| 1 | 22.1KR | Capacitor_SMD:C_0402_1005Metric_Pad0.74x0.62mm_HandSolder | R6 |
| 1 | 30.9KR | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R5 |
| 1 | 470uF | Capacitor_THT:C_Radial_D8.0mm_H11.5mm_P3.50mm | C3 |
| 1 | AP9565K | EasyEDA:TO-252-2_L6.6-W6.1-P4.57-LS10.1-BR-CW | Q2 |
| 1 | BC846 | Package_TO_SOT_SMD:SOT-23 | Q1 |
| 1 | Barrel_Jack_Switch | Connector_BarrelJack:BarrelJack_GCT_DCJ200-10-A_Horizontal | J1 |
| 1 | GY-87 conn | Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Horizontal | J2 |
| 1 | LM1117T-ADJ | Package_TO_SOT_THT:TO-220-3_Horizontal_TabDown | U3 |
| 1 | SS34 | Diode_SMD:D_SMA | D1 |
| 1 | Ventoinha | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Horizontal | J3 |
| 1 | ~ | local_library:ESP32-C3 Module | U1 |

jtausif568/ATmega328P-Development-Board
An ATmega328P-based development board (Arduino-compatible) designed from scratch in KiCad

khomyakova228-cell/pulse-oximeter
Домашнее задание по курсу «САПР электронных средств» «Проект печатного узла пульсоксиметра в KiCad: оформление по ГОСТ, библиотека компонентов, автоматизация проверки и выпуска» Обозначение документа: БИГЕ.149980.001 Э3




mgkoenig/lyft
LYFT is a sophisticated remote control for your IKEA BEKANT desk.

Open-Lab-Starter-Kit/OLSK-Small-CNC
Open Source CNC Milling machine - Small version - Open Lab Starter Kit

schlae/HardDriveInfo
Repair info and schematics for mostly older MFM hard drives
It measures 55 × 57.9 mm and has 2 copper layers, 1.6 mm thick.
20 parts, built around the LM1117T-ADJ, AP9565K, BC846 and SS34. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the DaviPRabelo/Fuzzy_c213 repository on GitHub, at the commit this page was made from: the board is hardware/controller/controller.kicad_pcb and its schematic hardware/controller/controller.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask DaviPRabelo before reusing the design.