

안녕하세요, 여러분. 오늘은 ESP32-C3 슈퍼 미니 마이크로컨트롤러와 고전적인 CD4017 CMOS 10진 카운터를 결합하여 “디지털 룰렛 휠”을 만든 방법을 소개해 드리겠습니다.
버튼을 누르면 ESP32가 CD4017 IC에 “클럭 펄스”를 전송하여 LED가 순환하도록 합니다. 버튼을 놓으면 실제와 같은 감속 효과가 나타나며, 무작위 결과에 멈춘 후 시리얼 모니터나 Wi-Fi를 통해 최종 위치를 보고합니다.
이 기사를 읽으면 이 LED 룰렛 회로와 모든 구성 요소를 제작하는 방법에 대한 자세한 단계별 지침을 확인하고, 회로가 어떻게 작동하는지 알 수 있습니다.
제 말을 믿으세요. 이 프로젝트에는 하드웨어 설계, 아두이노 코딩, PHP, 데이터베이스, 3D 설계 및 프린팅 등 정말 다양한 요소가 포함되어 있습니다.
동영상: https://youtu.be/5jVFR7KSNmg

이 프로젝트에는 다음이 필요합니다:
ESP32-C3 Super Mini Plus 마이크로컨트롤러 1개: https://s.click.aliexpress.com/e/_c2zUTvyj
CD4017 CMOS 10진 카운터 2개: https://s.click.aliexpress.com/e/_c33qzzRt
2N2222 NPN 트랜지스터 2개: https://s.click.aliexpress.com/e/_c4OwNvnZ
220Ω 저항 3개: https://s.click.aliexpress.com/e/_c41SucJd
10kΩ 저항 1개: https://s.click.aliexpress.com/e/_c41SucJd
푸시 버튼 스위치 1개: https://s.click.aliexpress.com/e/_c3cfuN6J
SPDT 스위치 1개: https://s.click.aliexpress.com/e/_c4FRHRaX
5mm 적색 LED 18개: https://s.click.aliexpress.com/e/_c2RpNzh9
5mm 녹색 LED 2개: https://s.click.aliexpress.com/e/_c2RpNzh9
3mm 파란색 LED 1개: https://s.click.aliexpress.com/e/_c306Pzbh
10mfd 커패시터 1개 (선택 사항)
1 x LiPo 배터리: https://s.click.aliexpress.com/e/_c4okFfef
배터리 충전 모듈 1개 (선택 사항): https://s.click.aliexpress.com/e/_c3EJLcZh
1 x 배터리 잔량 표시기: https://s.click.aliexpress.com/e/_c4KGEDh5
그리고 케이스를 출력할 3D 프린터


이 프로젝트의 배선은 정말 간단합니다!
* ESP32의 8번 핀을 IC#1의 리셋 핀(15번 핀)에 연결합니다.
* ESP32의 10번 핀을 IC#1의 클럭 핀(14번 핀)에 연결합니다.
* ESP32의 9번 핀을 풀업 저항을 통해 푸시 버튼 스위치에 연결합니다.
* ESP32의 핀 0을 전류 제한 저항을 통해 Wi-Fi 표시 LED에 연결하세요.
나머지 배선 방법은 화면에 표시된 회로도를 확인해 주세요.
더 쉽게 작업하실 수 있도록 맞춤형 PCB를 설계해 두었습니다.


