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.
- ๐งฎ 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
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.
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.
| 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 |
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:
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.
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.
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.
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.
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.
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.
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.
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.
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
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.
Before using the device, establish a baseline.
Observe the pulse sensor while the subject is relaxed.
Adjust the threshold until beats are detected consistently.
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.
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.
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:
- The Polygraph and Lie Detection โ National Academies
- Do โlie detectorsโ work? โ American Psychological Association
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.
git clone https://github.com/ronibandini/NanoLieDetector.git
cd NanoLieDetectorThe repository currently uses:
master
as its default branch.
Download:
Open:
NanoLieDetector.ino
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.
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.
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.
Connect the buzzer to the digital output defined by:
NanoLieDetector.ino
and ground.
Find the heart-rate:
Threshold
setting in the sketch.
Adjust it for the sensor and subject until pulse detection is stable.
Compile and upload:
NanoLieDetector.ino
to the Arduino Nano.
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.
NanoLieDetector/
โโโ NanoLieDetector.ino
โโโ README.md
Arduino firmware.
Handles:
- pulse sensing
- heartbeat threshold
- galvanic response input
- VU-meter output
- buzzer logic
Original project summary, hardware links, demo, and external project documentation.
The completed Kinski Polygraph can be seen here:
The video demonstrates:
- completed enclosure
- twin analog meters
- finger sensors
- live needle movement
- the physical polygraph interface
-
๐ Add session logging โ record timestamped heart-rate and GSR values to microSD or a computer for later plotting.
-
๐๏ธ Add physical calibration controls โ replace hardcoded heart-rate and GSR thresholds with potentiometers.
-
๐ Add a baseline mode โ calculate a short resting baseline before questioning and display changes relative to that baseline.
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
The original article explains the missing-book premise, hardware, physiological measurements, construction, and completed machine.
The printable enclosure was later published on Cults3D.
Files:
Case.stl
Front.stl
Arduino Lie Detector Polygraph โ Cults3D
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:
- Arduino Nano
- Arduino IDE
- The Polygraph and Lie Detection โ National Academies
- Polygraph overview โ American Psychological Association
Other projects by Roni Bandini combining physical sensors, retro instrumentation, Arduino, and electronic objects.
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
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.
Arduino Nano R4 experiments including a Monte Carlo ฯ-estimation machine with display, button, buzzer, and RGB feedback.
github.com/ronibandini/ArduinoNanoR4
Heart-rate and GSR values differ between individuals and can change with environmental conditions.
Calibration should be performed each time the device is used.
The current repository does not specify a software license.
Copyright therefore remains with the repository author unless a license is added separately.
Roni Bandini
Maker, AI developer, electronic artist and writer.
- ๐ GitHub: @ronibandini
- ๐ผ LinkedIn: Roni Bandini
- ๐ธ Instagram: @ronibandini
- ๐ฆ X: @RoniBandini
- โ๏ธ Medium: bandini.medium.com
- ๐ ๏ธ Hackster: Roni Bandini
Buenos Aires, Argentina.