Documentation

ShillehTek WCS1700 70A Hall Current Sensor Module Overcurrent Detect | ShillehTek Product Manual
Documentation / ShillehTek WCS1700 70A Hall Current Sensor Module Overcurrent Detect | ShillehTek Product Manual

ShillehTek WCS1700 70A Hall Current Sensor Module Overcurrent Detect | ShillehTek Product Manual

Overview

The WCS1700 is a Hall-effect current sensor module capable of measuring DC and AC currents up to 70 A. The wire being measured passes through a hole in the on-board PCB, so there's no need to break the circuit — clip it through, run your wire, and read the analog voltage. This makes it ideal for monitoring battery banks, motor loads, solar panels, or building overcurrent / inrush detection.

The module has both an analog output (Aout / Vout) that follows the current linearly and a digital output (Dout) driven by an on-board comparator with an adjustable threshold pot. Use the analog output for measurement and logging; use the digital output as a simple "current exceeded threshold" alarm.

It works on 5V supply, has a quiescent (no current) output around VCC/2, and is compatible with any microcontroller that has an ADC — Arduino, ESP32, Raspberry Pi (via an external ADC like the ADS1115), or the Raspberry Pi Pico.

At a Glance

Current Range
0 - 70 A (DC or AC)
Operating Voltage
5V DC
Sensitivity
~32 mV/A
Outputs
Analog + Digital (alarm)
Quiescent Output
VCC / 2 (~2.5V)
Pins
VCC, GND, Aout, Dout

Specifications

Parameter Value
Sensing Element WCS1700 Hall-effect current sensor
Operating Voltage (VCC) 5V DC
Quiescent Current ~10 mA
Measurable Current 0 - 70 A (DC), 0 - 50 A RMS (AC)
Sensitivity (typical) 32 mV / A
Quiescent Output Voltage VCC / 2 (~2.5V at 5V supply)
Bandwidth ~10 kHz
Isolation Galvanic (Hall-effect; no electrical contact)
Analog Output (Aout) Linear voltage proportional to current
Digital Output (Dout) LM393 comparator, threshold via on-board pot
Indicator LEDs Power + Threshold-exceeded
Wire Hole Diameter ~5 mm

Pinout Diagram

WCS1700 70A Hall-effect current sensor module pinout diagram showing VCC (5V), GND, Dout (digital threshold output), Aout (analog current output), threshold adjustment knob, level signal indicator LED, and current detection sensor coil

Wiring Guide

Arduino Wiring

The Arduino's 10-bit ADC at 5V resolves about 4.9 mV per step — fine for this sensor. The wire you want to measure passes through the hole on the WCS1700 PCB; do not connect it electrically to the module.

WCS1700 Pin Arduino Pin
VCC 5V
GND GND
Aout A0 (analog input)
Dout D2 (digital input, optional)
High Voltage / Current Warning: Even though the WCS1700 isolates you from the conductor, the wire passing through the module carries the full system voltage and current. Treat that wire with the same respect you'd treat any high-current line. If you're unsure, do not work on mains AC.

ESP32 Wiring

The WCS1700's quiescent output is around 2.5V (centered) and swings 32 mV per amp around that. The ESP32 ADC reads up to 3.3V, so you must scale the output down with a divider before connecting it to a GPIO input.

WCS1700 Pin ESP32 Pin Details
VCC VIN (5V)
GND GND
Aout GPIO 34 (ADC1) Through 2:1 divider (2x 10k)
Dout GPIO 35 3.3V logic; safe direct
Warning: Aout sits around 2.5V at idle but can swing up to ~4.7V at the high end of the current range. Connecting it directly to an ESP32 ADC pin can damage the chip. Use a 2:1 voltage divider (two equal resistors, e.g. 10k each) to halve the signal before reading it.
Tip: Use ADC1 channels (GPIO 32-39) only. ADC2 channels are reserved for Wi-Fi and produce errors when Wi-Fi is active.

Raspberry Pi Wiring

The Raspberry Pi has no built-in ADC, so you'll need an external ADC such as the ADS1115. Power the WCS1700 from the Pi's 5V rail and feed Aout into one of the ADS1115 channels.

Connection Pi Pin
WCS1700 VCC Pin 2 (5V)
WCS1700 GND Pin 6 (GND)
WCS1700 Aout ADS1115 A0
WCS1700 Dout Pin 11 (GPIO 17)
ADS1115 SDA Pin 3 (GPIO 2)
ADS1115 SCL Pin 5 (GPIO 3)
Info: The ADS1115 supports a +/-6.144V range, so the WCS1700's full output swing fits comfortably without an extra divider. Be sure to share GND between the Pi, ADS1115, and WCS1700.

Raspberry Pi Pico Wiring

The Pico's 12-bit ADC reads up to 3.3V. As with the ESP32, you'll need a 2:1 divider on the Aout signal so it never exceeds 3.3V at the input pin.

WCS1700 Pin Pico Pin Details
VCC VBUS (5V from USB)
GND GND
Aout GP26 (ADC0) Through 2:1 divider
Dout GP15

Code Examples

Arduino - Read Current in Amps

wcs1700_arduino.ino
// WCS1700 - Read current in amps on Arduino
// Wire the load conductor through the WCS1700 hole.
// Aout to A0, Dout (optional) to D2.

