Piston speed calculator
An 86 mm stroke at 6000 rpm gives a mean piston speed of 17.2 m/s. Enter the stroke in millimetres, metres or inches and the crank speed to get the average in metres per second and in feet per minute. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Stroke
- 86
- Rpm
- 6,000
- Stroke unit
- Mm
- Stroke m
- 0.086
- Mean piston speed
- 17.2
- Unit m s
- m/s
Mean piston speed is the average speed of an engine piston as it travels between top dead centre and bottom dead centre during one crankshaft revolution. Designers, engine builders, and students compute that average from two numbers only: the stroke length and the rotational speed in revolutions per minute. The identity is twice the stroke times RPM divided by sixty, because the piston covers two stroke lengths per revolution and RPM must be converted into revolutions per second. This calculator accepts stroke in millimetres, metres, or inches, converts the length into metres, and returns mean piston speed in metres per second together with the equivalent in feet per minute.
How mean piston speed is computed from stroke length and crank RPM
Mean piston speed is the distance the piston would travel in one second if that distance is taken as two stroke lengths for every crankshaft revolution, averaged over a full cycle. In one revolution the piston goes from top dead centre to bottom dead centre and returns, so the path length per revolution is twice the stroke.
Rotational speed in revolutions per minute divided by sixty is revolutions per second, and the product of those two quantities is mean piston speed in metres per second when stroke is expressed in metres: mean piston speed equals two times stroke times RPM divided by sixty, which is identical to stroke times RPM divided by thirty. When stroke is given in millimetres, convert first by dividing by one thousand so an eighty-six millimetre stroke is 0.086 metres.
When stroke is given in inches, multiply by the exact international inch of 0.0254 metres. Engine builders also quote feet per minute, recovered from metres per second with the exact foot of 0.3048 metres, or from an inch stroke as stroke in inches times RPM divided by six. Typical naturally aspirated petrol engines sit near ten to fifteen metres per second at the power peak; many production redlines sit near twenty metres per second; highly stressed motorcycle and racing engines can exceed twenty-five.
Where a mean piston speed calculator earns its keep
Engine builders and restorers use a mean piston speed calculator before they pick a redline for a 2.0 litre four, a 350 cubic-inch small-block, or a long-stroke diesel, so the chosen crank speed does not push the piston beyond a durability envelope the ring pack and small-end bearing can survive. Motorsport schools and vocational classrooms auto-grade the factor of two and the millimetre-to-metre conversion without standing up a spreadsheet that silently uses 3.14 as if piston speed were rim speed.
Durability analysts compare two engines of different stroke at the same RPM and immediately see why the longer-stroke engine is harder on the piston at that crank speed. Failed validation does not consume balance. Keep connecting-rod-ratio instantaneous-speed landings and flywheel rim-speed landings separate when those formulas are the search intent, so this page stays the mean speed from stroke and RPM.
What you can do with it
Choosing a durable redline from stroke
Convert millimetre or inch stroke and a candidate RPM into mean piston speed in m/s and ft/min before locking a street or race redline.
Comparing engines of different stroke
Hold RPM fixed and change stroke to see why a long-stroke diesel is harder on the piston than a short-stroke four at the same crank speed.
Classroom and dyno-notebook checks
Auto-grade the 2 × stroke × RPM / 60 identity and the millimetre-to-metre conversion against a deterministic oracle instead of a rounded spreadsheet.
FAQ
How do I calculate mean piston speed?
Send a positive stroke and a non-negative rpm. Stroke may be mm (default), metres, or inches. Feet per minute is also returned.
What happens if the rotational speed is negative?
Mean piston speed is not defined for a negative crank speed; those failures are not billed. Zero RPM is valid and returns a mean speed of zero.
Which stroke units can I enter?
The primary result is always metres per second.
Why is there a factor of two in the formula?
In one crank revolution the piston travels from top dead centre to bottom dead centre and back, so it covers two stroke lengths. Rim speed of a flywheel uses 2πr instead and is a different search intent.
What is a typical mean piston speed?
Naturally aspirated petrol engines sit near 10 to 15 m/s at peak power, and many production redlines are close to 20 m/s. Highly stressed motorcycle and racing engines can go beyond 25 m/s.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/phys/piston-speed \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"stroke":86,"rpm":6000}'const res = await fetch("https://api.kit.forhosting.com/phys/piston-speed", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"stroke": 86,
"rpm": 6000
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/phys/piston-speed",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"stroke": 86,
"rpm": 6000
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/phys/piston-speed", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"stroke":86,"rpm":6000}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"stroke":86,"rpm":6000}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/phys/piston-speed", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"stroke": 86,
"rpm": 6000
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "phys.piston_speed",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
A negative rotational speed is rejected as invalid_input rather than a silent sign flip.
How mean piston speed is computed from stroke length and crank RPM
This endpoint evaluates that kinematic identity only. It does not integrate a connecting-rod ratio to recover instantaneous piston speed or peak acceleration, and it does not convert the rim speed of a flywheel. Those belong on dedicated landings so this search intent stays the mean-speed formula people type when they look for a piston speed calculator.
Input contract, units, response shape, and error behaviour
If stroke is not strictly positive the task fails, because a zero or negative stroke is not an engine geometry. If rpm is negative the task fails, because a reversed crank speed is not a mean-piston-speed input; a parked engine at zero RPM is valid and returns a mean speed of zero. Example: stroke 86 millimetres at 6000 RPM yields 17.2 metres per second, a classic figure for a short-stroke four-cylinder at a street redline. Send two required finite numbers: stroke, the piston stroke length in the unit named by stroke_unit, and rpm, the crankshaft rotational speed in revolutions per minute. Aliases are accepted: stroke_length and L for the stroke; rotational_speed, n, engine_rpm, and revs for the speed. Optional stroke_unit is an enum of mm (millimetres, the default used on most metric engine data sheets), m (metres), or in (international inches). Each numeric field may arrive as a JSON number or as a numeric string so form widgets and spreadsheet paste stay convenient. Missing fields, empty strings, NaN, and Infinity fail with invalid_input naming the field. On success the body echoes cleaned stroke, stroke_unit, and rpm; returns stroke_m in metres; returns mean_piston_speed in metres per second as the primary result; returns mean_piston_speed_ft_min; and returns formula and equation strings plus method mean_piston_speed. Pricing for successful API calls is the published base of $0.002 per item; validation failures do not consume prepaid balance. Pair the free browser form with the same module the API uses so classroom demos and workshop scripts never diverge.
Where a mean piston speed calculator earns its keep
The browser tool is free for interactive use; scripted API traffic uses prepaid KIT balance at the published rate without hidden per-field surcharges.
Technical questions
What does the piston speed calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.