# Camera integrata e AI esterna — proposta CAM-01

16 ottobre 2026. L'utente conferma entrambe le funzioni: telecronaca/statistiche e
analisi di disco/tiri. Confermata una **seconda ESP32 dedicata al video**; la prima
continua a gestire il tavolo. La posizione, il supporto e il modulo commerciale
qui sotto sono proposte da rivedere, non componenti già acquistati o collaudati.

## Aggiornamento del 17 ottobre 2026

La proposta approvata [display replay](adr/0003-display-frontale-replay.md) usa Raspberry per mostrare replay a colori con traiettorie. [Anteprima animata](replay-display.html) e nuove varianti STEP10,1″/13,3″ rappresentano camera USB generica e display sul montante. Il modello commerciale della camera non è ancora scelto. Il testo CAM-01 sotto conserva la precedente variante a seconda ESP32, senza attribuirle acquisizione120fps. Nessun componente acquistato o firmware migrato.

## Posizione nel CAD

[Vista 3D e inquadratura](camera-ai.html) · [STEP](STEP/airhockey_camera.step).

- Obiettivo sopra il centro del campo: X=0, Y=0, quota Z=798 mm; piano Z=98 mm.
  Distanza ottica dal piano: **700 mm**.
- Montante sul centro del lato lungo posteriore: X=0, Y=270 mm. Lascia libere le
  estremità X=±450 dei due giocatori e si trova dietro al pannello comandi.
- Tubo quadro di alluminio proposto 20 × 20 × 1,5 mm, lunghezza 840 mm, con
  braccio orizzontale dello stesso tubo lungo 270 mm. Non passa sotto la base.
- Due collari/staffe rimovibili al fianco, con due contropiastre 70 × 26 × 6 mm;
  quattro fissaggi M4 e passaggio cavi da dettagliare nel materiale reale.
  La variante CAD ha i relativi fori nel fianco, esterni alla camera pressurizzata.
- Testata indicativa 64 × 50 × 28 mm; piastra 70 × 55 × 3 mm e due distanziali
  da 7 mm. Alloggia la seconda scheda e il modulo ottico. Involucro trasparente
  nel render per mostrarli, non scelta del materiale finale.
- Sagoma della scheda 50 × 35 mm: **ingombro riservato**, non copia vendor e non
  un pinout. La versione ESP32-S3 con PSRAM e camera compatibile va selezionata.
  Il cavetto interno del sensore resta nella testata; non è prevista una prolunga
  parallela della camera lunga 70 cm.
- Cavi di alimentazione nel montante e nel braccio. Ramo buck separato nel vano
  servizi a X=−120, Y=−118 mm. Seconda ESP32 alimentata a 5V solo se ammesso
  dalla scheda scelta; nessun 12V direttamente alla scheda.

Altezza massima della variante circa **862 mm dal fondo del tavolo**. Ingombro
fisico circa 980 × 535 mm, escluso il campo visivo virtuale. Con il supporto
rimosso si ritorna all'ingombro originario del tavolo. Stabilità, deformazione,
fissaggi e resistenza a urti accidentali del braccio non sono stati calcolati o provati.
Non usare soltanto il bordo superiore sottile come ancoraggio: le contropiastre
servono a distribuire il carico sul fianco, con accesso interno per i dadi.

## Inquadratura calcolata

Ipotesi esplicita: **70° orizzontali effettivi** nell'immagine trasmessa 16:9,
ottica rettilineare, asse verticale, nessuna distorsione e nessun crop ulteriore.
Non è il campo visivo diagonale: i due valori non sono intercambiabili.

`larghezza = 2 × 700 × tan(70° / 2) = 980,3 mm`

`profondità = 980,3 / (16/9) = 551,4 mm`

