top of page

Predictive Maintenance for Motors and Cranes: The Data You Need Before Any Model

Writer: Srihari Maddula
Srihari Maddula
8 hours ago
18 min read
Large empty industrial warehouse with yellow overhead cranes
Photo: Peter Herrmann / Unsplash

The maintenance manager's request was short: put artificial intelligence on the cranes, and tell us before they break.

We said yes, and for the first nine months nothing resembling artificial intelligence ran on any crane. What ran instead was a modest set of sensors, a lot of arithmetic about bearings and a growing pile of data, because the model everyone wanted needs something that did not yet exist: examples of the failures it was supposed to predict. This is the story of that project, told in order, with the numbers and the code where they mattered. It is a representative composite, genericised, drawn from several condition-monitoring deployments on cranes and motors, and the figures are illustrative.

The lesson, which runs through every stage, is that predictive maintenance is a data problem long before it is a modelling problem. The teams that succeed spend their first months deciding what to measure, where, when and how to describe what they see. The teams that fail buy the model first.


Week One: A List of What Failed Last Year

The first meeting produced a list, on paper, of everything that had gone wrong with the cranes in the previous year. It was short, and it was more valuable than any dataset.

Most of the stops were bearings: on the hoist motors, on the gearbox shafts and on the wheels of the long-travel drive. A few were couplings. Several were brakes, which wear and fail differently and which vibration sensors barely see. A handful were electrical. And more than half of the lost hours came from two cranes that ran the heaviest duty.

That list set the scope. A condition-monitoring system that tries to predict everything predicts nothing well. We chose the two failure modes that cost the most and that vibration can see, bearings and gearbox faults on the hoist drive, and the two cranes with the heaviest duty. We would add current and temperature measurements for the electrical side, and leave brakes to a periodic manual check.

Start from the failure list, not from the sensor catalogue. A system built to detect three failures well beats one built to detect twenty badly.

Choosing What to Measure

Three kinds of measurement carry most of the information about a rotating machine.

Measurement

What it reveals

Cost and effort

Blind spots

Vibration, from an accelerometer

Bearing wear, imbalance, misalignment, looseness, gear faults

Moderate, needs good mounting

Slow processes, electrical faults

Motor current

Load, electrical faults, some mechanical effects

Low, no access to the machine

Weak signal for early bearing faults

Temperature

Overload, lubrication failure, late-stage damage

Low

Late, because heat rises after damage begins

We used all three, with vibration as the primary early indicator. A bearing fault announces itself in vibration weeks before it heats the housing, and temperature alone tells you about the failure when it is already expensive. Current showed us the duty: how hard the motor was working and when.


Mounting Is the Measurement

The first surprise was not about data. It was about glue.

An accelerometer measures the motion of whatever it is attached to. If the mounting itself has a resonance in the range of interest, the sensor measures the mount. A magnet on a painted surface rings at a frequency within the band where the early fault signature lives, and a sensor stuck on with a soft adhesive filters the very frequencies you want.

Mounting method

Frequency range it carries well

When to use it

Stud into a machined seat

Highest

Permanent installations, best quality

Adhesive on a cleaned, flat pad

Good

Permanent, where studding is not allowed

Magnet on a flat clean surface

Limited at the top end

Surveys and temporary tests

Handheld probe

Poorest and least repeatable

Quick checks only

We studded a mounting pad to each bearing housing and recorded the same machine with the stud mount and a magnet mount to see the difference. Above about two kilohertz the magnet mount's response fell away and added a resonance. Since the bearing fault energy we cared about excites resonances in the one to three kilohertz region, we needed the stud.

Position and direction matter equally. The sensor goes as close to the bearing as possible, on the load zone, in the radial direction where the fault impacts are strongest. Mark the axes, record the orientation and photograph the installation, because six months later nobody will remember which axis was which.


What Overall Vibration Tells You, and When

The usual first measure is the overall level, the root-mean-square value of the vibration signal, which is also what simple alarm limits use. Its limitation shows clearly in a small simulation.

The code below builds a vibration signal from a rotating shaft at 25 hertz, with a second harmonic and noise, and adds the periodic impacts a defective outer race of a bearing would produce, at three severities. It then computes the features that matter. The bearing here has nine rolling elements and a ratio of ball diameter to pitch diameter of 0.21.