저는 원래 555 타이머 IC와 CD4017 CMOS 데케이드 카운터 몇 개를 사용하여 이 LED 룰렛 프로젝트를 제작했습니다. 555 타이머는 클럭 발진기 역할을 하여 4017 데케이드 카운터를 구동하는 신호를 생성합니다. IC555의 PIN-3 출력은 IC4017의 PIN-14로 입력됩니다. IC4017은 펄스를 수신할 때마다 카운트를 증가시키고 다음 출력 핀(Q0~Q9)을 활성화하여 LED가 차례로 점등되는 효과를 만들어냅니다.
IC에 대해 더 자세히 알고 싶으시면 아래 설명란에 링크가 있는 제 26번 튜토리얼 “555 펄스 발생기 모듈, 작동 원리”를 확인해 주세요.
이 초기 설계의 가장 큰 단점은 카운팅을 수동으로 처리해야 한다는 점이었습니다. 저는 숫자가 자동으로 합산되고 시스템 자체에서 승자를 결정하는 시스템을 원했습니다. 제 목표는 도박용 룰렛을 만드는 것이 아니라, 아들과 함께 즐겁게 플레이할 수 있는 간단한 룰렛 게임을 만드는 것입니다.
이를 달성하기 위해 ESP32-C3 슈퍼 미니가 완벽한 선택으로 드러났습니다. 이 보드는 크기가 작고 Wi-Fi 기능이 내장되어 있습니다.
그래서 555 타이머 IC를 사용하는 대신, ESP32-C3 보드를 활용해 CD4017 IC 중 하나에 “클럭 펄스”를 생성하도록 했습니다. 버튼을 누르면 펄스 속도가 점점 빨라집니다. 빛이 원을 따라 빠르게 돌며 “회전”하는 듯한 느낌을 줍니다. 버튼을 놓아도 회전은 즉시 멈추지 않습니다. 대신 펄스 간격이 점차 길어지면서 빛의 속도가 서서히 느려지는데, 마치 실제 바퀴가 관성으로 서서히 멈추는 것과 같습니다.
속도가 충분히 느려지면 완전히 멈추고, 시리얼 모니터나 Wi-Fi를 통해 최종 LED 위치를 보고합니다. 그 결과는 MySQL 데이터베이스에 저장된 후 PHP를 사용하여 시각화됩니다.





이제 이 쇼 전체를 뒷받침하는 논리를 살펴보겠습니다.
앞서 언급했듯이 이 시스템은 아두이노 코드, PHP, MySQL 데이터베이스 등 다양한 구성 요소에 의존하고 있습니다. 제 GitHub 저장소에는 서버가 포함된 버전과 포함되지 않은 버전, 두 가지 버전의 코드가 있습니다. 결과를 서버에 저장할 필요가 없다면, "Code_No_Wi-Fi" 파일을 ESP32 보드에 업로드하기만 하면 됩니다.
하지만 이 튜토리얼에서는 설정의 모든 기능을 시연해 보겠습니다.
이제 코드를 하나씩 살펴보겠습니다.
아두이노 코드에서는 네트워크의 SSID와 비밀번호를 입력해야 하며, PHP 파일이 저장될 디렉터리에 맞춰 서버 IP와 URL을 설정해야 합니다.
기존 기능에 새로운 기능을 추가하려는 경우가 아니라면 코드의 다른 부분은 수정할 필요가 없습니다.
룰렛의 전원을 켜면 ESP32가 먼저 Wi-Fi를 통해 서버에 연결을 시도합니다. 연결이 설정되면 플레이어들은 게임을 시작할 수 있습니다. 버튼을 누르면 지연 시간이 줄어들어 LED 시퀀스의 속도가 빨라지고, 버튼을 놓으면 지연 시간이 늘어 속도가 느려집니다. 이 과정은 시퀀스가 완전히 멈추기 전까지 지속되며, 자연스러운 자유 회전 효과를 만들어냅니다.
LED 휠이 멈추면 ESP32-C3는 당첨 위치를 원격 서버로 전송합니다. 이 과정은 플레이어가 게임을 계속하는 동안 지속됩니다.
-
코드와 함께, MySQL 서버로 가져와야 하는 "MySQL_DB.sql" 파일도 포함했습니다.
이를 위해 phpMyAdmin을 열고, “Import” 탭으로 이동한 후 “Choose File” 버튼을 클릭하여 “MySQL_DB.sql” 파일을 선택하세요. 그런 다음 “Go” 버튼을 클릭하여 테이블을 가져옵니다. 가져오기가 성공적으로 완료되었는지 확인하려면 테이블 이름을 클릭하여 테이블 구조가 올바르게 표시되는지 확인하세요.
-
웹 서버를 설정하려면 제 GitHub 저장소에서 다운로드한 PHP 파일을 약간 수정해야 합니다. "Connection.php" 파일을 열고, 파일 내의 호스트 이름, 사용자 이름, 비밀번호 및 데이터베이스 이름을 업데이트하세요. 그런 다음 파일을 웹 서버의 디렉터리로 드래그 앤 드롭하세요.
모든 것이 정상적으로 작동하는지 확인하려면 웹 브라우저에서 "Player_Results_Display.php" 파일을 열고 순위표가 올바르게 표시되는지 확인하세요.