Rientrano il campo 800 × 400 mm e il cassone 900 × 500 mm. Per il cassone il
margine ideale è circa 40 mm per lato lungo X e 26 mm lungo Y. A parità di altezza
con 60° orizzontali si coprono invece solo circa 808 × 455 mm: il cassone non
rientra, mentre il campo rientra con poco margine. Verificare FOV attivo, distorsione,
orientamento e crop della risoluzione scelta **prima di tagliare i tubi**.
Per 60° servono almeno circa 780 mm di altezza per l'intero cassone, senza margine.

Nel CAD il gruppo `campo_visivo_ipotizzato` contiene soltanto raggi e bordo del
fotogramma ideali. È nascondibile nell'albero. Non è un flusso video né una vista
verificata con una camera reale. Montante e braccio non attraversano i raggi
verso il rettangolo del campo: il primo è oltre Y=200, il secondo sopra l'obiettivo.
Mani e battitori possono comunque coprire il disco durante la partita.

## Ruoli delle due ESP32 e dell'AI

```text
ESP32 tavolo → sensori gol, punteggio, pulsanti, RGB, ventola e suoni
          ↘ eventi con timestamp ↘
                                    PC/server gateway → tracker → AI esterna
          ↗ fotogrammi con timestamp ↗                 ↘ replay/statistiche/commento
ESP32-S3 camera → acquisizione e streaming sulla rete locale
```

Il gateway può coincidere con il PC dell'AI se quest'ultima è in rete locale.
Per un servizio cloud serve un adattatore al suo formato/API: non si presume
che qualunque AI accetti direttamente MJPEG o RTSP. Non sono stati scelti un
fornitore, un abbonamento o un protocollo definitivo, né esposte porte del router.
Le credenziali del servizio restano sul gateway, non nel firmware della camera.
Nessun servizio o streaming è avviato da questa proposta.

- Video: ESP32-S3 con PSRAM e sensore compatibile, JPEG/MJPEG o protocollo
  documentato della scheda; risoluzione e compressione da provare sulla Wi-Fi reale.
- Eventi: la prima scheda trasmette gol/punteggio e comandi al gateway. Rimane
  l'autorità del punteggio; la visione può aggiungere replay e statistiche.
- Tracker sul gateway: corregge la distorsione della lente, calibra il piano dai
  quattro angoli noti del campo, stima posizione del disco, continuità e confidenza.
  Non ricava velocità affidabile dal semplice orario di arrivo dei pacchetti.
- Sincronizzazione: servono identificativo fotogramma e tempo di acquisizione,
  oltre a un riferimento temporale comune o un offset stimato con gli eventi
  della prima ESP32. Latenza e perdita di frame devono essere misurate.
- AI: riceve eventi, statistiche e immagini/sequenze utili per commento e analisi.
  Le traiettorie senza osservazioni sufficienti restano incerte, senza inventare tiri.

## Limite reale sul disco veloce

Espressif riporta, per un proprio esempio ESP32-S3, circa **20 fps a 720p MJPEG**:
è un riscontro, non una prestazione garantita per ogni scheda/sensore/rete.
A 640 pixel orizzontali e nell'inquadratura ideale sopra, il disco Ø44 occupa
circa 29 pixel. È una dimensione utile alla rilevazione, ma non garantisce il tracking.

Esempio di velocità **ipotizzata**, non misurata: 5 m/s.

| Frame effettivi al secondo | Spostamento del disco tra due frame |
|---:|---:|
| 20 | 250 mm |
| 30 | 167 mm |
| 60 | 83 mm |
| 120 | 42 mm |

Tra due immagini possono quindi avvenire rimbalzi e occlusioni. A 5 m/s,
un'esposizione di 1 ms comporta già circa 5 mm di mosso. Il limite non è risolto
aggiungendo potenza all'AI esterna: le osservazioni mancanti non vengono registrate.
La configurazione proposta è adatta come **prototipo per filmato, telecronaca e
tracking da valutare**; non si garantiscono traiettorie complete, velocità precise,
1080p60 o 120fps. Le funzioni avanzate devono mostrare un indice di confidenza.
Se le prove non soddisfano il requisito, lo stesso supporto dovrà poter ospitare
una camera più veloce collegata al gateway; l'ESP32 di streaming potrà essere superata.

