Duvido que a interface USB no Uno ofereça um número de série único. Qualquer número faria parte do código carregado no chip, o que seria, portanto, o mesmo entre vários Unos.
Uma abordagem é o chip DS2401 "Silicon Serial Number", que usa a interface One-wire. Isso exigiria apenas um pino gratuito e algum código (o código seria o problema, possivelmente).
O método menos invasivo, e provavelmente o mais confiável, seria simplesmente ler novamente o código e fazer uma verificação sumária. É exatamente isso que faço com meu detector de assinatura de chip . No entanto, isso apenas detecta (como atualmente está escrito) a assinatura do carregador de inicialização. Uma alteração bastante pequena e poderia somar MD5 todo o código de esboço.
Exemplo de saída:
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
Essa soma MD5 (última linha) é efetivamente a assinatura desse carregador de inicialização específico. De fato, a versão mais recente as procura em uma tabela:
MD5 sum of bootloader = FB F4 9B 7B 59 73 7F 65 E8 D0 F8 A5 08 12 E7 9F
Bootloader name: optiboot_atmega328
Então, o que você pode fazer é, ao fazer upload de um esboço, gerar uma soma MD5 do código hexadecimal. Existem maneiras bastante simples de fazer isso. Depois, você pode fazer uma operação "tag git" no seu código-fonte e, em seguida (usando algum processo automatizado ou manual), lembrar que uma soma MD5 específica de código hexadecimal representa o código do esboço em um determinado momento.
Algum tipo de banco de dados 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
Agora, para localizar a fonte do quadro, você estabelece a soma MD5 do código (lendo-o novamente no quadro) e, em seguida, procura no seu banco de dados.