아두이노로 제어하는 간이 거짓말 탐지기를 만들어 친구들이 거짓말하는지 확인하거나, 상황·감정에 따른 피부 전도도 변화를 실시간 그래프로 관찰해 보세요.
Step 1: 작동 원리 (전기피부반응, EDA)
피부는 접촉 감각 매개, 감염 방어, 장기 보호 외에도 전도도(Conductivity)가 감정 상태에 따라 변함을 아시나요? 이를 전기피부활동(EDA, Electrodermal Activity)이라 하며 위키피디아에 잘 설명되어 있습니다. 기본 원리: 피부 전도도 = 기분/긴장도 지표.
아두이노를 피험자에게 연결하고 PC의 시리얼 플로터로 실시간 그래프를 봅니다. 먼저 "이름은?", "어디 살아?" 같은 쉬운 질문으로 기준선(Baseline) 잡은 뒤, 거짓말 유도 질문을 던져 전도도 급변(긴장→발한 증가→전도도 상승) 감지.
Step 2: 부품 리스트
아두이노 나노, LED 3개, 벨크로, 2kΩ 저항, 골판지, 호일, 글루건, 납땜 인두, 공예용 칼 등.
Step 3: 배선
긴 케이블 → 아두이노 아날로그 핀 A0
2kΩ 저항 → GND와 위 A0 연장선 사이 연결 (풀다운)
긴 케이블 → 아두이노 5V 핀
녹색 LED 애노드(긴 다리) → 핀 2, 캐소드 → GND
주황 LED 애노드 → 핀 3, 캐소드 → GND
빨간 LED 애노드 → 핀 4, 캐소드 → GND
이제 손가락에 고정할 전극(핑거 클립) 제작 필요.
Step 4: 소프트웨어와 코드
최신 아두이노 IDE의 시리얼 플로터(Tools → Serial Plotter)를 사용하면 텍스트 모니터 대신 실시간 그래프로 데이터 확인 가능. 아래 코드 업로드 후 플로터 열면 A0 값이 파형으로 표시됨.
Step 5: 핑거 클립(전극) 제작
벨크로(찍찍이) 양면에 호일 스트립 글루건으로 붙임. 손가락에 감아 밀착시키고, A0 연장선과 5V 연장선을 각각 호일에 테이프로 고정해 안정적인 접촉 확보.
Step 6: 케이스 제작 (골판지)
재단 치수:
15×3 cm 직사각형 2개 (양쪽 측면)
15×5 cm 직사각형 1개 (바닥)
5×3 cm 직사각형 3개 (끝면 + 중간 칸막이, 칸막이엔 나노 USB 구멍 뚫기)
9×5 cm 직사각형 1개 (전극 수납함 뚜껑, 힌지처럼 테이프로 고정)
6×5 cm 직사각형 1개 (전자부품 칸 뚜껑, LED 구멍 3개 뚫기)
조립: 바닥 양옆에 15×3 붙이고, 양끝에 5×3 붙여 박스 형태. 중간 칸막이(5×3)를 바닥에서 6cm 지점에 붙여 6cm(전자부품 칸) / 9cm(전극 수납 칸) 분할. 전자부품 칸에 6×5 뚜껑(LED 구멍) 덮고, 전극 칸에 9×5 뚜껑을 테이프로 힌지 연결.
Step 7: 최종 조립 및 테스트
전자부품 칸에 아두이노와 배선 고정, 연장선(A0, 5V)을 전극 칸으로 통과. LED 3개를 뚜껑 구멍에 끼워 고정. 테스트 후 정상 작동 확인.
주의: 이 장치는 전문 폴리그래프(심박, 호흡, 혈압 등 다중 센서) 수준의 정확도는 없습니다. 재미/교육용으로만 사용하세요.
코드
PolyGraph.ino
void setup() {
Serial.begin(9600);
pinMode(2, OUTPUT); // Green
pinMode(3, OUTPUT); // Orange
pinMode(4, OUTPUT); // Red
// 시작 시 LED 테스트
digitalWrite(2, HIGH); delay(500);
digitalWrite(3, HIGH); delay(500);
digitalWrite(4, HIGH); delay(500);
}
void loop() {
int val = analogRead(A0);
// 임계값 기반 LED 제어 (값이 클수록 전도도 높음 = 긴장)
if (val > 60) digitalWrite(4, HIGH); else digitalWrite(4, LOW); // Red: 고전도도
if (val > 20) digitalWrite(2, HIGH); else digitalWrite(2, LOW); // Green: 저전도도
if (val > 45) digitalWrite(3, HIGH); else digitalWrite(3, LOW); // Orange: 중전도도
Serial.println(val); // 시리얼 플로터용 출력
delay(20);
}