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 COM1 and COM2. Each stereo 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 COM1 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 snap electrode leads on the other.
Electrode Placement Diagram

3-Lead ECG (Einthoven Triangle)
For a basic 3-lead ECG, connect one cable to COM1:
| COM1 Cable Lead | Electrode Placement | ADS1293 Input | Label |
|---|---|---|---|
| LA | Right Arm | IN1 | RA |
| RA | Left Arm | IN2 | LA |
| RL | Not connected | — | — |
Note: In 3-lead mode, only COM1 is used. The RL wire on the COM1 cable is left unconnected. The Right Leg Drive (RLD) electrode is connected internally.
This configuration captures:
- Channel 1 → Lead I: LA minus RA
- Channel 2 → Lead II: LL minus RA
- Lead III is derived mathematically: Lead II minus Lead I
5-Lead ECG (with Precordial Lead)
For a 5-lead ECG, connect both cables:
Cable 1 → COM1 connector:
| COM1 Cable Lead | Electrode Placement | ADS1293 Input | Label |
|---|---|---|---|
| LA | Right Arm | IN1 | RA |
| RA | Left Arm | IN2 | LA |
| RL | Not connected | — | — |
Cable 2 → COM2 connector:
| COM2 Cable Lead | Electrode Placement | ADS1293 Input | Label |
|---|---|---|---|
| LA | Left Arm | IN2 | LA |
| RA | Left Leg | IN3 | LL |
| RL | Chest (V1 position) | IN5 | V1 |
This adds Channel 3 → V1: precordial electrode (4th intercostal space, right sternal border) versus Wilson Central Terminal reference.
Important: The cable lead labels (LA, RA, RL) printed on the snap connectors do not always match the ECG electrode placement — follow the table above for correct placement.
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: RA (right arm/wrist), LA (left arm/wrist), LL (left leg/ankle)
- 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:
- Download OpenView 2 from GitHub
- 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: github.com/Protocentral/protocentral_openview2
Licenses
- Hardware: Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
- Software: MIT License
