Skip to content

Latest commit

ย 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿคฅ๐Ÿ“Ÿ Kinski Polygraph โ€” Arduino Nano Lie Detector

A small polygraph that combines heart-rate sensing, galvanic skin response, two vintage analog VU meters, and an audible alert.

Kinski Polygraph โ€” the NanoLieDetector project โ€” was built after a copy of Klaus Kinski's autobiography disappeared during a dinner with fellow writers.

Instead of sending an accusatory email, the response was to build a small homemade polygraph.

The device measures two physiological signals:

  • โค๏ธ pulse / heart-rate activity
  • ๐Ÿ’ง galvanic skin response (GSR)

An Arduino Nano processes those signals and drives two analog VU meters. One meter reacts to the pulse sensor, while the other displays changes in skin conductivity. A buzzer provides an additional alert when the programmed conditions are reached.

                 Person
                   โ”‚
          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
          โ”‚                 โ”‚
          โ–ผ                 โ–ผ
    Heart-rate          GSR electrodes
      sensor            aluminum foil
          โ”‚                 โ”‚
          โ–ผ                 โ–ผ
      Arduino Nano โ†โ”€โ”€ Analog input
          โ”‚
      โ”Œโ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
      โ”‚                 โ”‚
      โ–ผ                 โ–ผ
 Pulse VU meter    GSR VU meter
      โ”‚                 โ”‚
      โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
               โ”‚
               โ–ผ
             Buzzer

The machine measures physiological arousal, not truth itself. Heart rate and skin conductance can change for many reasons unrelated to deception.


โœจ Features

  • ๐Ÿงฎ Arduino Nano controller
  • โค๏ธ Heart-rate sensor
  • ๐Ÿ’ง Galvanic skin response measurement
  • ๐Ÿ“Ÿ Two analog VU meters
  • โšก PWM-driven analog needles
  • ๐Ÿ”Š Buzzer alert
  • ๐Ÿ–๏ธ Aluminum-foil finger electrodes
  • ๐ŸŽ›๏ธ Configurable pulse threshold
  • โ™ป๏ธ Vintage-instrument aesthetic

๐Ÿง  How it works

A conventional polygraph records several physiological variables while questions are being asked.

Kinski Polygraph implements a much simpler version using:

heart activity
+
skin conductance

The software repeatedly reads both sensor channels.

Heart sensor
     โ”‚
     โ–ผ
Detect pulse
     โ”‚
     โ–ผ
Drive left VU meter


GSR electrodes
     โ”‚
     โ–ผ
Read A1
     โ”‚
     โ–ผ
Drive right VU meter

The readings are then compared against programmed conditions.

physiological response
         โ”‚
         โ–ผ
configured threshold
         โ”‚
    โ”Œโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”
    โ”‚         โ”‚
 below      above
    โ”‚         โ”‚
    โ–ผ         โ–ผ
 continue    buzzer

The device therefore provides a physical visualization of changing physiological signals.


๐Ÿ“– Origin of the project

The project began with a missing book.

After inviting several writers to dinner, a copy of:

Klaus Kinski โ€” autobiography

disappeared.

The resulting chain of events was approximately:

Dinner
  โ”‚
  โ–ผ
Book disappears
  โ”‚
  โ–ผ
Potential suspects
  โ”‚
  โ–ผ
Build polygraph

The machine became the Kinski Polygraph.

The project was completed and published in August 2020.


๐Ÿงฐ Parts

Qty Component Link
1 Arduino Nano Amazon
2 Analog VU meters Amazon
1 Heart-rate sensor Amazon
1 Buzzer โ€”
1 Toggle / power switch โ€”
1 Approx. 300โ€“330 kฮฉ resistor โ€”
โ€” Aluminum foil โ€”
โ€” Jumper wires โ€”
1 5 V power source โ€”
1 3D-printed enclosure Cults3D

๐Ÿงฎ Arduino Nano

The project uses the classic Arduino Nano, based on the ATmega328P.

Relevant characteristics include:

  • 16 MHz AVR microcontroller
  • 32 KB Flash
  • 2 KB SRAM
  • 8 analog inputs
  • PWM-capable digital outputs
  • compact breadboard-friendly format
  • USB programming

Official documentation:

Arduino Nano


โค๏ธ Heart-rate sensing

