프로젝트 05: 🤥 찌릿찌릿 핑거 거짓말 탐지기

우리 몸의 전기 신호 변화를 포착하여 진실 혹은 거짓을 판별하는 흥미로운 장치를 만들어 봅시다.

1. 프로젝트 원리: 피부 전기 활동 (GSR)

사람은 긴장하거나 거짓말을 할 때, 뇌의 자율신경계가 반응하여 피부에 아주 미세한 **땀**이 납니다. 땀은 전기가 잘 통하는 성질이 있어, 땀이 나면 피부의 전기 저항이 급격히 낮아집니다.

아두이노의 아날로그 핀으로 두 손가락 사이의 전압 변화를 측정하면, 그 사람이 지금 긴장하고 있는지(거짓말을 하는지) 추측할 수 있습니다.

📦 준비물

아두이노 우노 x 1 10kΩ 저항 x 1 LED (빨강, 초록) 각 1개 피에조 부저 x 1 알루미늄 호일 (전극용) 점퍼 와이어 & 브레드보드

2. 상세 회로 결선도 (Wiring Diagram)

두 손가락을 전극으로 사용합니다. 한쪽은 5V에 연결하고, 다른 쪽은 A0 핀10kΩ 저항(GND 연결) 사이에 연결하여 전압 분배 회로를 구성합니다.

전극 A 전극 B Arduino Uno A0 | 5V | D8 | D9 | D10 결과 표시 LED 알루미늄 호일을 손가락에 감아 전선을 연결하면 접촉이 더 잘 됩니다.
▲ 거짓말 탐지기 회로: 피부를 하나의 '가변 저항'으로 사용하는 원리입니다.

3. 코드 작성하기

사람마다 피부 저항이 다르므로, 처음 5~10초 동안은 가만히 있는 상태의 '기준값'을 측정하고, 그보다 값이 튀어 오를 때 경보를 울리도록 설계합니다.

int sensorPin = A0;
int redLed = 9;
int greenLed = 10;
int buzzer = 8;

int baseline = 0; // 평상시 기준값

void setup() {
    Serial.begin(9600);
    pinMode(redLed, OUTPUT);
    pinMode(greenLed, OUTPUT);
    pinMode(buzzer, OUTPUT);

    Serial.println("보정을 시작합니다. 손가락을 대고 5초간 가만히 계세요...");
    
    // 초기 보정: 50번 측정하여 평균값 내기
    long sum = 0;
    for(int i = 0; i < 50; i++) {
        sum += analogRead(sensorPin);
        delay(100);
    }
    baseline = sum / 50;
    Serial.print("보정 완료! 기준값: "); Serial.println(baseline);
}

void loop() {
    int currentValue = analogRead(sensorPin);
    
    Serial.print("현재 수치: "); Serial.println(currentValue);

    // 기준값보다 수치가 일정 이상(예: 20) 올라가면 거짓말로 간주
    if (currentValue > baseline + 20) {
        digitalWrite(redLed, HIGH);
        digitalWrite(greenLed, LOW);
        tone(buzzer, 800); // 삐~ 소리
    } else {
        digitalWrite(redLed, LOW);
        digitalWrite(greenLed, HIGH);
        noTone(buzzer);
    }
    
    delay(200);
}

4. 프로젝트 핵심 분석

💡 왜 기준값(Baseline)이 필요한가요?

사람의 피부는 건조한 정도에 따라 평상시 저항값이 다릅니다. 어떤 사람은 300이 나올 수도 있고, 어떤 사람은 500이 나올 수도 있죠. 그래서 절대적인 수치가 아니라, '자신의 평소 상태보다 얼마나 변했는가'를 측정하는 것이 훨씬 정확합니다.

5. 🎯 심화 챌린지: 멀티 단계 판별기

단순히 '진실/거짓' 두 단계가 아니라, LED를 5개 정도 사용하여 긴장도가 높아질수록 LED가 한 칸씩 더 켜지게 만들어 보세요. 영화에 나오는 정교한 거짓말 탐지기 그래프처럼 시각화할 수 있습니다!