오늘은 Arduino 기반 퍼즐 금고, Crack the Code Game 프로젝트를 소개합니다. 이 프로젝트는 로터리 엔코더 다이얼을 사용하여 무작위로 생성된 코드를 추측하여 금고를 여는 게임을 제작하는 방법을 안내합니다. 금고 전면에는 8개의 LED가 있어 추측한 숫자가 몇 개나 맞는지, 그리고 얼마나 많은 숫자가 올바른 위치에 있는지 알려줍니다.
![](https://blog.kakaocdn.net/dn/33B4g/btsL7338Tig/LyQFR1JizjuwZftHH5kRpK/img.jpg)
![](https://blog.kakaocdn.net/dn/cYGRXV/btsL7cgqBNB/mE7X2s7aNGUP03FATZ1Rfk/img.jpg)
![](https://blog.kakaocdn.net/dn/cl3cK5/btsL8Y14zjw/VKJQYY36la0Sb5flrh0Qsk/img.jpg)
![](https://blog.kakaocdn.net/dn/LJPfw/btsL7Mn13KK/3X3OPJ3yjwfoYqKWmACZB0/img.jpg)
![](https://blog.kakaocdn.net/dn/lCqN6/btsL8eRSsu6/VhkQ05xrx1slrUzrswa1t0/img.jpg)
금고 작동 방식
- 초기 설정: 처음에는 금고가 열려 있습니다. 이 상태에서 내부 수납 공간에 물건을 넣고 Arduino와 배터리를 뒷면의 별도 수납 공간에 배치합니다.
- 금고 잠그기: 다이얼을 눌러 금고를 잠급니다. 서보가 작동하여 금고 문을 잠급니다.
- 코드 입력: 다이얼을 돌려 숫자를 선택하고, 다이얼을 눌러 각 숫자를 확인하여 코드를 입력합니다. 네 번째 숫자를 입력한 후 금고는 도어의 빨간색과 녹색 LED를 사용하여 몇 개의 숫자가 맞는지, 얼마나 많은 숫자가 올바른 위치에 있는지를 표시합니다.
- LED 표시: 빨간색 LED는 올바른 숫자를, 녹색 LED는 올바른 위치에 있음을 나타냅니다. 모든 LED가 올바른 위치에 있을 때 금고가 열립니다.
- 코드 해독: 금고는 코드를 해독하기 위해 얼마나 많은 추측을 했는지 추적하며, 모든 LED가 올바른 위치에 있는지를 통해 코드를 해독합니다. 초기 추측의 운에 따라 평균적으로 5-10번의 추측으로 코드를 해독할 수 있습니다.
필요한 도구 및 재료
도구:
- 3D 프린터
- 납땜 인두 + 땜납
- 플러시 커터/와이어 커터
- 와이어 스트리퍼
- 드라이버
- 뜨거운 아교 총 (필수 아님)
추가 공급 장치:
- 아두이노 우노 (또는 이와 유사한 것)
- I2C OLED 디스플레이 – AZDelivery 0.96 In OLED 디스플레이 I2C SSD1306 칩 128 x 64 픽셀
- 푸시버튼 엔코더 – AZDelivery KY-040 앵글 로터리 엔코더 모듈
- 4 x 5mm 빨간색 LED
- 4 x 5mm 녹색 LED
- 8 x 220Ω 저항기
- 마이크로 서보 – Miuzei SG 9G 마이크로 서보 모터
- 리본 케이블
- 헤더 스트립
- 전원 스위치
- 3mm MDF 시트
제작 과정
- 부품 준비: 필요한 모든 부품을 준비합니다. 부품들은 레이저로 절단해야 하며, 온라인 레이저 절단 서비스를 이용할 수 있습니다.
- 금고 제작: 금고 본체를 3D 프린터를 사용해 제작하고, 각 부품을 납땜하여 연결합니다.
- 회로 구성: Arduino와 각종 센서, LED, 서보 모터 등을 연결하여 회로를 구성합니다.
- 코딩 및 디버깅: Arduino에 코드를 업로드하고 디버깅을 통해 정상 작동을 확인합니다.
1단계: 상자 조립
![](https://blog.kakaocdn.net/dn/sFIFY/btsL7sDg2YW/wjcfiiWWioNlMXAWaTXpjK/img.jpg)
![](https://blog.kakaocdn.net/dn/bvlN7i/btsL8nadlIQ/ZqSic3K4h9kWaFlo9CrnrK/img.jpg)
![](https://blog.kakaocdn.net/dn/mHw2W/btsL7wFwGLu/ATjW4IpRwGHxk5Iy1TkKCK/img.jpg)
![](https://blog.kakaocdn.net/dn/YzmzY/btsL8nOQfli/5YuhPHtJfgeboblKLqIy50/img.jpg)
![](https://blog.kakaocdn.net/dn/AMGyu/btsL7y4qIFG/PijEdEdgjKhrcHCGul4JRK/img.jpg)
![](https://blog.kakaocdn.net/dn/PHyVU/btsL7z94PPo/iazk3e1Ssbmuk4f6xenihK/img.jpg)
![](https://blog.kakaocdn.net/dn/c8TrCA/btsL7Tganmk/H8rNdAEVsSi96nW95dd9b0/img.jpg)
![](https://blog.kakaocdn.net/dn/cHmGQ6/btsL73whzUj/1EtlUKIfc7e8uXa58x3wk1/img.jpg)
![](https://blog.kakaocdn.net/dn/bVS71w/btsL7sDg2ZI/1YsMvUndb3GW1knaYIEAm1/img.jpg)
![](https://blog.kakaocdn.net/dn/cK06a4/btsL7RbxUfk/VrsMFOMCAZ68AEYKHb8AZ1/img.jpg)
저는 Inkscape에서 3mm MDF로 절단할 수 있도록 금고를 설계했습니다. 원하는 경우 3mm 아크릴 또는 합판에서 부품을 자를 수도 있습니다. 다른 두께의 재료를 사용하는 경우 상자 구성 요소의 슬롯을 조정하여 서로 올바르게 맞도록 해야 합니다.
여기에서 레이저 절단 파일을 다운로드할 수 있습니다.
상자의 외부를 구성하는 6개의 패널이 있으며, 뒷면과 앞면에는 전면 및 후면 도어를 위한 컷아웃이 있습니다. 패널은 추적할 수 있도록 인쇄 파일에 레이블이 지정되어 있습니다.
다이얼은 또한 레이저 절단 조각을 사용하여 만든 다음 함께 붙입니다.
상자의 상단과 양면에 붙어있는 3 개의 장식 패널이 있어 금고처럼 보입니다. 또한 도어를 구성하는 두 개의 패널과 상자 중앙으로 들어가는 칸막이 패널이 있어 안전 구획과 전자 장치 구획을 분리합니다.
조각은 MDF 400 x 500mm의 단일 조각에 맞으며 레이저 절단기가 한 번에 모든 조각을 절단할 만큼 충분히 크지 않은 경우 더 작은 조각으로 나눌 수 있습니다.
나는 장식용 패널을 먼저 상단과 측면에 붙이기 시작했습니다. 어떤 것이 어떤 것인지 알 수 있도록 조각을 올바른 순서로 놓았는지 확인하십시오. 세 가지 다른 조각이 있으며 상단과 하단이 같고 측면이 같고 앞면과 뒷면이 같습니다.
패널이 건조되면 상자를 조립할 수 있습니다.
중앙 칸막이의 컷아웃이 측면에 있는지 확인합니다. 이것은 상자 전면에서 Arduino와 배터리가 있는 상자 후면까지 모든 전선을 연결하기 위한 것입니다.
경첩도 레이저로 절단되어 문을 정렬하면 제자리에 붙습니다. 문과 평행한지 확인하지 않으면 문을 열기 어려울 수 있습니다. 또한 문이 지나갈 때 상자 가장자리에 문지르지 않도록 도어의 안쪽 힌지 가장자리에서 약간 사포질을 해야 할 수도 있습니다.
후면 패널 뒤의 모서리에 네 개의 사각형을 붙여서 후면 덮개의 나사에 구멍을 뚫습니다.
그런 다음 나사 구멍을 뚫고 스크린, Arduino, 후면 덮개 및 마지막으로 인코더 장착을 시작할 수 있습니다.
2단계: 전자 장치 연결
![](https://blog.kakaocdn.net/dn/nsD7N/btsL7jzDKLi/Z2h7qCBJJqI91jZHKD5HaK/img.jpg)
![](https://blog.kakaocdn.net/dn/bhgZ4u/btsL8dyEQdE/atC0uY4qydoSZ6G40K6Sl1/img.jpg)
![](https://blog.kakaocdn.net/dn/mhXmO/btsL8LBVPEA/DBegClZGE73KPzjmB2uy3K/img.jpg)
![](https://blog.kakaocdn.net/dn/I23gB/btsL6K5zVD5/V46nt1WjFsJ20dz0gsJ3Q0/img.jpg)
![](https://blog.kakaocdn.net/dn/kPvry/btsL8JxlXB7/m6iThrkAOYRt9gwGruAEyK/img.jpg)
![](https://blog.kakaocdn.net/dn/G9Bj3/btsL7cUZ4kj/LeTqTFeLiDCGbPi1PsLO10/img.jpg)
Tinkercad Circuits의 브레드 보드에서 회로를 설계하고 나중에 OLED 디스플레이에 추가했습니다.
8개의 LED가 디지털 IO 핀 6에서 13까지 연결되어 있습니다. 잠금 서보는 핀 5에 연결됩니다. 핀 2, 3, 4에 연결된 인코더와 OLED 디스플레이는 Arduino의 I2C 인터페이스에 연결됩니다.
각 LED에 대해 220옴 저항을 사용하고 음극 LED에 직접 납땜한 다음 배선을 깔끔하게 유지하고 각 Arduino 핀으로 이동해야 하는 전선을 추적하는 데 도움이 되도록 컬러 리본 케이블을 사용하여 구성 요소를 함께 연결했습니다.
리본 케이블을 뒷 칸으로 밀어 넣고 리본 케이블에 핀 헤더 스트립을 납땜하여 Arduino에 연결했습니다.
또한 후면 커버에 전원 스위치를 장착하고 이를 배터리 플러그에 연결하여 충전식 배터리에 연결하여 게임에 전원을 공급했습니다. 원하는 경우 9V 배터리를 사용할 수도 있습니다.
마지막으로 잠금 서보를 도어 가장자리 쪽으로 배치하여 상자의 립을 통과하고 암이 립 안쪽을 밀어 상자를 잠글 수 있도록 해야 합니다. 이것은 가장 강력한 잠금 메커니즘은 아니지만 정말 간단하며 게임의 목적에 잘 맞습니다.
3단계: 아두이노 프로그래밍
![](https://blog.kakaocdn.net/dn/bLa3V2/btsL6UtxzYU/9KC3Rk1OkzidLotbJkOkUk/img.jpg)
![](https://blog.kakaocdn.net/dn/KH68M/btsL7MuKFJg/AnkvlJmrWyICoxBx5HTBG1/img.jpg)
나는 코드에 대해 꽤 많은 것이 있기 때문에 평소만큼 자세하게 코드를 살펴보지는 않을 것입니다. 나는이 링크를 통해 코드 다운로드와 함께 찾을 수있는 각 부분을 설명하는 자세한 글을 작성했습니다 - 코드 게임 코드를 깨십시오.
요약하면; OLED 디스플레이와 서보를 제어하기 위해 라이브러리를 가져오는 것으로 시작합니다.
그런 다음 디스플레이에 대한 매개 변수를 설정하고 모든 변수를 만듭니다. 엔코더 회전을 추적하는 데 사용되는 몇 가지 변수가 있는데, 이는 핀 2와 3의 상승 에지 인터럽트를 통해 수행됩니다.
무작위로 생성된 코드를 저장하기 위해 생성된 것과 사용자의 현재 추측값을 저장하기 위해 생성된 코드 배열이 있습니다.
설정 기능에서 디스플레이를 시작하고, 서보를 부착하고, IO 핀 모드를 설정한 다음 디스플레이에 Crack The Code 텍스트 애니메이션을 표시합니다.
루프 기능은 LED를 깜박이고 메시지를 표시하여 잠그고 사용자가 다이얼을 눌러 게임을 시작할 때까지 기다립니다. 게임이 끝날 때 동일한 코드가 실행되어 시도 횟수를 표시하고 다이얼을 눌러 새 게임을 시작할 때까지 기다립니다.
인코더 푸시 버튼에 몇 가지 디바운스 코드가 있으며 누르면 서보가 금고를 잠그고 임의의 코드가 생성됩니다. 그런 다음 코드는 함수를 호출하여 사용자에게 추측값을 입력하도록 요청한 다음 다른 함수를 호출하여 추측을 확인하도록 요청하며, 사용자가 코드를 올바르게 추측할 때까지 이 작업이 반복됩니다.
인코더가 켜지고 표시된 코드를 변경해야 할 때마다 호출되는 코드를 업데이트하는 기능이 있습니다.
새 코드를 생성하는 함수는 코드 배열의 4개 요소 각각에 임의의 숫자를 할당하기만 하면 됩니다.
코드 추측을 입력하는 기능을 사용하면 인코더를 사용하여 숫자를 선택한 다음 인코더를 아래로 눌러 각 숫자 입력을 확인할 수 있습니다.
그런 다음 검사 코드 추측 함수는 추측된 코드를 살펴보고 얼마나 많은 숫자가 올바른지, 얼마나 많은 숫자가 올바른 위치에 있는지 결정합니다.
업데이트 LED 기능은 사용자의 추측에 따라 올바른 수의 빨간색 및 녹색 LED를 켭니다.
startup ani 함수는 시작 시 Crack The Code 애니메이션을 표시합니다.
마지막으로, 두 개의 인터럽트 기능이 엔코더의 입력을 관리하는데, 하나는 시계 방향으로 돌릴 때 위쪽으로 숫자를 증가시키고 다른 하나는 시계 반대 방향으로 돌릴 때 아래쪽으로 증가합니다.
4단계: Crack the Code 게임 플레이
![](https://blog.kakaocdn.net/dn/lwBF2/btsL8lXK350/yQ4c8CZD7LVjvNdFabfUT1/img.jpg)
![](https://blog.kakaocdn.net/dn/AJpjD/btsL7sQQirq/LDOCY3eSwbr5Lm1MDfnKb0/img.jpg)
![](https://blog.kakaocdn.net/dn/oYL98/btsL7rYIvpG/p1jz4bmAxplvI5kKRrAsMk/img.jpg)
![](https://blog.kakaocdn.net/dn/6vb5h/btsL7RJq0XR/0MGIDoKYpJooP4YhXHn3x1/img.jpg)
게임을 하는 방법을 배우는 가장 좋은 방법은 처음에 비디오를 보는 것이며, 게임이 끝날 무렵에 플레이되는 두 가지 예가 있습니다.
금고는 처음에 잠금 해제되어 있어 금고 안에 무언가를 넣을 수 있습니다.
그런 다음 다이얼을 눌러 금고를 잠그고 새 코드를 생성합니다.
추측된 코드는 다이얼을 사용하여 숫자를 증가시키고 다이얼을 눌러 다음 숫자로 이동하거나 4자리 숫자가 모두 선택되면 코드를 확인하는 방식으로 입력됩니다.
그런 다음 전면의 LED가 켜져 우리의 추측에서 무엇이 옳았는지 알려줍니다.
그런 다음 이 피드백을 사용하여 올바른 코드를 추측하고 금고를 다시 열 수 있을 때까지 다음 추측을 합니다. 올바른 코드를 입력하면 안전 잠금 해제와 코드를 해독하는 데 걸린 시도 횟수가 표시됩니다.
마무리
Arduino 기반 퍼즐 금고 프로젝트는 재미있고 도전적인 DIY 프로젝트로, 로터리 엔코더 다이얼을 사용해 금고를 해킹하는 재미를 느낄 수 있습니다. 모든 구성 요소를 준비하고, 금고를 제작해 귀중품을 안전하게 보관하세요.
'아두이노' 카테고리의 다른 글
Arduino Nano V2를 사용한 3D 프린팅 금고 프로젝트 (0) | 2025.02.05 |
---|---|
2단계 인증(2FA) 핸드폰 잠금: 도어락 보안 강화 (0) | 2025.02.03 |
아두이노 7447 디스플레이 공통 양극 (0) | 2025.01.03 |
핸드 트래킹을 활용한 RGB LED 색상 제어 프로젝트 (2) | 2024.12.27 |
VR 몰입감 상승을 위한 혁신적인 핑거 링 V2 프로젝트 (3) | 2024.11.29 |