flatpanel/docs/wiring-diagram.svg
Laurence c32f00a2be Initial release v1.1.0 — ESP32 automated telescope flat panel
Firmware (Arduino Nano ESP32 / PlatformIO):
- Native ASCOM Alpaca CoverCalibrator REST API on port 11111
- Alnitak serial protocol on USB at 9600 baud (simultaneous with WiFi)
- MG995 servo cover mechanism with non-blocking state machine (D9)
- LED brightness PWM via IRLZ44N MOSFET, LEDC channel 0 (D3)
- 12V dew heater PWM via IRLZ44N MOSFET, LEDC channel 1 (D5)
- mDNS + UDP Alpaca discovery, WiFi watchdog reconnect
- SERIAL_DEBUG flag to silence debug output in USB-only mode

INDI driver (C++ / libcurl / nlohmann-json):
- WiFi mode: HTTP Alpaca via libcurl
- USB mode: Alnitak serial via POSIX termios
- LightBoxInterface + DustCapInterface + dew heater number property

Python controller (PyQt6):
- Dark-themed desktop app for direct manual control
- AlpacaBackend (requests) + AlnitakBackend (pyserial)
- PollWorker QThread; cover, brightness, dew heater panels
- QSettings persistence; auto serial port discovery

Docs:
- system-diagram.svg, wiring-diagram.svg (browser-renderable SVG)
- BUILD_NOTES.md with BOM, LM2596 calibration, power-on checklist
- WIRING.md quick-reference, README.md, CHANGELOG.md
2026-05-17 08:51:29 +01:00

