스펙트리노(Spectrino): TinyML·IoT로 구현하는 터치프리 스마트 공간 솔루션
프로젝트 배경: 팬데믹 시대의 과제
코로나19 팬데믹은 '거리두기'와 '비접촉'을 새로운 표준으로 만들었습니다. 매장·사무실·공동주택 등 다중이용시설에서 버튼, 스위치, 인터폰, 엘리베이터 패널 등 빈번히 접촉되는 표면은 감염 전파 매개체가 됩니다. 동시에 인력 기반 발열 체크, 대기열 관리, 마스크 착용 단속은 인건비 상승과 인적 오류, 데이터 부재 문제를 안고 있습니다.
본 프로젝트는 아두이노 나노 33 BLE 센스(Arduino Nano 33 BLE Sense)의 온보드 센서(마이크, IMU, 근접 등)와 TinyML(에지 임펄스 스튜디오), ESP8266/아두이노 MKR WiFi 1010을 통한 IoT 연결(싱크스피크 ThingSpeak)을 결합해 6가지 터치프리 솔루션을 통합 구현한 종합 프로토타입입니다.
하드웨어 플랫폼
| 모듈 | 주요 역할 | 비고 |
| Arduino Nano 33 BLE Sense | TinyML 추론 실행 (마이크, IMU, 카메라 입력 처리) | nRF52840, 64MHz, 1MB 플래시, 256KB RAM |
| ESP8266 ESP-01 | WiFi 게이트웨이 (ThingSpeak 업로드) | 아두이노와 UART 통신 |
| Arducam Mini 2MP Plus | 이미지 입력 (OV2640, SPI 인터페이스) | 96×96 리사이즈 후 추론 |
| MAX7219 4-in-1 도트 매트릭스 | 상태 표시 (문자, 대기 시간 등) | 32×8 픽셀 |
| SG90/MG995 서보 ×2 | 물리 버튼 누름, 게이트 개폐, UV 램프 회전 등 | 외부 전원 필요 시 별도 공급 |
| HC-SR04 초음파 센서 | 접근 감지 (20cm 임계값) | 발열 체크 트리거용 |
| Adafruit AMG8833 열화상 센서 | 비접촉 체온 측정 (8×8 픽셀) | I2C 인터페이스 |
| RGB LED, 부저, 리튬이온 배터리+충전 모듈 | 알림, 전원 | 휴대용 프로토타입 구성 |
| Arduino MKR WiFi 1010 | IoT 게이트웨이 대체 (ECC508 보안 칩 내장) | 와이파이/BLE 동시 지원 |
소프트웨어 툴체인
- Arduino Web Editor: 클라우드 IDE, 라이브러리 관리, OTA 배포
- Edge Impulse Studio: 데이터 수집 → 임펄스 설계(DSP+신경망) → 학습 → 아두이노 라이브러리(.zip) 내보내기
- ThingSpeak: 실시간 대시보드, MATLAB 분석, 임베디드 차트 공유
- TensorFlow Lite for Microcontrollers: 추론 엔진 (C++ API)
서브 프로젝트 1: 음성 제어 터치프리 엘리베이터
문제 정의
엘리베이터 버튼은 불특정 다수가 접촉하는 고위험 표면. 초음파/제스처 센서는 근거리 작동·오작동 한계.
해결책
"Up"/"Down" 두 단어 음성 명령을 나노 33 BLE 센스 내장 마이크로 인식 → 서보가 물리 버튼 눌러줌. 기존 패널 무개조.
TinyML 모델 학습 (Edge Impulse)
- 데이터: 클래스당 1분 30초, 2초 윈도우, 300ms 스트라이드
- 전처리: MFCC(멜 주파수 켑스트럼 계수) 추출
- 모델: 1D CNN (Conv1D 30→10 → Flatten → Dense), 100 에포크
- 결과: 훈련 정확도 91.2%, 테스트 정확도 75% (24초 데이터)
- 모델 크기: ~24~28 KB (플래시 256KB 중 약 10%)
추론 로직 (요약)
if (found_command[0] == "up") {
servo.write(0); delay(100); servo.write(180); // 위 버튼 누름
}
if (found_command[0] == "down") {
servo.write(0); delay(100); servo.write(180); // 아래 버튼 누름
}
비교 우위
음성 제어는 초음파(근접 오작동), 제스처(접촉 위험 거리) 대비 원거리·고정확도 작동 가능.
서브 프로젝트 2: 얼굴 인식 스마트 인터콤
동기
인터콤 버튼 접촉 감염 위험 → 사람 감지 시 자동 호출(부저+LED 매트릭스 "Person" 표시).
구현
- 사전 학습된 TensorFlow Person Detection 모델 활용 (클래스: unused, person, notperson)
- Arducam Mini 2MP → 나노 33 BLE 센스 → 96×96 리사이즈 → TFLite 추론
- 네트워크: Depthwise Conv2D → Conv2D → AveragePool2D → Flatten
- 출력: person_score > no_person_score 시 부저 ON + 매트릭스 표시 + 선택적 서보로 기존 인터콤 비디오 버튼 누름
핵심 코드 (detection_responder.cpp)
uint8_t person_score = output->data.uint8[kPersonIndex];
uint8_t no_person_score = output->data.uint8[kNotAPersonIndex];
if (person_score > no_person_score) {
digitalWrite(BUZZER_PIN, LOW); // 부저 ON
myDisplay.print("Person");
servo.write(0); delay(500); servo.write(180); // 기존 인터콤 연동 옵션
}
서브 프로젝트 3: IoT 기반 비접촉 발열 모니터링 & 알림
시나리오
매장 입구에서 초음파 센서가 방문자 감지(≤20cm) → 게이트 개방(서보) → AMG8833 열화상 센서로 체온 측정 → ThingSpeak 실시간 업로드 → 38.1°C 초과 시 게이트 차단 + 부저 알람.
데이터 플로우
- HC-SR04 → 아두이노 MKR WiFi 1010: 거리 ≤ 20cm 감지
- MKR WiFi 1010 → 서보(게이트 열기) + AMG8833 트리거
- AMG8833 서미스터 온도 읽기 → ThingSpeak 채널 필드1 업데이트 (타임스탬프 자동)
- 임계값 초과 시: 서보 180°(게이트 닫기) + 부저 ON
ThingSpeak 대시보드 활용
- 실시간 체온 시계열 그래프 (임베디드 iframe 공유 가능)
- 일별/시간대별 이상 온도 빈도 분석 → 방역 인력 배치 최적화
- 방문자 대상 공개 대시보드 → "오늘 이 매장 안전도" 확인 후 방문 결정 유도
코드 핵심 (MKR WiFi 1010)
#include
#include
#include
Servo gateServo;
Adafruit_AMG88xx amg;
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASS";
const char* host = "api.thingspeak.com";
String apiKey = "YOUR_API_KEY";
void loop() {
long dist = readUltrasonic();
if (dist <= 20) {
gateServo.write(0); // 게이트 열기
float temp = amg.readThermistor();
sendToThingSpeak(temp);
if (temp > 38.1) {
gateServo.write(180); // 게이트 닫기
digitalWrite(BUZZER_PIN, HIGH);
}
}
}
서브 프로젝트 4: TinyML·IoT 기반 스마트 큐 관리 시스템
목표
매장 동시 입장 인원 50명 제한 → 입장/퇴장 게이트별 사람 카운트 → 실시간 대기 시간 예측 → ThingSpeak 대시보드 공개.
알고리즘
- 입장 게이트: 사람 감지 시 카운트++, 서보 개방. 50명 도달 시 15분 대기 모드(매트릭스 "Waiting 15min" 표시)
- 퇴장 게이트: 사람 감지 시 퇴장 카운트++
- 대기 시간 추정:
wait = max(0, (entry_count - exit_count - 50) * avg_stay_time)
- ThingSpeak: 필드1=입장 누적, 필드2=퇴장 누적 → 대시보드에서 실시간 인원 수 계산
장점
초음파/IR 센서 대비 카메라+TinyML이 정확도 높고, 기존 CCTV 영상 스트림 재활용 가능. 하드웨어 비용 절감.
서브 프로젝트 5: 마스크 착용 감시 & IoT 모니터링
모델 학습 (Edge Impulse Transfer Learning)
- 데이터셋: 3,500장 중 선별 813장(훈련) + 487장(테스트), 클래스: mask / no_mask
- 입력: 96×96 RGB, MobileNetV2 0.35 (최종 레이어 16뉴런, 드롭아웃 0.1)
- 30 에포크, 학습률 0.0005 → 검증 정확도 97.55%, 테스트 정확도 98.15%
- 양자화 후 모델 크기 ~676 KB (RAM 440 KB) → 나노 33 BLE 센스 단독 실행 곤란, MKR WiFi 1010 등 더 큰 램 보드 필요 또는 모델 추가 경량화 필요
동작
마스크 미착용 감지 시 게이트 차단 + ThingSpeak에 'no_mask' 카운트 업로드 → 시간대별 미착용 추이 분석 → 방역 정책 수립 근거 데이터 확보.
서브 프로젝트 6: 매장 통로별 인원 밀도 기반 자율 UV 살균
컨셉
통로별 Arducam+나노 33 BLE 센스 배치 → 사람 카운트 임계값 구간별 LED 경고(녹색/파랑/빨강) → 임계값 초과 시 UV 램프 점등 살균 → 카운트 리셋.
구역별 차등 임계값 예시
| 구역 | 안전(녹색) | 주의(파랑) | 경고(빨강) | 살균(UV) | 리셋 |
| 식품 코너 | 1~25 | 26~50 | 51~75 | 76~90 | >91 |
| 의류 코너 | 1~50 | 51~75 | 76~100 | 101~110 | >111 |
| 전자제품 | 1~75 | 76~180 | 181~225 | 225~240 | >241 |
바이러스 표면 생존 기간 차이(식품 포장지 24h, 플라스틱/스테인리스 72h 등) 반영.
IoT 대시보드
ThingSpeak 4채널(식품/스포츠/의류/전자) 실시간 인원 수 + 지도 시각화 → Tableau 연동 시 평면도 위 히트맵 구현 가능.
시장성 & 실용성 (Go-to-Market)
- 인건비 절감: 발열 체크·대기열 관리·마스크 단속·살균 작업 자동화
- 데이터 기반 의사결정: 시간대·구역별 밀도·위험도 분석 → 방역 인력 동적 배치
- 고객 신뢰 제고: 공개 대시보드로 '안전한 매장' 인증 효과 → 방문율·매출 회복
- 확장성: 기존 CCTV 인프라 활용 가능, 모듈형 설계로 구역별 증설 용이
- 규제 대응: 정부 방역 지침 데이터 자동 기록·보고 가능
코드 리포지토리 (GitHub)
- 엘리베이터 음성 제어:
dhruvsheth-ai/elevator-Automation-ARDUINO
- 자율 인터콤:
dhruvsheth-ai/person-autonomous-intercom
- 발열 모니터링:
dhruvsheth-ai/temperature-arduino-iot
- 마스크 감지:
dhruvsheth-ai/ble-mask-detection-optimised
- 큐 관리:
dhruvsheth-ai/Person-queuing-system-arduino33
- 통로 살균:
dhruvsheth-ai/self-sanitisation-person-detection
회로도
각 서브 프로젝트별 프리칭 회로도 이미지 제공. 공통적으로 나노 33 BLE 센스 + Arducam(SPI) + 서보 + ESP8266(UART) + MAX7219(SPI/I2C) + 센서 모듈(I2C) 조합.
결언
Spectrino는 단일 하드웨어 플랫폼 위에서 TinyML과 IoT를 융합해 팬데믹 시대 필수 방역 기능 6가지를 통합 구현한 모듈형 솔루션입니다. 각 서브 시스템은 독립적으로도 가치가 있으며, 통합 배포 시 시너지(데이터 공유, 통합 대시보드, 운영 효율화)가 극대화됩니다. 메이커·스타트업·시설 관리자 모두 참고할 만한 레퍼런스 디자인입니다.