const int aoutPin = A0;
const int doutPin = 2;

const float VREF        = 5.0;     // Arduino ADC reference
const float SENSITIVITY = 0.032;   // ~32 mV per amp
float       offsetVolts = 2.5;     // calibrated below

void calibrateZero() {
  long sum = 0;
  for (int i = 0; i < 200; i++) { sum += analogRead(aoutPin); delay(2); }
  offsetVolts = (sum / 200.0) * VREF / 1023.0;
}

void setup() {
  Serial.begin(9600);
  pinMode(doutPin, INPUT);
  delay(500);
  calibrateZero();
  Serial.print("Zero offset: "); Serial.print(offsetVolts, 3); Serial.println(" V");
}

void loop() {
  int raw = analogRead(aoutPin);
  float volts = raw * VREF / 1023.0;
  float amps  = (volts - offsetVolts) / SENSITIVITY;

  Serial.print("V="); Serial.print(volts, 3);
  Serial.print("V  I="); Serial.print(amps, 2); Serial.print(" A");
  if (digitalRead(doutPin) == LOW) Serial.print("  [ALARM]");
  Serial.println();
  delay(250);
}

ESP32 - Logged Current Reading

wcs1700_esp32.ino
// WCS1700 on ESP32 - measure current with a 2:1 divider on Aout
// Aout -> 10k -> GPIO34 -> 10k -> GND

const int  aoutPin     = 34;
const float VREF       = 3.3;       // ADC reference
const float DIVIDER    = 0.5;       // 2:1 voltage divider
const float SENSITIVITY = 0.032;    // V/A
float       offsetVolts = 1.25;     // 2.5V * 0.5 (divided)

void setup() {
  Serial.begin(115200);
  analogReadResolution(12);  // 0 - 4095
  delay(500);

  long sum = 0;
  for (int i = 0; i < 500; i++) { sum += analogRead(aoutPin); delay(2); }
  offsetVolts = (sum / 500.0) * VREF / 4095.0;
}

void loop() {
  int raw = analogRead(aoutPin);
  float vAtPin = raw * VREF / 4095.0;
  float vReal  = vAtPin / DIVIDER;
  float amps   = (vReal - (offsetVolts / DIVIDER)) / SENSITIVITY;

  Serial.printf("Vpin=%.3f  Vreal=%.3f  I=%.2f A\n", vAtPin, vReal, amps);
  delay(250);
}

Raspberry Pi (Python + ADS1115)

wcs1700_rpi.py
#!/usr/bin/env python3
# WCS1700 + ADS1115 on Raspberry Pi
# pip install adafruit-circuitpython-ads1x15

import time
import board, busio
from adafruit_ads1x15.ads1115 import ADS1115
from adafruit_ads1x15.analog_in import AnalogIn

i2c = busio.I2C(board.SCL, board.SDA)
ads = ADS1115(i2c)
ch  = AnalogIn(ads, 0)            # WCS1700 Aout -> A0

SENSITIVITY = 0.032               # V/A

# Auto-zero
samples = [ch.voltage for _ in range(200)]
offset = sum(samples) / len(samples)
print("Zero offset: {:.3f} V".format(offset))

while True:
    v = ch.voltage
    amps = (v - offset) / SENSITIVITY
    print("V={:.3f}  I={:.2f} A".format(v, amps))
    time.sleep(0.25)

Frequently Asked Questions

Do I have to cut the wire to use the sensor?
No. The current-carrying conductor passes through the hole in the WCS1700 PCB. The sensor measures the magnetic field around the wire — it never makes electrical contact. Just route your wire through the hole and the WCS1700 reads the current.
Why is the analog output 2.5V when no current flows?
The WCS1700 is bidirectional. It centers its output at VCC/2 so it can swing both up (positive current) and down (negative current). At 5V VCC, 0 A reads about 2.5V. Subtract the idle voltage from your live reading to get the signed current.
How do I calibrate the zero offset?
Power the module with no wire through the hole (or a wire carrying zero current), then average a few hundred ADC readings. That average is your zero offset. Re-do this any time the supply voltage or temperature changes significantly.
What does the on-board pot do?
It sets the threshold for the digital output. When the sensed current produces a voltage above the pot setting, the on-board comparator drives Dout LOW and lights the indicator LED. Use this for simple alarms (overcurrent, motor stall, fuse blown) without writing comparison code on your microcontroller.
Can I measure AC current?
Yes — but you'll see a sine-wave shaped voltage on Aout. To get the RMS amperage, sample fast (1 kHz+), subtract the offset, square each sample, average, and take the square root. The bandwidth of ~10 kHz is plenty for 50/60 Hz mains current.
Why are my readings noisy?
A few common causes: the supply isn't stable (use a clean 5V supply, not a noisy USB hub), the ADC reference is fluctuating (the Arduino's 5V rail is approximate), or you're not averaging enough samples. Take 50-100 samples and average them for a single "reading" to smooth out noise.
Can I read this with a Raspberry Pi directly?
Not directly — the Pi has no analog input. Use an external ADC like the ADS1115 over I2C, or read the digital alarm output (Dout) on a GPIO if you only need overcurrent detection.