문제
출결 기록을 사람 손에서 떼어 내려던 시스템
고객은 여러 사람이 드나드는 현장의 출결을 자동으로 남기고 싶어 했습니다. 출석부나 카드 태그처럼 사람이 챙겨야 하는 절차를 줄이려는 목적이었습니다.
출결을 손으로 남기면 담당자가 명단을 부르거나 출석부를 걷어야 합니다. 출석하는 사람이 태그를 잊으면 기록이 빠지고, 담당자가 나중에 따로 고칩니다.
시스템이 겨냥한 사용자는 회사 사무직, 교육 기관의 학생, 아르바이트·현장직이었습니다. 출석하는 사람이 따로 조작하지 않아도 기록이 남게 하는 것이 목표였습니다.
그래서 현장에 AP를 두고, 출석하는 사람이 지닌 BLE 신호원을 AP가 알아보게 하기로 했습니다.
해결
신호·판정·기록을 카드, AP, 서버에 나눈 구조
신호를 보내는 쪽과 받는 쪽, 기록하는 쪽을 나눴습니다. 현장 장치는 판정까지 맡고 서버는 기록과 설정을 맡습니다.
- 신호원: 스마트폰 앱이나 비콘 카드가 BLE 비콘 패킷(Beacon Packet)을 보냅니다. 비콘 카드는 nRF52 칩으로 만들었습니다.
- 진입·이탈 판정: AP가 패킷의 신호 세기(RSSI)로 거리를 가늠해 진입과 이탈을 가릅니다. 신호가 -80dBm보다 세면 진입, 한동안 잡히지 않으면 이탈로 봅니다.
- 기록 전송: 진입과 이탈이 일어날 때마다 AP가 ASP.NET 서버에 기록을 보냅니다. AP는 이더넷으로 서버에 붙습니다. AP 안에서는 nRF52832가 신호를 받고 STM32가 판정과 통신을 맡습니다.
- 설정 동기화: 관리자가 앱에서 인정 거리, 감지 주기 같은 설정을 바꾸면 AP가 서버에서 받아 바로 씁니다.
- 펌웨어 자가 갱신: 설치된 AP가 웹을 거쳐 새 펌웨어를 스스로 받습니다.
- 앱: 안드로이드 앱에서 로그인, 회원가입, 조직 등록을 하고 날짜별 출결 기록을 봅니다. 관리자는 AP의 IP와 설치 위치를 앱에서 넣습니다.
- 담당자 확인: 관리자가 앱에서 날짜별 출결 목록을 보고 빠진 기록이 없는지 확인합니다.


AP를 이더넷으로 서버에 붙였습니다
AP는 랜선으로 서버와 통신합니다. 와이파이는 현장마다 공유기와 비밀번호가 달라 AP마다 설정을 새로 해야 합니다. 출결 기록은 한 건만 빠져도 문제가 되어 끊김이 적은 유선을 골랐습니다. 처음 쓴 통신 라이브러리에서 연결이 끊겨 lwIP로 통신부를 다시 짰습니다.
판정 기준은 서버에서 내려받게 했습니다
인정 거리와 감지 주기를 AP에 고정하지 않았습니다. 관리자가 앱에서 값을 바꾸면 AP가 서버에서 받아 곧바로 씁니다. 방 크기와 벽 재질에 따라 같은 거리에서도 신호 세기가 달라집니다. 현장마다 기준을 맞추려고 AP를 열지 않고 앱에서 값을 고치게 했습니다.
펌웨어를 장치가 스스로 갱신하게 했습니다
설치된 AP를 거둬 오지 않고 웹을 거쳐 펌웨어를 바꿉니다. AP는 벽이나 천장처럼 손이 닿기 어려운 곳에 붙습니다. 판정 로직을 고칠 때마다 AP를 떼어 다시 구우면 그동안 출결 기록이 멈춥니다.
결과
사람 손을 거치지 않고 서버에 쌓이는 출석 기록
시제품에서는 앱 출결 목록에 날짜별·시각별 기록이 쌓이는 것을 확인했습니다.
아직 풀지 못한 것은 양산, 배터리, 내구성입니다. AP와 비콘 카드는 3D 프린트 외관의 시제품 단계입니다.
