생리대 무료 배부 자판기 QR 출고 인증과 제어

휴대폰에서 받은 QR로만 자판기가 생리대를 한 개씩 내주도록 인증과 제어를 시연용으로 개발했습니다.

고객사
생리대 무료 배부 서비스
분야
무인 자판기
기술
안드로이드 자판기 앱 · 휴대폰 웹 · TypeScript 서버 · UART 시리얼

포너즈가 한 일

  1. 배부 앱 와이어프레임 작성과 시안 기반 화면 퍼블리싱
  2. 제조사 SDK와 제어보드 통신 프로토콜 분석
  3. 자판기 QR 리더 결선 확인과 안드로이드 자판기 앱 개발
  4. QR 발급·검증 서버와 시연용 테스트 서버 구축
  5. 상품 감지 센서 기반 출고 확인과 걸림 처리, 자판기 화면 잠금
  6. 2차 시연용 휴대폰 앱 개발(고객이 보낸 새 디자인 기준)

문제

누구나 가져갈 수 있어 필요한 사람에게 가지 않던 무료 생리대

고객은 생리대를 무료로 나눠 주는 자판기 서비스를 준비하고 있었습니다. 교육 기관 쪽 시연을 앞두고, 시연을 통과하면 학교부터 설치할 계획이었습니다. 자판기와 제조사 SDK는 있었지만 인증한 사람에게만 내주는 기능은 없었습니다.

예전의 무료 배부 방식은 재고를 관리할 수 없었습니다. 누구나 가져갈 수 있어 정작 필요한 사람이 받지 못했습니다.

이용자는 필요할 때 가 봐도 이미 비어 있는 일을 겪었습니다. 한 사람이 여러 개를 가져가도 막을 방법이 없었습니다.

설치 기관 담당자는 누가 몇 개를 가져갔는지 알 수 없었습니다.

그래서 고객은 휴대폰으로 인증한 사람에게만 한 개씩 내주는 자판기를 시연하기로 했습니다. 결제는 넣지 않았습니다. 위치 찾기와 알림도 첫 시연 범위에서 뺐습니다.

해결

휴대폰에서 받은 QR을 자판기가 읽고 서버가 확인하는 출고

포너즈는 자판기 제조사의 기본 앱을 쓰지 않았습니다. 자판기 안드로이드 보드에 자체 앱을 올려 QR 인증과 출고를 직접 제어했습니다.

  • 휴대폰 웹 가입과 출고구 선택: 자판기 화면의 QR로 휴대폰 웹에 들어가 가입하거나 로그인합니다. 같은 휴대폰 번호로는 다시 가입할 수 없습니다.
  • 출고용 QR 발급과 검증: 휴대폰에서 두 출고구 가운데 하나를 고르고 '생리대 받기'를 누르면 QR이 나옵니다. QR은 10분 동안만 씁니다. 자판기가 읽으면 서버가 직접 발급한 QR인지와 유효 기간을 확인합니다. 다른 곳에서 만든 QR로는 나오지 않습니다.
  • 센서로 확인하는 출고: 자판기는 짧은 펄스를 보내며 상품 감지 센서를 봅니다. 상품이 감지되면 멈춰 한 개만 내줍니다. 펄스 길이는 빈 슬롯에 50ms씩 쏘아 보며 정했습니다.
  • 걸림 처리: 펄스 10회에도 감지되지 않으면 걸림으로 기록합니다. 이용자에게는 다른 출고구를 안내하고 QR을 다시 발급합니다.
  • 담당자 확인: 걸린 출고구는 관리자가 환경설정에서 직접 풀어야 다시 씁니다.
  • 자판기 화면 잠금: 자판기 화면의 하단 탭과 다른 앱 이동을 기본으로 막았습니다. 관리자 모드에서만 풀립니다.

휴대폰이 QR을 받고 자판기가 읽는 구조

처음 구상은 앱에서 만든 QR을 자판기가 읽으면 상품이 나오는 방식이었습니다. 최종 버전에서는 출고구 선택도 자판기에서 휴대폰으로 옮겼습니다. QR 리더가 동작하지 않던 시기에는 자판기 화면의 QR을 휴대폰으로 찍는 방식도 함께 준비했습니다. 휴대폰이 받은 QR을 자판기가 읽으면 출고 직전에 서버가 한 번 더 확인합니다. QR에 출고구와 유효 시간이 담겨 한 번 받은 QR을 나중에 다시 쓰기 어렵습니다. 자판기 화면은 스캔 안내만 맡아 이용자가 만질 일이 줄어듭니다.

정해진 시간 대신 상품 감지로 끝내는 출고

첫 시연 버전은 출고에 실패하면 양쪽 화면에 알리고 QR을 다시 쓰게 했습니다. 시연 중 상품이 구겨져 떨어지지 않는 일이 있었습니다. 그래서 출고가 끝났는지를 상품 감지 센서로 판단하기로 했습니다. 짧은 펄스를 반복하며 상품이 나오는 순간을 잡아 한 개씩 내주게 했습니다.

QR 리더의 전원선과 데이터선을 나눈 결선

자판기에 달린 QR 리더는 신호를 받지 못했습니다. 모듈은 UART 방식인데 케이블은 USB로 꽂혀 있었습니다. 전원은 USB로, 데이터는 UART 포트로 나눠 연결해 리더를 살렸습니다. 기존 케이블 피복을 잘라 포트를 옮기는 방법과 외부 웹캠도 살폈습니다. 피복 작업은 대수가 늘면 기기마다 반복됩니다. 그래서 여러 대를 운영할 때는 자판기마다 케이블을 하나 더 사서 연결하도록 정리했습니다.

결과

교육 기관에 보여 줄 앱으로 이어진 2차 시연

시연에서 휴대폰으로 인증한 사람에게만 자판기가 한 개씩 내주는 것을 확인했습니다. 출고구가 걸리면 막고 다른 출고구로 안내하는 동작도 확인했습니다. 고객 대표는 자판기를 직접 테스트한 뒤 2차 시연을 정했습니다. 고객은 교육 기관 담당자에게 보여 줄 수 있게 휴대폰 쪽을 앱으로 바꾸기로 했습니다. 새 앱 디자인도 고객이 포너즈에 보냈습니다.

생리대 수령
이전누구나 제한 없이 가져감(사람)
이후휴대폰 웹 가입·로그인(사람) → 출고구 선택과 QR 발급(사람·시스템) → 자판기 QR 리더에 스캔(사람) → QR 검증(시스템) → 펄스 출고와 상품 감지(시스템)
출고 걸림 대응
이전이용자가 알리기 전까지 막힌 칸을 모름(사람)
이후걸림 기록과 출고구 차단(시스템) → 다른 출고구 안내와 QR 재발급(시스템) → 관리자가 걸림 해제(사람)
이 사례 공유

비슷한 프로젝트를 준비하고 있다면

무엇을 만들지 아직 정리되지 않아도 괜찮습니다. 지금 상황을 알려 주시면 진행 방식과 범위를 함께 잡습니다.

상담 신청하기