The first physiological channel measures pulse activity.

Conceptually:

Heartbeat
    โ”‚
    โ–ผ
Pulse sensor
    โ”‚
    โ–ผ
Analog signal
    โ”‚
    โ–ผ
Arduino
    โ”‚
    โ–ผ
Beat detection
    โ”‚
    โ–ผ
VU meter movement

The Arduino sketch contains a configurable heart-rate:

Threshold

used to determine when an incoming signal should be considered a heartbeat.

The correct value depends on:

  • sensor model
  • finger placement
  • signal amplitude
  • ambient noise
  • individual physiology

The threshold should therefore be calibrated before using the device.


๐Ÿ’ง Galvanic skin response

The second channel measures galvanic skin response, also known as:

  • GSR
  • electrodermal activity
  • EDA
  • skin conductance response

Human skin conductivity changes partly because of sweat-gland activity controlled by the sympathetic nervous system.

The project creates a simple GSR sensor using:

aluminum foil
+
finger contact
+
resistor
+
Arduino analog input

The current project documentation uses:

A1

for this signal.


๐Ÿ”Œ GSR input

During development, direct readings were unstable.

More reliable measurements were obtained after adding approximately:

300 kฮฉ

between the GSR measurement input and ground.

The Hackster component list specifies:

330 kฮฉ

so a standard 330 kฮฉ resistor is suitable for reproducing the documented circuit.

Conceptually:

Finger electrodes
       โ”‚
       โ–ผ
      A1
       โ”‚
       โ”œโ”€โ”€โ”€โ”€ Arduino ADC
       โ”‚
      ~330 kฮฉ
       โ”‚
       โ–ผ
      GND

The exact electrode wiring should follow the circuit diagram in the Hackster tutorial.


๐Ÿ“ˆ Interpreting the GSR value

The sketch reads:

Analog input A1

and uses its changing value to control one of the analog meters.

In the original implementation, higher readings are interpreted as increased finger perspiration / galvanic response.

low response
     โ”‚
     โ–ผ
smaller needle movement

higher response
     โ”‚
     โ–ผ
larger needle movement

This is a measure of physiological arousal rather than a direct measurement of deception.


๐Ÿ“Ÿ Analog VU meters

One of the most distinctive parts of the project is the use of two physical analog meters instead of an LCD or OLED.

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚       /\        โ”‚    โ”‚         /\      โ”‚
โ”‚      /  \       โ”‚    โ”‚        /  \     โ”‚
โ”‚                 โ”‚    โ”‚                 โ”‚
โ”‚   HEART RATE    โ”‚    โ”‚       GSR       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

The meters convert numerical sensor readings into visible needle motion.


โšก Driving a VU meter from Arduino

The Arduino Nano does not provide a true analog voltage output.

Instead, the project uses:

PWM

through analogWrite().

Arduino PWM
     โ”‚
     โ–ผ
rapid HIGH/LOW pulses
     โ”‚
     โ–ผ
average current
     โ”‚
     โ–ผ
meter needle

The mechanical inertia of the meter helps smooth the PWM signal into visible movement.


โš ๏ธ PWM pins

A development issue occurred because not every digital pin on the Arduino Nano supports PWM.

For the classic Nano, suitable PWM outputs include:

D3
D5
D6
D9
D10
D11

The project notes specifically mention correcting the design to use pins such as:

3
5
6

instead of:

4

which is not PWM-capable on the classic Nano.

Always verify that the two meter outputs are connected to PWM-capable pins.


๐Ÿ”Š Buzzer

The buzzer provides an immediate audio signal when the programmed comparison conditions indicate a sufficiently large physiological response.

Heart activity
      +
GSR activity
      โ”‚
      โ–ผ
comparison
      โ”‚
      โ–ผ
threshold condition
      โ”‚
      โ–ผ
    BUZZ

This makes the device usable without watching both analog needles continuously.


๐Ÿง  Software logic

The current repository contains a single Arduino sketch:

NanoLieDetector.ino

Its overall logic is straightforward:

setup()
   โ”‚
   โ–ผ
Configure sensors and outputs
   โ”‚
   โ–ผ