313 lines
21 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="960" height="640" viewBox="0 0 960 640">
<defs>
<!-- Small filled resistor symbol via marker (not used rendered inline) -->
<marker id="a-red" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto">
<polygon points="0 0,8 3,0 6" fill="#c62828"/>
</marker>
<marker id="a-orange" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto">
<polygon points="0 0,8 3,0 6" fill="#e65100"/>
</marker>
<marker id="a-black" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto">
<polygon points="0 0,8 3,0 6" fill="#212121"/>
</marker>
<marker id="a-blue" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto">
<polygon points="0 0,8 3,0 6" fill="#1565c0"/>
</marker>
<marker id="a-yellow" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto">
<polygon points="0 0,8 3,0 6" fill="#f9a825"/>
</marker>
<marker id="a-grey" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto">
<polygon points="0 0,8 3,0 6" fill="#616161"/>
</marker>
<marker id="a-purple" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto">
<polygon points="0 0,8 3,0 6" fill="#6a1b9a"/>
</marker>
</defs>
<!-- White background -->
<rect width="960" height="640" fill="white"/>
<!-- Title -->
<text x="480" y="30" text-anchor="middle"
font-family="Segoe UI, Arial, sans-serif" font-size="17" font-weight="bold" fill="#212121">
ESP32 FlatPanel — Wiring Diagram
</text>
<text x="480" y="48" text-anchor="middle"
font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#777">
Wire colours: red=12V orange=5V black=GND blue=PWM signal yellow=servo signal grey=load output
</text>
<!-- ═══════════════════════════════════════════════════════════ COMPONENTS -->
<!-- 12V PSU -->
<rect x="30" y="70" width="130" height="80" rx="8" fill="#fff8e1" stroke="#f57f17" stroke-width="2"/>
<text x="95" y="100" text-anchor="middle" font-family="Segoe UI, Arial, sans-serif"
font-size="12" font-weight="bold" fill="#e65100">12V PSU</text>
<text x="95" y="118" text-anchor="middle" font-family="Segoe UI, Arial, sans-serif"
font-size="10" fill="#777">≥ 4A</text>
<!-- Terminals -->
<circle cx="50" cy="140" r="5" fill="#c62828"/><text x="50" y="158" text-anchor="middle" font-size="9" fill="#333">12V+</text>
<circle cx="95" cy="140" r="5" fill="#212121"/><text x="95" y="158" text-anchor="middle" font-size="9" fill="#333">GND</text>
<circle cx="140" cy="140" r="5" fill="#c62828"/><text x="140" y="158" text-anchor="middle" font-size="9" fill="#333">12V+</text>
<!-- LM2596 Buck Converter -->
<rect x="210" y="70" width="140" height="80" rx="8" fill="#f9fbe7" stroke="#827717" stroke-width="2"/>
<text x="280" y="97" text-anchor="middle" font-family="Segoe UI, Arial, sans-serif"
font-size="12" font-weight="bold" fill="#558b2f">LM2596 Buck</text>
<text x="280" y="113" text-anchor="middle" font-family="Segoe UI, Arial, sans-serif"
font-size="10" fill="#777">Set to 5.0V first!</text>
<circle cx="225" cy="140" r="5" fill="#c62828"/><text x="225" y="158" text-anchor="middle" font-size="9" fill="#333">IN+</text>
<circle cx="255" cy="140" r="5" fill="#212121"/><text x="255" y="158" text-anchor="middle" font-size="9" fill="#333">IN</text>
<circle cx="305" cy="140" r="5" fill="#e65100"/><text x="305" y="158" text-anchor="middle" font-size="9" fill="#333">OUT+</text>
<circle cx="335" cy="140" r="5" fill="#212121"/><text x="335" y="158" text-anchor="middle" font-size="9" fill="#333">OUT</text>
<!-- Arduino Nano ESP32 -->
<rect x="370" y="200" width="180" height="260" rx="10" fill="#e3f2fd" stroke="#1565c0" stroke-width="2.5"/>
<text x="460" y="226" text-anchor="middle" font-family="Segoe UI, Arial, sans-serif"
font-size="12" font-weight="bold" fill="#0d47a1">Arduino Nano ESP32</text>
<!-- Pin labels -->
<text x="460" y="252" text-anchor="middle" font-family="Courier New, monospace" font-size="9" fill="#555">D9 → servo</text>
<text x="460" y="268" text-anchor="middle" font-family="Courier New, monospace" font-size="9" fill="#555">D3 → LED MOSFET gate</text>
<text x="460" y="284" text-anchor="middle" font-family="Courier New, monospace" font-size="9" fill="#555">D5 → Dew MOSFET gate</text>
<line x1="385" y1="295" x2="535" y2="295" stroke="#90caf9" stroke-width="1"/>
<text x="460" y="315" text-anchor="middle" font-family="Courier New, monospace" font-size="9" fill="#555">VIN ← 5V</text>
<text x="460" y="331" text-anchor="middle" font-family="Courier New, monospace" font-size="9" fill="#555">GND ← common GND</text>
<line x1="385" y1="342" x2="535" y2="342" stroke="#90caf9" stroke-width="1"/>
<text x="460" y="362" text-anchor="middle" font-family="Courier New, monospace" font-size="9" fill="#555">USB-C → PC</text>
<text x="460" y="378" text-anchor="middle" font-family="Courier New, monospace" font-size="9" fill="#555">(Alnitak 9600 baud)</text>
<text x="460" y="400" text-anchor="middle" font-family="Courier New, monospace" font-size="9" fill="#555">WiFi → Alpaca :11111</text>
<!-- ESP32 terminals (left side going out to servo) -->
<circle cx="370" cy="252" r="5" fill="#f9a825"/> <!-- D9 servo -->
<circle cx="370" cy="268" r="5" fill="#1565c0"/> <!-- D3 LED PWM -->
<circle cx="370" cy="284" r="5" fill="#1565c0"/> <!-- D5 Dew PWM -->
<circle cx="370" cy="315" r="5" fill="#e65100"/> <!-- VIN 5V -->
<circle cx="370" cy="331" r="5" fill="#212121"/> <!-- GND -->
<!-- USB port symbol on right -->
<rect x="542" y="358" width="8" height="16" rx="2" fill="#666"/>
<text x="556" y="370" font-family="Segoe UI, Arial, sans-serif" font-size="9" fill="#555">USB-C</text>
<!-- MG995 Servo -->
<rect x="30" y="290" width="140" height="80" rx="8" fill="#e8f5e9" stroke="#2e7d32" stroke-width="2"/>
<text x="100" y="320" text-anchor="middle" font-family="Segoe UI, Arial, sans-serif"
font-size="12" font-weight="bold" fill="#1b5e20">MG995 Servo</text>
<text x="100" y="338" text-anchor="middle" font-family="Segoe UI, Arial, sans-serif"
font-size="10" fill="#388e3c">Cover mechanism</text>
<circle cx="50" cy="360" r="5" fill="#212121"/><text x="50" y="378" text-anchor="middle" font-size="9" fill="#333">GND</text>
<circle cx="100" cy="360" r="5" fill="#e65100"/><text x="100" y="378" text-anchor="middle" font-size="9" fill="#333">5V</text>
<circle cx="150" cy="360" r="5" fill="#f9a825"/><text x="150" y="378" text-anchor="middle" font-size="9" fill="#333">Signal</text>
<!-- MOSFET-A (LED) -->
<rect x="210" y="290" width="140" height="100" rx="8" fill="#fff9c4" stroke="#f57f17" stroke-width="2"/>
<text x="280" y="317" text-anchor="middle" font-family="Segoe UI, Arial, sans-serif"
font-size="11" font-weight="bold" fill="#e65100">IRLZ44N</text>
<text x="280" y="333" text-anchor="middle" font-family="Segoe UI, Arial, sans-serif"
font-size="10" fill="#e65100">MOSFET-A (LED)</text>
<text x="280" y="349" text-anchor="middle" font-family="Segoe UI, Arial, sans-serif"
font-size="9" fill="#777">Gate Drain Source</text>
<circle cx="235" cy="370" r="5" fill="#1565c0"/><text x="235" y="388" text-anchor="middle" font-size="9" fill="#333">Gate</text>
<circle cx="280" cy="370" r="5" fill="#616161"/><text x="280" y="388" text-anchor="middle" font-size="9" fill="#333">Drain</text>
<circle cx="325" cy="370" r="5" fill="#212121"/><text x="325" y="388" text-anchor="middle" font-size="9" fill="#333">Source</text>
<!-- MOSFET-B (Dew) -->
<rect x="210" y="430" width="140" height="100" rx="8" fill="#fce4ec" stroke="#c62828" stroke-width="2"/>
<text x="280" y="457" text-anchor="middle" font-family="Segoe UI, Arial, sans-serif"
font-size="11" font-weight="bold" fill="#b71c1c">IRLZ44N</text>
<text x="280" y="473" text-anchor="middle" font-family="Segoe UI, Arial, sans-serif"
font-size="10" fill="#b71c1c">MOSFET-B (Dew)</text>
<text x="280" y="489" text-anchor="middle" font-family="Segoe UI, Arial, sans-serif"
font-size="9" fill="#777">Gate Drain Source</text>
<circle cx="235" cy="510" r="5" fill="#1565c0"/><text x="235" y="528" text-anchor="middle" font-size="9" fill="#333">Gate</text>
<circle cx="280" cy="510" r="5" fill="#616161"/><text x="280" y="528" text-anchor="middle" font-size="9" fill="#333">Drain</text>
<circle cx="325" cy="510" r="5" fill="#212121"/><text x="325" y="528" text-anchor="middle" font-size="9" fill="#333">Source</text>
<!-- LED Panel -->
<rect x="680" y="270" width="180" height="80" rx="8" fill="#fffde7" stroke="#f9a825" stroke-width="2"/>
<text x="770" y="300" text-anchor="middle" font-family="Segoe UI, Arial, sans-serif"
font-size="12" font-weight="bold" fill="#e65100">LED Panel (12V)</text>
<text x="770" y="318" text-anchor="middle" font-family="Segoe UI, Arial, sans-serif"
font-size="10" fill="#777">White high-CRI strip</text>
<text x="770" y="334" text-anchor="middle" font-family="Segoe UI, Arial, sans-serif"
font-size="10" fill="#777">+ frosted acrylic</text>
<circle cx="710" cy="342" r="5" fill="#c62828"/><text x="710" y="360" text-anchor="middle" font-size="9" fill="#333">LED+</text>
<circle cx="760" cy="342" r="5" fill="#616161"/><text x="760" y="360" text-anchor="middle" font-size="9" fill="#333">LED</text>
<!-- Dew Heater Element -->
<rect x="680" y="420" width="180" height="80" rx="8" fill="#fbe9e7" stroke="#c62828" stroke-width="2"/>
<text x="770" y="450" text-anchor="middle" font-family="Segoe UI, Arial, sans-serif"
font-size="12" font-weight="bold" fill="#b71c1c">Dew Heater</text>
<text x="770" y="468" text-anchor="middle" font-family="Segoe UI, Arial, sans-serif"
font-size="10" fill="#777">Nichrome / heating tape</text>
<text x="770" y="484" text-anchor="middle" font-family="Segoe UI, Arial, sans-serif"
font-size="10" fill="#777">~24Ω 6W @ 12V</text>
<circle cx="710" cy="492" r="5" fill="#c62828"/><text x="710" y="510" text-anchor="middle" font-size="9" fill="#333">H+</text>
<circle cx="760" cy="492" r="5" fill="#616161"/><text x="760" y="510" text-anchor="middle" font-size="9" fill="#333">H</text>
<!-- ═══════════════════════════════════════════════════════════════ WIRES -->
<!-- 12V rail: PSU 12V+ → LM2596 IN+ -->
<line x1="140" y1="140" x2="225" y2="140" stroke="#c62828" stroke-width="2.5" marker-end="url(#a-red)"/>
<!-- GND rail: PSU GND → LM2596 IN -->
<line x1="95" y1="140" x2="100" y2="175" stroke="#212121" stroke-width="2.5"/>
<line x1="100" y1="175" x2="255" y2="175" stroke="#212121" stroke-width="2.5" marker-end="url(#a-black)"/>
<text x="168" y="170" text-anchor="middle" font-family="Segoe UI, Arial, sans-serif" font-size="9" fill="#333">GND bus</text>
<!-- 5V rail: LM2596 OUT+ → ESP32 VIN -->
<line x1="305" y1="140" x2="340" y2="140" stroke="#e65100" stroke-width="2.5"/>
<line x1="340" y1="140" x2="340" y2="315" stroke="#e65100" stroke-width="2.5"/>
<line x1="340" y1="315" x2="370" y2="315" stroke="#e65100" stroke-width="2.5" marker-end="url(#a-orange)"/>
<text x="322" y="230" font-family="Segoe UI, Arial, sans-serif" font-size="9" fill="#e65100"
transform="rotate(-90, 322, 230)">5V</text>
<!-- 5V rail: LM2596 OUT+ → MG995 VCC -->
<line x1="340" y1="330" x2="200" y2="330" stroke="#e65100" stroke-width="2.5"/>
<line x1="200" y1="330" x2="200" y2="360" stroke="#e65100" stroke-width="2.5"/>
<line x1="200" y1="360" x2="150" y2="360" stroke="#e65100" stroke-width="2.5" marker-end="url(#a-orange)"/>
<!-- GND rail: LM2596 OUT → ESP32 GND -->
<line x1="335" y1="175" x2="355" y2="175" stroke="#212121" stroke-width="2.5"/>
<line x1="355" y1="175" x2="355" y2="331" stroke="#212121" stroke-width="2.5"/>
<line x1="355" y1="331" x2="370" y2="331" stroke="#212121" stroke-width="2.5" marker-end="url(#a-black)"/>
<!-- GND rail: → MG995 GND -->
<line x1="355" y1="360" x2="100" y2="360" stroke="#212121" stroke-width="2.5" marker-end="url(#a-black)"/>
<!-- GND rail: → MOSFET-A Source -->
<line x1="325" y1="370" x2="325" y2="390" stroke="#212121" stroke-width="2.5"/>
<line x1="325" y1="390" x2="355" y2="390" stroke="#212121" stroke-width="2.5"/>
<line x1="355" y1="390" x2="355" y2="510" stroke="#212121" stroke-width="2.5"/>
<!-- GND rail: → MOSFET-B Source -->
<line x1="355" y1="510" x2="325" y2="510" stroke="#212121" stroke-width="2.5" marker-end="url(#a-black)"/>
<!-- Servo signal: ESP32 D9 → MG995 Signal -->
<line x1="370" y1="252" x2="200" y2="252" stroke="#f9a825" stroke-width="2" stroke-dasharray="6,3"/>
<line x1="200" y1="252" x2="200" y2="290" stroke="#f9a825" stroke-width="2" stroke-dasharray="6,3"/>
<line x1="200" y1="290" x2="170" y2="290" stroke="#f9a825" stroke-width="2" stroke-dasharray="6,3"/>
<line x1="170" y1="290" x2="170" y2="360" stroke="#f9a825" stroke-width="2" stroke-dasharray="6,3" marker-end="url(#a-yellow)"/>
<text x="220" y="248" font-family="Segoe UI, Arial, sans-serif" font-size="9" fill="#f9a825">D9 servo</text>
<!-- LED PWM: ESP32 D3 → 100Ω → MOSFET-A Gate -->
<!-- Wire from ESP32 D3 terminal -->
<line x1="370" y1="268" x2="248" y2="268" stroke="#1565c0" stroke-width="2"/>
<line x1="248" y1="268" x2="248" y2="290" stroke="#1565c0" stroke-width="2"/>
<!-- 100Ω resistor symbol (small rect) -->
<rect x="237" y="290" width="22" height="10" rx="2" fill="#fff" stroke="#1565c0" stroke-width="1.5"/>
<text x="248" y="299" text-anchor="middle" font-family="Courier New, monospace" font-size="7" fill="#1565c0">100R</text>
<!-- Continue to gate -->
<line x1="248" y1="300" x2="248" y2="370" stroke="#1565c0" stroke-width="2"/>
<line x1="248" y1="370" x2="235" y2="370" stroke="#1565c0" stroke-width="2" marker-end="url(#a-blue)"/>
<!-- 10kΩ pull-down from gate node to GND -->
<line x1="248" y1="340" x2="230" y2="340" stroke="#1565c0" stroke-width="1" stroke-dasharray="3,2"/>
<rect x="218" y="332" width="12" height="16" rx="2" fill="#fff" stroke="#999" stroke-width="1"/>
<text x="224" y="343" text-anchor="middle" font-family="Courier New, monospace" font-size="6" fill="#777">10k</text>
<text x="208" y="298" font-family="Segoe UI, Arial, sans-serif" font-size="9" fill="#1565c0">D3</text>
<!-- Dew PWM: ESP32 D5 → 100Ω → MOSFET-B Gate -->
<line x1="370" y1="284" x2="185" y2="284" stroke="#1565c0" stroke-width="2"/>
<line x1="185" y1="284" x2="185" y2="510" stroke="#1565c0" stroke-width="2"/>
<!-- 100Ω resistor -->
<rect x="174" y="490" width="22" height="10" rx="2" fill="#fff" stroke="#1565c0" stroke-width="1.5"/>
<text x="185" y="499" text-anchor="middle" font-family="Courier New, monospace" font-size="7" fill="#1565c0">100R</text>
<line x1="185" y1="500" x2="185" y2="510" stroke="#1565c0" stroke-width="2"/>
<line x1="185" y1="510" x2="235" y2="510" stroke="#1565c0" stroke-width="2" marker-end="url(#a-blue)"/>
<!-- 10kΩ pull-down -->
<line x1="185" y1="470" x2="165" y2="470" stroke="#1565c0" stroke-width="1" stroke-dasharray="3,2"/>
<rect x="153" y="462" width="12" height="16" rx="2" fill="#fff" stroke="#999" stroke-width="1"/>
<text x="159" y="473" text-anchor="middle" font-family="Courier New, monospace" font-size="6" fill="#777">10k</text>
<text x="196" y="281" font-family="Segoe UI, Arial, sans-serif" font-size="9" fill="#1565c0">D5</text>
<!-- 12V rail: PSU → 12V bus (vertical red rail on right) -->
<line x1="50" y1="140" x2="50" y2="165" stroke="#c62828" stroke-width="2.5"/>
<line x1="50" y1="165" x2="660" y2="165" stroke="#c62828" stroke-width="3"/>
<text x="550" y="160" font-family="Segoe UI, Arial, sans-serif" font-size="10"
font-weight="bold" fill="#c62828">12V rail</text>
<!-- 12V → LED Panel LED+ -->
<line x1="660" y1="165" x2="660" y2="310" stroke="#c62828" stroke-width="2.5"/>
<line x1="660" y1="310" x2="710" y2="310" stroke="#c62828" stroke-width="2.5" marker-end="url(#a-red)"/>
<!-- 12V → Dew Heater H+ -->
<line x1="640" y1="165" x2="640" y2="460" stroke="#c62828" stroke-width="2.5"/>
<line x1="640" y1="460" x2="710" y2="460" stroke="#c62828" stroke-width="2.5" marker-end="url(#a-red)"/>
<!-- MOSFET-A Drain → LED (load output wire) -->
<line x1="280" y1="370" x2="280" y2="410" stroke="#616161" stroke-width="2"/>
<line x1="280" y1="410" x2="620" y2="410" stroke="#616161" stroke-width="2"/>
<line x1="620" y1="410" x2="620" y2="342" stroke="#616161" stroke-width="2"/>
<line x1="620" y1="342" x2="760" y2="342" stroke="#616161" stroke-width="2" marker-end="url(#a-grey)"/>
<text x="430" y="406" font-family="Segoe UI, Arial, sans-serif" font-size="9" fill="#616161">LED (via MOSFET-A drain)</text>
<!-- MOSFET-B Drain → Dew Heater H -->
<line x1="280" y1="510" x2="280" y2="555" stroke="#616161" stroke-width="2"/>
<line x1="280" y1="555" x2="635" y2="555" stroke="#616161" stroke-width="2"/>
<line x1="635" y1="555" x2="635" y2="492" stroke="#616161" stroke-width="2"/>
<line x1="635" y1="492" x2="760" y2="492" stroke="#616161" stroke-width="2" marker-end="url(#a-grey)"/>
<text x="430" y="551" font-family="Segoe UI, Arial, sans-serif" font-size="9" fill="#616161">H (via MOSFET-B drain)</text>
<!-- ═══════════════════════════════════════════════════════════════ LEGEND -->
<rect x="560" y="60" width="200" height="190" rx="8" fill="#f5f5f5" stroke="#bdbdbd" stroke-width="1.5"/>
<text x="660" y="82" text-anchor="middle" font-family="Segoe UI, Arial, sans-serif"
font-size="12" font-weight="bold" fill="#333">Wire Legend</text>
<!-- Red -->
<line x1="578" y1="100" x2="618" y2="100" stroke="#c62828" stroke-width="3"/>
<text x="626" y="104" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#333">12V positive</text>
<!-- Orange -->
<line x1="578" y1="120" x2="618" y2="120" stroke="#e65100" stroke-width="3"/>
<text x="626" y="124" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#333">5V positive</text>
<!-- Black -->
<line x1="578" y1="140" x2="618" y2="140" stroke="#212121" stroke-width="3"/>
<text x="626" y="144" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#333">GND / ground</text>
<!-- Blue solid -->
<line x1="578" y1="160" x2="618" y2="160" stroke="#1565c0" stroke-width="2"/>
<text x="626" y="164" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#333">PWM signal</text>
<!-- Yellow dashed -->
<line x1="578" y1="180" x2="618" y2="180" stroke="#f9a825" stroke-width="2" stroke-dasharray="6,3"/>
<text x="626" y="184" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#333">Servo signal</text>
<!-- Grey -->
<line x1="578" y1="200" x2="618" y2="200" stroke="#616161" stroke-width="2"/>
<text x="626" y="204" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#333">Load output</text>
<!-- Resistor symbol -->
<rect x="578" y="214" width="20" height="10" rx="2" fill="#fff" stroke="#555" stroke-width="1.5"/>
<text x="626" y="224" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#333">Resistor</text>
<!-- ═══════════════════════════════════════════════════════════ NOTES BOX -->
<rect x="560" y="265" width="380" height="140" rx="8" fill="#e3f2fd" stroke="#1565c0" stroke-width="1.5"/>
<text x="570" y="287" font-family="Segoe UI, Arial, sans-serif" font-size="11" font-weight="bold" fill="#0d47a1">
⚠ Build Order
</text>
<text x="570" y="305" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#333">
1. Set LM2596 to 5.0V BEFORE connecting servo or ESP32
</text>
<text x="570" y="321" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#333">
2. Add 10kΩ Gate→GND pull-downs on both MOSFETs
</text>
<text x="570" y="337" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#333">
3. Add 100Ω Gate series resistors on both MOSFETs
</text>
<text x="570" y="353" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#333">
4. Test LED MOSFET with 5V bench supply before 12V
</text>
<text x="570" y="369" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#333">
5. Flash firmware &amp; verify via Serial before full assembly
</text>
<text x="570" y="393" font-family="Segoe UI, Arial, sans-serif" font-size="10" fill="#777">
MOSFET IRLZ44N pinout (flat face towards you): Gate | Drain | Source
</text>
<!-- Footer -->
<text x="480" y="625" text-anchor="middle"
font-family="Segoe UI, Arial, sans-serif" font-size="9" fill="#999">
Not a certified schematic — verify all connections before powering on. v1.1
</text>
</svg>