ESP32 Combat - Ctrl Alt Hack _□×
 admin@ctrlalthack: ~/elettronica

ESP32 Combat

ESP32 Combat Unit – Dal caos allo 0 errori: KiCad, Freerouting e tutto quello che è andato storto

Elettronica · 04/11/2026

Disegnare lo schema è stata la parte facile. Il bello è arrivato quando ho provato a trasformarlo in un PCB vero, da mandare in produzione senza sorprese.

In questo articolo vi racconto il percorso completo: gli errori nascosti nello schema, il primo sbroglio automatico con Freerouting, i 14 errori del DRC e il trucco della netclass che mi ha fatto perdere mezz'ora. Alla fine il risultato è una scheda con il 100% delle piste collegate, 0 errori e parità con lo schema verificata.

1. Lo schema sembrava perfetto. Non lo era

Prima ancora di toccare il PCB, una revisione attenta dello schema ha tirato fuori quattro problemi. Nessuno avrebbe bruciato qualcosa, ma un paio avrebbero reso il radiocomando inutilizzabile.

Lo schema completo del radiocomando, nella versione finale.
Lo schema completo del radiocomando, nella versione finale.

L'etichetta "GND" che non era massa

Gli interruttori J7 e J8 chiudono i pin D18 e D19 verso massa. Peccato che sul pin 2 avessi messo un'etichetta di rete chiamata "GND", non il simbolo di alimentazione GND. In KiCad sono due cose diverse: l'etichetta locale crea una rete tutta sua. Risultato possibile: interruttori collegati al nulla, e firmware che legge sempre "alto".

Dettaglio dell'errore
Dettaglio dell'errore

Il trucco per accorgersene: la scritta nera è un'etichetta, quella blu-verde col triangolino è il simbolo vero.

Il partitore della batteria fuori scala

Per leggere la tensione della 2S uso un partitore verso il pin GPIO39. Con 20k e 10k, a batteria carica (8,4 V) sul pin arrivavano 2,8 V. Sotto i 3,3 V, quindi sicuro, ma l'ADC dell'ESP32 è lineare solo fino a circa 2,45 V: sopra la lettura si appiattisce. Portando R1 a 33k arrivo a 1,95 V a piena carica, dentro la zona precisa.

Nota per il firmware: il fattore di conversione passa da 3,0 a 4,3, cioè (33 + 10) / 10.

Il LED RGB mezzo spento

Rosso, verde e blu non si accendono alla stessa tensione: circa 2,0 V il rosso, circa 3,0 V verde e blu. Con 3,3 V dal GPIO e 220 Ω su tutti, il rosso prendeva circa 6 mA e gli altri poco più di 1 mA. Ho abbassato R4 e R5 a 100 Ω per bilanciare i colori.

Simboli uno sopra l'altro

Su diversi connettori il triangolo GND finiva sopra il pin accanto. Elettricamente era tutto giusto, ma a colpo d'occhio sembrava un cortocircuito. Li ho distanziati: uno schema che si legge male è uno schema dove prima o poi sbagli.

2. Primo giro di Freerouting: tutto collegato, ma…

KiCad non ha un autorouter integrato, nemmeno nella versione 10. La soluzione è Freerouting, gratuito e open source, che si installa come plugin in un minuto:

  1. Strumenti → Gestore plugin e contenuti (Ctrl+M), cerco "Freerouting" e premo Installa.
  2. Serve Java installato (io ho usato il JRE 21 Eclipse Temurin).
  3. Nell'Editor PCB: Strumenti → Plugin esterni → Freerouting. Lui esporta la scheda, la sbroglia e la reimporta da solo.

Il primo risultato sembrava già una scheda finita.

image
image

Guardandolo con calma, però, i problemi c'erano eccome:

  • Il PCB non era aggiornato. La serigrafia diceva ancora R1 = 20k e R4/R5 = 220. Avevo corretto lo schema ma non avevo premuto F8 (Aggiorna PCB da schema).
  • Piste sotto l'antenna. Il modulo ESP32 sporge giustamente dal bordo, ma tra il bordo e il pin 3V3 passavano due piste. Il rame sotto l'antenna riduce la portata: su un radiocomando è l'ultima cosa che vuoi.
  • Piste della batteria sottili. BAT+ e VBAT, che portano tutta la corrente, erano tracciate a 0,25 mm come un segnale qualsiasi.
  • C4 e C5 lontani dall'ESP32. I condensatori del 3,3 V erano a 3–4 cm dal pin che dovrebbero filtrare.
