Crack detection in a stamping die · Ontario · Jan – Apr 2024
Streamed strain-gauge data from a hydraulic press over MQTT into PostgreSQL, with a live web dashboard for operators.
Streamed strain-gauge data over MQTT to a live dashboard
Caught every cracked part with no false alarms
Built a patent-pending PLC buffer that raised sampling from 142 to 500 Hz
An anomaly detector learns each part's normal stroke envelope; it caught 100% of cracked parts with zero false positives across a 150-part production run. A patent-pending, semaphore-driven multithreaded buffer on a memory-limited PLC raised the data rate from 142 Hz to 500 Hz.
In-die crack detection
A real-time integrity monitor for an industrial hydraulic press, using strain gauges embedded near the die. I built the pipeline end to end: sensor data streamed over MQTT, re-synchronized and stored in PostgreSQL, plus a web dashboard where operators and engineers compare strain profiles across batches and review anomalies.
The detector
I designed an anomaly detection algorithm that finds the characteristic discontinuity in the strain signatures across four sensors when a part cracks during forming. Running in real time, it caught every cracked part with zero false positives over a 150-part validation run, removing defective parts from the line automatically. It recognizes when a different part is being stamped, and a moving-window average stops slow sensor drift from being flagged.
More data from the PLC
The press's PLC had very little memory. A patent-pending buffering system I engineered, with semaphore-driven multithreading and staged data queues, let it stream far more data, raising collection from about 140 Hz to over 500 Hz for much finer analysis of each stroke.
Python
MQTT
PostgreSQL
PLC · multithreading
Signal processing
Media
Crack-detection dashboard flagging a cracked partAnomaly detection algorithm flow chartControl strokes (red) vs current stroke (blue): normal partControl strokes (red) vs current stroke (blue): cracked partPLC data aggregation with semaphore-driven threads and staged queues