Signal Coach

1 Upload the sketch2 Close Serial Monitor3 Click Connect4 Place the sensor gently

Already sending pulse data? Start at Connect. Desktop Chrome, Edge, or Brave. Coach not loading? Open directly.

Loading Signal Coach

Getting the waveform and coach ready. This usually takes a moment.

Taking longer than expected

Open Signal Coach directly and keep going. Your Arduino setup stays the same.

Open Signal Coach

BETA

What the coach does: It reads your live pulse wave and tells you when to adjust the sensor, hold still, or trust the BPM.

Pulse samples stay in this browser tab. This beta runs alongside the current WebSerial page. Wave visible but not locking? Use Re-sync Signal.

Hack Signal Coach at home

Every part of the Chrome coach is public, readable source code: the waveform UI, beat detector, BPM/IBI logic, coaching states, Re-sync recovery, serial adapters, tests, tutorial page, and Arduino sender. There is no build step, minified bundle, cloud detector, or private dependency.

1 · Send raw samples

Upload the minimal Arduino/ESP32 sketch. It prints one ADC value every 20 ms; Chrome does the coaching.

2 · Run locally

Serve the downloaded repository on localhost, open the dashboard in Chrome, and connect at 50 samples/s.

3 · Change anything

Edit the unminified detector, copy, colors, serial formats, waveform renderer, or tests under the MIT License.

python3 -m http.server 8000
# Open http://localhost:8000/docs/signal-coach/ in Chrome

Arduino / ESP32 setup

No Arduino library is required for the simplest stream. Choose the signal pin for your board, upload this sketch, select 50 samples/s above, and let Chrome do the beat detection and coaching. The same sketch is saved in the repo as SignalCoachWebSerial.ino.

Board PULSE_PIN Sensor power
Arduino Uno / Nano / Mega A0 5V or 3.3V
XIAO ESP32-S3 1 3.3V
ESP32 DevKit 34 3.3V
/* PulseSensor Signal Coach — minimal Web Serial sender
 * Sends one raw pulse-wave sample per line at 115200 baud.
 * Chrome owns beat detection, BPM/IBI, coaching, and Re-sync.
 * World Famous Electronics LLC · MIT License
 */
const int PULSE_PIN = A0; // XIAO ESP32-S3 A0 = GPIO 1; ESP32 DevKit often uses 34.
const unsigned long SAMPLE_PERIOD_MS = 20;
unsigned long nextSampleAt = 0;

void setup() {
  Serial.begin(115200);
  delay(1000);
}

void loop() {
  if ((long)(millis() - nextSampleAt) < 0) return;
  nextSampleAt += SAMPLE_PERIOD_MS;
  Serial.println(analogRead(PULSE_PIN));
}

Troubleshooting

What you see What to try
Cannot connect Close Arduino Serial Monitor. Use desktop Chrome, Edge, or Brave. Reconnect USB and try again.
No Signal Check signal, power, and ground. Confirm the sketch pin and 115200 baud. Then place the sensor on skin.
Hold Steady Use lighter pressure. Rest your hand on a surface, keep the cable from pulling, or try an earlobe.
Good Wave but no BPM Keep the same position for a few more beats. The coach waits for a repeatable pattern.
Signal Lost Motion or pressure changed. Reposition gently and hold still again.
Signal stuck near 0 or full scale Check wiring and power. Make sure the signal wire reaches an analog-capable input.
What about Signal, Beat, and IBI?

Signal is the raw ADC reading used to draw the waveform. Beat is a one-sample event you can use to flash a light or trigger an animation. IBI is the measured time between accepted beats in milliseconds. Signal Coach keeps these in Technical details because most users need placement guidance and a trustworthy waveform before they need raw timing values.

How Web Serial works

Your board sends raw pulse-wave samples over USB at 115200 baud. A single number per line is enough; the tutorial's signal,bpm,ibi,beat format works too. Chrome draws the waveform, detects beats, calculates IBI and BPM, and runs Signal Coach. Any BPM or IBI supplied by the board is shown only as a diagnostic and never controls the coach. No samples are sent to PulseSensor.com.

Need a steadier hold?
The current PulseSensor Kit includes the TPU Stabilizer Ring, finger strap, ear clip, and insulation dots.

Educational biofeedback only. PulseSensor and Signal Coach are not medical devices and must not be used for diagnosis, treatment, or health decisions.