Le piste che passano sotto l'antenna dell'ESP32
Le piste che passano sotto l'antenna dell'ESP32

La lezione: Freerouting collega i punti, ma non sa nulla di antenne, correnti o condensatori. Quelle regole gliele devi dare tu.

3. Netclass: insegnare a Freerouting quali piste fare larghe

Freerouting traccia le piste con la larghezza che trova nelle netclass di KiCad. Quindi, invece di allargarle a mano dopo, gliele faccio tracciare larghe da subito. Si fa da File → Impostazioni scheda → Regole di progettazione → Netclass.

| Netclass | Larghezza pista | Reti | | --- | --- | --- | | Power | 1 mm | /BAT+, /VBAT, /5V\_DCDC | | Supply3V3 | 0,5 mm | +3V3, +5V, GND | | Default | 0,3 mm | tutto il resto |

GND e +5V li ho tenuti a 0,5 mm di proposito: a 1 mm Freerouting fa fatica a infilarsi tra i pin ravvicinati dell'ESP32 e dei connettori.

Il trucco della barra che mi ha fatto perdere mezz'ora

Nella prima versione avevo scritto i nomi delle reti così come li vedevo nello schema: BAT+, VBAT, 5V_DCDC. Il riquadro a destra, "Collegamenti corrispondenti", restava vuoto: la regola non trovava nessuna rete.

Il motivo
Il motivo "BAT+" non trova nessuna rete

Il motivo: in KiCad le reti create con un'etichetta si chiamano con la barra davanti, quindi /BAT+. Quelle create da un simbolo di alimentazione (GND, +5V, +3V3) invece no. Aggiunta la barra, il riquadro mostra subito la rete giusta.

Con
Con "/BAT+" la rete viene trovata

Il consiglio: dopo ogni riga, clicca sul motivo e guarda se a destra compare qualcosa. Se è vuoto, la regola non sta facendo niente.

4. Secondo giro: 100% sbrogliato in meno di 4 secondi

Con schema corretto, impronte nuove e netclass a posto, ho ripreso da zero:

  1. F8 per portare sul PCB valori e impronte nuove.
  2. Modifica → Cancellazione globale, spuntando solo Piste e Via, per far ripartire Freerouting senza le piste vecchie.
  3. Strumenti → Plugin esterni → Freerouting.

Il riepilogo parla da solo: 44 reti, 0 connessioni incomplete, 0 violazioni di distanziamento, solo 6 via e un punteggio di 1000 su 1000.

DRC finale con parità schema a 0
DRC finale con parità schema a 0

E questa è la scheda che ne è uscita. Le piste dell'alimentazione ora sono larghe, Q1 e D1 hanno le impronte nuove e la serigrafia riporta i valori giusti.

image
image

Un'avvertenza onesta: in questo screenshot si vede ancora una pista blu sotto l'antenna, lungo il bordo superiore. Per evitarla, prima di lanciare Freerouting va disegnata un'area vietata sotto l'antenna (Piazza → Aggiungi area con regole, F.Cu e B.Cu, tutte le voci "Vieta" attive). Il DRC non la segnala, quindi va controllata a occhio.

6. Il DRC finale: 0 errori, 0 non connessi, parità verificata

Ultimo controllo, questa volta con l'opzione "Controlla la parità tra C.S. e schema elettrico" attiva. Serve a verificare che PCB e schema dicano esattamente la stessa cosa: stessi componenti, stessi valori, stesse connessioni.

Restano un avvisi:

  • Serigrafia di U1 tagliata dal bordo: il contorno del modulo ESP32 esce dalla scheda, ed è voluto, perché l'antenna deve sporgere.

Ecco la lista componenti definitiva, aggiornata con tutte le modifiche di questo articolo.

lista dei componenti
lista dei componenti
lista dei componenti
lista dei componenti
lista dei componenti
lista dei componenti

Questa è la checklist che userò dal prossimo progetto:

  1. F8 dopo ogni modifica allo schema, sempre.
  2. Netclass prima del routing, con la "/" davanti alle reti delle etichette.
  3. Area vietata sotto l'antenna prima di lanciare Freerouting.
  4. Piste vecchie cancellate prima di rilanciare Freerouting.
  5. DRC con parità schema come ultimo passo prima dei Gerber.

Nel prossimo articolo: Gerber, ordine su PCBWay e montaggio della scheda. Stay tuned!

● In breve

Questo progetto è correlato alla costruzione del robot da combattimento, essendo prgrammabile è possibile personalizzarlo a piacere