Preferire illuminazione bianca stabile e diffusa; le sole strisce RGB animate
possono cambiare il contrasto e introdurre bande a seconda del PWM e dell'esposizione.
La luce aggiuntiva non è ancora dimensionata o inclusa nell'assorbimento. La camera
integrata non usa microfono nel progetto attuale: il commento deriva da immagini/eventi.

## Alimentazione e distinta aggiuntiva

Il circuito EL-01 resta quello del tavolo. Il ramo aggiuntivo proposto è:

```text
+12_BUS dopo F1 → F5 da dimensionare → secondo modulo buck 12→5V
GND comune   ───────────────────────→ GND buck → GND scheda camera
                                    +5V_CAM → ingresso 5V ammesso della scheda
```

Riservare fino a **1 A a 5 V** per scheda camera e transitori finché non si
misura il modulo scelto. Il buck deve sostenerlo realmente nel vano; cavi di
alimentazione proposti 0,5 mm², circa 2 × 1,2 m fino alla testata. Predisporre
100nF e 470µF/10V presso la scheda se compatibili con le indicazioni del modulo.
Questi piccoli passivi non sono modellati singolarmente. Valore di F5, connettori,
polarità USB/5V e misura della corrente restano aperti.

Lo scenario massimo precedente era circa 4,1 A a 12 V; con 1 A a 5 V aggiuntivo
ed efficienza buck assunta 85% diventa circa **4,6 A**. L'alimentatore 12V/5A è
quindi vicino al limite: rivalutare alimentatore (classe 6A come punto di partenza),
presa, cablaggi e fusibile principale in base alle correnti effettive. Non sostituire
semplicemente F1 con un valore maggiore senza verificare ciò che protegge.
Questa estensione non è ancora uno schema esecutivo per un modulo identificato.

La BOM elenca separatamente scheda-camera, supporto, involucro, buck e cablaggi
aggiuntivi. Il totale precedente di 166–241 € riguardava il tavolo senza video;
l'estensione video e gli eventuali costi del gateway/AI sono **extra da quotare**.

## Verifica e fonti

Eseguiti calcolo del campo visivo ideale, controlli su STEP dei solidi, della quota
obiettivo e dei due gruppi elettronici, revisione delle viste 3D. Non eseguiti
streaming, AI, prove ottiche, test di rete, elettrici o strutturali. Il modello
commerciale resta aperto; ricerche step.parts `ESP32 S3 CAM`, `XIAO ESP32S3 Sense`
e `ESP32 camera` senza risultati il 16 ottobre 2026: geometrie indicative.

- [Espressif: interfacce camera e riscontro 720p MJPEG](https://docs.espressif.com/projects/esp-techpedia/en/latest/esp-friends/solution-introduction/camera/dvp-mipi-csi-camera-solution.html).
- [Driver esp32-camera: memoria PSRAM e requisiti](https://github.com/espressif/esp32-camera).
- [Seeed XIAO ESP32-S3: esempio di scheda con camera, non selezione d'acquisto](https://wiki.seeedstudio.com/xiao_esp32s3_getting_started/).
- [Waveshare ESP32-S3-CAM: esempio di famiglia, non selezione d'acquisto](https://docs.waveshare.com/ESP32-S3-CAM-OVxxxx).


## Aggiornamento BR-02, 17 ottobre2026

Cassone900×500 invariato, porte smontabili: ingombro montato980×505, variante
camera980×535 circa. Il campo800×400 resta ripreso nel modello ideale;
la copertura980,3×551,4 a700 lascia solo0,15mm nominali per estremità sulle
porte esterne. Non garantisce l’inquadratura completa dei moduli con la lente
reale: misurare crop/distorsione e regolare ottica o altezza se necessaria.
