Sistema de fechadura eletrônica com randomização automática de dígitos para prevenir a visualização da senha por terceiros. Desenvolvido com a BitDogLab (Raspberry Pi Pico W) como projeto final para a capacitação do programa Embarcatech.
- Posições dos dígitos se randomizam automaticamente para prevenir bisbilhotagem
- Display com 4 linhas e 3 dígitos por linha
- Navegação intuitiva utilizando joystick
- Feedback visual através de display OLED e LEDs indicadores
- Feedback sonoro com melodias diferentes para sucesso/falha
- Suporte para senha de 6 dígitos
- Interface I2C para display OLED
- Entrada segura de senha através da seleção de linhas ao invés de dígitos diretos
- Raspberry Pi Pico W
- Display OLED SSD1306 (128x64 pixels, I2C)
- Joystick Analógico
- 2x LEDs (Verde e Vermelho) (ou um LED RGB)
- Botão
- Buzzer Piezoelétrico
- Placa de Desenvolvimento BitDogLab (Opcional, contém todos acima)
| Função | Pino | Tipo | Descrição |
|---|---|---|---|
| Display SDA | GPIO 14 | I2C | Linha de dados do display OLED |
| Display SCL | GPIO 15 | I2C | Linha de clock do display OLED |
| Joystick X | GPIO 26 | ADC | Entrada analógica eixo X |
| Joystick Y | GPIO 27 | ADC | Entrada analógica eixo Y (não utilizado) |
| Botão | GPIO 6 | Entrada | Botão de seleção com interrupção |
| LED Verde | GPIO 11 | PWM | Indicador de sucesso |
| LED Vermelho | GPIO 13 | PWM | Indicador de falha |
| Buzzer | GPIO 21 | PWM | Feedback sonoro |
se você quiser apenas rodar o projeto na BitDogLab (ou na Pico W com as conexões indicadas) basta trasnferir o arquivo .uf2 na pasta build para a placa no modo bootloader
- Clone o repositório:
git clone https://github.com/rockethm/self-randomizing-keypad.git
cd self-randomizing-keypad- Adicione a extensão da Raspberry Pi Pico no VSCode
- Importe o projeto pela extensão, selecionando a Pico W e habilitando a extensão CMakeTools
- Selecione o Kit Pico na extensão CMakeTools
- Compile o projeto
- Conecte seu Raspberry Pi Pico W em modo bootloader e copie o arquivo
.uf2gerado para ele.
- O sistema exibe 4 linhas com 3 dígitos aleatórios em cada
- Use o joystick para mover para cima/baixo entre as linhas
- Pressione o botão para selecionar a linha que contém o dígito desejado da sua senha
- Um asterisco (*) aparece para cada dígito inserido
- Após inserir todos os 6 dígitos:
- Senha correta: LED Verde + melodia de sucesso
- Senha incorreta: LED Vermelho + melodia de falha
- O sistema reinicia automaticamente e randomiza os dígitos para a próxima tentativa
self-randomizing-keypad/
├── src/
│ ├── self-randomizing-keypad.c
│ └── ssd1306/
├── include/
│ └── ssd1306/
├── validation/
│ ├── matrix_generator.c
│ └── matrix_validator.c
├── CMakeLists.txt
└── README.md
- Dígitos são randomizados a cada uso
- Múltiplos dígitos por linha previnem observação direta
- Seleção por linha ao invés de dígito adiciona uma camada extra de ofuscação
- Dois números duplicados por matriz aumentam a dificuldade de adivinhação
- Nenhum dígito se repete na mesma linha
Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.
- Equipes Embarcatech e HBR pela capacitação
- BitDogLab pela placa de desenvolvimento e suporte
- Raspberry Pi Foundation pela excelente documentação do RP2040
Andre de Oliveira Melo