loop()
   โ”‚
   โ”œโ”€โ”€ Read heart-rate sensor
   โ”‚
   โ”œโ”€โ”€ Detect beats
   โ”‚
   โ”œโ”€โ”€ Move pulse VU meter
   โ”‚
   โ”œโ”€โ”€ Read GSR on A1
   โ”‚
   โ”œโ”€โ”€ Move GSR VU meter
   โ”‚
   โ””โ”€โ”€ Evaluate buzzer condition

๐ŸŽ›๏ธ Heart-rate threshold

The sketch includes a manually configurable threshold for identifying heartbeats.

The original build notes describe this as one of the main values that needs adjustment.

A practical calibration process is:

Connect pulse sensor
        โ”‚
        โ–ผ
Remain still
        โ”‚
        โ–ผ
Observe signal
        โ”‚
        โ–ผ
Adjust Threshold
        โ”‚
        โ–ผ
Confirm one event per beat

A potentiometer could also replace the hardcoded value to allow physical adjustment without recompiling the firmware.


๐Ÿงช Calibration

Before using the device, establish a baseline.

Heart-rate channel

Observe the pulse sensor while the subject is relaxed.

Adjust the threshold until beats are detected consistently.

GSR channel

Attach the finger electrodes and observe the resting value.

resting GSR
     โ”‚
     โ–ผ
baseline

Then observe how the signal changes with:

  • movement
  • pressure on the electrodes
  • temperature
  • stress
  • laughter
  • surprise
  • deep breathing

The physiological response should be understood relative to the baseline rather than treated as a universal absolute value.


๐Ÿคฅ What a polygraph measures

A polygraph does not directly detect:

truth

or:

lies

It measures physiological activity that may change during questioning.

Commercial polygraphs commonly monitor variables including:

  • respiration
  • heart rate
  • blood pressure
  • electrodermal activity

Kinski Polygraph simplifies this to:

heart activity
+
electrodermal response

These signals can also change because of:

  • nervousness
  • surprise
  • embarrassment
  • excitement
  • fear
  • movement
  • temperature
  • expectations
  • unrelated stress

The machine is therefore best treated as an electronics and psychophysiology experiment rather than an authoritative test of whether somebody is telling the truth.


๐Ÿงช Scientific context

Polygraphs infer deception indirectly from physiological responses.

The National Academies notes that physiological responses associated with polygraph testing do not correspond uniquely to deception and can have other causes.

The American Psychological Association similarly notes that scientific evidence does not support treating polygraph testing as a consistently reliable and valid detector of deception.

References:


๐Ÿ–จ๏ธ 3D-printed enclosure

A custom enclosure is available on Cults3D:

Arduino Lie Detector Polygraph โ€” Cults3D

The package contains:

Case.stl
Front.stl

The published printing settings are:

Material: PLA
Layer height: 0.30 mm
Supports: No

The enclosure is deliberately simple:

front panel
+
rear case
+
four screws
+
drawer-style handle

A cardboard enclosure can also be used for a quick prototype.


๐Ÿš€ Installation

1. Clone the repository

git clone https://github.com/ronibandini/NanoLieDetector.git
cd NanoLieDetector

The repository currently uses:

master

as its default branch.


2. Install Arduino IDE

Download:

Arduino IDE


3. Open the sketch

Open:

NanoLieDetector.ino

4. Select the board

In Arduino IDE:

Tools
โ†’ Board
โ†’ Arduino AVR Boards
โ†’ Arduino Nano

For some older or clone Nano boards it may also be necessary to select:

Tools
โ†’ Processor
โ†’ ATmega328P (Old Bootloader)

depending on the bootloader installed on the board.


5. Connect the sensors

Connect:

Heart-rate sensor โ†’ analog input defined in sketch
GSR              โ†’ A1

For the GSR circuit, include the approximately:

300โ€“330 kฮฉ

resistor described in the original build.


6. Connect the meters

Connect both analog meters through the circuit shown in the original project documentation.

Make sure the Arduino control signals use:

PWM-capable pins

rather than an ordinary digital-only output such as D4.


7. Connect the buzzer

Connect the buzzer to the digital output defined by:

NanoLieDetector.ino

and ground.


8. Adjust the pulse threshold

Find the heart-rate:

Threshold

setting in the sketch.

Adjust it for the sensor and subject until pulse detection is stable.


9. Upload

Compile and upload:

NanoLieDetector.ino

to the Arduino Nano.


๐Ÿงช Suggested test procedure

