Getting Started with the ProtoCentral ADS1293 3-Channel ECG Breakout Board
Introduction
The ProtoCentral ADS1293 breakout board is a 3-channel, 24-bit electrocardiogram (ECG) analog front-end based on the Texas Instruments ADS1293. It captures high-resolution cardiac signals from up to 3 simultaneous ECG channels, making it suitable for standard 3-lead and 5-lead ECG configurations. The board is designed for portable health monitoring, sports and fitness tracking, and research-grade biopotential measurement.
Each channel includes a dedicated 24-bit sigma-delta ADC with programmable sampling rates from 25.6 kHz down to 10.7 Hz, a built-in Right Leg Drive (RLD) amplifier for noise rejection, and a Wilson Central Terminal for precordial (chest) lead measurements. The board connects to Arduino or ESP32 via the SPI bus, includes an onboard voltage regulator, and comes with ECG cables and disposable electrodes — everything you need to capture your first ECG waveform.
Note: This board is intended for research and development purposes only. It is not FDA, CE, or FCC approved for consumer or medical use.
Key Features
- 3 simultaneous ECG channels — 24-bit sigma-delta ADCs with independent channel programming
- 3-lead and 5-lead ECG support — Einthoven limb leads plus optional precordial (V1) lead
- Adjustable sampling rates — 32, 64, 128, 256, ~533, or ~1066 samples per second
- Built-in Right Leg Drive (RLD) — active noise cancellation for cleaner signals
- Wilson Central Terminal — enables precordial lead measurements for 5-lead ECG
- Ultra-low power — 0.3 mW per channel, ideal for battery-powered applications
- SPI interface — high-speed digital communication with Arduino and ESP32
- On-board 40 MHz clock — no external crystal required
- Onboard voltage regulator — connect directly to 5V or 3.3V systems
- Includes cables and electrodes — 3-lead ECG cable with snap connectors and 10 disposable electrodes
What’s in the Box
- 1× ProtoCentral ADS1293 3-channel ECG breakout board
- 1× 3-lead ECG cable with snap connectors
- 10× Disposable ECG electrodes
You will also need an Arduino Uno (or compatible board), jumper wires, and a USB cable.
Specifications
| Parameter | Value |
|---|---|
| ECG AFE IC | Texas Instruments ADS1293 |
| ADC Resolution | 24-bit per channel |
| Number of Channels | 3 simultaneous + 1 pace channel |
| Sampling Rates | 32, 64, 128, 256, ~533, ~1066 SPS |
| Differential Input Range | ±400 mV |
| Interface | SPI |
| Power per Channel | 0.3 mW |
| On-board Clock | 40 MHz |
| Logic Level | 3.3V or 5V (selectable via jumper) |
| Supply Voltage | 3.3V to 5V (onboard regulator) |
| ECG Inputs | IN1–IN6 (6 electrode inputs) |
Pin Connections
Wiring Diagram
ADS1293 Breakout to Arduino Uno
| ADS1293 Pin | Arduino Uno Pin | Function |
|---|---|---|
| MISO | D12 | SPI Data Out (Slave → Master) |
| MOSI | D11 | SPI Data In (Master → Slave) |
| SCLK | D13 | SPI Clock |
| CS | D4 | Chip Select |
| DRDY | D2 | Data Ready (interrupt) |
| Vcc | 5V | Power |
| GND | GND | Ground |
ADS1293 Breakout to ESP32
| ADS1293 Pin | ESP32 Pin (VSPI) | Function |
|---|---|---|
| MISO | GPIO 19 | SPI Data Out |
| MOSI | GPIO 23 | SPI Data In |
| SCLK | GPIO 18 | SPI Clock |
| CS | GPIO 4 | Chip Select |
| DRDY | GPIO 2 | Data Ready (interrupt) |
| Vcc | 5V | Power |
| GND | GND | Ground |
Electrode Connections
The ADS1293 breakout board has two 3.5mm stereo (TRS) connectors labeled CON1 and CON2. Each connector carries 3 electrode wires (Tip, Ring, Sleeve), giving a total of 6 wires across the two connectors. Only 5 of these wires are used for electrodes — one wire on the CON2 connector is left unconnected.
The board comes with two 3-electrode snap cables, each with a standard 3.5mm stereo plug on one end and three color-coded snap electrode leads on the other (Blue, Red, and Black caps).
Important: The cable lead labels printed on the snap connectors (LA, RA, RL) do not match the actual electrode placement. Always identify cables by the color of the sticker on the cable cap (Blue, Red, or Black) and follow the wiring tables below.
Electrode Placement Diagram
The diagram below shows the complete 5-lead ECG wiring with Mason-Likar torso electrode placement. Solid lines are Cable 1 (CON1) and dashed lines are Cable 2 (CON2).
3-Lead ECG (Einthoven Limb Leads)
For a basic 3-lead ECG, connect one cable to CON1 only:
| Cable Cap Color | Electrode Placement | ADS1293 Input | ECG Label |
|---|---|---|---|
| Blue | Below right collarbone | IN1 | RA |
| Red | Below left collarbone | IN2 | LA |
| Black | Lower left abdomen | IN3 | LL |
This configuration captures three standard limb leads:
- Channel 1 → Lead I: LA (IN2) minus RA (IN1)
- Channel 2 → Lead II: LL (IN3) minus RA (IN1)
- Lead III is derived mathematically: Lead II minus Lead I
Note: In 3-lead mode, only CON1 is used. The Right Leg Drive (RLD) noise rejection is connected internally on the ADS1293. For best signal quality, add the RLD electrode using CON2 (see 5-lead setup below).
5-Lead ECG (with RLD and Precordial Lead)
For a 5-lead ECG, connect both cables:
Cable 1 → CON1 connector (solid lines in diagram):
| Cable Cap Color | Electrode Placement | ADS1293 Input | ECG Label |
|---|---|---|---|
| Blue | Below right collarbone | IN1 | RA |
| Red | Below left collarbone | IN2 | LA |
| Black | Lower left abdomen | IN3 | LL |
Cable 2 → CON2 connector (dashed lines in diagram):
| Cable Cap Color | Electrode Placement | ADS1293 Input | ECG Label |
|---|---|---|---|
| Red | Lower right abdomen | RLD | RL (Right Leg Drive) |
| Black | 4th intercostal space, right sternal border | IN5 | V1 (precordial) |
| Blue | Not connected | — | — |
This adds two additional electrodes:
- RL (RLD): The Right Leg Drive electrode provides active noise cancellation, significantly improving signal quality on all channels.
- Channel 3 → V1: The precordial electrode at the 4th intercostal space (right sternal border) is measured against the Wilson Central Terminal reference, providing a chest lead view of the heart.
Electrode Placement Guide (Mason-Likar)
All electrodes are placed on the torso (not on the limbs), following the Mason-Likar placement used in clinical settings:
| ECG Label | Position on Body |
|---|---|
| RA | Below the right collarbone, near the right shoulder |
| LA | Below the left collarbone, near the left shoulder |
| RL | Lower right abdomen |
| LL | Lower left abdomen |
| V1 | 4th intercostal space, right sternal border (between ribs, next to the sternum) |
Tip: Use the disposable snap electrodes on clean, dry skin. Wipe the electrode sites with an alcohol swab for best adhesion and signal quality.
Installing the Arduino Library
Option 1: Arduino Library Manager (Recommended)
- Open the Arduino IDE
- Go to Sketch → Include Library → Manage Libraries…
- Search for “Protocentral ADS1293”
- Find “ProtoCentral ADS1293 ECG library” and click Install
Option 2: Manual Install from GitHub
- Go to github.com/Protocentral/protocentral-ads1293-arduino
- Click Code → Download ZIP
- In the Arduino IDE, go to Sketch → Include Library → Add .ZIP Library…
- Select the downloaded ZIP file
Your First ECG Reading (3-Lead)
Open the example sketch: File → Examples → ProtoCentral ADS1293 → 3-lead ECG streaming
Or create a new sketch with the following code:
#include "protocentral_ads1293.h"
#include <SPI.h>
#define DRDY_PIN 2
#define CS_PIN 4
ADS1293 ecg(DRDY_PIN, CS_PIN);
void setup() {
Serial.begin(115200);
ecg.begin();
ecg.configureChannel1(FlexCh1Mode::Default);
ecg.configureChannel2(FlexCh2Mode::Default);
ecg.enableCommonModeDetection(CMDetMode::Enabled);
ecg.configureRLD(RLDMode::Default);
ecg.setSamplingRate(ADS1293::SamplingRate::SPS_128);
ecg.configureChannelConfig(ChannelConfig::Default3Lead);
ecg.applyGlobalConfig(GlobalConfig::Start);
}
void loop() {
if (ecg.isDataReady()) {
auto samples = ecg.getECGData();
if (samples.ok) {
Serial.print(samples.ch1);
Serial.print(',');
Serial.print(samples.ch2);
Serial.print(',');
Serial.println(samples.ch3);
}
}
}
What This Code Does
- Includes the libraries —
protocentral_ads1293.hfor the ECG front-end andSPI.hfor SPI bus communication - Creates the ECG object — with DRDY on pin 2 and CS on pin 4
- Configures channels — sets up channels 1 and 2 for default 3-lead ECG, enables common-mode detection and Right Leg Drive for noise rejection
- Sets sampling rate — 128 samples per second (good balance of resolution and data rate)
- Starts acquisition —
applyGlobalConfig(GlobalConfig::Start)begins continuous ECG capture - Reads data — checks
isDataReady()each loop iteration, then prints comma-separated channel values for the Arduino Serial Plotter
Using the Arduino Serial Plotter
- Upload the sketch to your Arduino
- Attach the 3 ECG electrodes to your torso: RA (below right collarbone), LA (below left collarbone), LL (lower left abdomen)
- Connect the electrode cable snaps to the electrodes
- Open Tools → Serial Plotter at 115200 baud
- You should see live ECG waveforms — the characteristic PQRST complex of your heartbeat
Tip: For cleaner signals, place electrodes on smooth skin with minimal hair. Clean the skin with an alcohol wipe before attaching the electrode.
ESP32 Setup
For ESP32, specify custom SPI pins in begin():
#define SCK_PIN 18
#define MISO_PIN 19
#define MOSI_PIN 23
ecg.begin(SCK_PIN, MISO_PIN, MOSI_PIN);
Visualizing with OpenView
For a richer visualization experience, use the ProtoCentral OpenView application:
- Install OpenView 2 — see the setup guide for downloads + first run on Windows / Linux / iOS / Android
- Upload the OpenView example sketch from the library examples
- Open OpenView 2, select “ADS1293 breakout” from the board dropdown
- Select the correct serial port
- Click Connect to see real-time ECG waveforms with heart rate
Troubleshooting
No ECG signal / flat line
- Check that electrodes are properly attached to skin with good contact
- Verify SPI wiring — MISO, MOSI, SCLK, CS, and DRDY must all be correctly connected
- Ensure the electrode cable snaps are firmly connected to the breakout board’s electrode port
- Check that DRDY is on an interrupt-capable pin (D2 on Arduino Uno)
Very noisy signal
- Make sure the Right Leg Drive electrode (RL) is connected — this is essential for noise rejection
- Keep electrode wires away from power supplies and motors
- Ensure the subject is not touching grounded metal objects
- Try a lower sampling rate (64 or 32 SPS) for better noise filtering
- Replace electrodes if they have been attached for a long time (gel dries out)
Only one or two channels working
- Check that all electrode connections are secure
- For 3-lead ECG, you need at minimum: RA, LA, LL, and RLD connected
- Verify that all 3 channels are configured in your sketch (Channel 1, 2, and optionally 3)
SPI communication errors
- Verify CS and DRDY pins in your code match your physical wiring
- Check that no other SPI devices are conflicting on the bus
- Try reducing SPI clock speed if using long jumper wires
Resources
- Arduino Library: github.com/Protocentral/protocentral-ads1293-arduino
- Hardware Design Files: GitHub repository
- ADS1293 Datasheet: TI ADS1293 Datasheet (PDF)
- OpenView 2: setup guide · source on GitHub
Licenses
- Hardware: Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
- Software: MIT License

