2026-06-04 14:23:36 +02:00
2026-05-27 18:46:43 +00:00
2026-06-04 14:23:36 +02:00
2026-06-03 23:03:24 +02:00
2026-05-14 23:49:29 +02:00
2026-06-04 14:23:36 +02:00
2026-06-04 14:23:36 +02:00

CNC Water Flow Controller

A fail-safe water flow monitoring module designed to protect CNC spindles and laser cutter tubes. It reads impulses from a ZJ-S401 water flow sensor, displays the real-time flow rate on an I2C OLED display, and triggers an active-low alarm to the CNC controller if the flow drops below a user-defined threshold.

Flow Controller Schema

Front Back

ZJ-S401

Table of Contents

  1. Features
  2. Hardware Design (KiCad)
  3. Panel Design and GCode
  4. Microcontroller Pin Mapping
  5. Firmware Logic
  6. Firmware Build & Flashing

Features

  • Microcontroller: WCH CH32V003J4M6 (RISC-V).
  • Display UI: 8-pin connector for a custom OLED/Button panel (I2C SSD1315).
  • Adjustable Threshold: 2-button interface (Up/Down) using an analog resistor ladder (ADC) to save MCU pins.
  • Fail-Safe Output: N-channel MOSFET (2N7002) acting as an open-drain output. It actively pulls the CNC input to GND during normal operation. If power fails, wires break, or water stops, the connection opens and triggers the CNC alarm.
  • EMI Protection: Hardware RC debouncing and noise filtering on the sensor input.
  • Direct 24V Operation: Powered directly from the CNC controller's 24V rail.

Hardware Design (KiCad)

  • Power: 24V DC Input (via CNC connector J3).
  • Sensor Compatibility: ZJ-S401 Water flow sensor (plastic valve body, a water rotor and a hall-effect sensor). See the working principle of the hall water flow sensor.
  • Output: 3-pin CNC interface (+24V, GND, ALARM_CNC). Connects directly to standard CNC active-low sinking inputs.

Panel Design and GCode

The scripts folder contains a guide to panelize the board (Flow_Controller_Panel.kicad_pcb) and howto generate gcode.

Microcontroller Pin Mapping (Per Schematic)

Pin Schematic Net Function MCU Port (SOP8)
1 FLOW_PULSE_MCU Input: Pulse counter from Flow Sensor PD6
2 GND System Ground (VSS) VSS
3 ALARM_TRIGGER Output: Drives the Gate of the 2N7002 PA2
4 +24V System Power (VDD) VDD
5 I2C_SDA I2C Data (OLED Display) PC1
6 I2C_SCL I2C Clock (OLED Display) PC2
7 BUTTON_ADC ADC Input: 2-Button Resistor Ladder PC4
8 SWIO WCH-LinkE Programming Interface PD1

Firmware Logic (Overview)

  1. Interrupts: Pin 1 (PD6) counts falling edges from the flow sensor. Flow (L/min) is calculated every second.
  2. Failsafe: If Current_Flow >= Threshold, Pin 3 is driven HIGH (MOSFET ON, CNC OK). If Current_Flow < Threshold, Pin 3 is driven LOW (MOSFET OFF, CNC Alarm).
  3. UI: ADC reads Pin 7 (PC4) to detect button presses for adjusting the threshold.
  4. Storage: User-defined threshold is saved to MCU flash memory.

Firmware Build & Flashing

The firmware is written in C using the lightweight ch32fun framework. All source files and toolchain documentation are located in the firmware folder.

Step-by-step Setup:

  1. Follow the setup guide in firmware to install the RISC-V GCC toolchain and minichlink.
  2. Connect your WCH-LinkE programmer to the 3-pin SWIO header J1 (+3.3V, SWIO, GND).
  3. Run make to compile the firmware.
  4. Run make flash to upload the code to the CH32V003 microcontroller.
Description
CNC Water Flow Controller
Readme 19 MiB
Languages
C 98.5%
Makefile 1.5%