import numpy as np, math
from scipy.signal import hilbert, butter, filtfilt
from scipy.stats import kurtosis

rng = np.random.RandomState(7)
fs, fr = 5000, 25.0
t = np.arange(0, 2.0, 1 / fs)

def bpfo(n_balls, d_over_D, fr_hz, phi_deg=0):
    return n_balls / 2 * fr_hz * (1 - d_over_D * math.cos(math.radians(phi_deg)))

def healthy():
    return np.sin(2 * np.pi * fr * t) + 0.4 * np.sin(2 * np.pi * 2 * fr * t) + 0.25 * rng.randn(len(t))

def faulty(sev):
    x = healthy(); f0 = bpfo(9, 0.21, fr); imp = np.zeros_like(t)
    for k in range(int(2.0 * f0)):
        imp[int(k / f0 * fs)] += sev
    ring = np.exp(-np.arange(0, 0.02, 1 / fs) * 900) * np.sin(2 * np.pi * 1800 * np.arange(0, 0.02, 1 / fs))
    return x + np.convolve(imp, ring, mode="full")[:len(t)]

def features(x):
    rms = float(np.sqrt(np.mean(x ** 2))); crest = float(np.max(np.abs(x)) / rms)
    kurt = float(kurtosis(x, fisher=False))
    b, a = butter(4, [1200 / (fs / 2), 2400 / (fs / 2)], btype="band")
    env = np.abs(hilbert(filtfilt(b, a, x))); env -= env.mean()
    spec = np.abs(np.fft.rfft(env * np.hanning(len(env)))); freqs = np.fft.rfftfreq(len(env), 1 / fs)
    m = (freqs > 20) & (freqs < 300)
    return round(rms, 3), round(crest, 2), round(kurt, 2), round(float(freqs[m][np.argmax(spec[m])]), 1)

print(round(bpfo(9, 0.21, fr), 1))             # 88.9 Hz expected outer-race frequency
print(features(healthy()))                     # (0.799, 2.44, 2.07, 143.0)
for s in (0.5, 1.5, 4.0):
    print(s, features(faulty(s)))
# 0.5 (0.803, 2.89, 2.09, 89.0)   1.5 (0.832, 3.11, 2.24, 89.0)   4.0 (1.006, 4.44, 4.13, 89.0)

Condition

Overall level (RMS)

Crest factor

Kurtosis

Envelope-spectrum peak

Healthy

0.799

2.44

2.07

143.0 Hz, noise

Early fault, severity 0.5

0.803

2.89

2.09

89.0 Hz

Developing fault, severity 1.5

0.832

3.11

2.24

89.0 Hz

Advanced fault, severity 4.0

1.006

4.44

4.13

89.0 Hz

The table is the argument. At the early severity, overall vibration rose by half a percent, from 0.799 to 0.803, which no alarm threshold would ever flag. Kurtosis was flat. Crest factor had begun to move, from 2.44 to 2.89. And the envelope spectrum, which isolates the impacts in the resonance band and looks at their repetition rate, already showed a clear peak at 89.0 hertz, within a tenth of a hertz of the calculated outer-race frequency of 88.9. In the healthy machine the same analysis found only noise.

Overall vibration reacts last. By the time it doubles the damage is advanced. The envelope spectrum reacts first, and it names the fault.

The overall vibration level is the last indicator to notice a bearing fault. The envelope spectrum is among the first, and it points at the part.

Bearing Frequencies: Arithmetic Before Algorithms

Each bearing fault repeats at a frequency fixed by the geometry and the shaft speed. For an outer-race defect, the rate at which rolling elements pass the flaw is half the number of elements times the shaft frequency, times one minus the ratio of element diameter to pitch diameter, multiplied by the cosine of the contact angle. The same bearing at 25 hertz has an outer-race frequency of 88.9 hertz and an inner-race frequency of 136.1.

Fault location

Repetition rate

Reading

Outer race

About 3.6 times shaft speed for this bearing

Often the first to appear, the load zone is fixed

Inner race

About 5.4 times shaft speed

Modulated by shaft rotation, so sidebands appear

Rolling element

About twice the element spin rate

Harder to see

Cage

A fraction of shaft speed

Usually a symptom of other damage

