Challenge 1
Make the ride last exactly 5 seconds instead of 10, and beep twice at the end instead of once. Then predict, before you run it, roughly how far round the wheel will get in that time — and check whether you were right.
EV3 Robotics›Level 1 · Beginner›Lesson 12
Level 1 · Lesson 12 · EV3-L01-1260 minutes · Ages 9–16 · Model: Ferris Wheel
The Ferris Wheel: a tower standing on the Brick, a motor near the top, and a four-armed wheel carrying four coloured cars that stay upright as the wheel turns.
Every program you have written so far has had an ending built into it. Four rotations, then stop. Two seconds, then stop. A fairground ride does not work like that. It runs while the ride is open and it stops when somebody decides it should.
By the end you will have a ride that announces itself, turns slowly and steadily for as long as you choose, and stops on command — and you will know why deleting one block leaves it turning after the program has finished.
The first Ferris wheel was built by George Ferris for the 1893 Chicago World’s Fair, as America’s answer to the Eiffel Tower. It carried more than two thousand people at a time. Every observation wheel since — including the ones you can ride in Kuala Lumpur — is a descendant of it.

Two things matter, and your model does both.
It turns slowly, with a lot of force. The motor spins quickly and weakly; the wheel must turn slowly and strongly, because it is lifting loaded cars the whole way up. Gears make that trade — you will find them on your own build in a moment.
The cars hang. They are not held level by clever engineering. They swing from a pivot, and gravity keeps them upright on its own, all the way round. Turn your wheel by hand and watch.
Now the part that matters for the program. A real ride is not switched on for “six turns”. It runs while people are riding, and an operator ends it — early if somebody is unwell, later if the queue is short.
A machine whose stopping is decided by a counter cannot be stopped by a person. Some movements need an ending built in. Others need to run until something else says stop.
Until now every motor block you have used has been the same kind: you gave it an amount, it did that amount, and it finished. There is a second kind, and a fairground ride is what it is for.
| Block | What it does | When the program moves on |
|---|---|---|
[A v] run [clockwise v] for (4) [rotations v] :: motors | Turns exactly that far, then stops itself. | After the movement finishes. |
[A v] start motor [clockwise v] :: motors | Starts turning and keeps turning. Nothing about it says when to stop. | Immediately — while the motor is still going. |
start motor does not wait. The program runs straight on to the next block while the wheel is still turning — and the motor keeps going until a stop motor block says otherwise.
That is what lets a wait block set the length of the ride. Watch the rotation counter here: it climbs right through the wait, because the wait pauses the program, not the motor.
0.00rotations so farnoshaft turning
The count does not pause when the program does. A wait holds up the blocks, and the motor carries on turning underneath it.
The ride also needs to be heard. Sound blocks come in the same two kinds, for the same reason — one holds the program until the sound has finished, one starts it and carries on.
play sound until done
start sound
Watch the barriers, not the clock. On the left the warning finishes before anything moves; on the right it sounds while the barrier lifts.
Everything an EV3 does begins with a motor turning. Before worrying about how far or how fast, there are only two things to say to a motor: start and stop. The blocks are the same whichever motor you use — only the port letter changes.
| Block | What it does |
|---|---|
[A v] start motor [clockwise v] :: motors | Starts the motor and immediately carries on to the next block. The motor keeps turning on its own. |
[A v] stop motor :: motors | Stops the motor. |
wait (2) seconds | Holds the program here, which is how you control how long a motor runs. |
Because start motor does not wait, a motor started on its own would run until the program ended. The pattern that gives a motor a length is three blocks:
when program starts :: events hat [A v] start motor [clockwise v] :: motors wait (2) seconds [A v] stop motor :: motors
Read it aloud: start it, leave it two seconds, stop it. Change the wait and you change how far the motor gets.
The highlight below follows the block the Brick is running, and the shaft turns only while the program is between start motor and stop motor. Notice that the count keeps climbing all the way through the wait — the wait does not pause the motor, it pauses the program.
0.00rotations so farnoshaft turning
The count does not pause when the program does. A wait holds up the blocks, and the motor carries on turning underneath it.
This is the whole idea behind start motor: it hands the motor its instruction and moves on, leaving the motor running behind it. Nothing stops the shaft until a block tells it to.
The direction dropdown says clockwise or counterclockwise — but clockwise seen from where? Always from the axle end: look straight at the shaft coming towards you, and clockwise is the way a clock’s hands go.
Here the Medium Motor faces you, so its output axle points straight out of the page. This is the view to picture when you are choosing a direction.
when program starts :: events hat [A v] start motor [clockwise v] :: motors wait (2) seconds [A v] stop motor :: motors
A Medium Motor normally lives in port A or D.
The Large Motor is shown from the side, which is the face its axle comes out of — so once again you are looking straight down the shaft.
when program starts :: events hat [B v] start motor [clockwise v] :: motors wait (2) seconds [B v] stop motor :: motors
A Large Motor normally lives in port B or C. Compare the two programs: they are the same three blocks, and only A has become B.
A fan, a conveyor belt or a spinning ride does not need to stop at an exact position — it just needs to run while something is happening. For those, timing the motor is simpler and perfectly good enough.
The Brick has a small speaker. It can play one of the built-in sound files, or beep a note you choose. Sound is what makes a machine feel finished — and it is also a way for the robot to tell you something without you having to look at it.
| Block | What it does |
|---|---|
play sound [Communication / Hello v] until done :: sound | Plays the sound and waits for it to finish before the next block runs. |
start sound [Communication / Hello v] :: sound | Starts the sound and moves straight on to the next block, so the sound plays while the robot keeps working. |
play beep (60) for (0.5) seconds :: sound | Plays a single note for a set time — useful for short alerts. The number is a note, not a volume: bigger means higher. |
set volume to (100) % :: sound | Sets how loud everything after it will be. Worth putting at the top of a program — the Brick remembers the last volume it was given, even from somebody else’s program. |
stop all sounds :: sound | Cuts off anything that is still playing, including a long sound started earlier. |
These two blocks play the very same file. The difference is what the rest of the program does while it plays — so it cannot be heard on its own, only seen. Here are both, each lifting a barrier.
play sound until done
start sound
Watch the barriers, not the clock. On the left the warning finishes before anything moves; on the right it sounds while the barrier lifts.
The bars underneath are when the speaker was on and when the motor was turning. On the left they never overlap: the program is stuck at the sound block until the file has finished, and only then does the barrier lift. On the right they overlap almost completely, and the whole job is done in half the time.
Real machines warn before they move, not after: a lift chimes before the doors close, a reversing lorry beeps while it rolls back, a level crossing sounds before the barrier drops. Getting the order right is the difference between a warning and an apology.
Waiting is how a program gives the physical world time to catch up. There are two kinds, and choosing between them is one of the first real design decisions in robotics.
| Block | What it does |
|---|---|
wait (1) seconds | Holds the program for a fixed length of time, whatever else is happening. |
wait until <> | Holds the program until a condition becomes true — usually a sensor reading. |
Most sensors bring their own ready-made wait block, already coloured to match the sensor and with its comparison built in. They are all the same idea — hold here until this is true — and they live in the sensor’s own palette rather than in Control.
| Sensor | Block | Waits until |
|---|---|---|
| Touch | [1 v] wait until [pressed v] :: sensors | the button is pressed. The dropdown also offers released and bumped. |
| Colour | [3 v] wait until color is [red v] :: sensors | the surface underneath is that one of the eight colours. |
| Ultrasonic | [4 v] wait until distance [< v] (15) [cm v] :: sensors | something is nearer than 15 cm. Flip the dropdown to > to wait for something to move away. |
| Gyro | [2 v] wait until angle [< v] (45) :: sensors | the robot has turned past that angle. |
| Brick buttons | wait until [center v] button is [pressed v] :: sensors | somebody presses that button on the Brick. No port — it is built in. |
Some readings have no wait block of their own — reflected light, ambient light, the timer, and a motor’s degrees counted. For those, drop the matching boolean into the plain wait until from Control. It does exactly the same job:
wait until <[3 v] is reflected light intensity [< v] (30) %? :: sensors> wait until <[3 v] is ambient light intensity [> v] (50) %? :: sensors> wait until <(timer) > (5)> wait until <([A v] degrees counted :: sensors) > (720)>
This is also the way to wait for two things at once, which no ready-made block can do — the sensor blocks each take one condition, but a boolean can be combined:
wait until <<[1 v] is pressed? :: sensors> or <(timer) > (5)>>
That one says “stop waiting when the button is pressed, or after five seconds, whichever comes first” — which is how you stop a wait hanging for ever when the thing you are waiting for never happens.
Two robots, the same job: drive up to the wall and stop. One waits two seconds; the other waits for the wall. Let it run several times — the interesting part is what happens on the second and third run.
wait for a length of time
wait for a condition
Each orange dash is where a previous timed run finished. The sensing robot has never left a second mark, because it has never stopped anywhere else.
The timed robot is not being careless. Two seconds is a perfectly good guess, and on the first run it may look exactly right. But a second covers a different distance on a fresh battery, on a dusty floor, or with a heavier load, so the robot finishes somewhere new every run — sometimes short, sometimes into the wall. The sensing robot has never had to guess.
Prefer waiting for a condition wherever a sensor can tell you. Keep timed waits for things with no sensor to check — letting a sound finish, or pausing so a person can watch.
A lift that waits three seconds for its doors is guessing; one that waits for the door sensor knows. The first eventually closes on somebody.
Say this back before moving on: “run for has its ending inside it. start motor has no ending, so I have to give it one.”
Look at your model and find the parts with cables. Two again — a Brick and one motor doing all the work.
The motor does not turn the wheel directly. A small gear on the motor’s axle drives a 40-tooth gear on the wheel. Count the teeth on the small one yourself — it is a real number on your own model, and the whole behaviour of the ride follows from it.
If the small gear has 8 teeth, the motor turns five times for every single turn of the wheel. In exchange, the wheel gets roughly five times the turning force. That is the trade the ride needs: slow, smooth, and strong enough to carry four loaded cars up one side.
Try it by hand before switching on. Turn the small gear one full turn and watch how little the wheel moves. Then try to stop the wheel by holding a car — you will find it surprisingly hard to stop, and that is the extra force, not the motor.
Sensors go in ports 1, 2, 3, 4. Motors go in ports A, B, C, D. They are not interchangeable, and nothing will tell you politely if you swap them.
| Part | Port | Why this one |
|---|---|---|
| Large Motor (turns the wheel) | A | A single working motor conventionally takes A. Every program on this page says A. |
The motor sits high on the tower, so its cable has further to travel than in any build so far. Route it down the outside of a beam rather than through the wheel — a cable caught in a turning wheel will stop the ride and look exactly like a program fault.
Check your own build now:
Two routes, and either is fine. USB is the reliable one and the one to fall back on when a room’s Bluetooth is busy; Bluetooth leaves the robot free to move, which some models need.
Do these in order. Naming the Brick after you go looking for it in the list is how groups end up driving each other’s robots.
EV3 until somebody changes it.EV3.The two failures, every class, every time. The Brick has gone to sleep while you were building — press the centre button to wake it. Or you have paired with the group at the next table, which is why the name matters.
The long version, including Port View and how to read the port tiles, is in the Brick & Bluetooth guide.
The Brick is the base of the tower now, so it is carrying the whole model. Give the cable enough slack that a tug on the laptop does not pull the ride over.
If the number does not move when the wheel does, stop here. The cable is in the wrong port or not pushed fully home.
Notice how much you have to turn the wheel to make that number move a long way. You are watching the gear reduction from the other end — the counter measures the motor, not the wheel.
A full ride cycle in seven blocks: call the passengers, run the wheel gently for ten seconds, stop it, and sound the end.
when program starts :: events hat play sound [Communication / Hello v] until done :: sound [A v] set speed to (25) % :: motors [A v] start motor [clockwise v] :: motors wait (10) seconds [A v] stop motor :: motors play beep (60) for (0.5) seconds :: sound
Walk it in the order the Brick runs it:
What success looks like: a greeting, then ten seconds of slow smooth turning with the cars hanging level, then a clean stop and a beep. If the wheel jerks or stalls on the way up, the speed is too low for the load, not too high.
One change at a time, and predict before each run.
Steps 3 and 4 are the lesson, from both sides. A block with no ending needs one supplied; a block with an ending built in ignores the one you supply.
If the wheel refuses to start turning, try a higher speed before you suspect the program. A geared-down wheel carrying four cars needs a real push to get going, and 10 % may not be enough to move it at all.