A simple demonstration sequence is:

1. Attach pulse sensor

2. Attach GSR finger electrodes

3. Power the device

4. Wait for stable readings

5. Observe baseline meter positions

6. Ask neutral questions

7. Observe physiological response

8. Ask other questions

9. Compare needle movement

Useful baseline questions are simple questions with known answers.

For example:

What is your name?
What day is it?
Are you sitting down?

The purpose is to observe the person's normal physiological response before comparing later readings.


๐Ÿ“ Repository structure

NanoLieDetector/
โ”œโ”€โ”€ NanoLieDetector.ino
โ””โ”€โ”€ README.md

NanoLieDetector.ino

Arduino firmware.

Handles:

  • pulse sensing
  • heartbeat threshold
  • galvanic response input
  • VU-meter output
  • buzzer logic

README.md

Original project summary, hardware links, demo, and external project documentation.


๐ŸŽฅ Demo

Nano Lie Detector

The completed Kinski Polygraph can be seen here:

โ–ถ๏ธ Watch on YouTube

The video demonstrates:

  • completed enclosure
  • twin analog meters
  • finger sensors
  • live needle movement
  • the physical polygraph interface

๐Ÿ”ฌ Ideas for extending the project

  1. ๐Ÿ“Š Add session logging โ€” record timestamped heart-rate and GSR values to microSD or a computer for later plotting.

  2. ๐ŸŽ›๏ธ Add physical calibration controls โ€” replace hardcoded heart-rate and GSR thresholds with potentiometers.

  3. ๐Ÿ“ˆ Add a baseline mode โ€” calculate a short resting baseline before questioning and display changes relative to that baseline.


๐Ÿ“ฐ External references

๐Ÿ› ๏ธ Hackster.io

Arduino Polygraph

The complete build tutorial was published on Hackster.io on August 6, 2020.

It documents:

  • project origin
  • Arduino Nano
  • heart-rate sensor
  • GSR electrodes
  • analog VU meters
  • PWM issue
  • A1 GSR circuit
  • resistor adjustment
  • buzzer
  • custom enclosure
  • source code
  • demo

Arduino Polygraph โ€” Hackster.io


โœ๏ธ Medium

Kinski Polygraph

The original article explains the missing-book premise, hardware, physiological measurements, construction, and completed machine.

Kinski Polygraph โ€” Medium


๐Ÿ–จ๏ธ Cults3D

Arduino Lie Detector Polygraph

The printable enclosure was later published on Cults3D.

Files:

Case.stl
Front.stl

Arduino Lie Detector Polygraph โ€” Cults3D


๐Ÿ“• Contracultura Maker

Kinski Polygraph belongs to a broader collection of machines built around unusual purposes, physical interfaces, electronics, art, literature, and technological experimentation.

More projects and context are collected in:

Contracultura Maker โ€” book


๐Ÿ“š Useful references


๐Ÿ”— You may also be interested in...

Other projects by Roni Bandini combining physical sensors, retro instrumentation, Arduino, and electronic objects.

๐ŸŒฑ๐Ÿ”Š The Sound Machine

Arduino-powered literary machine that converts soil-moisture readings into an imagined audible mood for plants.

Like Kinski Polygraph, it transforms an analog sensor reading into an expressive physical interface.

github.com/ronibandini/TheSoundMachine


๐Ÿงฎ๐Ÿ•ต๏ธ P101

Electronic art installation built from a discarded Olivetti calculator, Arduino UNO R4 Minima, analog mechanics, and a six-digit LCD.

Another project combining electronics with the visual language of older instruments and machines.

github.com/ronibandini/p101


๐ŸŽฒโญ• Arduino Nano R4

Arduino Nano R4 experiments including a Monte Carlo ฯ€-estimation machine with display, button, buzzer, and RGB feedback.

github.com/ronibandini/ArduinoNanoR4


โš ๏ธ Notes

Sensor variability

Heart-rate and GSR values differ between individuals and can change with environmental conditions.

Calibration should be performed each time the device is used.


๐Ÿ“œ License

The current repository does not specify a software license.

Copyright therefore remains with the repository author unless a license is added separately.


๐Ÿ‘ค Author

Roni Bandini

Maker, AI developer, electronic artist and writer.

Buenos Aires, Argentina.

Releases

Packages

Contributors

Languages