이제 하드웨어 로직이 준비되고 서버 설정도 완료되었으니, 브레드보드에서 간단한 테스트를 수행하여 시스템의 작동 여부를 확인할 수 있습니다.
이제 버튼을 눌러 시리얼 모니터에 버튼 누름이 기록되는지 확인해 봅시다. 보시다시피 시리얼 모니터에 HTTP 200 코드가 표시되어 서버와의 통신이 성공적으로 이루어졌음을 나타냅니다. 리더보드 페이지에서 서버가 버튼 누름을 기록했음을 확인할 수 있습니다. 웹 페이지는 5초마다 자동으로 새로 고침되어 두 플레이어의 최신 점수를 실시간으로 표시합니다.
이 페이지에는 “플레이어 1”과 “플레이어 2”의 점수표가 나란히 표시되어 있으며, 각 플레이어의 실시간 점수, 승수, 패수, 무승부 횟수, 총 경기 횟수를 확인할 수 있습니다.
"New Game" 버튼을 클릭하면 페이지가 초기화되며, 시스템은 현재 점수에 따라 플레이어의 승, 패, 무승부 횟수를 업데이트합니다.





Microsoft 3D Builder를 사용하여 이 프로젝트의 3D 모델을 설계했습니다.
이 디자인은 세 부분으로 구성되어 있습니다:
- 모든 LED가 장착된 상단부,
- 모든 전자 부품을 포함하는 하단부, 그리고
- 파란색 Wi-Fi 표시 LED, 배터리 충전 모듈, SPDT 온/오프 스위치가 들어 있는 작은 블록으로, 여기에 안테나 케이블과 푸시 버튼 스위치를 위한 구멍도 있습니다.
Bambu Studio에서 모델을 슬라이싱한 후, 새로 구입한 Bambu A1 3D 프린터로 출력했습니다.
마지막으로 아크릴 물감을 사용하여 프로젝트 본체에 색을 칠했습니다. 금색 마감 처리가 프린트물의 외관을 한층 더 돋보이게 했습니다. 페인트가 마른 후, 상단 부분에 모든 LED를 장착하고 음극 다리를 “10개씩 짝을 지어” 납땜했습니다.







