Here you can see a video of my Lego "steam" engine. The design is based on Daniel B. Hartman's Double acting twin cylinder engine. Instead of running steam through the cylinders, (inverted) pressure is supplied by a household vacuum cleaner. The top speed of the engine is 880 RPM, according to my Lego speed computer (set 5206). Even though the design is extremely basic, it's amazing how much work can be extracted from this simple engine.
The double acting twin cylinder engine has, obviously, two cylinders. These are shaped like a block instead of a cylinder, but that doesn't matter, it's more practical considering we're building with Lego. Each of the cylinders contains a piston that is connected to the crankshaft. On one side of each cylinder, there are two openings that serve as both inlets and outlets of the cylinder. The cylinders in the engine aren't fixed, but oscillate, causing them to rock up and down when the engine is running. At precise moments, the inlet/outlet of the cylinder sits in front of the air inlet/outlet of the engine, moving pressure in/out of the cylinder. This moves the piston up and down, which powers the crankshaft. The animation on the right shows how the engine would run if steam enters the engine's inlet. By running the engine on vacuum cleaner power, the engine runs backwards.
People at Lego may want to tell me this page has nothing to do with Lego, the company, so here it is.