The practical consequence is that you must know the shaft speed and the bearing geometry. Obtain the bearing designation from the machine, look up the geometry in the maker's data, and compute the four frequencies for each bearing before deploying. A crane's hoist motor does not run at a single speed, so the frequencies move with speed. Either measure the speed alongside the vibration, or analyse in orders, multiples of shaft speed, which stay fixed as the speed changes.


What Goes Over a Low-Bandwidth Radio

Our sensors sat on steel structures across a large yard, often without mains power nearby, and talked over a low-power wide-area radio with small packets and strict limits on airtime. Raw vibration at five kilohertz is megabytes an hour. It does not travel.

The answer is to compute at the sensor and send features. The node samples for a few seconds under a defined condition, computes the overall level in two or three frequency bands, the crest factor, the kurtosis and the height of the envelope-spectrum peak at each of the bearing's characteristic frequencies, adds the temperature and the operating state, and sends a handful of bytes. A few measurements an hour is enough for slow degradation. On request, or when a feature crosses a warning level, the node uploads a raw burst for the analyst to inspect.

That architecture follows from the radio. As our guide to LoRaWAN gateways showed, airtime and duty cycle limit how many frames a device may send, and every extra byte costs. Design the payload first, and decide what to compute at the edge from it.


A Sensor That Lasts: The Battery Budget

Without mains power, the battery sets the maintenance calendar, and its life comes from arithmetic, not from the datasheet's headline. A sensor node sleeps almost all the time. Each cycle it wakes, samples for a few seconds, computes the features, sends one short radio frame and sleeps again.

def battery_life_days(cap_mah, usable=0.7, sleep_ma=0.010, cycles_per_hour=6,
                      meas_s=3.0, meas_ma=15.0, comp_s=1.0, comp_ma=8.0, tx_s=0.185, tx_ma=40.0):
    per_cycle_mas = meas_s * meas_ma + comp_s * comp_ma + tx_s * tx_ma       # milliamp-seconds
    per_hour_mah = cycles_per_hour * per_cycle_mas / 3600 + sleep_ma
    return round(cap_mah * usable / per_hour_mah / 24), round(per_hour_mah, 4), round(per_cycle_mas, 1)

for c in (1, 6, 12, 60):
    print(c, battery_life_days(8000, cycles_per_hour=c))
# 1: 8714 days   6: 2108 days   12: 1104 days   60: 230 days   (60.4 mA-seconds per cycle)

Measurements per hour

Estimated battery life

Reading

1

About 8,700 days

Battery shelf life will end it first

6

About 2,100 days, 5.8 years

A practical default for slow degradation

12

About 1,100 days, 3 years

Reasonable for faster-changing machines

60

About 230 days

Too frequent for a battery in most cases

The inputs are illustrative: an 8,000 milliamp-hour cell with 70 percent usable, a 10 microamp sleep current, a three-second measurement at 15 milliamps, one second of computing, and a 185 millisecond radio frame at 40 milliamps. The arithmetic shows two things. The measurement window, not the radio, dominates each cycle, with 45 of the 60.4 milliamp-seconds. And the number of cycles per hour sets the life far more than any other choice, which is a reason to measure in a defined state and not continuously. The figures leave out self-discharge and low temperature, both of which shorten life, so de-rate them.


Duty Cycle Is the Missing Feature

The second surprise was the cranes' behaviour, not the sensors'. A crane is not a pump. It spends much of its time idle, lifts loads of every weight, moves at different speeds and stops and starts all day.

A vibration reading from an idle motor says nothing about its bearings, and a reading from a lift of a heavy load differs from the same lift empty. Our first month of data was a mess: readings from idle, from empty hooks, from full loads and from starts and stops, all averaged into one noisy series with a spread that hid everything.

The fix was to measure in a defined state. The node watched the motor current and recorded only when the hoist ran at steady speed above a set load, discarding starts, stops and idling. Once the data came from comparable conditions, the series tightened by more than half, and trends that had been invisible became obvious. Recording the state beside each reading, even when it is not used, lets you analyse by state later.

Operating state

What to do with the reading

Idle

Discard for bearing analysis, keep for utilisation

Starting or stopping

Discard for trending, useful for brake and drive checks

Steady speed, light load

Keep as a low-load baseline

Steady speed, heavy load

Keep as the main trend


One Baseline per Machine