자, 이제 모든 전자 부품을 조립해 보겠습니다. 먼저, 제작된 PCB의 품질을 잠시 확인해 보세요. 저는 PCBWay를 거의 6년 동안 사용해 왔는데, 그들이 제공하는 최종 제품에 정말 만족하고 있습니다.
먼저 모든 저항을 기판에 납땜한 다음, 트랜지스터를 차례로 납땜해 봅시다.
저는 IC와 마이크로컨트롤러를 특히 조심스럽게 다루기 때문에, 절대 기판에 직접 납땜하지 않습니다. IC의 경우 항상 IC 소켓을 사용하며, 소켓이 없을 때는 암형 핀 헤더를 사용합니다. 이렇게 하면 직접 납땜을 피할 수 있고, 부품 교체도 쉬워집니다. 하나씩 차례로 모든 부품을 PCB에 납땜했습니다.
보드에 전원을 공급하려면 충전 모듈과 몇 가지 추가 부품을 장착해야 합니다. 먼저 SPDT 스위치를 설치한 다음, 파란색 Wi-Fi 표시 LED를 장착했습니다. 그런 다음 세계에서 가장 작은 배터리 충전 모듈을 블록에 슈퍼글루로 붙이고, 이 작은 흰색 블록을 이용해 고정했습니다. 마지막으로 화면의 회로도에 따라 충전 표시등을 슈퍼글루로 고정했습니다.
남은 두 개의 구멍에는 안테나와 푸시 버튼 스위치를 장착했습니다. 마지막으로 모든 부품이 제자리에 고정되자, 플라스틱 블록을 베이스 하단의 홈에 접착했습니다.
LED에 연결될 모든 전선을 납땜을 마친 후 보드의 모습입니다. LED 1번부터 10번까지는 공통 GND2를, LED 11번부터 20번까지는 공통 GND1을 사용하십시오.
LED를 기판에 납땜할 때는, 실제 LED 번호와 코드가 서버로 전송하는 번호가 일치하지 않는 상황을 방지하기 위해 반드시 올바른 순서대로 납땜해야 합니다. 올바른 순서는 화면의 지침을 따르세요. 실수로 LED를 잘못 납땜한 경우, 아두이노 코드의 배열을 수정하여 변경 사항을 반영할 수 있습니다.
제 설정에서는 3.7V 충전식 배터리로 모든 부품에 전원을 공급하고 있습니다. 하지만 원하신다면, 보드의 +5V 및 -VE 단자에 220V-5V 강압 변환기나 USB 케이블을 납땜하여 연결할 수도 있습니다.
모든 부품이 제자리에 배치되면, 남은 작업은 하단 부품을 상단 부품에 접착제로 붙이는 것뿐입니다. 그게 전부입니다. 정말 간단하죠.



하드웨어 준비가 끝났으니, 이제 재미를 즐겨볼 시간입니다! 기기의 전원을 켜고 파란색 LED가 켜질 때까지 기다리세요. LED가 켜지면 서버와의 Wi-Fi 연결이 성공적으로 이루어진 것입니다. 푸시 버튼을 눌러 LED 체이스 효과를 시작하세요. 같은 네트워크에 연결된 모든 기기(PC 또는 모바일)에서 점수를 확인할 수 있습니다.
요약하자면, 이 설정은 움직임에 ‘운동량’을 더함으로써 단순한 버튼과 LED 시스템이 실감 나는 게임으로 변신하게 합니다.

제 게시물을 확인해 주셔서 다시 한번 감사드립니다. 도움이 되셨으면 좋겠습니다.
저를 응원해 주시고 싶으시다면 제 유튜브 채널을 구독해 주세요: https://www.youtube.com/user/tarantula3
영상: https://youtu.be/5jVFR7KSNmg
블로그 1: https://diyfactory007.blogspot.com/2026/05/Roulette.html
블로그 2: https://diy-projects4u.blogspot.com/2026/07/Roulette.html
참고 자료
GitHub: https://github.com/tarantula3/ESP32_Roulette
Gerber: 다운로드
STL: https://github.com/tarantula3/ESP32_Roulette
DIY 555 펄스 발생기 모듈: https://youtu.be/bMAnipPOjFo
제 활동을 후원해 주세요
BTC: 1Hrr83W2zu2hmDcmYqZMhgPQ71oLj5b7v5
LTC: LPh69qxUqaHKYuFPJVJsNQjpBHWK7hZ9TZ
DOGE: DEU2Wz3TK95119HMNZv2kpU7PkWbGNs9K3
ETH: 0xD64fb51C74E0206cB6702aB922C765c68B97dCD4
BAT: 0x9D9E77cA360b53cD89cc01dC37A5314C0113FFc3
BNB: 0xD64fb51C74E0206cB6702aB922C765c68B97dCD4
POL: 0xD64fb51C74E0206cB6702aB922C765c68B97dCD4
LBC: bZ8ANEJFsd2MNFfpoxBhtFNPboh7PmD7M2
COS: bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23 메모: 572187879
감사합니다. 다음 튜토리얼에서 또 뵙겠습니다.
원문: https://www.instructables.com/DIY-LED-Roulette-Wheel-ESP32-C3-Project/