Dubito che l'interfaccia USB su Uno ti dia un numero seriale univoco. Qualsiasi numero farebbe parte del codice caricato nel chip che sarebbe quindi lo stesso tra più Unos.
Un approccio è il chip DS2401 "Silicon Serial Number" che utilizza l'interfaccia One-wire. Ciò richiederebbe solo un pin libero e un po 'di codice (il codice sarebbe il problema, possibilmente).
Il metodo meno invadente, e probabilmente il più affidabile, sarebbe semplicemente rileggere il codice e verificarlo. Questo è esattamente ciò che faccio con il mio rilevatore di firma chip . Tuttavia, rileva solo (come attualmente scritto) la firma del bootloader. Una modifica abbastanza piccola e potrebbe sommare MD5 all'intero codice di schizzo.
Esempio di output:
Signature detector.
Written by Nick Gammon.
Signature = 1E 95 0F
Fuses
Low = FF High = D6 Ext = FF Lock = CF
Processor = ATmega328P
Flash memory size = 32768
Bootloader in use: Yes
EEPROM preserved through erase: Yes
Watchdog timer always on: No
Bootloader is 512 bytes starting at 7E00
Bootloader:
7E00: 02 01 02 03 0405 06 07 08 09 0A 0B 0C 0D 0E 0F
7E10: 02 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
7E20: 02 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
7E30: 02 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
...
7FB0: 02 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
7FC0: 02 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
7FD0: 02 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
7FE0: 02 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
7FF0: 02 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
MD5 sum of bootloader = 56 72 75 2D 5D B5 0D BA 25 10 DF BE 87 D2 A1 27
Quella somma MD5 (ultima riga) è effettivamente la firma di quel particolare bootloader. In effetti la versione più recente li cerca in una tabella:
MD5 sum of bootloader = FB F4 9B 7B 59 73 7F 65 E8 D0 F8 A5 08 12 E7 9F
Bootloader name: optiboot_atmega328
Quindi quello che potresti fare è, quando carichi uno schizzo, generare una somma MD5 del codice esadecimale. Ci sono modi abbastanza semplici per farlo. Quindi è possibile eseguire un'operazione di "tag git" sul codice sorgente e quindi (utilizzando un processo automatizzato o manuale) ricordare che una particolare somma MD5 di codice esadecimale rappresenta il codice di schizzo in un determinato momento.
Una sorta di database come:
Chip: Uno
MD5 sum: D8 8C 70 6D FE 1F DC 38 82 1E CE AE 23 B2 E6 E7
Sketch: My_robot_sketch_42.ino
Git tag: version666
Ora per individuare l'origine dalla scheda, si stabilisce la somma MD5 del codice (rileggendolo dalla scheda) e quindi si cerca nel database.