Build the model before you read any further. Everything after this is about making it do something, and none of it will make much sense with nothing on the table in front of you.
Use the viewer's own controls to zoom and turn pages. Fullscreen makes it big enough to build from.
The same build on Google Drive — sometimes a video, sometimes a scan:
Use the viewer's own controls to zoom and turn pages. Fullscreen makes it big enough to build from.
Check the finished build against the picture before you switch anything on. A motor mounted the wrong way round is far easier to spot now than it is to debug later, when it looks like a program fault.
Work through the challenges in order — each is harder than the last. The mission comes after all three, and it is meant to make you plan before you build.
Make the ride last exactly 5 seconds instead of 10, and beep twice at the end instead of once. Then predict, before you run it, roughly how far round the wheel will get in that time — and check whether you were right.
Give the ride a proper start and finish. It must sound a warning, wait two seconds so riders can settle, then run; and at the end it must slow to a gentler speed for the last two seconds before stopping, so nobody is jolted. The wheel must never stop and restart in the middle.
Run the ride three times in a row from one press of play, with a clear pause between rides for passengers to change over. Each ride must be shorter than the one before it. Do it without writing the same blocks out three times if you can — and if you cannot yet, write them out and say in one sentence what would make it easier.
The ride operator needs a control they can actually work. Build a Ferris Wheel that an operator runs, not one that runs itself. It must announce boarding, turn while the ride is open, and stop when the operator decides — not after a length of time you chose in advance. Plan on paper first. You already have a block that stops the program until a person acts; work out where it has to go so the wheel keeps turning while the program waits, rather than standing still. That single decision is the whole mission. Two questions when you demonstrate it. Where exactly does the wheel keep turning while your program is waiting, and how do you know? And what should the ride do if the operator walks away and never presses anything?