The third surprise was how individual machines are. Two identical cranes, bought together, with identical motors, had overall levels that differed by a third from the first day. Mounting, foundations, alignment and loading all vary.

A single alarm limit for every machine therefore fails twice: it is too loose for the quiet machine, which can degrade a long way before reaching it, and too tight for the noisy one, which alarms from the start. The remedy is a baseline per machine. Record each machine for a few weeks in good condition, in the defined state, and compute its normal level and spread. An alert then means this machine has moved away from its own normal, not that it has exceeded a number from a standard.

Published severity standards for machine vibration give useful guidance on absolute levels by machine class, and they serve as an outer limit. The machine's own baseline is the early warning.


The Arithmetic of False Alarms

Our first alert rule was the obvious one: alarm when the feature exceeds three standard deviations above the baseline. It worked beautifully in the demonstration and badly in the field.

The simulation below shows why. It models 2,000 machine-years of a healthy feature with a stable baseline and noise, and counts how many machines would trigger at least one alert in a year. It then repeats the exercise with a slowly growing fault, a rise of 0.004 per day beginning on day 200, and measures how many days after the start of the fault each rule alerts. One rule alerts on any single reading above the limit. The other requires three consecutive readings above it.

def simulate(n_machines=2000, days=365, thr_sigma=3.0, consecutive=1,
             fault_day=None, rise_per_day=0.0, seed=0):
    r = np.random.RandomState(seed); false_alarms = 0; detect_days = []
    for m in range(n_machines):
        base = 1.0 + 0.05 * r.randn(days)
        x = base if fault_day is None else base + np.maximum(0, np.arange(days) - fault_day) * rise_per_day
        over = x > 1.0 + thr_sigma * 0.05
        run, fired = 0, None
        for d in range(days):
            run = run + 1 if over[d] else 0
            if run >= consecutive:
                fired = d; break
        if fault_day is None and fired is not None: false_alarms += 1
        if fault_day is not None and fired is not None and fired >= fault_day: detect_days.append(fired - fault_day)
    return false_alarms, detect_days

for k in (1, 3):
    print(k, simulate(consecutive=k)[0])                                            # 763 and 0
    print(k, int(np.median(simulate(consecutive=k, fault_day=200, rise_per_day=0.004, seed=3)[1])))   # 23 and 41

Alert rule

Machines with a false alarm per 2,000 machine-years

Median days to alert after the fault begins

One reading above three standard deviations

763, about 38 percent

23

Three consecutive readings above three standard deviations

0

41

The single-reading rule sounded the alarm on more than a third of healthy machines in a year, and each false alarm costs a visit. The three-in-a-row rule produced none, and it alerted 18 days later on a fault that takes about 37 days to rise to the limit. In a plant where a crane can be stopped for a planned repair with a week's notice, 41 days is plenty. In a plant where a fault can run to failure in a fortnight, it is not, and the choice should reflect that.

The threshold is a choice between missed faults and false alarms. Decide it from the cost of each, and from how fast the fault can progress, and not from the demonstration.

The First False Alarm Costs More Than the First Miss

Our single-reading rule ran for three weeks. In the second week it flagged a hoist motor, a maintenance crew spent half a day inspecting it, found nothing and wrote a short, polite remark in the log. In the third week it flagged another, and the crew did not go.

That is the real cost of false alarms. A miss is invisible until it fails, whereas a false alarm teaches a team to ignore the system. By week four the crew had a habit of checking alerts last, and the one genuine early warning of the project went unread for nine days. The bearing it described was replaced during a planned stop, only because the crane happened to be scheduled for one.

We changed three things. The rule moved to three consecutive readings. Each alert gained a short text with the evidence: which bearing frequency, how far above baseline, for how many readings and under what load. And every alert's outcome, a real fault or a false alarm, went into the log, so that the system could be tuned on facts.


When Machine Learning Finally Helped

By month nine we had something we had lacked at the start: six months of steady-state features from twelve machines, a log of every alert and its outcome and three confirmed bearing faults with the full history leading up to each.

That was enough to use machine learning well, and still not enough for the thing everyone first imagined. Three failures cannot train a classifier that recognises failures. What the data could support was an anomaly model: learn what each machine's feature vector looks like when healthy, in its operating states, and score how unusual a new reading is, combining the band levels, the envelope peaks, the crest factor and the temperature into one number.

