IoT 러브 필로우: 아두이노 MKR 번들로 원격 포옹 전달하기
프로젝트 개요
아두이노 MKR IoT 번들(MKR1000 + 센서/액추에이터 키트)을 활용해, 베개에 내장한 정전용량 센서로 포옹(허그)을 감지하면 내부 부저에서 심장박동 소리가 나고, 포옹 지속 시간에 따라 다른 이모지(하트, 키스, 포옹 등)를 텔레그램 봇을 통해 상대방 채팅방으로 전송하는 'IoT 러브 필로우(I Love You Pillow)'를 제작합니다. 멀리 떨어진 연인, 가족 간 정서적 교감을 돕는 감성 IoT 디바이스입니다.
핵심 구성 요소
| 구성 요소 | 역할 |
| Arduino MKR1000 (MKR IoT 번들 포함) | Wi-Fi 내장, 저전력, 정전용량 센싱, 텔레그램 TLS 통신 수행 |
| 알루미늄 호일 + 5MΩ 저항 | DIY 정전용량 센서 (베개 속 은닉, 인체 접근/접촉 감지) |
| 부저 (피에조) | 심장박동 소리 재생 (tone() 함수 활용) |
| 브레드보드, 점퍼 와이어 | 프로토타이핑 |
| 텔레그램 봇 (BotFather 생성) | 메시지/이모지 전송 인터페이스 |
| Wi-Fi 환경 (2.4GHz) | 클라우드 통신용 |
작동 원리
- 정전용량 센싱:
CapacitiveSensor 라이브러리로 핀 4(송신)-핀 5(수신) 사이 5MΩ 저항 연결, 알루미늄 호일을 수신 핀에 부착. 인체 접근 시 커패시턴스 변화량(sensor_value) 측정.
- 허그 임계값 판별:
sensor_value가 설정 임계값 초과 시 '허그 시작' 인식, 지속 시간 측정.
- 심장박동 피드백: 허그 중 부저로 '두근-두근' 패턴 재생 (
tone(31, 200); delay(200); tone(31, 400); delay(200); noTone(); delay(1000); 반복).
- 이모지 결정 및 전송: 허그 종료 시 지속 시간에 따라 3단계 이모지 선택 → 텔레그램 봇 API로 마지막 대화 상대(chat_id)에게 전송.
- 짧은 허그: ❤️ (하트,
\U00002764)
- 중간 허그: 😘 (키스,
\U0001F618)
- 긴 허그: 🤗 (포옹,
\U0001F917)
텔레그램 봇 설정 가이드
- 텔레그램 앱에서 @BotFather 검색 →
/newbot 명령으로 봇 생성 → 이름/유저네임 설정 → API 토큰 획득.
- 봇 프로필에서 Privacy Mode 비활성화 (그룹 채팅에서 모든 메시지 수신 위해) →
/setprivacy → Disable.
- 수신자(연인/가족)가 봇에게 아무 메시지나 보내어 chat_id 생성 유도. (코드는 최신 메시지의 chat_id 자동 사용)
- 아두이노 코드에 Wi-Fi SSID/비번, 봇 토큰 입력 후 업로드.
와이파이/텔레그램 안정화 팁 (Pro Tips)
- 루트 CA 인증서 업로드: MKR1000은 TLS 검증용 인증서 필요. WiFi101 라이브러리 예제
FirmwareUpdater로 api.telegram.org 도메인 인증서 플래시 저장. (아두이노 데스크톱 IDE 필수, 웹 에디터 미지원)
- 와치독 타이머:
Adafruit_SleepyDog 라이브러리로 10초 와치독 설정 → loop() 진입 시 Watchdog.reset() 호출. 네트워크/서버 무응답 시 자동 리부트.
- 재연결 로직: Wi-Fi 끊김 시
WiFi.begin() 재시도 루프 추가.
코드 구조 요약 (주요 함수)
#include
#include
#include
#include
CapacitiveSensor foil = CapacitiveSensor(4, 5); // 5MΩ between 4&5, pin 5 sensor
TelegramBot bot(BOT_TOKEN, client);
void setup() {
Serial.begin(115200);
foil.set_CS_AutocaL_Millis(0xFFFFFFFF); // 오토캘리브레이션 끄기
// Wi-Fi 연결, 봇 시작, 와치독 활성화
}
void loop() {
Watchdog.reset();
long hugValue = foil.capacitiveSensor(30);
if (hugValue > THRESHOLD) { // 허그 감지
if (!hugging) { hugStart = millis(); hugging = true; }
heartBeat(); // 부저로 심장소리
} else if (hugging) { // 허그 종료
hugging = false;
duration = millis() - hugStart;
String emoji = selectEmoji(duration);
bot.sendMessage(lastChatId, emoji);
}
message m = bot.getUpdates();
if (m.chat_id != 0) lastChatId = m.chat_id; // 최신 상대 저장
}
제작 단계 (DIY)
- 하드웨어: 알루미늄 호일을 베개 커버 안쪽이나 솜 속에 평평하게 깔고, 선을 끌어내어 5MΩ 저항과 아두이노 핀에 연결. 부저도 베개 모서리에 심음. 배터리 팩으로 휴대 가능하게 구성.
- 펌웨어: 아두이노 IDE에 라이브러리 설치(WiFi101, TelegramBot, ArduinoJson, CapacitiveSensor) → 인증서 업로드 → 코드에 자격 증명 입력 → 컴파일/업로드.
- 봇 설정: BotFather로 토큰 발급, 프라이버시 모드 끄기, 상대방과 봇 대화 개시.
- 테스트: 베개 안아보기 → 심장소리 확인 → 상대방 폰에서 이모지 수신 확인.
확장 아이디어
- 양방향 필로우: 양쪽 모두 장치 보유, 상대방 허그 시 내 필로우에서도 진동/조명/소리 피드백
- 압력 센서 어레이: 정전용량 대신 FSR(힘 센서) 여러 개로 허그 강도/패턴 세밀 분석
- 수면 모니터링: 가속도계(내장)로 뒤척임, 호흡 패턴 감지 → 수면 리포트 전송
- 다중 수신자: 가족 그룹 채팅에 봇 초대, 허그 이모지 전체 공유
- 배터리 최적화: 딥슬립 + 정전용량 인터럽트 웨이크업으로 수개월 배터리 수명 달성
교육적 의의
- TinyML/임베디드 ML 없이도 정전용량 센싱 + 클라우드 봇 연동으로 '감성 컴퓨팅' 구현 가능 보여줌
- IoT 보안(TLS 인증서, 토큰 관리), 네트워크 강건성(와치독, 재연결) 실전 학습
- 메이커 페어, STEM 교육, 선물 제작 등 다양한 맥락에서 응용 가능
참고: 본 튜토리얼은 구버전일 수 있습니다. 최신 가이드는 아두이노 프로젝트 허브에서 확인하세요. 전체 스케치, 회로도, 라이브러리 파일은 프로젝트 페이지의 Code, Schematics 섹션에서 다운로드 가능합니다.