You can use CFrame.Angles on the axis you want it to spin by a random starting speed, then you will decrease the angular speed over time at a rate you specify (deceleration):
Here’s some pseudo-code:
local r = 2
local v = math.random(20, 50)
local con
con = game:GetService("RunService").RenderStepped:Connect(function(dt)
wheel:SetPrimaryPartCFrame(wheel:GetPrimaryPartCFrame() * CFrame.Angles(0, dt * v, 0)) -- if your wheel is a model
v = math.max(v - (dt * r), 0)
if v == 0 then
con:Disconnect()
end
end)
This is if you’re running it in a local script
EDIT: I clamped the angular speed at a minimum of 0 and disconnected the event when it reaches 0