The model's real value was narrower and more useful than prediction. It cut false alarms by combining evidence: a single feature drifting up alone, with the others steady, was usually noise, while several rising together was usually real. It handled the dependence on load better than fixed thresholds. And it ranked machines each week by how far they had moved from their own normal, which turned a dashboard into a short list for the crew.

It did not predict the day of failure, and nobody should promise that. What it gave was earlier, better-explained attention, and that is what a maintenance crew can use.


What Vibration Cannot See

A vibration programme catches a large share of rotating-machine faults, and the cranes had failures it could not see. Being honest about them kept the project credible.

Failure

Why vibration misses it

What catches it

Brake wear and glazing

Brakes act when the machine is nearly stationary

Wear gauges, brake-torque tests, scheduled inspection

Rope and sheave damage

Slow structural change, no rotating signature

Visual and magnetic rope inspection

Electrical faults in windings

Show in current, not early in vibration

Motor current analysis, insulation tests

Overload and abuse

A habit and not a defect

Load monitoring and logging

Lubrication starvation

Appears first as temperature and noise

Temperature trend, scheduled lubrication

Structural cracks

Not a rotating-machine problem

Periodic non-destructive testing

The project's scope statement said plainly which failures the system covered and which it did not, and the maintenance plan listed the manual checks for the rest. That prevented the most damaging misunderstanding in this field: the belief that a monitored crane needs no inspection.

A condition-monitoring system supplements inspection. It does not replace it. Say which failures it covers, and keep the manual checks for the others.

What the Crew Wanted

The last surprise was what the people who would use the system asked for. They did not want a dashboard with spectra. They wanted, for each crane, a one-line status, ordinary and clear: normal, watch or act, with a reason in plain words and a link to the work order.

We built that. Each morning a list went to the shift supervisor with the cranes that had changed state, the bearing involved and the evidence. The spectra and trends were available a click deeper for the analyst. Alerts that mattered created a work order automatically, with the evidence attached, and the crew closed it with what they found, which fed the log.

Adoption followed the usability. A system designed for the analyst was admired and ignored. A system designed for the shift supervisor was used.


Installation Day: A Checklist

Most data quality problems begin on installation day, and a short checklist prevents the commonest.

  1. Confirm the bearing designation and shaft speed range for every monitored bearing, and write them in the installation record.

  2. Prepare the surface: clean, flat, free of paint at the mounting pad, with the stud or bonded pad fixed before the sensor goes on.

  3. Mount the sensor on the bearing housing in the radial direction at the load zone, and record the axis orientation with a photograph.

  4. Record a raw burst under a known operating condition and compare it with the expected bearing frequencies before leaving the site.

  5. Check the radio link from the installed position, and record signal strength and the gateway used.

  6. Log the date, the operating hours of the machine, the state of the bearing if known and any recent maintenance, since this is the start of the baseline.

  7. Agree with the maintenance team who receives the alerts, what each state means and what they should do.

Keep the record with the machine's maintenance file. A sensor with no installation record becomes unexplained data the first time a reading changes after someone moves it.


Results, Counted Honestly

The figures below are illustrative, from the composite deployment, over the first twelve months across twelve machines.

Outcome

Count

Notes

Real developing faults detected before failure

3

All bearings, caught at a planned stop

Real faults missed

1

A brake problem, outside the sensors' scope

False alarms in the first month, single-reading rule

9

The rule that trained the crew to ignore alerts

False alarms in the last quarter, three-in-a-row plus anomaly score

1

Traced to a mounting change

Unplanned stops caused by monitored faults

0

Against a handful in the previous year

The business case rested on a small number of avoided breakdowns of heavily loaded cranes, each of which would have stopped a production line for a day. Three detections in a year, each turned into a planned repair, paid for the system comfortably. It is not a spectacular count, and it is the honest shape of the benefit: a few expensive events avoided, and a calmer maintenance calendar.


Monitoring Is Not a Safety Function

One clarification belongs in every project of this kind. A condition-monitoring system tells maintenance staff that a machine is changing. It is not a safety device.

Cranes and lifting equipment have their own protective devices: overload limiters, limit switches, emergency stops, brakes and the statutory inspections and tests that apply to lifting machinery. They are designed, tested and certified for the purpose, and they operate in the control chain of the crane. A monitoring system sits outside that chain. It has no authority to stop a lift, and it must not be wired in a way that could interfere with the safety functions.

