Dudo que la interfaz USB en el Uno te dé un número de serie único. Cualquier número sería parte del código cargado en el chip, por lo que sería el mismo entre múltiples Unos.
Un enfoque es el chip DS2401 "Número de serie de silicio" que utiliza la interfaz de un cable. Eso solo requeriría un pin libre y algo de código (el código podría ser el problema, posiblemente).
El método menos intrusivo, y probablemente el más confiable, sería simplemente volver a leer el código y verificarlo. Eso es exactamente lo que hago con mi detector de firma de chip . Sin embargo, eso solo detecta (como está escrito actualmente) la firma del gestor de arranque. Un cambio bastante menor y podría sumar MD5 todo el código del boceto.
Salida de ejemplo:
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
Esa suma MD5 (última línea) es efectivamente la firma de ese gestor de arranque en particular. De hecho, la versión más reciente los busca en una tabla:
MD5 sum of bootloader = FB F4 9B 7B 59 73 7F 65 E8 D0 F8 A5 08 12 E7 9F
Bootloader name: optiboot_atmega328
Entonces, lo que podría hacer es, al cargar un boceto, generar una suma MD5 del código hexadecimal. Hay formas bastante simples de hacerlo. Luego, podría hacer una operación de "etiqueta git" en su código fuente, y luego (usando algún proceso automático o manual) recuerde que una suma MD5 particular de código hexadecimal representa el código de boceto en un momento particular.
Algún tipo de base de datos como:
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
Ahora para ubicar la fuente desde el tablero, establezca la suma MD5 del código (leyéndola desde el tablero) y luego búsquela en su base de datos.