Three habits keep that line clear. State in the project documents that the system supports maintenance planning and is not part of the safety system. Keep its connections to the crane read-only, with isolation where it taps signals, so that a fault in the monitor cannot affect the crane. And never let its output substitute for a required inspection, since a quiet monitor is not evidence that a crane is safe to lift. Consult the applicable regulations and the crane's competent person before any installation on lifting equipment.

Monitoring reduces surprises, and inspection and safety devices protect people. Keep them separate in the design, the documents and the conversation.

Where the Money Goes

Teams budget for sensors and forget the rest. In a deployment like this, the cost falls into five places, and the proportions surprise people.

Cost area

What it covers

How it behaves

Sensors and nodes

Accelerometers, mounting pads, the battery node and its enclosure

Falls with volume, a minor share at scale

Connectivity

Gateways, backhaul and their power and mounting

A fixed cost per site, shared by many nodes

Installation

Access, shutdowns, mounting preparation and commissioning

Large for the first machines and shrinking with practice

Analysis and tuning

Baselines, thresholds, alert review and model work

The cost most often underestimated

Operations

Battery replacement, calibration checks and spares

Small per unit and permanent

Analysis and tuning is the line most projects omit. The first months of alerts need a person reviewing each one, adjusting thresholds and recording outcomes. A project that budgets for hardware and not for that attention will have a working system that nobody trusts.

Compare the total with the cost of the failures you aim to avoid, using your own breakdown records: the lost production hours, the emergency repair premium and the secondary damage a failed bearing can cause to a shaft or gearbox. The case rests on a few events, so keep the estimate honest and conservative.


Mistakes We Would Not Repeat

Mistake

What it cost

What we do now

Starting with the model

Months with no usable data

Start with the failure list and the measurement

Magnet-mounted sensors in permanent sites

Resonances hiding the fault band

Stud or bonded pads

Averaging across operating states

A noisy series that hid trends

Record only in a defined state, and log the state

One alarm limit for all machines

Quiet machines ignored, noisy ones alarming

A baseline per machine

Alerting on a single reading

A third of machines alarming a year

Persistence, plus evidence in every alert

Designing for the analyst

A dashboard nobody opened

One line per machine for the supervisor

Promising prediction

Unmet expectations

Promise earlier, explained attention


A Plan for the First Six Months

  1. Month one: collect the failure list and pick the two or three modes that cost the most and that vibration can see.

  2. Month one: compute bearing frequencies for every machine to be monitored, and note shaft speeds and duty patterns.

  3. Month two: install studded or bonded sensors, record raw bursts under controlled conditions and check the fault bands.

  4. Month three: build state detection from the current, and compute the features at the sensor.

  5. Months three to five: collect baselines per machine, in defined states, and run the three-in-a-row alert rule with evidence text.

  6. Month six: review every alert and its outcome, tune the thresholds, and decide whether there is enough labelled history for an anomaly model.


The Request Revisited

The maintenance manager asked for artificial intelligence on the cranes, and in the end the cranes got something better described as careful measurement with a little learning on top. The sensors were mounted properly. The data was taken in comparable conditions. The baseline belonged to each machine. The alerts explained themselves. And the model arrived when there was something for it to learn.


If you are about to start a project like this, begin with the list of what failed last year. It is the most valuable dataset you have, and it costs a conversation.

EurthTech is an engineering-first product design and embedded systems company with a development center in Hyderabad. To discuss a project, write to connect@eurthtech.com or see https://www.eurthtech.com/case-studies.

Comments


EurthTech delivers AI-powered embedded systems, IoT product engineering, and smart infrastructure solutions to transform cities, enterprises, and industries with innovation and precision.

Factory:

Plot No: 41,
ALEAP Industrial Estate, Suramapalli,
Vijayawada,

India - 521212.

  • Linkedin
  • Twitter
  • Youtube
  • Facebook
  • Instagram

 

© 2025 by Eurth Techtronics Pvt Ltd.

 

Development Center:

4th Floor, Krishna towers, 100 Feet Rd, Madhapur, Hyderabad, Telangana 500081

Menu

|

Accesibility Statement

bottom of page